diff options
author | Aleks Kissinger <aleks0@gmail.com> | 2018-07-20 11:01:34 +0200 |
---|---|---|
committer | Aleks Kissinger <aleks0@gmail.com> | 2018-07-20 11:01:34 +0200 |
commit | 59eee652c5fea36945a4a8ce2936843bd90d0e1b (patch) | |
tree | effcdbf741a104f71e4fc395993dfbdb6644f6b4 /src/gui/undocommands.cpp | |
parent | 7c4faa67f4b45671884bdccd99d83f92ca655366 (diff) |
...
Diffstat (limited to 'src/gui/undocommands.cpp')
-rw-r--r-- | src/gui/undocommands.cpp | 856 |
1 files changed, 428 insertions, 428 deletions
diff --git a/src/gui/undocommands.cpp b/src/gui/undocommands.cpp index 5525cb7..dc7a797 100644 --- a/src/gui/undocommands.cpp +++ b/src/gui/undocommands.cpp @@ -1,428 +1,428 @@ -/* - TikZiT - a GUI diagram editor for TikZ - Copyright (C) 2018 Aleks Kissinger - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <https://www.gnu.org/licenses/>. -*/ - -#include "undocommands.h" -#include "nodeitem.h" -#include "edgeitem.h" - -#include <QGraphicsView> - -GraphUpdateCommand::GraphUpdateCommand(TikzScene *scene, QUndoCommand *parent) : QUndoCommand(parent), _scene(scene) -{ -} - -void GraphUpdateCommand::undo() -{ - _scene->tikzDocument()->refreshTikz(); - //refreshSceneBounds does nothing - //_scene->refreshSceneBounds(); - _scene->invalidate(); -} - -void GraphUpdateCommand::redo() -{ - _scene->tikzDocument()->refreshTikz(); - //refreshSceneBounds does nothing - //_scene->refreshSceneBounds(); - _scene->invalidate(); -} - - -MoveCommand::MoveCommand(TikzScene *scene, - QMap<Node*, QPointF> oldNodePositions, - QMap<Node*, QPointF> newNodePositions, - QUndoCommand *parent) : - GraphUpdateCommand(scene, parent), - _oldNodePositions(oldNodePositions), - _newNodePositions(newNodePositions) -{} - - -void MoveCommand::undo() -{ - foreach (NodeItem *ni, _scene->nodeItems()) { - if (_oldNodePositions.contains(ni->node())) { - ni->node()->setPoint(_oldNodePositions.value(ni->node())); - ni->readPos(); - } - } - - _scene->refreshAdjacentEdges(_oldNodePositions.keys()); - GraphUpdateCommand::undo(); -} - -void MoveCommand::redo() -{ - foreach (NodeItem *ni, _scene->nodeItems()) { - if (_newNodePositions.contains(ni->node())) { - ni->node()->setPoint(_newNodePositions.value(ni->node())); - ni->readPos(); - } - } - - _scene->refreshAdjacentEdges(_newNodePositions.keys()); - GraphUpdateCommand::redo(); -} - -EdgeBendCommand::EdgeBendCommand(TikzScene *scene, Edge *edge, - float oldWeight, int oldBend, - int oldInAngle, int oldOutAngle, QUndoCommand *parent) : - GraphUpdateCommand(scene, parent), - _edge(edge), - _oldWeight(oldWeight), _oldBend(oldBend), - _oldInAngle(oldInAngle), _oldOutAngle(oldOutAngle) -{ - _newWeight = edge->weight(); - _newBend = edge->bend(); - _newInAngle = edge->inAngle(); - _newOutAngle = edge->outAngle(); -} - -void EdgeBendCommand::undo() -{ - _edge->setWeight(_oldWeight); - _edge->setBend(_oldBend); - _edge->setInAngle(_oldInAngle); - _edge->setOutAngle(_oldOutAngle); - - foreach(EdgeItem *ei, _scene->edgeItems()) { - if (ei->edge() == _edge) { - ei->readPos(); - break; - } - } - GraphUpdateCommand::undo(); -} - -void EdgeBendCommand::redo() -{ - _edge->setWeight(_newWeight); - _edge->setBend(_newBend); - _edge->setInAngle(_newInAngle); - _edge->setOutAngle(_newOutAngle); - - foreach(EdgeItem *ei, _scene->edgeItems()) { - if (ei->edge() == _edge) { - ei->readPos(); - break; - } - } - - GraphUpdateCommand::redo(); -} - -DeleteCommand::DeleteCommand(TikzScene *scene, - QMap<int, Node *> deleteNodes, - QMap<int, Edge *> deleteEdges, - QSet<Edge *> selEdges, QUndoCommand *parent) : - GraphUpdateCommand(scene, parent), - _deleteNodes(deleteNodes), _deleteEdges(deleteEdges), _selEdges(selEdges) -{} - -void DeleteCommand::undo() -{ - for (auto it = _deleteNodes.begin(); it != _deleteNodes.end(); ++it) { - Node *n = it.value(); - n->attachStyle(); // in case styles have changed - _scene->graph()->addNode(n, it.key()); - NodeItem *ni = new NodeItem(n); - _scene->nodeItems().insert(n, ni); - _scene->addItem(ni); - ni->setSelected(true); - } - - 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); - _scene->addItem(ei); - - if (_selEdges.contains(e)) ei->setSelected(true); - } - - GraphUpdateCommand::undo(); -} - -void DeleteCommand::redo() -{ - foreach (Edge *e, _deleteEdges.values()) { - EdgeItem *ei = _scene->edgeItems()[e]; - _scene->edgeItems().remove(e); - _scene->removeItem(ei); - delete ei; - - _scene->graph()->removeEdge(e); - } - - foreach (Node *n, _deleteNodes.values()) { - NodeItem *ni = _scene->nodeItems()[n]; - _scene->nodeItems().remove(n); - _scene->removeItem(ni); - delete ni; - - _scene->graph()->removeNode(n); - } - - GraphUpdateCommand::redo(); -} - -AddNodeCommand::AddNodeCommand(TikzScene *scene, Node *node, QRectF newBounds, QUndoCommand *parent) : - GraphUpdateCommand(scene, parent), _node(node), _oldBounds(_scene->sceneRect()), _newBounds(newBounds) -{ -} - -void AddNodeCommand::undo() -{ - NodeItem *ni = _scene->nodeItems()[_node]; - _scene->removeItem(ni); - _scene->nodeItems().remove(_node); - delete ni; - - _scene->graph()->removeNode(_node); - - //_scene->setBounds(_oldBounds); - - GraphUpdateCommand::undo(); -} - -void AddNodeCommand::redo() -{ - _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); - _scene->addItem(ni); - - //_scene->setBounds(_newBounds); - - GraphUpdateCommand::redo(); -} - -AddEdgeCommand::AddEdgeCommand(TikzScene *scene, Edge *edge, QUndoCommand *parent) : - GraphUpdateCommand(scene, parent), _edge(edge) -{ -} - -void AddEdgeCommand::undo() -{ - EdgeItem *ei = _scene->edgeItems()[_edge]; - _scene->removeItem(ei); - _scene->edgeItems().remove(_edge); - delete ei; - - _scene->graph()->removeEdge(_edge); - GraphUpdateCommand::undo(); -} - -void AddEdgeCommand::redo() -{ - _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()]); - } - - GraphUpdateCommand::redo(); -} - -ChangeEdgeModeCommand::ChangeEdgeModeCommand(TikzScene *scene, Edge *edge, QUndoCommand *parent) : - GraphUpdateCommand(scene, parent), _edge(edge) -{ -} - -void ChangeEdgeModeCommand::undo() -{ - // FIXME: this act strangely sometimes - _edge->setBasicBendMode(!_edge->basicBendMode()); - _scene->edgeItems()[_edge]->readPos(); - GraphUpdateCommand::undo(); -} - -void ChangeEdgeModeCommand::redo() -{ - _edge->setBasicBendMode(!_edge->basicBendMode()); - _scene->edgeItems()[_edge]->readPos(); - GraphUpdateCommand::redo(); -} - -ApplyStyleToNodesCommand::ApplyStyleToNodesCommand(TikzScene *scene, QString style, QUndoCommand *parent) : - GraphUpdateCommand(scene, parent), _style(style), _oldStyles() -{ - foreach (QGraphicsItem *it, scene->selectedItems()) { - if (NodeItem *ni = dynamic_cast<NodeItem*>(it)) { - _oldStyles.insert(ni->node(), ni->node()->styleName()); - } - } -} - -void ApplyStyleToNodesCommand::undo() -{ - foreach (Node *n, _oldStyles.keys()) { - n->setStyleName(_oldStyles[n]); - n->attachStyle(); - } - - GraphUpdateCommand::undo(); -} - -void ApplyStyleToNodesCommand::redo() -{ - foreach (Node *n, _oldStyles.keys()) { - n->setStyleName(_style); - n->attachStyle(); - } - 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<EdgeItem*>(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) -{ - scene->getSelection(_oldSelectedNodes, _oldSelectedEdges); -} - -void PasteCommand::undo() -{ - _scene->clearSelection(); - - foreach (Edge *e, _graph->edges()) { - EdgeItem *ei = _scene->edgeItems()[e]; - _scene->edgeItems().remove(e); - _scene->removeItem(ei); - delete ei; - - _scene->graph()->removeEdge(e); - } - - foreach (Node *n, _graph->nodes()) { - NodeItem *ni = _scene->nodeItems()[n]; - _scene->nodeItems().remove(n); - _scene->removeItem(ni); - delete ni; - - _scene->graph()->removeNode(n); - } - - foreach(Node *n, _oldSelectedNodes) _scene->nodeItems()[n]->setSelected(true); - foreach(Edge *e, _oldSelectedEdges) _scene->edgeItems()[e]->setSelected(true); - - GraphUpdateCommand::undo(); -} - -void PasteCommand::redo() -{ - _scene->clearSelection(); - _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); - } - - foreach (Node *n, _graph->nodes()) { - n->attachStyle(); // in case styles have changed - NodeItem *ni = new NodeItem(n); - _scene->nodeItems().insert(n, ni); - _scene->addItem(ni); - ni->setSelected(true); - } - - GraphUpdateCommand::redo(); -} - -ChangeLabelCommand::ChangeLabelCommand(TikzScene *scene, Graph *graph, QMap<Node *, QString> oldLabels, QString newLabel, QUndoCommand *parent) : - GraphUpdateCommand(scene, parent), _oldLabels(oldLabels), _newLabel(newLabel) -{ -} - -void ChangeLabelCommand::undo() -{ - foreach (Node *n, _oldLabels.keys()) { - n->setLabel(_oldLabels[n]); - NodeItem *ni = _scene->nodeItems()[n]; - if (ni != 0) ni->updateBounds(); - } - - GraphUpdateCommand::undo(); -} - -void ChangeLabelCommand::redo() -{ - foreach (Node *n, _oldLabels.keys()) { - n->setLabel(_newLabel); - NodeItem *ni = _scene->nodeItems()[n]; - if (ni != 0) ni->updateBounds(); - } - - GraphUpdateCommand::redo(); -} - -ReplaceGraphCommand::ReplaceGraphCommand(TikzScene *scene, Graph *oldGraph, Graph *newGraph, QUndoCommand *parent) : - GraphUpdateCommand(scene, parent), _oldGraph(oldGraph), _newGraph(newGraph) -{ -} - -void ReplaceGraphCommand::undo() -{ - _scene->tikzDocument()->setGraph(_oldGraph); - _scene->graphReplaced(); -} - -void ReplaceGraphCommand::redo() -{ - _scene->tikzDocument()->setGraph(_newGraph); - _scene->graphReplaced(); -} +/*
+ TikZiT - a GUI diagram editor for TikZ
+ Copyright (C) 2018 Aleks Kissinger
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>.
+*/
+
+#include "undocommands.h"
+#include "nodeitem.h"
+#include "edgeitem.h"
+
+#include <QGraphicsView>
+
+GraphUpdateCommand::GraphUpdateCommand(TikzScene *scene, QUndoCommand *parent) : QUndoCommand(parent), _scene(scene)
+{
+}
+
+void GraphUpdateCommand::undo()
+{
+ _scene->tikzDocument()->refreshTikz();
+ //refreshSceneBounds does nothing
+ //_scene->refreshSceneBounds();
+ _scene->invalidate();
+}
+
+void GraphUpdateCommand::redo()
+{
+ _scene->tikzDocument()->refreshTikz();
+ //refreshSceneBounds does nothing
+ //_scene->refreshSceneBounds();
+ _scene->invalidate();
+}
+
+
+MoveCommand::MoveCommand(TikzScene *scene,
+ QMap<Node*, QPointF> oldNodePositions,
+ QMap<Node*, QPointF> newNodePositions,
+ QUndoCommand *parent) :
+ GraphUpdateCommand(scene, parent),
+ _oldNodePositions(oldNodePositions),
+ _newNodePositions(newNodePositions)
+{}
+
+
+void MoveCommand::undo()
+{
+ foreach (NodeItem *ni, _scene->nodeItems()) {
+ if (_oldNodePositions.contains(ni->node())) {
+ ni->node()->setPoint(_oldNodePositions.value(ni->node()));
+ ni->readPos();
+ }
+ }
+
+ _scene->refreshAdjacentEdges(_oldNodePositions.keys());
+ GraphUpdateCommand::undo();
+}
+
+void MoveCommand::redo()
+{
+ foreach (NodeItem *ni, _scene->nodeItems()) {
+ if (_newNodePositions.contains(ni->node())) {
+ ni->node()->setPoint(_newNodePositions.value(ni->node()));
+ ni->readPos();
+ }
+ }
+
+ _scene->refreshAdjacentEdges(_newNodePositions.keys());
+ GraphUpdateCommand::redo();
+}
+
+EdgeBendCommand::EdgeBendCommand(TikzScene *scene, Edge *edge,
+ float oldWeight, int oldBend,
+ int oldInAngle, int oldOutAngle, QUndoCommand *parent) :
+ GraphUpdateCommand(scene, parent),
+ _edge(edge),
+ _oldWeight(oldWeight), _oldBend(oldBend),
+ _oldInAngle(oldInAngle), _oldOutAngle(oldOutAngle)
+{
+ _newWeight = edge->weight();
+ _newBend = edge->bend();
+ _newInAngle = edge->inAngle();
+ _newOutAngle = edge->outAngle();
+}
+
+void EdgeBendCommand::undo()
+{
+ _edge->setWeight(_oldWeight);
+ _edge->setBend(_oldBend);
+ _edge->setInAngle(_oldInAngle);
+ _edge->setOutAngle(_oldOutAngle);
+
+ foreach(EdgeItem *ei, _scene->edgeItems()) {
+ if (ei->edge() == _edge) {
+ ei->readPos();
+ break;
+ }
+ }
+ GraphUpdateCommand::undo();
+}
+
+void EdgeBendCommand::redo()
+{
+ _edge->setWeight(_newWeight);
+ _edge->setBend(_newBend);
+ _edge->setInAngle(_newInAngle);
+ _edge->setOutAngle(_newOutAngle);
+
+ foreach(EdgeItem *ei, _scene->edgeItems()) {
+ if (ei->edge() == _edge) {
+ ei->readPos();
+ break;
+ }
+ }
+
+ GraphUpdateCommand::redo();
+}
+
+DeleteCommand::DeleteCommand(TikzScene *scene,
+ QMap<int, Node *> deleteNodes,
+ QMap<int, Edge *> deleteEdges,
+ QSet<Edge *> selEdges, QUndoCommand *parent) :
+ GraphUpdateCommand(scene, parent),
+ _deleteNodes(deleteNodes), _deleteEdges(deleteEdges), _selEdges(selEdges)
+{}
+
+void DeleteCommand::undo()
+{
+ for (auto it = _deleteNodes.begin(); it != _deleteNodes.end(); ++it) {
+ Node *n = it.value();
+ n->attachStyle(); // in case styles have changed
+ _scene->graph()->addNode(n, it.key());
+ NodeItem *ni = new NodeItem(n);
+ _scene->nodeItems().insert(n, ni);
+ _scene->addItem(ni);
+ ni->setSelected(true);
+ }
+
+ 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);
+ _scene->addItem(ei);
+
+ if (_selEdges.contains(e)) ei->setSelected(true);
+ }
+
+ GraphUpdateCommand::undo();
+}
+
+void DeleteCommand::redo()
+{
+ foreach (Edge *e, _deleteEdges.values()) {
+ EdgeItem *ei = _scene->edgeItems()[e];
+ _scene->edgeItems().remove(e);
+ _scene->removeItem(ei);
+ delete ei;
+
+ _scene->graph()->removeEdge(e);
+ }
+
+ foreach (Node *n, _deleteNodes.values()) {
+ NodeItem *ni = _scene->nodeItems()[n];
+ _scene->nodeItems().remove(n);
+ _scene->removeItem(ni);
+ delete ni;
+
+ _scene->graph()->removeNode(n);
+ }
+
+ GraphUpdateCommand::redo();
+}
+
+AddNodeCommand::AddNodeCommand(TikzScene *scene, Node *node, QRectF newBounds, QUndoCommand *parent) :
+ GraphUpdateCommand(scene, parent), _node(node), _oldBounds(_scene->sceneRect()), _newBounds(newBounds)
+{
+}
+
+void AddNodeCommand::undo()
+{
+ NodeItem *ni = _scene->nodeItems()[_node];
+ _scene->removeItem(ni);
+ _scene->nodeItems().remove(_node);
+ delete ni;
+
+ _scene->graph()->removeNode(_node);
+
+ //_scene->setBounds(_oldBounds);
+
+ GraphUpdateCommand::undo();
+}
+
+void AddNodeCommand::redo()
+{
+ _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);
+ _scene->addItem(ni);
+
+ //_scene->setBounds(_newBounds);
+
+ GraphUpdateCommand::redo();
+}
+
+AddEdgeCommand::AddEdgeCommand(TikzScene *scene, Edge *edge, QUndoCommand *parent) :
+ GraphUpdateCommand(scene, parent), _edge(edge)
+{
+}
+
+void AddEdgeCommand::undo()
+{
+ EdgeItem *ei = _scene->edgeItems()[_edge];
+ _scene->removeItem(ei);
+ _scene->edgeItems().remove(_edge);
+ delete ei;
+
+ _scene->graph()->removeEdge(_edge);
+ GraphUpdateCommand::undo();
+}
+
+void AddEdgeCommand::redo()
+{
+ _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()]);
+ }
+
+ GraphUpdateCommand::redo();
+}
+
+ChangeEdgeModeCommand::ChangeEdgeModeCommand(TikzScene *scene, Edge *edge, QUndoCommand *parent) :
+ GraphUpdateCommand(scene, parent), _edge(edge)
+{
+}
+
+void ChangeEdgeModeCommand::undo()
+{
+ // FIXME: this act strangely sometimes
+ _edge->setBasicBendMode(!_edge->basicBendMode());
+ _scene->edgeItems()[_edge]->readPos();
+ GraphUpdateCommand::undo();
+}
+
+void ChangeEdgeModeCommand::redo()
+{
+ _edge->setBasicBendMode(!_edge->basicBendMode());
+ _scene->edgeItems()[_edge]->readPos();
+ GraphUpdateCommand::redo();
+}
+
+ApplyStyleToNodesCommand::ApplyStyleToNodesCommand(TikzScene *scene, QString style, QUndoCommand *parent) :
+ GraphUpdateCommand(scene, parent), _style(style), _oldStyles()
+{
+ foreach (QGraphicsItem *it, scene->selectedItems()) {
+ if (NodeItem *ni = dynamic_cast<NodeItem*>(it)) {
+ _oldStyles.insert(ni->node(), ni->node()->styleName());
+ }
+ }
+}
+
+void ApplyStyleToNodesCommand::undo()
+{
+ foreach (Node *n, _oldStyles.keys()) {
+ n->setStyleName(_oldStyles[n]);
+ n->attachStyle();
+ }
+
+ GraphUpdateCommand::undo();
+}
+
+void ApplyStyleToNodesCommand::redo()
+{
+ foreach (Node *n, _oldStyles.keys()) {
+ n->setStyleName(_style);
+ n->attachStyle();
+ }
+ 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<EdgeItem*>(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)
+{
+ scene->getSelection(_oldSelectedNodes, _oldSelectedEdges);
+}
+
+void PasteCommand::undo()
+{
+ _scene->clearSelection();
+
+ foreach (Edge *e, _graph->edges()) {
+ EdgeItem *ei = _scene->edgeItems()[e];
+ _scene->edgeItems().remove(e);
+ _scene->removeItem(ei);
+ delete ei;
+
+ _scene->graph()->removeEdge(e);
+ }
+
+ foreach (Node *n, _graph->nodes()) {
+ NodeItem *ni = _scene->nodeItems()[n];
+ _scene->nodeItems().remove(n);
+ _scene->removeItem(ni);
+ delete ni;
+
+ _scene->graph()->removeNode(n);
+ }
+
+ foreach(Node *n, _oldSelectedNodes) _scene->nodeItems()[n]->setSelected(true);
+ foreach(Edge *e, _oldSelectedEdges) _scene->edgeItems()[e]->setSelected(true);
+
+ GraphUpdateCommand::undo();
+}
+
+void PasteCommand::redo()
+{
+ _scene->clearSelection();
+ _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);
+ }
+
+ foreach (Node *n, _graph->nodes()) {
+ n->attachStyle(); // in case styles have changed
+ NodeItem *ni = new NodeItem(n);
+ _scene->nodeItems().insert(n, ni);
+ _scene->addItem(ni);
+ ni->setSelected(true);
+ }
+
+ GraphUpdateCommand::redo();
+}
+
+ChangeLabelCommand::ChangeLabelCommand(TikzScene *scene, Graph *graph, QMap<Node *, QString> oldLabels, QString newLabel, QUndoCommand *parent) :
+ GraphUpdateCommand(scene, parent), _oldLabels(oldLabels), _newLabel(newLabel)
+{
+}
+
+void ChangeLabelCommand::undo()
+{
+ foreach (Node *n, _oldLabels.keys()) {
+ n->setLabel(_oldLabels[n]);
+ NodeItem *ni = _scene->nodeItems()[n];
+ if (ni != 0) ni->updateBounds();
+ }
+
+ GraphUpdateCommand::undo();
+}
+
+void ChangeLabelCommand::redo()
+{
+ foreach (Node *n, _oldLabels.keys()) {
+ n->setLabel(_newLabel);
+ NodeItem *ni = _scene->nodeItems()[n];
+ if (ni != 0) ni->updateBounds();
+ }
+
+ GraphUpdateCommand::redo();
+}
+
+ReplaceGraphCommand::ReplaceGraphCommand(TikzScene *scene, Graph *oldGraph, Graph *newGraph, QUndoCommand *parent) :
+ GraphUpdateCommand(scene, parent), _oldGraph(oldGraph), _newGraph(newGraph)
+{
+}
+
+void ReplaceGraphCommand::undo()
+{
+ _scene->tikzDocument()->setGraph(_oldGraph);
+ _scene->graphReplaced();
+}
+
+void ReplaceGraphCommand::redo()
+{
+ _scene->tikzDocument()->setGraph(_newGraph);
+ _scene->graphReplaced();
+}
|