mirror of https://gitlab.com/pamhyr/pamhyr2
Network: Connect first undo command.
parent
454b5049d2
commit
a44dc91ae9
|
|
@ -21,6 +21,8 @@ from Model.Network.Node import Node
|
||||||
from Model.Network.Edge import Edge
|
from Model.Network.Edge import Edge
|
||||||
from Model.Network.Graph import Graph
|
from Model.Network.Graph import Graph
|
||||||
|
|
||||||
|
from View.Network.UndoCommand import *
|
||||||
|
|
||||||
_translate = QCoreApplication.translate
|
_translate = QCoreApplication.translate
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -424,13 +426,21 @@ class GraphWidget(QGraphicsView):
|
||||||
self.texts[i].rename()
|
self.texts[i].rename()
|
||||||
|
|
||||||
def enable_edge(self, edge, prev):
|
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.changeEdge.emit(self.sender())
|
||||||
self.changeNode.emit(self.sender())
|
self.changeNode.emit(self.sender())
|
||||||
self.display_update()
|
self.display_update()
|
||||||
|
|
||||||
def reverse_edge(self, edge):
|
def reverse_edge(self, edge):
|
||||||
edge.edge.reverse()
|
self._undo.push(
|
||||||
|
ReverseEdgeCommand(
|
||||||
|
edge.edge
|
||||||
|
)
|
||||||
|
)
|
||||||
self.changeEdge.emit(self.sender())
|
self.changeEdge.emit(self.sender())
|
||||||
self.display_update()
|
self.display_update()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ from Model.Network.Edge import Edge
|
||||||
from Model.Network.Graph import Graph
|
from Model.Network.Graph import Graph
|
||||||
from View.ASubWindow import ASubWindow
|
from View.ASubWindow import ASubWindow
|
||||||
from View.Network.GraphWidget import GraphWidget
|
from View.Network.GraphWidget import GraphWidget
|
||||||
|
from View.Network.UndoCommand import *
|
||||||
|
|
||||||
from PyQt5.QtCore import (
|
from PyQt5.QtCore import (
|
||||||
Qt, QRect, QVariant, QAbstractTableModel, pyqtSlot, pyqtSignal,
|
Qt, QRect, QVariant, QAbstractTableModel, pyqtSlot, pyqtSignal,
|
||||||
|
|
@ -17,6 +18,7 @@ from PyQt5.QtWidgets import (
|
||||||
QApplication,
|
QApplication,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class ComboBoxDelegate(QItemDelegate):
|
class ComboBoxDelegate(QItemDelegate):
|
||||||
def __init__(self, graph=None, parent=None):
|
def __init__(self, graph=None, parent=None):
|
||||||
super(ComboBoxDelegate, self).__init__(parent)
|
super(ComboBoxDelegate, self).__init__(parent)
|
||||||
|
|
@ -140,9 +142,29 @@ class GraphTableModel(QAbstractTableModel):
|
||||||
if (self.headers[index.column()] == "node1" or
|
if (self.headers[index.column()] == "node1" or
|
||||||
self.headers[index.column()] == "node2"):
|
self.headers[index.column()] == "node2"):
|
||||||
node = self.graph.node(value)
|
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:
|
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.dataChanged.emit(index, index, [Qt.DisplayRole])
|
||||||
self.layoutChanged.emit()
|
self.layoutChanged.emit()
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,53 @@
|
||||||
|
# -*- 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()
|
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.ui.setWindowTitle(self._title)
|
||||||
|
|
||||||
self.setup_sc()
|
self.setup_sc()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue