From 0991f31e57567e4b58203df2b87e9f0830f3746e Mon Sep 17 00:00:00 2001 From: maelstrom Date: Tue, 8 Jul 2025 00:50:46 +0200 Subject: [PATCH] fix(editor): undo state for moving objects in the explorer --- editor/panes/explorermodel.cpp | 8 ++++++++ editor/panes/explorerview.cpp | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/editor/panes/explorermodel.cpp b/editor/panes/explorermodel.cpp index 5462f63..5137eb2 100644 --- a/editor/panes/explorermodel.cpp +++ b/editor/panes/explorermodel.cpp @@ -1,11 +1,15 @@ #include "explorermodel.h" #include "common.h" +#include "mainwindow.h" #include "objects/base/instance.h" #include "objects/base/member.h" +#include "undohistory.h" #include #include #include +#define M_mainWindow dynamic_cast(dynamic_cast(dynamic_cast(this)->parent())->window()) + // https://doc.qt.io/qt-6/qtwidgets-itemviews-simpletreemodel-example.html#testing-the-model std::map instanceIconCache; @@ -216,11 +220,15 @@ bool ExplorerModel::dropMimeData(const QMimeData *data, Qt::DropAction action, i return true; } + UndoState historyState; std::shared_ptr parentInst = fromIndex(parent); for (std::shared_ptr instance : slot->instances) { + historyState.push_back(UndoStateInstanceReparented { instance, instance->GetParent().value_or(nullptr), parentInst }); instance->SetParent(parentInst); } + M_mainWindow->undoManager.PushState(historyState); + delete slot; return true; } diff --git a/editor/panes/explorerview.cpp b/editor/panes/explorerview.cpp index b5dd852..167bb65 100644 --- a/editor/panes/explorerview.cpp +++ b/editor/panes/explorerview.cpp @@ -15,7 +15,7 @@ ExplorerView::ExplorerView(QWidget* parent): QTreeView(parent), - model(ExplorerModel(std::dynamic_pointer_cast(gDataModel))), + model(ExplorerModel(std::dynamic_pointer_cast(gDataModel), this)), contextMenu(this) { this->setModel(&model);