#ifndef GRAPH_CONTROLLER_H #define GRAPH_CONTROLLER_H #include #include "utility/messaging/MessageListener.h" #include "utility/messaging/type/MessageActivateTokens.h" #include "utility/messaging/type/MessageFinishedParsing.h" #include "utility/messaging/type/MessageGraphNodeExpand.h" #include "utility/messaging/type/MessageGraphNodeMove.h" #include "component/controller/Controller.h" #include "component/controller/GraphLayouter.h" #include "component/view/GraphView.h" struct DummyNode; struct DummyEdge; class Graph; class Node; class StorageAccess; class GraphController : public Controller , public MessageListener , public MessageListener , public MessageListener , public MessageListener { public: GraphController(StorageAccess* storageAccess); ~GraphController(); private: virtual void handleMessage(MessageActivateTokens* message); virtual void handleMessage(MessageFinishedParsing* message); virtual void handleMessage(MessageGraphNodeExpand* message); virtual void handleMessage(MessageGraphNodeMove* message); GraphView* getView() const; void setActiveTokenIds(const std::vector& activeTokenIds); void createDummyGraphForTokenIds(const std::vector& tokenIds); DummyNode createDummyNodeTopDown(Node* node); void autoExpandActiveNode(const std::vector& activeTokenIds); void setActiveAndVisibility(const std::vector& activeTokenIds); void setNodeActiveRecursive(DummyNode& node, const std::vector& activeTokenIds) const; bool setNodeVisibilityRecursiveBottomUp(DummyNode& node, bool aggregated) const; void setNodeVisibilityRecursiveTopDown(DummyNode& node) const; void layoutNesting(); void layoutNestingRecursive(DummyNode& node) const; DummyNode* findDummyNodeRecursive(std::vector& nodes, Id tokenId); DummyNode* findDummyNodeAccessRecursive(std::vector& nodes, Id parentId, TokenComponentAccess::AccessType type); StorageAccess* m_storageAccess; std::vector m_dummyNodes; std::vector m_dummyEdges; std::vector m_activeTokenIds; std::vector m_currentActiveTokenIds; }; #endif // GRAPH_CONTROLLER_H