logic: rewrote messages handling token activation for correct restoring on undo

* saving search query to undo stack with MessageSearch
* saving node and edge with name to undo stack with MessageActivateNode and MessageActivateEdge
* added FeatureController that handels distribution of MessageActivateTokens
* clearing views when refreshing or changing project
* clearing undo stack when changing project
* added StorageCache derived from StorageAccessProxy
This commit is contained in:
Eberhard Graether
2015-06-19 00:20:50 +02:00
parent d6269f9608
commit a527a3c34d
47 changed files with 726 additions and 268 deletions
@@ -2,46 +2,53 @@
#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/MessageActivateEdge.h"
#include "utility/messaging/type/MessageActivateFile.h"
#include "utility/messaging/type/MessageActivateNode.h"
#include "utility/messaging/type/MessageGraphNodeExpand.h"
#include "utility/messaging/type/MessageGraphNodeMove.h"
#include "utility/messaging/type/MessageLoadProject.h"
#include "utility/messaging/type/MessageLoadSource.h"
#include "utility/messaging/type/MessageRedo.h"
#include "utility/messaging/type/MessageSearch.h"
#include "utility/messaging/type/MessageUndo.h"
#include "component/controller/Controller.h"
class UndoRedoView;
class UndoRedoController
: public Controller
, public MessageListener<MessageActivateTokens>
, public MessageListener<MessageActivateEdge>
, public MessageListener<MessageActivateFile>
, public MessageListener<MessageActivateNode>
, public MessageListener<MessageGraphNodeExpand>
, public MessageListener<MessageGraphNodeMove>
, public MessageListener<MessageLoadProject>
, public MessageListener<MessageLoadSource>
, public MessageListener<MessageRedo>
, public MessageListener<MessageSearch>
, public MessageListener<MessageUndo>
{
public:
UndoRedoController(void);
virtual ~UndoRedoController(void);
UndoRedoView* getView();
private:
enum UndoRedoType
{
UndoRedoType_Normal,
UndoRedoType_Undo,
UndoRedoType_Redo
};
UndoRedoController();
virtual ~UndoRedoController();
virtual void handleMessage(MessageActivateTokens* message);
UndoRedoView* getView();
private:
virtual void handleMessage(MessageActivateEdge* message);
virtual void handleMessage(MessageActivateFile* message);
virtual void handleMessage(MessageActivateNode* message);
virtual void handleMessage(MessageGraphNodeExpand* message);
virtual void handleMessage(MessageGraphNodeMove* message);
virtual void handleMessage(MessageLoadProject* message);
virtual void handleMessage(MessageLoadSource* message);
virtual void handleMessage(MessageRedo* message);
virtual void handleMessage(MessageSearch* message);
virtual void handleMessage(MessageUndo* message);
void processMessage(std::shared_ptr<MessageBase> message);
@@ -49,6 +56,8 @@ private:
void processRedoMessage(std::shared_ptr<MessageBase> message);
void processUndoMessage(std::shared_ptr<MessageBase> message);
void clear();
std::shared_ptr<MessageBase> m_lastCommand;
std::deque<std::shared_ptr<MessageBase>> m_undo;