#ifndef QT_GRAPH_VIEW_H #define QT_GRAPH_VIEW_H #include #include #include "component/view/GraphView.h" #include "qt/utility/QtThreadedFunctor.h" #include "utility/types.h" struct DummyEdge; struct DummyNode; class QMouseEvent; class QSequentialAnimationGroup; class QtGraphEdge; class QtGraphicsView; class QtGraphNode; class QtGraphView : public QObject , public GraphView { Q_OBJECT public: QtGraphView(ViewLayout* viewLayout); virtual ~QtGraphView(); // View implementation virtual void createWidgetWrapper(); virtual void initView(); virtual void refreshView(); virtual void rebuildGraph(std::shared_ptr graph, const std::vector& nodes, const std::vector& edges); virtual void clear(); virtual void focusTokenIds(const std::vector& focusedTokenIds); virtual void defocusTokenIds(const std::vector& defocusedTokenIds); virtual void resizeView(); virtual Vec2i getViewSize() const; private slots: void centerScrollBars(); void finishedTransition(); void clickedInEmptySpace(); private: void switchToNewGraphData(); QtGraphicsView* getView() const; void doRebuildGraph(std::shared_ptr graph, const std::vector& nodes, const std::vector& edges); void doClear(); void doResize(); void doRefreshView(); void doFocusIn(const std::vector& tokenIds); void doFocusOut(const std::vector& tokenIds); std::shared_ptr findNodeRecursive(const std::list>& nodes, Id tokenId); std::shared_ptr createNodeRecursive( QGraphicsView* view, std::shared_ptr parentNode, const DummyNode& node, bool multipleActive); std::shared_ptr createEdge(QGraphicsView* view, const DummyEdge& edge); QRectF itemsBoundingRect(const std::list>& items) const; QRectF getSceneRect(const std::list>& items) const; void compareNodesRecursive( std::list> newSubNodes, std::list> oldSubNodes, std::list* appearingNodes, std::list* vanishingNodes, std::vector>* remainingNodes); void createTransition(); QtThreadedFunctor, const std::vector&, const std::vector&> m_rebuildGraphFunctor; QtThreadedFunctor m_clearFunctor; QtThreadedFunctor m_resizeFunctor; QtThreadedFunctor m_refreshFunctor; QtThreadedFunctor&> m_focusInFunctor; QtThreadedFunctor&> m_focusOutFunctor; std::shared_ptr m_graph; std::shared_ptr m_oldGraph; std::list> m_edges; std::list> m_oldEdges; std::list> m_nodes; std::list> m_oldNodes; std::shared_ptr m_transition; QPointF m_sceneRectOffset; }; #endif // QT_GRAPH_VIEW_H