From bdbeb111e81c0ecf35997f6588dc0898af744944 Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Sat, 7 Aug 2021 20:37:40 -0700 Subject: [PATCH] ui: make color setting undoable --- app/widget/nodeview/nodeview.cpp | 6 +++++- app/widget/nodeview/nodeviewundo.cpp | 22 ++++++++++++++++++++ app/widget/nodeview/nodeviewundo.h | 21 +++++++++++++++++++ app/widget/timelinewidget/timelinewidget.cpp | 6 +++++- 4 files changed, 53 insertions(+), 2 deletions(-) diff --git a/app/widget/nodeview/nodeview.cpp b/app/widget/nodeview/nodeview.cpp index e804391e1..da7f65da5 100644 --- a/app/widget/nodeview/nodeview.cpp +++ b/app/widget/nodeview/nodeview.cpp @@ -363,9 +363,13 @@ void NodeView::Duplicate() void NodeView::SetColorLabel(int index) { + MultiUndoCommand *command = new MultiUndoCommand(); + for (Node* node : qAsConst(selected_nodes_)) { - node->SetOverrideColor(index); + command->add_child(new NodeOverrideColorCommand(node, index)); } + + Core::instance()->undo_stack()->push(command); } void NodeView::ZoomIn() diff --git a/app/widget/nodeview/nodeviewundo.cpp b/app/widget/nodeview/nodeviewundo.cpp index 0197dcf94..3b43a7b9a 100644 --- a/app/widget/nodeview/nodeviewundo.cpp +++ b/app/widget/nodeview/nodeviewundo.cpp @@ -171,4 +171,26 @@ Project *NodeRenameCommand::GetRelevantProject() const return nodes_.isEmpty() ? nullptr : nodes_.first()->project(); } +NodeOverrideColorCommand::NodeOverrideColorCommand(Node *node, int index) : + node_(node), + new_index_(index) +{ +} + +Project *NodeOverrideColorCommand::GetRelevantProject() const +{ + return node_->project(); +} + +void NodeOverrideColorCommand::redo() +{ + old_index_ = node_->GetOverrideColor(); + node_->SetOverrideColor(new_index_); +} + +void NodeOverrideColorCommand::undo() +{ + node_->SetOverrideColor(old_index_); +} + } diff --git a/app/widget/nodeview/nodeviewundo.h b/app/widget/nodeview/nodeviewundo.h index fcf23ae92..f678007b1 100644 --- a/app/widget/nodeview/nodeviewundo.h +++ b/app/widget/nodeview/nodeviewundo.h @@ -342,6 +342,27 @@ private: }; +class NodeOverrideColorCommand : public UndoCommand +{ +public: + NodeOverrideColorCommand(Node *node, int index); + + virtual Project * GetRelevantProject() const override; + +protected: + virtual void redo() override; + + virtual void undo() override; + +private: + Node *node_; + + int old_index_; + + int new_index_; + +}; + } #endif // NODEVIEWUNDO_H diff --git a/app/widget/timelinewidget/timelinewidget.cpp b/app/widget/timelinewidget/timelinewidget.cpp index 92df030d0..0a921eb9d 100644 --- a/app/widget/timelinewidget/timelinewidget.cpp +++ b/app/widget/timelinewidget/timelinewidget.cpp @@ -720,9 +720,13 @@ void TimelineWidget::ToggleSelectedEnabled() void TimelineWidget::SetColorLabel(int index) { + MultiUndoCommand *command = new MultiUndoCommand(); + foreach (Block* b, selected_blocks_) { - b->SetOverrideColor(index); + command->add_child(new NodeOverrideColorCommand(b, index)); } + + Core::instance()->undo_stack()->push(command); } void TimelineWidget::NudgeLeft()