rewrite nearly complete

This commit is contained in:
itsmattkc
2019-04-03 01:38:01 +11:00
parent 8989333e99
commit 2d4714547b
102 changed files with 3213 additions and 2892 deletions
+109 -119
View File
@@ -38,11 +38,11 @@
#include "ui/labelslider.h"
#include "ui/viewerwidget.h"
#include "project/media.h"
#include "project/clipboard.h"
#include "global/clipboard.h"
#include "project/previewgenerator.h"
#include "ui/mainwindow.h"
MoveClipAction::MoveClipAction(Clip *c, long iin, long iout, long iclip_in, int itrack, bool irelative) :
MoveClipAction::MoveClipAction(ClipPtr c, long iin, long iout, long iclip_in, Track* itrack, bool irelative) :
clip(c),
old_in(c->timeline_in()),
old_out(c->timeline_out()),
@@ -63,13 +63,12 @@ void MoveClipAction::doUndo() {
clip->set_timeline_in (clip->timeline_in() - new_in);
clip->set_timeline_out (clip->timeline_out() - new_out);
clip->set_clip_in (clip->clip_in() - new_clip_in);
clip->set_track (clip->track() - new_track);
} else {
clip->set_timeline_in(old_in);
clip->set_timeline_out(old_out);
clip->set_clip_in(old_clip_in);
clip->set_track(old_track);
}
clip->set_track(old_track);
done = false;
}
@@ -79,13 +78,12 @@ void MoveClipAction::doRedo() {
clip->set_timeline_in(clip->timeline_in() + new_in);
clip->set_timeline_out(clip->timeline_out() + new_out);
clip->set_clip_in(clip->clip_in() + new_clip_in);
clip->set_track(clip->track() + new_track);
} else {
clip->set_timeline_in(new_in);
clip->set_timeline_out(new_out);
clip->set_clip_in(new_clip_in);
clip->set_track(new_track);
}
new_track->AddClip(clip);
done = true;
}
}
@@ -98,15 +96,13 @@ DeleteClipAction::DeleteClipAction(Clip *clip)
}
void DeleteClipAction::doUndo() {
// restore ref to clip
seq->clips[index] = ref;
// restore clip to this track
clip_->track()->AddClip(clip_);
// restore links to this clip
for (int i=linkClipIndex.size()-1;i>=0;i--) {
seq->clips.at(linkClipIndex.at(i))->linked.insert(linkLinkIndex.at(i), index);
for (int i=0;i<clips_linked_to_this_one_.size();i++) {
clips_linked_to_this_one_.append(clip_.get());
}
ref = nullptr;
}
void DeleteClipAction::doRedo() {
@@ -118,36 +114,20 @@ void DeleteClipAction::doRedo() {
clip_->track()->RemoveClip(clip_.get());
// delete link to this clip
QVector<Clip*> clips = clip_->track()->
linkClipIndex.clear();
linkLinkIndex.clear();
for (int i=0;i<seq->clips.size();i++) {
ClipPtr c = seq->clips.at(i);
if (c != nullptr) {
for (int j=0;j<c->linked.size();j++) {
if (c->linked.at(j) == index) {
linkClipIndex.append(i);
linkLinkIndex.append(j);
c->linked.removeAt(j);
}
QVector<Clip*> clips = clip_->track()->sequence()->GetAllClips();
for (int i=0;i<clips.size();i++) {
Clip* c = clips.at(i);
for (int j=0;j<c->linked.size();j++) {
if (c->linked.at(j) == clip_.get()) {
c->linked.removeAt(j);
clips_linked_to_this_one_.append(c);
break;
}
}
}
}
ChangeSequenceAction::ChangeSequenceAction(SequencePtr s) {
new_sequence = s;
}
void ChangeSequenceAction::doUndo() {
olive::Global->set_sequence(old_sequence);
}
void ChangeSequenceAction::doRedo() {
old_sequence = olive::ActiveSequence;
olive::Global->set_sequence(new_sequence);
}
SetTimelineInOutCommand::SetTimelineInOutCommand(Sequence* s, bool enabled, long in, long out) {
seq = s;
new_enabled = enabled;
@@ -162,7 +142,7 @@ void SetTimelineInOutCommand::doUndo() {
// footage viewer functions
if (seq->wrapper_sequence) {
Footage* m = seq->clips.at(0)->media()->to_footage();
Footage* m = seq->GetAllClips().first()->media()->to_footage();
m->using_inout = old_enabled;
m->in = old_in;
m->out = old_out;
@@ -180,7 +160,7 @@ void SetTimelineInOutCommand::doRedo() {
// footage viewer functions
if (seq->wrapper_sequence) {
Footage* m = seq->clips.at(0)->media()->to_footage();
Footage* m = seq->GetAllClips().first()->media()->to_footage();
m->using_inout = new_enabled;
m->in = new_in;
m->out = new_out;
@@ -351,10 +331,8 @@ void DeleteMediaCommand::doRedo() {
olive::project_model.removeChild(parent, item.get());
}
AddClipCommand::AddClipCommand(Sequence *s, QVector<ClipPtr>& add) :
link_offset_(0),
seq(s),
clips(add),
AddClipCommand::AddClipCommand(const QVector<ClipPtr> &add) :
clips_(add),
done_(false)
{
doRedo();
@@ -365,26 +343,21 @@ void AddClipCommand::doUndo() {
panel_graph_editor->set_row(nullptr);
panel_effect_controls->Clear(true);
for (int i=0;i<clips.size();i++) {
ClipPtr c = seq->clips.last();
for (int i=0;i<clips_.size();i++) {
ClipPtr c = clips_.at(i);
if (c != nullptr) {
// un-offset all the clips
for (int j=0;j<c->linked.size();j++) {
c->linked[j] -= link_offset_;
}
c->track()->RemoveClip(c.get());
// deselect the area occupied by this clip
panel_timeline->deselect_area(c->timeline_in(), c->timeline_out(), c->track());
c->track()->DeselectArea(c->timeline_in(), c->timeline_out());
// if the clip is open, close it
if (c->IsOpen()) {
c->Close(true);
}
}
// remove it from the sequence
seq->clips.removeLast();
}
done_ = false;
@@ -392,54 +365,52 @@ void AddClipCommand::doUndo() {
void AddClipCommand::doRedo() {
if (!done_) {
link_offset_ = seq->clips.size();
for (int i=0;i<clips.size();i++) {
ClipPtr original = clips.at(i);
for (int i=0;i<clips_.size();i++) {
ClipPtr original = clips_.at(i);
if (original != nullptr) {
// offset all links by the current clip size
for (int j=0;j<original->linked.size();j++) {
original->linked[j] += link_offset_;
}
}
seq->clips.append(original);
original->track()->AddClip(original);
}
}
done_ = true;
}
}
LinkCommand::LinkCommand() {
link = true;
LinkCommand::LinkCommand(const QVector<Clip*>& clips, bool link) :
clips_(clips),
link_(link)
{
}
void LinkCommand::doUndo() {
for (int i=0;i<clips.size();i++) {
ClipPtr c = s->clips.at(clips.at(i));
if (link) {
for (int i=0;i<clips_.size();i++) {
Clip* c = clips_.at(i);
if (link_) {
c->linked.clear();
} else {
c->linked = old_links.at(i);
c->linked = old_links_.at(i);
}
}
}
void LinkCommand::doRedo() {
old_links.clear();
for (int i=0;i<clips.size();i++) {
ClipPtr c = s->clips.at(clips.at(i));
if (link) {
for (int j=0;j<clips.size();j++) {
old_links_.clear();
for (int i=0;i<clips_.size();i++) {
Clip* c = clips_.at(i);
if (link_) {
for (int j=0;j<clips_.size();j++) {
if (i != j) {
c->linked.append(clips.at(j));
c->linked.append(clips_.at(j));
}
}
} else {
old_links.append(c->linked);
old_links_.append(c->linked);
c->linked.clear();
}
}
}
@@ -472,12 +443,14 @@ ReplaceMediaCommand::ReplaceMediaCommand(MediaPtr i, QString s) {
void ReplaceMediaCommand::replace(QString& filename) {
// close any clips currently using this media
QVector<Media*> all_sequences = panel_project->list_all_project_sequences();
QVector<Media*> all_sequences = olive::project_model.GetAllSequences();
for (int i=0;i<all_sequences.size();i++) {
Sequence* s = all_sequences.at(i)->to_sequence().get();
for (int j=0;j<s->clips.size();j++) {
ClipPtr c = s->clips.at(j);
if (c != nullptr && c->media() == item.get() && c->IsOpen()) {
QVector<Clip*> sequence_clips = all_sequences.at(i)->to_sequence()->GetAllClips();
for (int j=0;j<sequence_clips.size();j++) {
Clip* c = sequence_clips.at(j);
if (c->media() == item.get() && c->IsOpen()) {
c->Close(true);
c->replaced = true;
}
@@ -487,7 +460,7 @@ void ReplaceMediaCommand::replace(QString& filename) {
// replace media
QStringList files;
files.append(filename);
panel_project->process_file_list(files, false, item, nullptr);
olive::project_model.process_file_list(files, false, item, nullptr);
PreviewGenerator::AnalyzeMedia(item.get());
}
@@ -513,7 +486,7 @@ void ReplaceClipMediaCommand::replace(bool undo) {
}
for (int i=0;i<clips.size();i++) {
ClipPtr c = clips.at(i);
Clip* c = clips.at(i);
if (c->IsOpen()) {
c->Close(true);
}
@@ -806,20 +779,25 @@ void SetBool::doRedo() {
*boolean = new_setting;
}
SetSelectionsCommand::SetSelectionsCommand(Sequence *s) {
seq = s;
done = true;
SetSelectionsCommand::SetSelectionsCommand(Sequence *s,
const QVector<Selection> &old_data,
const QVector<Selection> &new_data) :
old_data_(old_data),
new_data_(new_data),
done_(true)
{
}
void SetSelectionsCommand::doUndo() {
seq->selections = old_data;
done = false;
seq_->SetSelections(old_data_);
done_ = false;
}
void SetSelectionsCommand::doRedo() {
if (!done) {
seq->selections = new_data;
done = true;
if (!done_) {
seq_->SetSelections(new_data_);
done_ = true;
}
}
@@ -858,15 +836,12 @@ void EditSequenceCommand::update() {
// Update sequence's tooltip
item->update_tooltip();
for (int i=0;i<seq->clips.size();i++) {
if (seq->clips.at(i) != nullptr) {
seq->clips.at(i)->refresh();
QVector<Clip*> all_clips = seq->GetAllClips();
for (int i=0;i<all_clips.size();i++) {
if (all_clips.at(i) != nullptr) {
all_clips.at(i)->refresh();
}
}
if (olive::ActiveSequence == seq) {
olive::Global->set_sequence(seq);
}
}
SetInt::SetInt(int* pointer, int new_value) {
@@ -904,7 +879,11 @@ void CloseAllClipsCommand::doUndo() {
}
void CloseAllClipsCommand::doRedo() {
olive::ActiveSequence->Close();
QVector<Media*> sequences = olive::project_model.GetAllSequences();
for (int i=0;i<sequences.size();i++) {
sequences.at(i)->to_sequence()->Close();
}
}
UpdateFootageTooltip::UpdateFootageTooltip(Media *i) {
@@ -938,13 +917,13 @@ RemoveClipsFromClipboard::RemoveClipsFromClipboard(int index) {
RemoveClipsFromClipboard::~RemoveClipsFromClipboard() {}
void RemoveClipsFromClipboard::doUndo() {
clipboard.insert(pos, clip);
olive::clipboard.Insert(pos, clip);
done = false;
}
void RemoveClipsFromClipboard::doRedo() {
clip = std::static_pointer_cast<Clip>(clipboard.at(pos));
clipboard.removeAt(pos);
clip = std::static_pointer_cast<Clip>(olive::clipboard.Get(pos));
olive::clipboard.RemoveAt(pos);
done = true;
}
@@ -985,7 +964,7 @@ void ReloadEffectsCommand::doRedo() {
panel_effect_controls->Reload();
}
RippleAction::RippleAction(Sequence *is, long ipoint, long ilength, const QVector<int> &iignore) :
RippleAction::RippleAction(Sequence *is, long ipoint, long ilength, const QVector<Clip*> &iignore) :
s(is),
point(ipoint),
length(ilength),
@@ -1000,13 +979,21 @@ void RippleAction::doUndo() {
void RippleAction::doRedo() {
ca = new ComboAction();
for (int i=0;i<s->clips.size();i++) {
if (!ignore.contains(i)) {
ClipPtr c = s->clips.at(i);
if (c != nullptr) {
if (c->timeline_in() >= point) {
c->move(ca, length, length, 0, 0, true, true);
}
QVector<Clip*> all_clips = s->GetAllClips();
for (int i=0;i<all_clips.size();i++) {
Clip* c = all_clips.at(i);
if (!ignore.contains(c)) {
if (c->timeline_in() >= point) {
s->MoveClip(c,
ca,
length,
length,
0,
c->track(),
true,
true);
}
}
}
@@ -1092,8 +1079,9 @@ void SetIsKeyframing::doRedo() {
row->SetKeyframingInternal(b);
}
RefreshClips::RefreshClips(Media *m) {
media = m;
RefreshClips::RefreshClips(Media *m) :
media(m)
{
}
void RefreshClips::doUndo() {
@@ -1102,12 +1090,14 @@ void RefreshClips::doUndo() {
void RefreshClips::doRedo() {
// close any clips currently using this media
QVector<Media*> all_sequences = panel_project->list_all_project_sequences();
QVector<Media*> all_sequences = olive::project_model.GetAllSequences();
for (int i=0;i<all_sequences.size();i++) {
Sequence* s = all_sequences.at(i)->to_sequence().get();
for (int j=0;j<s->clips.size();j++) {
Clip* c = s->clips.at(j).get();
if (c != nullptr && c->media() == media) {
QVector<Clip*> sequence_clips = all_sequences.at(i)->to_sequence().get()->GetAllClips();
for (int j=0;j<sequence_clips.size();j++) {
Clip* c = sequence_clips.at(j);
if (c->media() == media || media == nullptr) {
c->replaced = true;
c->refresh();
}