Merge branch 'machine-actions-improvement' of github.com:julianCast/Cura

This commit is contained in:
Jaime van Kessel 2022-09-26 10:22:18 +02:00
commit ea16597dd6
No known key found for this signature in database
GPG Key ID: C85F7A3AF1BAA7C4
2 changed files with 49 additions and 4 deletions

View File

@ -33,8 +33,11 @@ class MachineAction(QObject, PluginObject):
self._qml_url = ""
self._view = None
self._finished = False
self._open_as_dialog = True
self._visible = True
labelChanged = pyqtSignal()
visibilityChanged = pyqtSignal()
onFinished = pyqtSignal()
def getKey(self) -> str:
@ -79,6 +82,15 @@ class MachineAction(QObject, PluginObject):
pass
@pyqtSlot()
def execute(self) -> None:
self._execute()
def _execute(self) -> None:
"""Protected implementation of execute."""
pass
@pyqtSlot()
def setFinished(self) -> None:
self._finished = True
@ -114,3 +126,31 @@ class MachineAction(QObject, PluginObject):
@pyqtSlot(result = QObject)
def getDisplayItem(self) -> Optional["QObject"]:
return self._createViewFromQML()
@pyqtProperty(bool, constant=True)
def shouldOpenAsDialog(self) -> bool:
"""Whether this action will show a dialog.
If not, the action will directly run the function inside execute().
:return: Defaults to true to be in line with the old behaviour.
"""
return self._open_as_dialog
@pyqtSlot()
def setVisible(self, visible: bool) -> None:
if self._visible != visible:
self._visible = visible
self.visibilityChanged.emit()
@pyqtProperty(bool, notify = visibilityChanged)
def visible(self) -> bool:
"""Whether this action button will be visible.
Example: Show only when isLoggedIn
:return: Defaults to true to be in line with the old behaviour.
"""
self._visible

View File

@ -67,16 +67,21 @@ UM.ManagementPage
{
width: Math.round(childrenRect.width + 2 * screenScaleFactor)
height: childrenRect.height
visible: machineActionRepeater.model[index].visible
Cura.SecondaryButton
{
text: machineActionRepeater.model[index].label
onClicked:
{
var currentItem = machineActionRepeater.model[index]
actionDialog.loader.manager = currentItem
actionDialog.loader.source = currentItem.qmlPath
actionDialog.title = currentItem.label
actionDialog.show()
if (currentItem.shouldOpenAsDialog) {
actionDialog.loader.manager = currentItem
actionDialog.loader.source = currentItem.qmlPath
actionDialog.title = currentItem.label
actionDialog.show()
} else {
currentItem.execute()
}
}
}
}