#ifndef GRAPH_CONTROLLER_H #define GRAPH_CONTROLLER_H #include #include #include "utility/messaging/MessageListener.h" #include "utility/messaging/type/MessageActivateAll.h" #include "utility/messaging/type/MessageActivateTokens.h" #include "utility/messaging/type/MessageActivateTrail.h" #include "utility/messaging/type/MessageColorSchemeTest.h" #include "utility/messaging/type/MessageFlushUpdates.h" #include "utility/messaging/type/MessageFocusIn.h" #include "utility/messaging/type/MessageFocusOut.h" #include "utility/messaging/type/MessageGraphNodeBundleSplit.h" #include "utility/messaging/type/MessageGraphNodeExpand.h" #include "utility/messaging/type/MessageGraphNodeMove.h" #include "utility/messaging/type/MessageScrollGraph.h" #include "utility/messaging/type/MessageSearchFullText.h" #include "utility/messaging/type/MessageShowErrors.h" #include "utility/messaging/type/MessageShowReference.h" #include "component/controller/Controller.h" #include "component/controller/helper/DummyEdge.h" #include "component/controller/helper/DummyNode.h" #include "component/view/GraphView.h" #include "data/graph/Node.h" #include "data/graph/token_component/TokenComponentAccess.h" #include "data/graph/token_component/TokenComponentAggregation.h" class Graph; class StorageAccess; class GraphController : public Controller , public MessageListener , public MessageListener , public MessageListener , public MessageListener , public MessageListener , public MessageListener , public MessageListener , public MessageListener , public MessageListener , public MessageListener , public MessageListener , public MessageListener , public MessageListener , public MessageListener { public: GraphController(StorageAccess* storageAccess); ~GraphController(); private: virtual void handleMessage(MessageActivateAll* message); virtual void handleMessage(MessageActivateTokens* message); virtual void handleMessage(MessageActivateTrail* message); virtual void handleMessage(MessageFlushUpdates* message); virtual void handleMessage(MessageFocusIn* message); virtual void handleMessage(MessageFocusOut* message); virtual void handleMessage(MessageGraphNodeBundleSplit* message); virtual void handleMessage(MessageGraphNodeExpand* message); virtual void handleMessage(MessageGraphNodeMove* message); virtual void handleMessage(MessageScrollGraph* message); virtual void handleMessage(MessageSearchFullText* message); virtual void handleMessage(MessageShowErrors* message); virtual void handleMessage(MessageShowReference* message); GraphView* getView() const; virtual void clear(); void createDummyGraphForTokenIds(const std::vector& tokenIds, const std::shared_ptr graph); void createDummyGraphForTokenIdsAndSetActiveAndVisibility( const std::vector& tokenIds, const std::shared_ptr graph); std::vector> createDummyNodeTopDown(Node* node, Id ancestorId); std::vector getExpandedNodeIds() const; void setExpandedNodeIds(const std::vector& nodeIds); void autoExpandActiveNode(const std::vector& activeTokenIds); bool setActive(const std::vector& activeTokenIds, bool showAllEdges); void setVisibility(bool noActive); void setActiveAndVisibility(const std::vector& activeTokenIds); void setNodeActiveRecursive(DummyNode* node, const std::vector& activeTokenIds, bool* noActive) const; void removeImplicitChildrenRecursive(DummyNode* node); bool setNodeVisibilityRecursiveBottomUp(DummyNode* node, bool noActive) const; void setNodeVisibilityRecursiveTopDown(DummyNode* node, bool parentExpanded) const; void bundleNodes(); void bundleNodesAndEdgesMatching( std::function matcher, size_t count, bool countConnectedNodes, const std::string& name); std::shared_ptr bundleNodesMatching( std::list>& nodes, std::function matcher, const std::string& name); void bundleByType(std::list>& nodes, Node::NodeType type, const std::string& name); void bundleNodesByType(); void addCharacterIndex(); void layoutNesting(); void layoutNestingRecursive(DummyNode* node) const; void addExpandToggleNode(DummyNode* node) const; void layoutToGrid(DummyNode* node) const; void layoutGraph(bool getSortedNodes = false); void layoutList(); void assignBundleIds(); DummyNode* getDummyGraphNodeById(Id tokenId) const; void buildGraph(MessageBase* message, bool centerActiveNode, bool animatedTransition, bool scrollToTop); void forEachDummyNodeRecursive(std::function func); void forEachDummyEdge(std::function func); virtual void handleMessage(MessageColorSchemeTest* message); StorageAccess* m_storageAccess; std::vector> m_dummyNodes; std::vector> m_dummyEdges; std::map> m_dummyGraphNodes; std::vector m_activeNodeIds; std::vector m_activeEdgeIds; std::shared_ptr m_graph; std::map m_topLevelAncestorIds; }; #endif // GRAPH_CONTROLLER_H