/*! * Manage the scene, which contains a single Graph, and respond to user input. This serves as * the controller for the MVC (TikzDocument, TikzView, TikzScene). */ #ifndef TIKZSCENE_H #define TIKZSCENE_H #include "graph.h" #include "nodeitem.h" #include "edgeitem.h" #include "tikzdocument.h" #include "toolpalette.h" #include #include #include #include #include #include #include class TikzScene : public QGraphicsScene { Q_OBJECT public: TikzScene(TikzDocument *tikzDocument, ToolPalette *tools, QObject *parent); ~TikzScene(); Graph *graph(); QMap &nodeItems(); QMap &edgeItems(); void refreshAdjacentEdges(QList nodes); void setBounds(QRectF bounds); TikzDocument *tikzDocument() const; void setTikzDocument(TikzDocument *tikzDocument); public slots: void graphReplaced(); protected: void mousePressEvent(QGraphicsSceneMouseEvent *event) override; void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override; void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override; void keyReleaseEvent(QKeyEvent *event) override; void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) override; private: TikzDocument *_tikzDocument; ToolPalette *_tools; QMap _nodeItems; QMap _edgeItems; QGraphicsLineItem *_drawEdgeItem; EdgeItem *_modifyEdgeItem; NodeItem *_edgeStartNodeItem; NodeItem *_edgeEndNodeItem; bool _firstControlPoint; QMap _oldNodePositions; float _oldWeight; int _oldBend; int _oldInAngle; int _oldOutAngle; void getSelection(QSet &selNodes, QSet &selEdges); }; #endif // TIKZSCENE_H