aboutsummaryrefslogtreecommitdiff
path: root/src/gui/actions.py
diff options
context:
space:
mode:
authortassaron2017-08-16 22:17:12 -0400
committertassaron2017-08-16 22:17:12 -0400
commitf66ec40ba6e9c4062d1e41894e0a88f713add96d (patch)
tree907ba966411efe859a0e7dceaf2a4b4aa4aa0666 /src/gui/actions.py
parentddb04f3a2fe6454a9c98bba39d07a12bd6a91b45 (diff)
undoable component movement
Diffstat (limited to 'src/gui/actions.py')
-rw-r--r--src/gui/actions.py39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/gui/actions.py b/src/gui/actions.py
index 5cf64e1..5a0869d 100644
--- a/src/gui/actions.py
+++ b/src/gui/actions.py
@@ -35,3 +35,42 @@ class RemoveComponent(QUndoCommand):
)
self.parent.drawPreview()
+
+class MoveComponent(QUndoCommand):
+ def __init__(self, parent, row, newRow, tag):
+ super().__init__("Move component %s" % tag)
+ self.parent = parent
+ self.row = row
+ self.newRow = newRow
+ self.id_ = ord(tag[0])
+
+ def id(self):
+ '''If 2 consecutive updates have same id, Qt will call mergeWith()'''
+ return self.id_
+
+ def mergeWith(self, other):
+ self.newRow = other.newRow
+ return True
+
+ def do(self, rowa, rowb):
+ componentList = self.parent.window.listWidget_componentList
+
+ page = self.parent.pages.pop(rowa)
+ self.parent.pages.insert(rowb, page)
+
+ item = componentList.takeItem(rowa)
+ componentList.insertItem(rowb, item)
+
+ stackedWidget = self.parent.window.stackedWidget
+ widget = stackedWidget.removeWidget(page)
+ stackedWidget.insertWidget(rowb, page)
+ componentList.setCurrentRow(rowb)
+ stackedWidget.setCurrentIndex(rowb)
+ self.parent.core.moveComponent(rowa, rowb)
+ self.parent.drawPreview(True)
+
+ def redo(self):
+ self.do(self.row, self.newRow)
+
+ def undo(self):
+ self.do(self.newRow, self.row)