From 09f052a5d6408c6622a0e4f21360df99197609f1 Mon Sep 17 00:00:00 2001 From: brunoherbelin Date: Thu, 18 Mar 2021 21:56:06 +0100 Subject: [PATCH] Added undo-redo to locking of sources. --- GeometryView.cpp | 6 +++--- ImGuiVisitor.cpp | 8 ++++++-- LayerView.cpp | 4 ++-- MixingView.cpp | 4 ++-- TextureView.cpp | 8 ++++++-- View.cpp | 10 ++++++++++ View.h | 3 ++- 7 files changed, 31 insertions(+), 12 deletions(-) diff --git a/GeometryView.cpp b/GeometryView.cpp index 8430bd9..16a3c6d 100644 --- a/GeometryView.cpp +++ b/GeometryView.cpp @@ -428,11 +428,11 @@ std::pair GeometryView::pick(glm::vec2 P) } // pick on the lock icon; unlock source else if ( pick.first == current->lock_ ) { - current->setLocked(false); + lock(current, false); } // pick on the open lock icon; lock source and cancel pick else if ( pick.first == current->unlock_ ) { - current->setLocked(true); + lock(current, true); pick = { nullptr, glm::vec2(0.f) }; } // pick a locked source without CTRL key; cancel pick @@ -452,7 +452,7 @@ std::pair GeometryView::pick(glm::vec2 P) Source *s = Mixer::manager().findSource((*itp).first); // lock icon of a source (not current) is picked : unlock if ( s!=nullptr && (*itp).first == s->lock_) { - s->setLocked(false); + lock(s, false); pick = { s->locker_, (*itp).second }; break; } diff --git a/ImGuiVisitor.cpp b/ImGuiVisitor.cpp index 1cd9a41..84f05ff 100644 --- a/ImGuiVisitor.cpp +++ b/ImGuiVisitor.cpp @@ -443,10 +443,14 @@ void ImGuiVisitor::visit (Source& s) bool l = s.locked(); if (ImGuiToolkit::IconToggle(15,6,17,6, &l, tooltip ) ) { s.setLocked(l); - if (l) + if (l) { Mixer::selection().clear(); - else + Action::manager().store(s.name() + std::string(" lock."), s.id()); + } + else { Mixer::selection().set(&s); + Action::manager().store(s.name() + std::string(" unlock."), s.id()); + } } // toggle enable/disable image processing diff --git a/LayerView.cpp b/LayerView.cpp index 35c8c42..b18a1e9 100644 --- a/LayerView.cpp +++ b/LayerView.cpp @@ -222,12 +222,12 @@ std::pair LayerView::pick(glm::vec2 P) if (s != nullptr) { // pick on the lock icon; unlock source if ( pick.first == s->lock_) { - s->setLocked(false); + lock(s, false); pick = { s->locker_, pick.second }; } // pick on the open lock icon; lock source and cancel pick else if ( pick.first == s->unlock_ ) { - s->setLocked(true); + lock(s, true); pick = { nullptr, glm::vec2(0.f) }; } // pick a locked source; cancel pick diff --git a/MixingView.cpp b/MixingView.cpp index 0702ba1..b1d321a 100644 --- a/MixingView.cpp +++ b/MixingView.cpp @@ -337,12 +337,12 @@ std::pair MixingView::pick(glm::vec2 P) if (s != nullptr) { // pick on the lock icon; unlock source if ( pick.first == s->lock_) { - s->setLocked(false); + lock(s, false); pick = { s->locker_, pick.second }; } // pick on the open lock icon; lock source and cancel pick else if ( pick.first == s->unlock_ ) { - s->setLocked(true); + lock(s, true); pick = { nullptr, glm::vec2(0.f) }; } // pick a locked source ; cancel pick diff --git a/TextureView.cpp b/TextureView.cpp index d2d7091..bad49ce 100644 --- a/TextureView.cpp +++ b/TextureView.cpp @@ -830,11 +830,15 @@ void TextureView::draw() if (s != nullptr) { if (s->textureMirrored()) { - if (ImGui::Selectable( ICON_FA_TH " Repeat " )) + if (ImGui::Selectable( ICON_FA_TH " Repeat " )){ s->setTextureMirrored(false); + Action::manager().store(s->name() + std::string(": Texture Repeat."), s->id()); + } } else { - if (ImGui::Selectable( ICON_FA_TH " Mirror " )) + if (ImGui::Selectable( ICON_FA_TH " Mirror " )){ s->setTextureMirrored(true); + Action::manager().store(s->name() + std::string(": Texture Mirror."), s->id()); + } } ImGui::Separator(); diff --git a/View.cpp b/View.cpp index 3e39956..498bd55 100644 --- a/View.cpp +++ b/View.cpp @@ -263,3 +263,13 @@ void View::updateSelectionOverlay() overlay_selection_->scale_ = glm::vec3(0.f, 0.f, 1.f); } + +void View::lock(Source *s, bool on) +{ + s->setLocked(on); + if (on) + Action::manager().store(s->name() + std::string(" lock."), s->id()); + else + Action::manager().store(s->name() + std::string(" unlock."), s->id()); +} + diff --git a/View.h b/View.h index c21db46..a9a54e6 100644 --- a/View.h +++ b/View.h @@ -80,7 +80,7 @@ public: return Cursor (); } - // test mouse over provided a point in screen coordinates + //TODO: test mouse over provided a point in screen coordinates virtual Cursor over (glm::vec2) { return Cursor (); } @@ -120,6 +120,7 @@ protected: } ContextMenu; ContextMenu show_context_menu_; inline void openContextMenu (ContextMenu m) { show_context_menu_ = m; } + void lock(Source *s, bool on); };