From 82bdd42a475d240bb08e201a47b0972d0b2862a6 Mon Sep 17 00:00:00 2001 From: Aleks Kissinger Date: Tue, 19 Dec 2017 23:02:35 +0000 Subject: undo move works --- tikzit/src/gui/mainmenu.cpp | 6 ++++-- tikzit/src/gui/mainwindow.cpp | 5 +++++ tikzit/src/gui/mainwindow.h | 1 + tikzit/src/gui/undocommands.cpp | 18 ++++++++++++++++-- 4 files changed, 26 insertions(+), 4 deletions(-) diff --git a/tikzit/src/gui/mainmenu.cpp b/tikzit/src/gui/mainmenu.cpp index 6c8f395..c9e83ba 100644 --- a/tikzit/src/gui/mainmenu.cpp +++ b/tikzit/src/gui/mainmenu.cpp @@ -36,12 +36,14 @@ void MainMenu::on_actionSave_As_triggered() // Edit void MainMenu::on_actionUndo_triggered() { - // TODO + if (tikzit->activeWindow() != 0) + tikzit->activeWindow()->tikzDocument()->undoStack()->undo(); } void MainMenu::on_actionRedo_triggered() { - // TODO + if (tikzit->activeWindow() != 0) + tikzit->activeWindow()->tikzDocument()->undoStack()->redo(); } void MainMenu::on_actionCut_triggered() diff --git a/tikzit/src/gui/mainwindow.cpp b/tikzit/src/gui/mainwindow.cpp index 740c0eb..19b6a59 100644 --- a/tikzit/src/gui/mainwindow.cpp +++ b/tikzit/src/gui/mainwindow.cpp @@ -71,6 +71,11 @@ void MainWindow::changeEvent(QEvent *event) QMainWindow::changeEvent(event); } +TikzDocument *MainWindow::tikzDocument() const +{ + return _tikzDocument; +} + TikzScene *MainWindow::tikzScene() const { return _tikzScene; diff --git a/tikzit/src/gui/mainwindow.h b/tikzit/src/gui/mainwindow.h index 4af3357..f27677a 100644 --- a/tikzit/src/gui/mainwindow.h +++ b/tikzit/src/gui/mainwindow.h @@ -30,6 +30,7 @@ public: int windowId() const; TikzView *tikzView() const; TikzScene *tikzScene() const; + TikzDocument *tikzDocument() const; protected: void closeEvent(QCloseEvent *event); diff --git a/tikzit/src/gui/undocommands.cpp b/tikzit/src/gui/undocommands.cpp index 6d48fc4..b8a045b 100644 --- a/tikzit/src/gui/undocommands.cpp +++ b/tikzit/src/gui/undocommands.cpp @@ -15,15 +15,29 @@ MoveCommand::MoveCommand(TikzScene *scene, void MoveCommand::undo() { foreach (NodeItem *ni, _scene->nodeItems()) { - if (_oldNodePositions.contains(ni->node())) + if (_oldNodePositions.contains(ni->node())) { ni->node()->setPoint(_oldNodePositions.value(ni->node())); + ni->readPos(); + } + } + + foreach (EdgeItem *ei, _scene->edgeItems()) { + ei->edge()->updateControls(); + ei->syncPos(); } } void MoveCommand::redo() { foreach (NodeItem *ni, _scene->nodeItems()) { - if (_newNodePositions.contains(ni->node())) + if (_newNodePositions.contains(ni->node())) { ni->node()->setPoint(_newNodePositions.value(ni->node())); + ni->readPos(); + } + } + + foreach (EdgeItem *ei, _scene->edgeItems()) { + ei->edge()->updateControls(); + ei->syncPos(); } } -- cgit v1.2.3