From b00c5250d7a56b6d20980d89cf331a114fdfdee0 Mon Sep 17 00:00:00 2001 From: Aleks Kissinger Date: Sat, 21 Apr 2018 22:53:05 +0200 Subject: edge styles 90 percent --- src/gui/undocommands.cpp | 39 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 36 insertions(+), 3 deletions(-) (limited to 'src/gui/undocommands.cpp') diff --git a/src/gui/undocommands.cpp b/src/gui/undocommands.cpp index baa8c0e..5ce6941 100644 --- a/src/gui/undocommands.cpp +++ b/src/gui/undocommands.cpp @@ -130,6 +130,7 @@ void DeleteCommand::undo() for (auto it = _deleteEdges.begin(); it != _deleteEdges.end(); ++it) { Edge *e = it.value(); + e->attachStyle(); _scene->graph()->addEdge(e, it.key()); EdgeItem *ei = new EdgeItem(e); _scene->edgeItems().insert(e, ei); @@ -185,7 +186,7 @@ void AddNodeCommand::undo() void AddNodeCommand::redo() { - _node->attachStyle(); // in case styles have changed + _node->attachStyle(); // do for every redo, in case styles have changed _scene->graph()->addNode(_node); NodeItem *ni = new NodeItem(_node); _scene->nodeItems().insert(_node, ni); @@ -214,12 +215,13 @@ void AddEdgeCommand::undo() void AddEdgeCommand::redo() { - // TODO: get the current style + _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()]); @@ -235,7 +237,8 @@ ChangeEdgeModeCommand::ChangeEdgeModeCommand(TikzScene *scene, Edge *edge, QUndo void ChangeEdgeModeCommand::undo() { - _edge->setBasicBendMode(!_edge->basicBendMode()); + // FIXME: this act strangely sometimes + _edge->setBasicBendMode(!_edge->basicBendMode()); _scene->edgeItems()[_edge]->readPos(); GraphUpdateCommand::undo(); } @@ -276,6 +279,35 @@ void ApplyStyleToNodesCommand::redo() GraphUpdateCommand::redo(); } +ApplyStyleToEdgesCommand::ApplyStyleToEdgesCommand(TikzScene *scene, QString style, QUndoCommand *parent) : + GraphUpdateCommand(scene, parent), _style(style), _oldStyles() +{ + foreach(QGraphicsItem *it, scene->selectedItems()) { + if (EdgeItem *ei = dynamic_cast(it)) { + _oldStyles.insert(ei->edge(), ei->edge()->styleName()); + } + } +} + +void ApplyStyleToEdgesCommand::undo() +{ + foreach(Edge *e, _oldStyles.keys()) { + e->setStyleName(_oldStyles[e]); + e->attachStyle(); + } + + GraphUpdateCommand::undo(); +} + +void ApplyStyleToEdgesCommand::redo() +{ + foreach(Edge *e, _oldStyles.keys()) { + e->setStyleName(_style); + e->attachStyle(); + } + GraphUpdateCommand::redo(); +} + PasteCommand::PasteCommand(TikzScene *scene, Graph *graph, QUndoCommand *parent) : GraphUpdateCommand(scene, parent), _graph(graph) { @@ -316,6 +348,7 @@ void PasteCommand::redo() _scene->graph()->insertGraph(_graph); foreach (Edge *e, _graph->edges()) { + e->attachStyle(); // in case styles have changed EdgeItem *ei = new EdgeItem(e); _scene->edgeItems().insert(e, ei); _scene->addItem(ei); -- cgit v1.2.3