#include "tikzit.h" #include "tikzscene.h" #include #include #include TikzScene::TikzScene(Graph *graph, QObject *parent) : QGraphicsScene(parent), _graph(graph) { } TikzScene::~TikzScene() { } Graph *TikzScene::graph() const { return _graph; } void TikzScene::setGraph(Graph *graph) { _graph = graph; graphReplaced(); } void TikzScene::graphReplaced() { foreach (NodeItem *ni, _nodeItems) { removeItem(ni); delete ni; } _nodeItems.clear(); foreach (EdgeItem *ei, _edgeItems) { removeItem(ei); delete ei; } _edgeItems.clear(); foreach (Edge *e, _graph->edges()) { EdgeItem *ei = new EdgeItem(e); _edgeItems << ei; addItem(ei); } foreach (Node *n, _graph->nodes()) { NodeItem *ni = new NodeItem(n); _nodeItems << ni; addItem(ni); } } void TikzScene::mousePressEvent(QGraphicsSceneMouseEvent *event) { QPointF mousePos(event->buttonDownScenePos(Qt::LeftButton).x(), event->buttonDownScenePos(Qt::LeftButton).y()); switch (tikzit->toolPalette()->currentTool()) { case ToolPalette::SELECT: // TODO: check if we grabbed a control point QGraphicsScene::mousePressEvent(event); if (!selectedItems().empty() && !items(mousePos).empty()) { _oldNodePositions.clear(); foreach (QGraphicsItem *gi, selectedItems()) { if (NodeItem *ni = dynamic_cast(gi)) { _oldNodePositions.insert(ni->node(), ni->node()->point()); } } qDebug() << "I am dragging"; } break; case ToolPalette::VERTEX: break; case ToolPalette::EDGE: break; case ToolPalette::CROP: break; } } void TikzScene::mouseMoveEvent(QGraphicsSceneMouseEvent *event) { switch (tikzit->toolPalette()->currentTool()) { case ToolPalette::SELECT: QGraphicsScene::mouseMoveEvent(event); break; case ToolPalette::VERTEX: break; case ToolPalette::EDGE: break; case ToolPalette::CROP: break; } // TODO: only sync edges that change foreach (EdgeItem *ei, _edgeItems) { ei->edge()->updateControls(); ei->syncPos(); } } void TikzScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { switch (tikzit->toolPalette()->currentTool()) { case ToolPalette::SELECT: QGraphicsScene::mouseReleaseEvent(event); if (!_oldNodePositions.empty()) { QMap newNodePositions; foreach (QGraphicsItem *gi, selectedItems()) { if (NodeItem *ni = dynamic_cast(gi)) { ni->writePos(); newNodePositions.insert(ni->node(), ni->node()->point()); } } qDebug() << _oldNodePositions; qDebug() << newNodePositions; _oldNodePositions.clear(); } break; case ToolPalette::VERTEX: break; case ToolPalette::EDGE: break; case ToolPalette::CROP: break; } } QVector TikzScene::edgeItems() const { return _edgeItems; } QVector TikzScene::nodeItems() const { return _nodeItems; }