logic: UndoRedo

UndoRedo working for ActiveTokensMessages
This commit is contained in:
Andreas Stallinger
2015-02-03 10:47:56 +01:00
parent 00f15a2ce3
commit 944554d034
27 changed files with 588 additions and 2 deletions
@@ -0,0 +1,64 @@
#ifndef UNDO_REDO_CONTROLLER_H
#define UNDO_REDO_CONTROLLER_H
#include <deque>
#include <memory>
#include <stack>
#include <string>
#include "component/controller/Controller.h"
#include "utility/messaging/MessageBase.h"
#include "utility/messaging/MessageListener.h"
#include "utility/messaging/type/MessageActivateTokens.h"
#include "utility/messaging/type/MessageGraphNodeExpand.h"
#include "utility/messaging/type/MessageGraphNodeMove.h"
#include "utility/messaging/type/MessageRedo.h"
#include "utility/messaging/type/MessageUndo.h"
class UndoRedoView;
struct UndoContainer
{
MessageBase* message;
std::vector<MessageBase*> subMessages;
};
class UndoRedoController
: public Controller
, public MessageListener<MessageActivateTokens>
, public MessageListener<MessageGraphNodeExpand>
, public MessageListener<MessageGraphNodeMove>
, public MessageListener<MessageRedo>
, public MessageListener<MessageUndo>
{
public:
UndoRedoController(void);
virtual ~UndoRedoController(void);
UndoRedoView* getView();
private:
enum UndoRedoType
{
UndoRedoType_Normal,
UndoRedoType_Undo,
UndoRedoType_Redo
};
virtual void handleMessage(MessageActivateTokens* message);
virtual void handleMessage(MessageGraphNodeExpand* message);
virtual void handleMessage(MessageGraphNodeMove* message);
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);
MessageBase* m_lastCommand;
std::deque<MessageBase*> m_undo;
std::deque<MessageBase*> m_redo;
};
#endif // UNDO_REDO_CONTROLLER_H