Commit a44dc91a authored by Pierre-Antoine Rouby's avatar Pierre-Antoine Rouby
Browse files

Network: Connect first undo command.

Showing with 92 additions and 5 deletions
+92 -5
......@@ -21,6 +21,8 @@ from Model.Network.Node import Node
from Model.Network.Edge import Edge
from Model.Network.Graph import Graph
from View.Network.UndoCommand import *
_translate = QCoreApplication.translate
......@@ -424,13 +426,21 @@ class GraphWidget(QGraphicsView):
self.texts[i].rename()
def enable_edge(self, edge, prev):
edge.edge.enable(enable = not prev)
self._undo.push(
EnableEdgeCommand(
edge.edge, not prev
)
)
self.changeEdge.emit(self.sender())
self.changeNode.emit(self.sender())
self.display_update()
def reverse_edge(self, edge):
edge.edge.reverse()
self._undo.push(
ReverseEdgeCommand(
edge.edge
)
)
self.changeEdge.emit(self.sender())
self.display_update()
......
......@@ -5,6 +5,7 @@ from Model.Network.Edge import Edge
from Model.Network.Graph import Graph
from View.ASubWindow import ASubWindow
from View.Network.GraphWidget import GraphWidget
from View.Network.UndoCommand import *
from PyQt5.QtCore import (
Qt, QRect, QVariant, QAbstractTableModel, pyqtSlot, pyqtSignal,
......@@ -17,6 +18,7 @@ from PyQt5.QtWidgets import (
QApplication,
)
class ComboBoxDelegate(QItemDelegate):
def __init__(self, graph=None, parent=None):
super(ComboBoxDelegate, self).__init__(parent)
......@@ -140,9 +142,29 @@ class GraphTableModel(QAbstractTableModel):
if (self.headers[index.column()] == "node1" or
self.headers[index.column()] == "node2"):
node = self.graph.node(value)
self.rows[index.row()][self.headers[index.column()]] = node
self._undo.push(
SetCommand(
self.rows[index.row()],
self.headers[index.column()],
node
)
)
# self.rows[index.row()][self.headers[index.column()]] = node
elif self.headers[index.column()] == "enable":
self._undo.push(
EnableEdgeCommand(
self.rows[index.row()], value
)
)
else:
self.rows[index.row()][self.headers[index.column()]] = value
self._undo.push(
SetCommand(
self.rows[index.row()],
self.headers[index.column()],
value
)
)
# self.rows[index.row()][self.headers[index.column()]] = value
self.dataChanged.emit(index, index, [Qt.DisplayRole])
self.layoutChanged.emit()
......
# -*- coding: utf-8 -*-
from copy import deepcopy
from tools import trace, timer
from PyQt5.QtWidgets import (
QMessageBox, QUndoCommand, QUndoStack,
)
from Model.Network.Node import Node
from Model.Network.Edge import Edge
from Model.Network.Graph import Graph
class SetCommand(QUndoCommand):
def __init__(self, element, column, new_value):
QUndoCommand.__init__(self)
self._el = element
self._column = column
self._old = self._el[self._column]
self._new = new_value
def undo(self):
self._el[self._column] = self._old
def redo(self):
self._el[self._column] = self._new
class EnableEdgeCommand(QUndoCommand):
def __init__(self, edge, enable):
QUndoCommand.__init__(self)
self._edge = edge
self._old = self._edge._enable
self._enable = enable
def undo(self):
self._edge.enable(enable = self._old)
def redo(self):
self._edge.enable(enable = self._enable)
class ReverseEdgeCommand(QUndoCommand):
def __init__(self, edge):
QUndoCommand.__init__(self)
self._edge = edge
def undo(self):
self._edge.reverse()
def redo(self):
self._edge.reverse()
......@@ -33,7 +33,9 @@ class NetworkWindow(ASubMainWindow):
self.setup_title()
super(NetworkWindow, self).__init__(name=self._title, ui="Network", parent=parent)
super(NetworkWindow, self).__init__(
name=self._title, ui="Network", parent=parent
)
self.ui.setWindowTitle(self._title)
self.setup_sc()
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment