#ifndef GRAPH_CONTROLLER_H #define GRAPH_CONTROLLER_H #include #include #include "MessageListener.h" #include "MessageActivateErrors.h" #include "MessageActivateFullTextSearch.h" #include "MessageActivateLegend.h" #include "MessageActivateOverview.h" #include "MessageActivateTokens.h" #include "MessageActivateTrail.h" #include "MessageActivateTrailEdge.h" #include "MessageFlushUpdates.h" #include "MessageFocusIn.h" #include "MessageFocusOut.h" #include "MessageGraphNodeBundleSplit.h" #include "MessageGraphNodeExpand.h" #include "MessageGraphNodeHide.h" #include "MessageGraphNodeMove.h" #include "MessageScrollGraph.h" #include "MessageShowReference.h" #include "Controller.h" #include "DummyEdge.h" #include "DummyNode.h" #include "GraphView.h" #include "Node.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 MessageListener , public MessageListener { public: GraphController(StorageAccess* storageAccess); ~GraphController() = default; Id getSchedulerId() const override; private: void handleMessage(MessageActivateErrors* message) override; void handleMessage(MessageActivateFullTextSearch* message) override; void handleMessage(MessageActivateLegend* message) override; void handleMessage(MessageActivateOverview* message) override; void handleMessage(MessageActivateTokens* message) override; void handleMessage(MessageActivateTrail* message) override; void handleMessage(MessageActivateTrailEdge* message) override; void handleMessage(MessageFlushUpdates* message) override; void handleMessage(MessageFocusIn* message) override; void handleMessage(MessageFocusOut* message) override; void handleMessage(MessageGraphNodeBundleSplit* message) override; void handleMessage(MessageGraphNodeExpand* message) override; void handleMessage(MessageGraphNodeHide* message) override; void handleMessage(MessageGraphNodeMove* message) override; void handleMessage(MessageScrollGraph* message) override; void handleMessage(MessageShowReference* message) override; GraphView* getView() const; void clear() override; void createDummyGraph(const std::shared_ptr graph); void createDummyGraphAndSetActiveAndVisibility( const std::vector& tokenIds, const std::shared_ptr graph, bool keepExpandedNodesExpanded); std::vector> createDummyNodeTopDown(Node* node, Id ancestorId); void updateDummyNodeNamesAndAddQualifiers(const std::vector>& dummyNodes); 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); bool setNodeActiveRecursive(DummyNode* node, const std::vector& activeTokenIds) const; bool setNodeVisibilityRecursiveBottomUp(DummyNode* node, bool noActive) const; void setNodeVisibilityRecursiveTopDown(DummyNode* node, bool parentExpanded) const; void hideBuiltinTypes(); void bundleNodes(); void bundleNodesAndEdgesMatching( std::function matcher, size_t count, bool countConnectedNodes, const std::wstring& name); std::shared_ptr bundleNodesMatching( std::list>& nodes, std::function matcher, const std::wstring& name); std::shared_ptr bundleByType( std::list>& nodes, const NodeType& type, const Tree& bundleInfoTree, const bool considerInvisibleNodes); void bundleNodesByType(); void addCharacterIndex(); bool hasCharacterIndex() const; void groupNodesByParents(GroupType groupType); DummyNode* groupAllNodes(GroupType groupType, Id groupNodeId); void groupTrailNodes(GroupType groupType); void layoutNesting(); void extendEqualFunctionNames(const std::vector>& nodes) const; Vec4i layoutNestingRecursive(DummyNode* node, int relayoutAccessMaxWidth = -1) const; void addExpandToggleNode(DummyNode* node) const; void layoutToGrid(DummyNode* node) const; void layoutGraph(bool getSortedNodes = false); void layoutList(); void layoutTrail(bool horizontal, bool hasOrigin); void assignBundleIds(); std::shared_ptr getDummyGraphNodeById(Id tokenId) const; DummyEdge* getDummyGraphEdgeById(Id tokenId) const; void relayoutGraph( MessageBase* message, GraphView::GraphParams params, bool withCharacterIndex, const std::wstring& groupName); void buildGraph(MessageBase* message, GraphView::GraphParams params); void forEachDummyNodeRecursive(std::function func); void forEachDummyEdge(std::function func); void createLegendGraph(); 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; bool m_useBezierEdges = false; bool m_showsLegend = false; }; #endif // GRAPH_CONTROLLER_H