undoable component movement
This commit is contained in:
parent
ddb04f3a2f
commit
f66ec40ba6
|
@ -73,6 +73,7 @@ class Core:
|
|||
compPos = len(self.selectedComponents)
|
||||
if len(self.selectedComponents) > 50:
|
||||
return None
|
||||
|
||||
if type(component) is int:
|
||||
# create component using module index in self.modules
|
||||
moduleIndex = int(component)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -716,27 +716,19 @@ class MainWindow(QtWidgets.QMainWindow):
|
|||
def moveComponent(self, change):
|
||||
'''Moves a component relatively from its current position'''
|
||||
componentList = self.window.listWidget_componentList
|
||||
tag = change
|
||||
if change == 'top':
|
||||
change = -componentList.currentRow()
|
||||
elif change == 'bottom':
|
||||
change = len(componentList)-componentList.currentRow()-1
|
||||
stackedWidget = self.window.stackedWidget
|
||||
else:
|
||||
tag = 'down' if change == 1 else 'up'
|
||||
|
||||
row = componentList.currentRow()
|
||||
newRow = row + change
|
||||
if newRow > -1 and newRow < componentList.count():
|
||||
self.core.moveComponent(row, newRow)
|
||||
|
||||
# update widgets
|
||||
page = self.pages.pop(row)
|
||||
self.pages.insert(newRow, page)
|
||||
item = componentList.takeItem(row)
|
||||
newItem = componentList.insertItem(newRow, item)
|
||||
widget = stackedWidget.removeWidget(page)
|
||||
stackedWidget.insertWidget(newRow, page)
|
||||
componentList.setCurrentRow(newRow)
|
||||
stackedWidget.setCurrentIndex(newRow)
|
||||
self.drawPreview(True)
|
||||
action = MoveComponent(self, row, newRow, tag)
|
||||
self.undoStack.push(action)
|
||||
|
||||
def getComponentListMousePos(self, position):
|
||||
'''
|
||||
|
|
Reference in New Issue