undos now save the modified flag state

This commit is contained in:
itsmattkc
2018-08-07 15:01:20 +10:00
parent 984a5ed799
commit b29462e68b
11 changed files with 182 additions and 168 deletions
-1
View File
@@ -33,7 +33,6 @@ void Effect::init() {
void Effect::field_changed() {
panel_viewer->viewer_widget->update();
project_changed = true;
}
void Effect::checkbox_command() {
+105 -2
View File
@@ -464,7 +464,7 @@ void TimelineAction::redo() {
done = true;
}
LinkCommand::LinkCommand() : link(true) {}
LinkCommand::LinkCommand() : link(true), old_project_changed(project_changed) {}
void LinkCommand::undo() {
for (int i=0;i<clips.size();i++) {
@@ -475,6 +475,7 @@ void LinkCommand::undo() {
c->linked = old_links.at(i);
}
}
project_changed = old_project_changed;
}
void LinkCommand::redo() {
@@ -492,21 +493,24 @@ void LinkCommand::redo() {
c->linked.clear();
}
}
project_changed = true;
}
CheckboxCommand::CheckboxCommand(QCheckBox* b) : box(b), checked(box->isChecked()), done(true) {}
CheckboxCommand::CheckboxCommand(QCheckBox* b) : box(b), checked(box->isChecked()), done(true), old_project_changed(project_changed) {}
CheckboxCommand::~CheckboxCommand() {}
void CheckboxCommand::undo() {
box->setChecked(!checked);
done = false;
project_changed = old_project_changed;
}
void CheckboxCommand::redo() {
if (!done) {
box->setChecked(checked);
}
project_changed = true;
}
ReplaceMediaCommand::ReplaceMediaCommand(QTreeWidgetItem* i, QString s) :
@@ -605,3 +609,102 @@ void ReplaceClipMediaCommand::redo() {
project_changed = true;
}
EffectDeleteCommand::EffectDeleteCommand() : done(false), old_project_changed(project_changed) {}
EffectDeleteCommand::~EffectDeleteCommand() {
if (done) {
for (int i=0;i<deleted_objects.size();i++) {
delete deleted_objects.at(i);
}
}
}
void EffectDeleteCommand::undo() {
for (int i=0;i<clips.size();i++) {
Clip* c = clips.at(i);
c->effects.insert(fx.at(i), deleted_objects.at(i));
}
panel_effect_controls->reload_clips();
done = false;
project_changed = old_project_changed;
}
void EffectDeleteCommand::redo() {
deleted_objects.clear();
for (int i=0;i<clips.size();i++) {
Clip* c = clips.at(i);
int fx_id = fx.at(i);
deleted_objects.append(c->effects.at(fx_id));
c->effects.removeAt(fx_id);
}
panel_effect_controls->reload_clips();
done = true;
project_changed = true;
}
MediaMove::MediaMove(SourceTable *s) : table(s), old_project_changed(project_changed) {}
void MediaMove::undo() {
for (int i=0;i<items.size();i++) {
if (to == NULL) {
table->takeTopLevelItem(table->indexOfTopLevelItem(items.at(i)));
} else {
to->removeChild(items.at(i));
}
if (froms.at(i) == NULL) {
table->addTopLevelItem(items.at(i));
} else {
froms.at(i)->addChild(items.at(i));
}
}
project_changed = old_project_changed;
}
void MediaMove::redo() {
for (int i=0;i<items.size();i++) {
QTreeWidgetItem* parent = items.at(i)->parent();
froms.append(parent);
if (parent == NULL) {
table->takeTopLevelItem(table->indexOfTopLevelItem(items.at(i)));
} else {
parent->removeChild(items.at(i));
}
if (to == NULL) {
table->addTopLevelItem(items.at(i));
} else {
to->addChild(items.at(i));
}
}
project_changed = true;
}
MediaRename::MediaRename() : done(true), old_project_changed(project_changed) {}
void MediaRename::undo() {
item->setText(0, from);
done = false;
project_changed = old_project_changed;
}
void MediaRename::redo() {
if (!done) {
item->setText(0, to);
}
project_changed = true;
}
ValueChangeCommand::ValueChangeCommand() : done(true), old_project_changed(project_changed) {}
void ValueChangeCommand::undo() {
source->set_value(old_val);
done = false;
project_changed = old_project_changed;
}
void ValueChangeCommand::redo() {
if (!done) {
source->set_value(new_val);
}
project_changed = true;
}
+55
View File
@@ -102,6 +102,7 @@ public:
bool link;
private:
QVector< QVector<int> > old_links;
bool old_project_changed;
};
class CheckboxCommand : public QUndoCommand {
@@ -114,6 +115,7 @@ private:
QCheckBox* box;
bool checked;
bool done;
bool old_project_changed;
};
class ReplaceMediaCommand : public QUndoCommand {
@@ -147,4 +149,57 @@ private:
void replace(bool undo);
};
class EffectDeleteCommand : public QUndoCommand {
public:
EffectDeleteCommand();
~EffectDeleteCommand();
void undo();
void redo();
QVector<Clip*> clips;
QVector<int> fx;
private:
bool done;
bool old_project_changed;
QVector<Effect*> deleted_objects;
};
class MediaMove : public QUndoCommand {
public:
MediaMove(SourceTable* s);
QVector<QTreeWidgetItem*> items;
QTreeWidgetItem* to;
void undo();
void redo();
private:
QVector<QTreeWidgetItem*> froms;
SourceTable* table;
bool old_project_changed;
};
class MediaRename : public QUndoCommand {
public:
MediaRename();
QTreeWidgetItem* item;
QString from;
QString to;
void undo();
void redo();
private:
bool done;
bool old_project_changed;
};
class ValueChangeCommand : public QUndoCommand {
public:
ValueChangeCommand();
LabelSlider* source;
float old_val;
float new_val;
void undo();
void redo();
private:
bool done;
bool old_project_changed;
};
#endif // UNDO_H