diff options
author | sumit | 2020-05-28 15:31:26 +0530 |
---|---|---|
committer | sumit | 2020-05-28 15:31:26 +0530 |
commit | 6ef014e0aa5d320f2c392c5e784b4eeba373aebf (patch) | |
tree | 8ac6aa2448715216adcce11e0ed6ee219bdadd6a /src/main/python/utils/undo.py | |
parent | 70a89b9ddca1e0abc9f802b9cda1d483dd59a4e1 (diff) | |
parent | ac63205a7d02185f4a917db74bf0964691bf20ea (diff) | |
download | Chemical-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.py | 61 |
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 |