diff --git a/src/lib/component/controller/UndoRedoController.cpp b/src/lib/component/controller/UndoRedoController.cpp index a7e72177..4747de54 100644 --- a/src/lib/component/controller/UndoRedoController.cpp +++ b/src/lib/component/controller/UndoRedoController.cpp @@ -15,14 +15,6 @@ UndoRedoController::UndoRedoController() UndoRedoController::~UndoRedoController() { - for(MessageBase* m : m_redo) - { - delete m; - } - for(MessageBase* m : m_undo) - { - delete m; - } } UndoRedoView* UndoRedoController::getView() @@ -32,12 +24,9 @@ UndoRedoView* UndoRedoController::getView() void UndoRedoController::handleMessage(MessageActivateTokens* message) { - MessageActivateTokens* m = new MessageActivateTokens(message->tokenIds); - m->isAggregation = message->isAggregation; - m->isEdge = message->isEdge; - m->UndoRedoType = message->UndoRedoType; - - processMessage(m); + std::shared_ptr m = std::shared_ptr(new MessageActivateTokens(*message)); + std::shared_ptr msg = m; + processMessage(msg); } void UndoRedoController::handleMessage(MessageGraphNodeExpand* message) @@ -58,11 +47,10 @@ void UndoRedoController::handleMessage(MessageRedo* message) { if(!m_redo.empty()) { - MessageBase* m = m_redo.back(); + std::shared_ptr m = m_redo.back(); m_redo.pop_back(); m->UndoRedoType = MessageBase::UndoType_Redo; m->dispatch(); - delete m; } } @@ -70,15 +58,14 @@ void UndoRedoController::handleMessage(MessageUndo* message) { if(!m_undo.empty()) { - MessageBase* m = m_undo.back(); + std::shared_ptr m = m_undo.back(); m_undo.pop_back(); m->UndoRedoType = MessageBase::UndoType_Undo; m->dispatch(); - delete m; } } -void UndoRedoController::processMessage(MessageBase* message) +void UndoRedoController::processMessage(std::shared_ptr message) { switch(message->UndoRedoType) { @@ -95,7 +82,7 @@ void UndoRedoController::processMessage(MessageBase* message) } -void UndoRedoController::processNormalMessage(MessageBase* message) +void UndoRedoController::processNormalMessage(std::shared_ptr message) { if(m_lastCommand != nullptr) { @@ -105,14 +92,13 @@ void UndoRedoController::processNormalMessage(MessageBase* message) m_lastCommand = message; while(!m_redo.empty()) { - MessageBase* m = m_redo.back(); + std::shared_ptr m = m_redo.back(); m_redo.pop_back(); - delete m; } getView()->setRedoButtonEnabled(false); } -void UndoRedoController::processRedoMessage(MessageBase* message) +void UndoRedoController::processRedoMessage(std::shared_ptr message) { m_undo.push_back(m_lastCommand); getView()->setUndoButtonEnabled(true); @@ -123,7 +109,7 @@ void UndoRedoController::processRedoMessage(MessageBase* message) } } -void UndoRedoController::processUndoMessage(MessageBase* message) +void UndoRedoController::processUndoMessage(std::shared_ptr message) { m_redo.push_back(m_lastCommand); getView()->setRedoButtonEnabled(true); diff --git a/src/lib/component/controller/UndoRedoController.h b/src/lib/component/controller/UndoRedoController.h index 3fe7bdad..daf1904e 100644 --- a/src/lib/component/controller/UndoRedoController.h +++ b/src/lib/component/controller/UndoRedoController.h @@ -18,12 +18,6 @@ class UndoRedoView; -struct UndoContainer -{ - MessageBase* message; - std::vector subMessages; -}; - class UndoRedoController : public Controller , public MessageListener @@ -50,15 +44,15 @@ private: virtual void handleMessage(MessageRedo* message); virtual void handleMessage(MessageUndo* message); - void processMessage(MessageBase* message); - void processNormalMessage(MessageBase* message); - void processRedoMessage(MessageBase* message); - void processUndoMessage(MessageBase* message); + void processMessage(std::shared_ptr message); + void processNormalMessage(std::shared_ptr message); + void processRedoMessage(std::shared_ptr message); + void processUndoMessage(std::shared_ptr message); - MessageBase* m_lastCommand; + std::shared_ptr m_lastCommand; - std::deque m_undo; - std::deque m_redo; + std::deque> m_undo; + std::deque> m_redo; }; #endif // UNDO_REDO_CONTROLLER_H