diff options
author | Aleks Kissinger <aleks0@gmail.com> | 2019-01-18 15:30:10 +0100 |
---|---|---|
committer | Aleks Kissinger <aleks0@gmail.com> | 2019-01-18 15:30:10 +0100 |
commit | 15d97051f0b5105a2765fc068ae980e36195434c (patch) | |
tree | 30dc3b710fb69d5a2d03f549c092e523536943a1 /src/gui/undocommands.cpp | |
parent | 8a46efa89b20ee2e509877a6e7fb1591360fb6f7 (diff) |
fixed CTRL key bug and added option to auto-select new edges
Diffstat (limited to 'src/gui/undocommands.cpp')
-rw-r--r-- | src/gui/undocommands.cpp | 31 |
1 files changed, 26 insertions, 5 deletions
diff --git a/src/gui/undocommands.cpp b/src/gui/undocommands.cpp index 91509ed..8ad15d0 100644 --- a/src/gui/undocommands.cpp +++ b/src/gui/undocommands.cpp @@ -20,6 +20,7 @@ #include "nodeitem.h" #include "edgeitem.h" +#include <QApplication> #include <QGraphicsView> GraphUpdateCommand::GraphUpdateCommand(TikzScene *scene, QUndoCommand *parent) : QUndoCommand(parent), _scene(scene) @@ -217,8 +218,14 @@ void AddNodeCommand::redo() GraphUpdateCommand::redo(); } -AddEdgeCommand::AddEdgeCommand(TikzScene *scene, Edge *edge, QUndoCommand *parent) : - GraphUpdateCommand(scene, parent), _edge(edge) +AddEdgeCommand::AddEdgeCommand(TikzScene *scene, + Edge *edge, + bool selectEdge, + QSet<Node*> selNodes, + QSet<Edge*> selEdges, + QUndoCommand *parent) : + GraphUpdateCommand(scene, parent), _edge(edge), + _selectEdge(selectEdge), _selNodes(selNodes), _selEdges(selEdges) { } @@ -231,24 +238,38 @@ void AddEdgeCommand::undo() _scene->graph()->removeEdge(_edge); _scene->refreshZIndices(); + + if (_selectEdge) { + foreach (NodeItem *ni, _scene->nodeItems()) { + ni->setSelected(_selNodes.contains(ni->node())); + } + + foreach (EdgeItem *ei, _scene->edgeItems()) { + ei->setSelected(_selEdges.contains(ei->edge())); + } + } + GraphUpdateCommand::undo(); } void AddEdgeCommand::redo() { - _edge->attachStyle(); // do for every redo, in case styles have changed + _edge->attachStyle(); // do for every redo, in case styles have changed _scene->graph()->addEdge(_edge); EdgeItem *ei = new EdgeItem(_edge); _scene->edgeItems().insert(_edge, ei); _scene->addItem(ei); - // TODO: deal consistently with stacking order - // edges should always be stacked below nodes if (!_scene->graph()->nodes().isEmpty()) { ei->stackBefore(_scene->nodeItems()[_scene->graph()->nodes().first()]); } _scene->refreshZIndices(); + + if (_selectEdge) { + _scene->clearSelection(); + ei->setSelected(true); + } GraphUpdateCommand::redo(); } |