summaryrefslogtreecommitdiff
path: root/src/main/python/utils/undo.py
diff options
context:
space:
mode:
authorsumit2020-05-28 15:31:26 +0530
committersumit2020-05-28 15:31:26 +0530
commit6ef014e0aa5d320f2c392c5e784b4eeba373aebf (patch)
tree8ac6aa2448715216adcce11e0ed6ee219bdadd6a /src/main/python/utils/undo.py
parent70a89b9ddca1e0abc9f802b9cda1d483dd59a4e1 (diff)
parentac63205a7d02185f4a917db74bf0964691bf20ea (diff)
downloadChemical-PFD-6ef014e0aa5d320f2c392c5e784b4eeba373aebf.tar.gz
Chemical-PFD-6ef014e0aa5d320f2c392c5e784b4eeba373aebf.tar.bz2
Chemical-PFD-6ef014e0aa5d320f2c392c5e784b4eeba373aebf.zip
Merge remote-tracking branch 'upstream/master'
Diffstat (limited to 'src/main/python/utils/undo.py')
-rw-r--r--src/main/python/utils/undo.py61
1 files changed, 52 insertions, 9 deletions
diff --git a/src/main/python/utils/undo.py b/src/main/python/utils/undo.py
index 7832483..cf539e7 100644
--- a/src/main/python/utils/undo.py
+++ b/src/main/python/utils/undo.py
@@ -1,13 +1,32 @@
+"""
+Contains custom undo commands that can be pushed to undo stack
+"""
from PyQt5.QtWidgets import QUndoCommand
+from re import compile
+
+def repl(x):
+ return f"{x[0][0]} {x[0][1].lower()}"
+
+regex = compile(r"([a-z][A-Z])")
+
+def objectName(obj):
+ name = regex.sub(repl, obj.m_type if obj.__class__.__name__ == 'NodeItem' else obj.__class__.__name__)
+ # if obj.__class__.__name__ != 'line':
+ # name = 'Draw ' + name[0].upper() + name[1:]
+ # else:
+ # name = 'Add ' +
+ return name[0].upper() + name[1:] + ' symbol'
class addCommand(QUndoCommand):
-
+ """
+ QUndoCommand for add item event
+ """
def __init__(self, addItem, scene, parent = None):
super(addCommand, self).__init__(parent)
self.scene = scene
self.diagramItem = addItem
self.itemPos = addItem.pos()
- self.setText(f"Add {self.diagramItem} {self.itemPos}")
+ self.setText(f"Add {objectName(self.diagramItem)}")
def undo(self):
self.scene.removeItem(self.diagramItem)
@@ -20,13 +39,15 @@ class addCommand(QUndoCommand):
self.scene.update()
class deleteCommand(QUndoCommand):
-
+ """
+ QUndoCommand for delete item event
+ """
def __init__(self, item, scene, parent = None):
super(deleteCommand, self).__init__(parent)
self.scene = scene
item.setSelected(False)
self.diagramItem = item
- self.setText(f"Delete {self.diagramItem} {self.diagramItem.pos()}")
+ self.setText(f"Delete {objectName(self.diagramItem)} at {self.diagramItem.pos().x()}, {self.diagramItem.y()}")
def undo(self):
self.scene.addItem(self.diagramItem)
@@ -36,7 +57,9 @@ class deleteCommand(QUndoCommand):
self.scene.removeItem(self.diagramItem)
class moveCommand(QUndoCommand):
-
+ """
+ QUndoCommand for move item event
+ """
def __init__(self, item, lastPos, parent = None):
super(moveCommand, self).__init__(parent)
self.diagramItem = item
@@ -46,18 +69,38 @@ class moveCommand(QUndoCommand):
def undo(self):
self.diagramItem.setPos(self.lastPos)
self.diagramItem.scene().update()
- self.setText(f"Move {self.diagramItem} {self.newPos}")
+ self.setText(f"Move {objectName(self.diagramItem)} to {self.newPos.x()}, {self.newPos.y()}")
def redo(self):
self.diagramItem.setPos(self.newPos)
- self.setText(f"Move {self.diagramItem} {self.newPos}")
+ self.setText(f"Move {objectName(self.diagramItem)} to {self.newPos.x()}, {self.newPos.y()}")
def mergeWith(self, move):
+ #merges multiple move commands so that a move event is not added twice.
item = move.diagramItem
if self.diagramItem != item:
return False
self.newPos = item.pos()
- self.setText(f"Move {self.diagramItem} {self.newPos}")
- return True \ No newline at end of file
+ self.setText(f"Move {objectName(self.diagramItem)} to {self.newPos.x()}, {self.newPos.y()}")
+ return True
+
+class resizeCommand(QUndoCommand):
+ """
+ """
+ def __init__(self, new, canvas, widget, parent = None):
+ super(resizeCommand, self).__init__(parent)
+ self.parent = canvas
+ self.old = self.parent.canvasSize, self.parent.ppi
+ self.new = new
+ self.widget = widget
+ self.setText(f'Change canvas dimensions to {new[0]} at {new[1]} ppi')
+
+ def undo(self):
+ self.parent.canvasSize, self.parent.ppi = self.old
+ self.widget.resizeHandler()
+
+ def redo(self):
+ self.parent.canvasSize, self.parent.ppi = self.new
+ self.widget.resizeHandler() \ No newline at end of file