rewrite nearly complete
This commit is contained in:
+109
-119
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user