undoable component movement
This commit is contained in:
parent
ddb04f3a2f
commit
f66ec40ba6
|
@ -73,6 +73,7 @@ class Core:
|
||||||
compPos = len(self.selectedComponents)
|
compPos = len(self.selectedComponents)
|
||||||
if len(self.selectedComponents) > 50:
|
if len(self.selectedComponents) > 50:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
if type(component) is int:
|
if type(component) is int:
|
||||||
# create component using module index in self.modules
|
# create component using module index in self.modules
|
||||||
moduleIndex = int(component)
|
moduleIndex = int(component)
|
||||||
|
|
|
@ -35,3 +35,42 @@ class RemoveComponent(QUndoCommand):
|
||||||
)
|
)
|
||||||
self.parent.drawPreview()
|
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):
|
def moveComponent(self, change):
|
||||||
'''Moves a component relatively from its current position'''
|
'''Moves a component relatively from its current position'''
|
||||||
componentList = self.window.listWidget_componentList
|
componentList = self.window.listWidget_componentList
|
||||||
|
tag = change
|
||||||
if change == 'top':
|
if change == 'top':
|
||||||
change = -componentList.currentRow()
|
change = -componentList.currentRow()
|
||||||
elif change == 'bottom':
|
elif change == 'bottom':
|
||||||
change = len(componentList)-componentList.currentRow()-1
|
change = len(componentList)-componentList.currentRow()-1
|
||||||
stackedWidget = self.window.stackedWidget
|
else:
|
||||||
|
tag = 'down' if change == 1 else 'up'
|
||||||
|
|
||||||
row = componentList.currentRow()
|
row = componentList.currentRow()
|
||||||
newRow = row + change
|
newRow = row + change
|
||||||
if newRow > -1 and newRow < componentList.count():
|
if newRow > -1 and newRow < componentList.count():
|
||||||
self.core.moveComponent(row, newRow)
|
action = MoveComponent(self, row, newRow, tag)
|
||||||
|
self.undoStack.push(action)
|
||||||
# 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)
|
|
||||||
|
|
||||||
def getComponentListMousePos(self, position):
|
def getComponentListMousePos(self, position):
|
||||||
'''
|
'''
|
||||||
|
|
Reference in New Issue