diff options
author | Aleks Kissinger <aleks0@gmail.com> | 2017-12-27 23:27:20 +0000 |
---|---|---|
committer | Aleks Kissinger <aleks0@gmail.com> | 2017-12-27 23:27:20 +0000 |
commit | c63dd506beefa844ddeab587a71af94063357372 (patch) | |
tree | aed5f5d1e6c0cca3866bec6fa1818b2fc8f883d7 /tikzit/src/gui/tikzscene.cpp | |
parent | fcc0fc080370c0c8e97a0c07043b83240d973cab (diff) |
adding and deleting nodes now works
Diffstat (limited to 'tikzit/src/gui/tikzscene.cpp')
-rw-r--r-- | tikzit/src/gui/tikzscene.cpp | 65 |
1 files changed, 55 insertions, 10 deletions
diff --git a/tikzit/src/gui/tikzscene.cpp b/tikzit/src/gui/tikzscene.cpp index a900192..2d9b49f 100644 --- a/tikzit/src/gui/tikzscene.cpp +++ b/tikzit/src/gui/tikzscene.cpp @@ -17,7 +17,7 @@ TikzScene::TikzScene(TikzDocument *tikzDocument, QObject *parent) : TikzScene::~TikzScene() { } -Graph *TikzScene::graph() const +Graph *TikzScene::graph() { return _tikzDocument->graph(); } @@ -38,13 +38,13 @@ void TikzScene::graphReplaced() foreach (Edge *e, graph()->edges()) { EdgeItem *ei = new EdgeItem(e); - _edgeItems << ei; + _edgeItems.insert(e, ei); addItem(ei); } foreach (Node *n, graph()->nodes()) { NodeItem *ni = new NodeItem(n); - _nodeItems << ni; + _nodeItems.insert(n, ni); addItem(ni); } } @@ -267,7 +267,14 @@ void TikzScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) break; case ToolPalette::VERTEX: - // TODO + { + int gridSize = GLOBAL_SCALE / 8; + QPointF gridPos(round(mousePos.x()/gridSize)*gridSize, round(mousePos.y()/gridSize)*gridSize); + Node *n = new Node(); + n->setPoint(fromScreen(gridPos)); + AddNodeCommand *cmd = new AddNodeCommand(this, n); + _tikzDocument->undoStack()->push(cmd); + } break; case ToolPalette::EDGE: break; @@ -276,6 +283,44 @@ void TikzScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) } } +void TikzScene::keyReleaseEvent(QKeyEvent *event) +{ + if (event->key() == Qt::Key_Backspace || event->key() == Qt::Key_Delete) { + QSet<Node*> selNodes; + QSet<Edge*> selEdges; + getSelection(selNodes, selEdges); + + QMap<int,Node*> deleteNodes; + QMap<int,Edge*> deleteEdges; + + for (int i = 0; i < _tikzDocument->graph()->nodes().length(); ++i) { + Node *n = _tikzDocument->graph()->nodes()[i]; + if (selNodes.contains(n)) deleteNodes.insert(i, n); + } + + for (int i = 0; i < _tikzDocument->graph()->edges().length(); ++i) { + Edge *e = _tikzDocument->graph()->edges()[i]; + if (selEdges.contains(e) || + selNodes.contains(e->source()) || + selNodes.contains(e->target())) deleteEdges.insert(i, e); + } + + //qDebug() << "nodes:" << deleteNodes; + //qDebug() << "edges:" << deleteEdges; + DeleteCommand *cmd = new DeleteCommand(this, deleteNodes, deleteEdges, selEdges); + _tikzDocument->undoStack()->push(cmd); + } +} + +void TikzScene::getSelection(QSet<Node *> &selNodes, QSet<Edge *> &selEdges) +{ + foreach (QGraphicsItem *gi, selectedItems()) { + if (NodeItem *ni = dynamic_cast<NodeItem*>(gi)) selNodes << ni->node(); + if (EdgeItem *ei = dynamic_cast<EdgeItem*>(gi)) selEdges << ei->edge(); + } +} + + TikzDocument *TikzScene::tikzDocument() const { return _tikzDocument; @@ -287,11 +332,6 @@ void TikzScene::setTikzDocument(TikzDocument *tikzDocument) graphReplaced(); } -QVector<EdgeItem *> TikzScene::edgeItems() const -{ - return _edgeItems; -} - void TikzScene::refreshAdjacentEdges(QList<Node*> nodes) { if (nodes.empty()) return; @@ -303,7 +343,12 @@ void TikzScene::refreshAdjacentEdges(QList<Node*> nodes) } } -QVector<NodeItem *> TikzScene::nodeItems() const +QMap<Node*,NodeItem *> &TikzScene::nodeItems() { return _nodeItems; } + +QMap<Edge*,EdgeItem*> &TikzScene::edgeItems() +{ + return _edgeItems; +} |