began timeline rewrite

This commit is contained in:
itsmattkc
2019-03-29 23:47:15 +11:00
parent a223b47909
commit 1fdac776d4
9 changed files with 565 additions and 533 deletions
+14 -26
View File
@@ -77,7 +77,7 @@ Timeline::Timeline(QWidget *parent) :
moving_proc(false),
move_insert(false),
trim_target(-1),
trim_type(TRIM_NONE),
trim_type(olive::timeline::TRIM_NONE),
splitting(false),
importing(false),
importing_files(false),
@@ -285,7 +285,7 @@ void Timeline::create_ghosts_from_media(Sequence* seq, long entry_point, QVector
if (can_import) {
Ghost g;
g.clip = -1;
g.trim_type = TRIM_NONE;
g.trim_type = olive::timeline::TRIM_NONE;
g.old_clip_in = g.clip_in = default_clip_in;
g.media = medium;
g.in = entry_point;
@@ -1012,13 +1012,6 @@ ClipPtr Timeline::split_clip(ComboAction* ca, bool transitions, int p, long fram
}
bool Timeline::split_clip_and_relink(ComboAction *ca, int clip, long frame, bool relink) {
// see if we split this clip before
if (split_cache.contains(clip)) {
return false;
}
split_cache.append(clip);
Clip* c = olive::ActiveSequence->clips.at(clip).get();
if (c != nullptr) {
QVector<int> pre_clips;
@@ -1040,15 +1033,12 @@ bool Timeline::split_clip_and_relink(ComboAction *ca, int clip, long frame, bool
// find linked clips of old clip
for (int i=0;i<c->linked.size();i++) {
int l = c->linked.at(i);
if (!split_cache.contains(l)) {
Clip* link = olive::ActiveSequence->clips.at(l).get();
if ((original_clip_is_selected && link->IsSelected()) || !original_clip_is_selected) {
split_cache.append(l);
ClipPtr s = split_clip(ca, true, l, frame);
if (s != nullptr) {
pre_clips.append(l);
post_clips.append(s);
}
Clip* link = olive::ActiveSequence->clips.at(l).get();
if ((original_clip_is_selected && link->IsSelected()) || !original_clip_is_selected) {
ClipPtr s = split_clip(ca, true, l, frame);
if (s != nullptr) {
pre_clips.append(l);
post_clips.append(s);
}
}
}
@@ -1292,7 +1282,6 @@ void Timeline::paste(bool insert) {
}
}
if (insert) {
split_cache.clear();
split_all_clips_at_point(ca, olive::ActiveSequence->playhead);
ripple_clips(ca, olive::ActiveSequence.get(), paste_start, paste_end - paste_start);
} else {
@@ -1570,7 +1559,6 @@ bool Timeline::split_all_clips_at_point(ComboAction* ca, long point) {
void Timeline::split_at_playhead() {
ComboAction* ca = new ComboAction();
bool split_selected = false;
split_cache.clear();
if (olive::ActiveSequence->selections.size() > 0) {
// see if whole clips are selected
@@ -1825,29 +1813,29 @@ void Timeline::add_btn_click() {
QAction* titleMenuItem = new QAction(&add_menu);
titleMenuItem->setText(tr("Title..."));
titleMenuItem->setData(ADD_OBJ_TITLE);
titleMenuItem->setData(olive::timeline::ADD_OBJ_TITLE);
add_menu.addAction(titleMenuItem);
QAction* solidMenuItem = new QAction(&add_menu);
solidMenuItem->setText(tr("Solid Color..."));
solidMenuItem->setData(ADD_OBJ_SOLID);
solidMenuItem->setData(olive::timeline::ADD_OBJ_SOLID);
add_menu.addAction(solidMenuItem);
QAction* barsMenuItem = new QAction(&add_menu);
barsMenuItem->setText(tr("Bars..."));
barsMenuItem->setData(ADD_OBJ_BARS);
barsMenuItem->setData(olive::timeline::ADD_OBJ_BARS);
add_menu.addAction(barsMenuItem);
add_menu.addSeparator();
QAction* toneMenuItem = new QAction(&add_menu);
toneMenuItem->setText(tr("Tone..."));
toneMenuItem->setData(ADD_OBJ_TONE);
toneMenuItem->setData(olive::timeline::ADD_OBJ_TONE);
add_menu.addAction(toneMenuItem);
QAction* noiseMenuItem = new QAction(&add_menu);
noiseMenuItem->setText(tr("Noise..."));
noiseMenuItem->setData(ADD_OBJ_NOISE);
noiseMenuItem->setData(olive::timeline::ADD_OBJ_NOISE);
add_menu.addAction(noiseMenuItem);
connect(&add_menu, SIGNAL(triggered(QAction*)), this, SLOT(add_menu_item(QAction*)));
@@ -1874,7 +1862,7 @@ void Timeline::record_btn_click() {
QMessageBox::Ok);
} else {
creating = true;
creating_object = ADD_OBJ_AUDIO;
creating_object = olive::timeline::ADD_OBJ_AUDIO;
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);
+2 -38
View File
@@ -30,26 +30,14 @@
#include "timeline/selection.h"
#include "timeline/clip.h"
#include "timeline/mediaimportdata.h"
#include "timeline/ghost.h"
#include "undo/undo.h"
#include "ui/timelineheader.h"
#include "ui/resizablescrollbar.h"
#include "ui/audiomonitor.h"
#include "ui/panel.h"
enum CreateObjects {
ADD_OBJ_TITLE,
ADD_OBJ_SOLID,
ADD_OBJ_BARS,
ADD_OBJ_TONE,
ADD_OBJ_NOISE,
ADD_OBJ_AUDIO
};
enum TrimType {
TRIM_NONE,
TRIM_IN,
TRIM_OUT
};
namespace olive {
namespace timeline {
@@ -77,30 +65,7 @@ long getFrameFromScreenPoint(double zoom, int x);
bool selection_contains_transition(const Selection& s, Clip *c, int type);
void ripple_clips(ComboAction *ca, Sequence *s, long point, long length, const QVector<int>& ignore = QVector<int>());
struct Ghost {
int clip;
long in;
long out;
int track;
long clip_in;
long old_in;
long old_out;
int old_track;
long old_clip_in;
// importing variables
Media* media;
int media_stream;
// other variables
long ghost_length;
long media_length;
TrimType trim_type;
// transition trimming
TransitionPtr transition;
};
class Timeline : public Panel
{
@@ -179,13 +144,12 @@ public:
// trimming
int trim_target;
TrimType trim_type;
olive::timeline::TrimType trim_type;
int transition_select;
// splitting
bool splitting;
QVector<int> split_tracks;
QVector<int> split_cache;
// importing
bool importing;