first commit of big refactor

This commit is contained in:
itsmattkc
2019-02-14 05:27:21 -08:00
parent bd5b2cf036
commit e9fe837236
52 changed files with 1419 additions and 1186 deletions
+136 -142
View File
@@ -1,22 +1,16 @@
#include "timeline.h"
#include "oliveglobal.h"
#include "panels/panels.h"
#include "panels/project.h"
#include "panels/effectcontrols.h"
#include "project/projectelements.h"
#include "ui/timelinewidget.h"
#include "project/sequence.h"
#include "project/clip.h"
#include "ui/viewerwidget.h"
#include "playback/audio.h"
#include "panels/viewer.h"
#include "playback/cacher.h"
#include "playback/playback.h"
#include "project/undo.h"
#include "project/media.h"
#include "io/config.h"
#include "project/effect.h"
#include "project/transition.h"
#include "project/footage.h"
#include "io/clipboard.h"
#include "ui/timelineheader.h"
#include "ui/resizablescrollbar.h"
@@ -104,14 +98,14 @@ Timeline::Timeline(QWidget *parent) :
Timeline::~Timeline() {}
void Timeline::previous_cut() {
if (sequence->playhead > 0) {
if (Olive::ActiveSequence->playhead > 0) {
long p_cut = 0;
for (int i=0;i<sequence->clips.size();i++) {
Clip* c = sequence->clips.at(i);
for (int i=0;i<Olive::ActiveSequence->clips.size();i++) {
Clip* c = Olive::ActiveSequence->clips.at(i);
if (c != nullptr) {
if (c->timeline_out > p_cut && c->timeline_out < sequence->playhead) {
if (c->timeline_out > p_cut && c->timeline_out < Olive::ActiveSequence->playhead) {
p_cut = c->timeline_out;
} else if (c->timeline_in > p_cut && c->timeline_in < sequence->playhead) {
} else if (c->timeline_in > p_cut && c->timeline_in < Olive::ActiveSequence->playhead) {
p_cut = c->timeline_in;
}
}
@@ -123,13 +117,13 @@ void Timeline::previous_cut() {
void Timeline::next_cut() {
bool seek_enabled = false;
long n_cut = LONG_MAX;
for (int i=0;i<sequence->clips.size();i++) {
Clip* c = sequence->clips.at(i);
for (int i=0;i<Olive::ActiveSequence->clips.size();i++) {
Clip* c = Olive::ActiveSequence->clips.at(i);
if (c != nullptr) {
if (c->timeline_in < n_cut && c->timeline_in > sequence->playhead) {
if (c->timeline_in < n_cut && c->timeline_in > Olive::ActiveSequence->playhead) {
n_cut = c->timeline_in;
seek_enabled = true;
} else if (c->timeline_out < n_cut && c->timeline_out > sequence->playhead) {
} else if (c->timeline_out < n_cut && c->timeline_out > Olive::ActiveSequence->playhead) {
n_cut = c->timeline_out;
seek_enabled = true;
}
@@ -143,11 +137,11 @@ void ripple_clips(ComboAction* ca, Sequence *s, long point, long length, const Q
}
void Timeline::toggle_show_all() {
if (sequence != nullptr) {
if (Olive::ActiveSequence != nullptr) {
showing_all = !showing_all;
if (showing_all) {
old_zoom = zoom;
set_zoom_value(double(timeline_area->width() - 200) / double(sequence->getEndFrame()));
set_zoom_value(double(timeline_area->width() - 200) / double(Olive::ActiveSequence->getEndFrame()));
} else {
set_zoom_value(old_zoom);
}
@@ -347,8 +341,8 @@ void Timeline::add_transition() {
ComboAction* ca = new ComboAction();
bool adding = false;
for (int i=0;i<sequence->clips.size();i++) {
Clip* c = sequence->clips.at(i);
for (int i=0;i<Olive::ActiveSequence->clips.size();i++) {
Clip* c = Olive::ActiveSequence->clips.at(i);
if (c != nullptr && is_clip_selected(c, true)) {
int transition_to_add = (c->track < 0) ? TRANSITION_INTERNAL_CROSSDISSOLVE : TRANSITION_INTERNAL_LINEARFADE;
if (c->get_opening_transition() == nullptr) {
@@ -384,7 +378,7 @@ int Timeline::calculate_track_height(int track, int value) {
}
void Timeline::update_sequence() {
bool null_sequence = (sequence == nullptr);
bool null_sequence = (Olive::ActiveSequence == nullptr);
for (int i=0;i<tool_buttons.count();i++) {
tool_buttons[i]->setEnabled(!null_sequence);
@@ -400,7 +394,7 @@ void Timeline::update_sequence() {
if (null_sequence) {
setWindowTitle(title + tr("<none>"));
} else {
setWindowTitle(title + sequence->name);
setWindowTitle(title + Olive::ActiveSequence->name);
update_ui(false);
}
}
@@ -410,27 +404,27 @@ int Timeline::get_snap_range() {
}
bool Timeline::focused() {
return (sequence != nullptr && (headers->hasFocus() || video_area->hasFocus() || audio_area->hasFocus()));
return (Olive::ActiveSequence != nullptr && (headers->hasFocus() || video_area->hasFocus() || audio_area->hasFocus()));
}
void Timeline::repaint_timeline() {
if (!block_repaints) {
bool draw = true;
if (sequence != nullptr
if (Olive::ActiveSequence != nullptr
&& !horizontalScrollBar->isSliderDown()
&& !horizontalScrollBar->is_resizing()
&& panel_sequence_viewer->playing
&& !zoom_just_changed) {
// auto scroll
if (config.autoscroll == AUTOSCROLL_PAGE_SCROLL) {
int playhead_x = panel_timeline->getTimelineScreenPointFromFrame(sequence->playhead);
int playhead_x = panel_timeline->getTimelineScreenPointFromFrame(Olive::ActiveSequence->playhead);
if (playhead_x < 0 || playhead_x > (editAreas->width() - videoScrollbar->width())) {
horizontalScrollBar->setValue(getScreenPointFromFrame(zoom, sequence->playhead));
horizontalScrollBar->setValue(getScreenPointFromFrame(zoom, Olive::ActiveSequence->playhead));
draw = false;
}
} else if (config.autoscroll == AUTOSCROLL_SMOOTH_SCROLL) {
if (center_scroll_to_playhead(horizontalScrollBar, zoom, sequence->playhead)) {
if (center_scroll_to_playhead(horizontalScrollBar, zoom, Olive::ActiveSequence->playhead)) {
draw = false;
}
}
@@ -443,7 +437,7 @@ void Timeline::repaint_timeline() {
video_area->update();
audio_area->update();
if (sequence != nullptr) {
if (Olive::ActiveSequence != nullptr) {
set_sb_max();
}
}
@@ -451,16 +445,16 @@ void Timeline::repaint_timeline() {
}
void Timeline::select_all() {
if (sequence != nullptr) {
sequence->selections.clear();
for (int i=0;i<sequence->clips.size();i++) {
Clip* c = sequence->clips.at(i);
if (Olive::ActiveSequence != nullptr) {
Olive::ActiveSequence->selections.clear();
for (int i=0;i<Olive::ActiveSequence->clips.size();i++) {
Clip* c = Olive::ActiveSequence->clips.at(i);
if (c != nullptr) {
Selection s;
s.in = c->timeline_in;
s.out = c->timeline_out;
s.track = c->track;
sequence->selections.append(s);
Olive::ActiveSequence->selections.append(s);
}
}
repaint_timeline();
@@ -472,17 +466,17 @@ void Timeline::scroll_to_frame(long frame) {
}
void Timeline::select_from_playhead() {
sequence->selections.clear();
for (int i=0;i<sequence->clips.size();i++) {
Clip* c = sequence->clips.at(i);
Olive::ActiveSequence->selections.clear();
for (int i=0;i<Olive::ActiveSequence->clips.size();i++) {
Clip* c = Olive::ActiveSequence->clips.at(i);
if (c != nullptr
&& c->timeline_in <= sequence->playhead
&& c->timeline_out > sequence->playhead) {
&& c->timeline_in <= Olive::ActiveSequence->playhead
&& c->timeline_out > Olive::ActiveSequence->playhead) {
Selection s;
s.in = c->timeline_in;
s.out = c->timeline_out;
s.track = c->track;
sequence->selections.append(s);
Olive::ActiveSequence->selections.append(s);
}
}
}
@@ -493,8 +487,8 @@ bool Timeline::can_ripple_empty_space(long frame, int track) {
rc_ripple_min = 0;
rc_ripple_max = LONG_MAX;
for (int i=0;i<sequence->clips.size();i++) {
Clip* c = sequence->clips.at(i);
for (int i=0;i<Olive::ActiveSequence->clips.size();i++) {
Clip* c = Olive::ActiveSequence->clips.at(i);
if (c != nullptr) {
if (c->timeline_in > frame || c->timeline_out > frame) {
at_end_of_sequence = false;
@@ -530,7 +524,7 @@ void Timeline::ripple_delete_empty_space() {
void Timeline::resizeEvent(QResizeEvent *) {
// adjust maximum scrollbar
if (sequence != nullptr) set_sb_max();
if (Olive::ActiveSequence != nullptr) set_sb_max();
// resize tool button widget to its contents
@@ -560,21 +554,21 @@ void Timeline::resizeEvent(QResizeEvent *) {
}
void Timeline::delete_in_out(bool ripple) {
if (sequence != nullptr && sequence->using_workarea) {
if (Olive::ActiveSequence != nullptr && Olive::ActiveSequence->using_workarea) {
QVector<Selection> areas;
int video_tracks = 0, audio_tracks = 0;
sequence->getTrackLimits(&video_tracks, &audio_tracks);
Olive::ActiveSequence->getTrackLimits(&video_tracks, &audio_tracks);
for (int i=video_tracks;i<=audio_tracks;i++) {
Selection s;
s.in = sequence->workarea_in;
s.out = sequence->workarea_out;
s.in = Olive::ActiveSequence->workarea_in;
s.out = Olive::ActiveSequence->workarea_out;
s.track = i;
areas.append(s);
}
ComboAction* ca = new ComboAction();
delete_areas_and_relink(ca, areas, true);
if (ripple) ripple_clips(ca, sequence, sequence->workarea_in, sequence->workarea_in - sequence->workarea_out);
ca->append(new SetTimelineInOutCommand(sequence, false, 0, 0));
if (ripple) ripple_clips(ca, Olive::ActiveSequence, Olive::ActiveSequence->workarea_in, Olive::ActiveSequence->workarea_in - Olive::ActiveSequence->workarea_out);
ca->append(new SetTimelineInOutCommand(Olive::ActiveSequence, false, 0, 0));
undo_stack.push(ca);
update_ui(true);
}
@@ -603,8 +597,8 @@ void Timeline::delete_selection(QVector<Selection>& selections, bool ripple_dele
ripple_point++;
bool can_ripple = true;
for (int i=0;i<sequence->clips.size();i++) {
Clip* c = sequence->clips.at(i);
for (int i=0;i<Olive::ActiveSequence->clips.size();i++) {
Clip* c = Olive::ActiveSequence->clips.at(i);
if (c != nullptr && c->timeline_in < ripple_point && c->timeline_out > ripple_point) {
// conflict detected, but this clip may be getting deleted so let's check
bool deleted = false;
@@ -618,8 +612,8 @@ void Timeline::delete_selection(QVector<Selection>& selections, bool ripple_dele
}
}
if (!deleted) {
for (int j=0;j<sequence->clips.size();j++) {
Clip* cc = sequence->clips.at(j);
for (int j=0;j<Olive::ActiveSequence->clips.size();j++) {
Clip* cc = Olive::ActiveSequence->clips.at(j);
if (cc != nullptr
&& cc->track == c->track
&& cc->timeline_in > c->timeline_out
@@ -632,7 +626,7 @@ void Timeline::delete_selection(QVector<Selection>& selections, bool ripple_dele
}
if (can_ripple) {
ripple_clips(ca, sequence, ripple_point, -ripple_length);
ripple_clips(ca, Olive::ActiveSequence, ripple_point, -ripple_length);
panel_sequence_viewer->seek(ripple_point-1);
}
}
@@ -652,7 +646,7 @@ void Timeline::set_zoom_value(double v) {
// TODO find a way to gradually move towards target_scroll instead of just centering it?
if (!horizontalScrollBar->is_resizing())
center_scroll_to_playhead(horizontalScrollBar, zoom, sequence->playhead);
center_scroll_to_playhead(horizontalScrollBar, zoom, Olive::ActiveSequence->playhead);
}
void Timeline::set_zoom(bool in) {
@@ -668,9 +662,9 @@ void Timeline::decheck_tool_buttons(QObject* sender) {
QVector<int> Timeline::get_tracks_of_linked_clips(int i) {
QVector<int> tracks;
Clip* clip = sequence->clips.at(i);
Clip* clip = Olive::ActiveSequence->clips.at(i);
for (int j=0;j<clip->linked.size();j++) {
tracks.append(sequence->clips.at(clip->linked.at(j))->track);
tracks.append(Olive::ActiveSequence->clips.at(clip->linked.at(j))->track);
}
return tracks;
}
@@ -703,7 +697,7 @@ Clip* Timeline::split_clip(ComboAction* ca, bool transitions, int p, long frame)
}
Clip* Timeline::split_clip(ComboAction* ca, bool transitions, int p, long frame, long post_in) {
Clip* pre = sequence->clips.at(p);
Clip* pre = Olive::ActiveSequence->clips.at(p);
if (pre != nullptr && pre->timeline_in < frame && pre->timeline_out > frame) { // guard against attempts to split at in/out points
bool splitting_closing_dual_transition = false;
@@ -713,7 +707,7 @@ Clip* Timeline::split_clip(ComboAction* ca, bool transitions, int p, long frame,
splitting_closing_dual_transition = true;
}
Clip* post = pre->copy(sequence, transitions && !splitting_closing_dual_transition);
Clip* post = pre->copy(Olive::ActiveSequence, transitions && !splitting_closing_dual_transition);
long new_clip_length = frame - pre->timeline_in;
@@ -778,7 +772,7 @@ bool Timeline::split_clip_and_relink(ComboAction *ca, int clip, long frame, bool
split_cache.append(clip);
Clip* c = sequence->clips.at(clip);
Clip* c = Olive::ActiveSequence->clips.at(clip);
if (c != nullptr) {
QVector<int> pre_clips;
QVector<Clip*> post_clips;
@@ -799,7 +793,7 @@ bool Timeline::split_clip_and_relink(ComboAction *ca, int clip, long frame, bool
for (int i=0;i<c->linked.size();i++) {
int l = c->linked.at(i);
if (!has_clip_been_split(l)) {
Clip* link = sequence->clips.at(l);
Clip* link = Olive::ActiveSequence->clips.at(l);
if ((original_clip_is_selected && is_clip_selected(link, true)) || !original_clip_is_selected) {
split_cache.append(l);
Clip* s = split_clip(ca, true, l, frame);
@@ -813,7 +807,7 @@ bool Timeline::split_clip_and_relink(ComboAction *ca, int clip, long frame, bool
relink_clips_using_ids(pre_clips, post_clips);
}
ca->append(new AddClipCommand(sequence, post_clips));
ca->append(new AddClipCommand(Olive::ActiveSequence, post_clips));
return true;
}
}
@@ -873,8 +867,8 @@ void Timeline::delete_areas_and_relink(ComboAction* ca, QVector<Selection>& area
for (int i=0;i<areas.size();i++) {
const Selection& s = areas.at(i);
for (int j=0;j<sequence->clips.size();j++) {
Clip* c = sequence->clips.at(j);
for (int j=0;j<Olive::ActiveSequence->clips.size();j++) {
Clip* c = Olive::ActiveSequence->clips.at(j);
if (c != nullptr && c->track == s.track && !c->undeletable) {
if (selection_contains_transition(s, c, TA_OPENING_TRANSITION)) {
// delete opening transition
@@ -884,7 +878,7 @@ void Timeline::delete_areas_and_relink(ComboAction* ca, QVector<Selection>& area
ca->append(new DeleteTransitionCommand(c->sequence, c->closing_transition));
} else if (c->timeline_in >= s.in && c->timeline_out <= s.out) {
// clips falls entirely within deletion area
ca->append(new DeleteClipAction(sequence, j));
ca->append(new DeleteClipAction(Olive::ActiveSequence, j));
} else if (c->timeline_in < s.in && c->timeline_out > s.out) {
// middle of clip is within deletion area
@@ -930,7 +924,7 @@ void Timeline::delete_areas_and_relink(ComboAction* ca, QVector<Selection>& area
}
relink_clips_using_ids(pre_clips, post_clips);
ca->append(new AddClipCommand(sequence, post_clips));
ca->append(new AddClipCommand(Olive::ActiveSequence, post_clips));
}
void Timeline::copy(bool del) {
@@ -939,11 +933,11 @@ void Timeline::copy(bool del) {
long min_in = 0;
for (int i=0;i<sequence->clips.size();i++) {
Clip* c = sequence->clips.at(i);
for (int i=0;i<Olive::ActiveSequence->clips.size();i++) {
Clip* c = Olive::ActiveSequence->clips.at(i);
if (c != nullptr) {
for (int j=0;j<sequence->selections.size();j++) {
const Selection& s = sequence->selections.at(j);
for (int j=0;j<Olive::ActiveSequence->selections.size();j++) {
const Selection& s = Olive::ActiveSequence->selections.at(j);
if (s.track == c->track && !((c->timeline_in <= s.in && c->timeline_out <= s.in) || (c->timeline_in >= s.out && c->timeline_out >= s.out))) {
if (!cleared) {
clear_clipboard();
@@ -987,7 +981,7 @@ void Timeline::copy(bool del) {
}
if (del && copied) {
delete_selection(sequence->selections, false);
delete_selection(Olive::ActiveSequence->selections, false);
}
}
@@ -995,7 +989,7 @@ void Timeline::relink_clips_using_ids(QVector<int>& old_clips, QVector<Clip*>& n
// relink pasted clips
for (int i=0;i<old_clips.size();i++) {
// these indices should correspond
Clip* oc = sequence->clips.at(old_clips.at(i));
Clip* oc = Olive::ActiveSequence->clips.at(old_clips.at(i));
for (int j=0;j<oc->linked.size();j++) {
for (int k=0;k<old_clips.size();k++) { // find clip with that ID
if (oc->linked.at(j) == old_clips.at(k)) {
@@ -1022,15 +1016,15 @@ void Timeline::paste(bool insert) {
Clip* c = static_cast<Clip*>(clipboard.at(i));
// create copy of clip and offset by playhead
Clip* cc = c->copy(sequence);
Clip* cc = c->copy(Olive::ActiveSequence);
// convert frame rates
cc->timeline_in = refactor_frame_number(cc->timeline_in, c->cached_fr, sequence->frame_rate);
cc->timeline_out = refactor_frame_number(cc->timeline_out, c->cached_fr, sequence->frame_rate);
cc->clip_in = refactor_frame_number(cc->clip_in, c->cached_fr, sequence->frame_rate);
cc->timeline_in = refactor_frame_number(cc->timeline_in, c->cached_fr, Olive::ActiveSequence->frame_rate);
cc->timeline_out = refactor_frame_number(cc->timeline_out, c->cached_fr, Olive::ActiveSequence->frame_rate);
cc->clip_in = refactor_frame_number(cc->clip_in, c->cached_fr, Olive::ActiveSequence->frame_rate);
cc->timeline_in += sequence->playhead;
cc->timeline_out += sequence->playhead;
cc->timeline_in += Olive::ActiveSequence->playhead;
cc->timeline_out += Olive::ActiveSequence->playhead;
cc->track = c->track;
paste_start = qMin(paste_start, cc->timeline_in);
@@ -1048,8 +1042,8 @@ void Timeline::paste(bool insert) {
}
if (insert) {
split_cache.clear();
split_all_clips_at_point(ca, sequence->playhead);
ripple_clips(ca, sequence, paste_start, paste_end - paste_start);
split_all_clips_at_point(ca, Olive::ActiveSequence->playhead);
ripple_clips(ca, Olive::ActiveSequence, paste_start, paste_end - paste_start);
} else {
delete_areas_and_relink(ca, delete_areas, false);
}
@@ -1069,7 +1063,7 @@ void Timeline::paste(bool insert) {
}
}
ca->append(new AddClipCommand(sequence, pasted_clips));
ca->append(new AddClipCommand(Olive::ActiveSequence, pasted_clips));
undo_stack.push(ca);
@@ -1086,8 +1080,8 @@ void Timeline::paste(bool insert) {
bool skip = false;
bool ask_conflict = true;
for (int i=0;i<sequence->clips.size();i++) {
Clip* c = sequence->clips.at(i);
for (int i=0;i<Olive::ActiveSequence->clips.size();i++) {
Clip* c = Olive::ActiveSequence->clips.at(i);
if (c != nullptr && is_clip_selected(c, true)) {
for (int j=0;j<clipboard.size();j++) {
Effect* e = static_cast<Effect*>(clipboard.at(j));
@@ -1156,8 +1150,8 @@ void Timeline::paste(bool insert) {
}
void Timeline::ripple_to_in_point(bool in, bool ripple) {
if (sequence != nullptr) {
if (sequence->clips.size() > 0) {
if (Olive::ActiveSequence != nullptr) {
if (Olive::ActiveSequence->clips.size() > 0) {
// get track count
int track_min = INT_MAX;
int track_max = INT_MIN;
@@ -1169,25 +1163,25 @@ void Timeline::ripple_to_in_point(bool in, bool ripple) {
long prev_cut = 0;
// find closest in point to playhead
for (int i=0;i<sequence->clips.size();i++) {
Clip* c = sequence->clips.at(i);
for (int i=0;i<Olive::ActiveSequence->clips.size();i++) {
Clip* c = Olive::ActiveSequence->clips.at(i);
if (c != nullptr) {
track_min = qMin(track_min, c->track);
track_max = qMax(track_max, c->track);
sequence_end = qMax(c->timeline_out, sequence_end);
if (c->timeline_in == sequence->playhead)
if (c->timeline_in == Olive::ActiveSequence->playhead)
playhead_falls_on_in = true;
if (c->timeline_out == sequence->playhead)
if (c->timeline_out == Olive::ActiveSequence->playhead)
playhead_falls_on_out = true;
if (c->timeline_in > sequence->playhead)
if (c->timeline_in > Olive::ActiveSequence->playhead)
next_cut = qMin(c->timeline_in, next_cut);
if (c->timeline_out > sequence->playhead)
if (c->timeline_out > Olive::ActiveSequence->playhead)
next_cut = qMin(c->timeline_out, next_cut);
if (c->timeline_in < sequence->playhead)
if (c->timeline_in < Olive::ActiveSequence->playhead)
prev_cut = qMax(c->timeline_in, prev_cut);
if (c->timeline_out < sequence->playhead)
if (c->timeline_out < Olive::ActiveSequence->playhead)
prev_cut = qMax(c->timeline_out, prev_cut);
}
}
@@ -1197,13 +1191,13 @@ void Timeline::ripple_to_in_point(bool in, bool ripple) {
QVector<Selection> areas;
ComboAction* ca = new ComboAction();
bool push_undo = true;
long seek = sequence->playhead;
long seek = Olive::ActiveSequence->playhead;
if ((in && (playhead_falls_on_out || (playhead_falls_on_in && sequence->playhead == 0)))
|| (!in && (playhead_falls_on_in || (playhead_falls_on_out && sequence->playhead == sequence_end)))) { // one frame mode
if ((in && (playhead_falls_on_out || (playhead_falls_on_in && Olive::ActiveSequence->playhead == 0)))
|| (!in && (playhead_falls_on_in || (playhead_falls_on_out && Olive::ActiveSequence->playhead == sequence_end)))) { // one frame mode
if (ripple) {
// set up deletion areas based on track count
long in_point = sequence->playhead;
long in_point = Olive::ActiveSequence->playhead;
if (!in) {
in_point--;
seek--;
@@ -1221,7 +1215,7 @@ void Timeline::ripple_to_in_point(bool in, bool ripple) {
// trim and move clips around the in point
delete_areas_and_relink(ca, areas, true);
if (ripple) ripple_clips(ca, sequence, in_point, -1);
if (ripple) ripple_clips(ca, Olive::ActiveSequence, in_point, -1);
} else {
push_undo = false;
}
@@ -1232,8 +1226,8 @@ void Timeline::ripple_to_in_point(bool in, bool ripple) {
// set up deletion areas based on track count
Selection s;
if (in) seek = prev_cut;
s.in = in ? prev_cut : sequence->playhead;
s.out = in ? sequence->playhead : next_cut;
s.in = in ? prev_cut : Olive::ActiveSequence->playhead;
s.out = in ? Olive::ActiveSequence->playhead : next_cut;
if (s.in == s.out) {
push_undo = false;
@@ -1245,7 +1239,7 @@ void Timeline::ripple_to_in_point(bool in, bool ripple) {
// trim and move clips around the in point
delete_areas_and_relink(ca, areas, true);
if (ripple) ripple_clips(ca, sequence, s.in, s.in - s.out);
if (ripple) ripple_clips(ca, Olive::ActiveSequence, s.in, s.in - s.out);
}
}
@@ -1254,7 +1248,7 @@ void Timeline::ripple_to_in_point(bool in, bool ripple) {
update_ui(true);
if (seek != sequence->playhead && ripple) panel_sequence_viewer->seek(seek);
if (seek != Olive::ActiveSequence->playhead && ripple) panel_sequence_viewer->seek(seek);
} else {
delete ca;
}
@@ -1273,11 +1267,11 @@ bool Timeline::split_selection(ComboAction* ca) {
QVector<Clip*> secondary_post_splits;
// find clips within selection and split
for (int j=0;j<sequence->clips.size();j++) {
Clip* clip = sequence->clips.at(j);
for (int j=0;j<Olive::ActiveSequence->clips.size();j++) {
Clip* clip = Olive::ActiveSequence->clips.at(j);
if (clip != nullptr) {
for (int i=0;i<sequence->selections.size();i++) {
const Selection& s = sequence->selections.at(i);
for (int i=0;i<Olive::ActiveSequence->selections.size();i++) {
const Selection& s = Olive::ActiveSequence->selections.at(i);
if (s.track == clip->track) {
Clip* post_b = split_clip(ca, true, j, s.out);
Clip* post_a = split_clip(ca, post_b == nullptr, j, s.in);
@@ -1300,8 +1294,8 @@ bool Timeline::split_selection(ComboAction* ca) {
relink_clips_using_ids(pre_splits, post_splits);
relink_clips_using_ids(pre_splits, secondary_post_splits);
ca->append(new AddClipCommand(sequence, post_splits));
ca->append(new AddClipCommand(sequence, secondary_post_splits));
ca->append(new AddClipCommand(Olive::ActiveSequence, post_splits));
ca->append(new AddClipCommand(Olive::ActiveSequence, secondary_post_splits));
return true;
}
@@ -1310,8 +1304,8 @@ bool Timeline::split_selection(ComboAction* ca) {
bool Timeline::split_all_clips_at_point(ComboAction* ca, long point) {
bool split = false;
for (int j=0;j<sequence->clips.size();j++) {
Clip* c = sequence->clips.at(j);
for (int j=0;j<Olive::ActiveSequence->clips.size();j++) {
Clip* c = Olive::ActiveSequence->clips.at(j);
if (c != nullptr) {
// always relinks
if (split_clip_and_relink(ca, j, point, true)) {
@@ -1327,14 +1321,14 @@ void Timeline::split_at_playhead() {
bool split_selected = false;
split_cache.clear();
if (sequence->selections.size() > 0) {
if (Olive::ActiveSequence->selections.size() > 0) {
// see if whole clips are selected
QVector<int> pre_clips;
QVector<Clip*> post_clips;
for (int j=0;j<sequence->clips.size();j++) {
Clip* clip = sequence->clips.at(j);
for (int j=0;j<Olive::ActiveSequence->clips.size();j++) {
Clip* clip = Olive::ActiveSequence->clips.at(j);
if (clip != nullptr && is_clip_selected(clip, true)) {
Clip* s = split_clip(ca, true, j, sequence->playhead);
Clip* s = split_clip(ca, true, j, Olive::ActiveSequence->playhead);
if (s != nullptr) {
pre_clips.append(j);
post_clips.append(s);
@@ -1346,7 +1340,7 @@ void Timeline::split_at_playhead() {
if (split_selected) {
// relink clips if we split
relink_clips_using_ids(pre_clips, post_clips);
ca->append(new AddClipCommand(sequence, post_clips));
ca->append(new AddClipCommand(Olive::ActiveSequence, post_clips));
} else {
// split a selection if not
split_selected = split_selection(ca);
@@ -1355,7 +1349,7 @@ void Timeline::split_at_playhead() {
// if nothing was selected or no selections fell within playhead, simply split at playhead
if (!split_selected) {
split_selected = split_all_clips_at_point(ca, sequence->playhead);
split_selected = split_all_clips_at_point(ca, Olive::ActiveSequence->playhead);
}
if (split_selected) {
@@ -1367,13 +1361,13 @@ void Timeline::split_at_playhead() {
}
void Timeline::deselect_area(long in, long out, int track) {
int len = sequence->selections.size();
int len = Olive::ActiveSequence->selections.size();
for (int i=0;i<len;i++) {
Selection& s = sequence->selections[i];
Selection& s = Olive::ActiveSequence->selections[i];
if (s.track == track) {
if (s.in >= in && s.out <= out) {
// whole selection is in deselect area
sequence->selections.removeAt(i);
Olive::ActiveSequence->selections.removeAt(i);
i--;
len--;
} else if (s.in < in && s.out > out) {
@@ -1382,7 +1376,7 @@ void Timeline::deselect_area(long in, long out, int track) {
new_sel.in = out;
new_sel.out = s.out;
new_sel.track = s.track;
sequence->selections.append(new_sel);
Olive::ActiveSequence->selections.append(new_sel);
s.out = in;
} else if (s.in < in && s.out > in) {
@@ -1412,25 +1406,25 @@ bool Timeline::snap_to_timeline(long* l, bool use_playhead, bool use_markers, bo
if (snapping) {
if (use_playhead && !panel_sequence_viewer->playing) {
// snap to playhead
if (snap_to_point(sequence->playhead, l)) return true;
if (snap_to_point(Olive::ActiveSequence->playhead, l)) return true;
}
// snap to marker
if (use_markers) {
for (int i=0;i<sequence->markers.size();i++) {
if (snap_to_point(sequence->markers.at(i).frame, l)) return true;
for (int i=0;i<Olive::ActiveSequence->markers.size();i++) {
if (snap_to_point(Olive::ActiveSequence->markers.at(i).frame, l)) return true;
}
}
// snap to in/out
if (use_workarea && sequence->using_workarea) {
if (snap_to_point(sequence->workarea_in, l)) return true;
if (snap_to_point(sequence->workarea_out, l)) return true;
if (use_workarea && Olive::ActiveSequence->using_workarea) {
if (snap_to_point(Olive::ActiveSequence->workarea_in, l)) return true;
if (snap_to_point(Olive::ActiveSequence->workarea_out, l)) return true;
}
// snap to clip/transition
for (int i=0;i<sequence->clips.size();i++) {
Clip* c = sequence->clips.at(i);
for (int i=0;i<Olive::ActiveSequence->clips.size();i++) {
Clip* c = Olive::ActiveSequence->clips.at(i);
if (c != nullptr) {
if (snap_to_point(c->timeline_in, l)) {
return true;
@@ -1461,14 +1455,14 @@ void Timeline::set_marker() {
QVector<int> clips_selected;
bool clip_mode = false;
for (int i=0;i<sequence->clips.size();i++) {
Clip* c = sequence->clips.at(i);
for (int i=0;i<Olive::ActiveSequence->clips.size();i++) {
Clip* c = Olive::ActiveSequence->clips.at(i);
if (c != nullptr
&& is_clip_selected(c, true)) {
// only add markers if the playhead is inside the clip
if (sequence->playhead >= c->timeline_in
&& sequence->playhead <= c->timeline_out) {
if (Olive::ActiveSequence->playhead >= c->timeline_in
&& Olive::ActiveSequence->playhead <= c->timeline_out) {
clips_selected.append(i);
}
@@ -1485,15 +1479,15 @@ void Timeline::set_marker() {
}
// pass off to internal set marker function
set_marker_internal(sequence, clips_selected);
set_marker_internal(Olive::ActiveSequence, clips_selected);
}
void Timeline::toggle_links() {
LinkCommand* command = new LinkCommand();
command->s = sequence;
for (int i=0;i<sequence->clips.size();i++) {
Clip* c = sequence->clips.at(i);
command->s = Olive::ActiveSequence;
for (int i=0;i<Olive::ActiveSequence->clips.size();i++) {
Clip* c = Olive::ActiveSequence->clips.at(i);
if (c != nullptr && is_clip_selected(c, true)) {
if (!command->clips.contains(i)) command->clips.append(i);
@@ -1537,7 +1531,7 @@ void Timeline::decrease_track_height() {
}
void Timeline::deselect() {
sequence->selections.clear();
Olive::ActiveSequence->selections.clear();
repaint_timeline();
}
@@ -1608,7 +1602,7 @@ void Timeline::setScroll(int s) {
}
void Timeline::record_btn_click() {
if (project_url.isEmpty()) {
if (Olive::ActiveProjectFilename.isEmpty()) {
QMessageBox::critical(this,
tr("Unsaved Project"),
tr("You must save this project before you can record audio in it."),
@@ -1616,7 +1610,7 @@ void Timeline::record_btn_click() {
} else {
creating = true;
creating_object = ADD_OBJ_AUDIO;
mainWindow->statusBar()->showMessage(
Olive::MainWindow->statusBar()->showMessage(
tr("Click on the timeline where you want to start recording (drag to limit the recording to a certain timeframe)"),
10000);
}
@@ -1674,7 +1668,7 @@ void Timeline::resize_move(double z) {
}
void Timeline::set_sb_max() {
headers->set_scrollbar_max(horizontalScrollBar, sequence->getEndFrame(), editAreas->width() - getScreenPointFromFrame(zoom, 200));
headers->set_scrollbar_max(horizontalScrollBar, Olive::ActiveSequence->getEndFrame(), editAreas->width() - getScreenPointFromFrame(zoom, 200));
}
void Timeline::setup_ui() {