first commit of big refactor
This commit is contained in:
+136
-142
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user