From df16108938c63900cab2d9acf4c106648016c3eb Mon Sep 17 00:00:00 2001 From: Julian Date: Fri, 23 Sep 2022 11:49:30 +0200 Subject: [PATCH] Fixes for better decorators using pyqtProperty --- cura/MachineAction.py | 21 ++++++++++++++------- resources/qml/Preferences/MachinesPage.qml | 4 ++-- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/cura/MachineAction.py b/cura/MachineAction.py index 8ca9b63679..fa1fb01e02 100644 --- a/cura/MachineAction.py +++ b/cura/MachineAction.py @@ -34,8 +34,10 @@ class MachineAction(QObject, PluginObject): self._view = None self._finished = False self._open_as_dialog = True + self._visible = True labelChanged = pyqtSignal() + visibilityChanged = pyqtSignal() onFinished = pyqtSignal() def getKey(self) -> str: @@ -125,8 +127,8 @@ class MachineAction(QObject, PluginObject): def getDisplayItem(self) -> Optional["QObject"]: return self._createViewFromQML() - @pyqtSlot(result = bool) - def openAsDialog(self) -> bool: + @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(). @@ -135,9 +137,15 @@ class MachineAction(QObject, PluginObject): """ return self._open_as_dialog - - @pyqtSlot(result = bool) - def isVisible(self) -> bool: + + @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 @@ -145,5 +153,4 @@ class MachineAction(QObject, PluginObject): :return: Defaults to true to be in line with the old behaviour. """ - return True - \ No newline at end of file + self._visible \ No newline at end of file diff --git a/resources/qml/Preferences/MachinesPage.qml b/resources/qml/Preferences/MachinesPage.qml index 4ecc70b404..960dc75904 100644 --- a/resources/qml/Preferences/MachinesPage.qml +++ b/resources/qml/Preferences/MachinesPage.qml @@ -67,14 +67,14 @@ UM.ManagementPage { width: Math.round(childrenRect.width + 2 * screenScaleFactor) height: childrenRect.height - visible: machineActionRepeater.model[index].isVisible() + visible: machineActionRepeater.model[index].visible Cura.SecondaryButton { text: machineActionRepeater.model[index].label onClicked: { var currentItem = machineActionRepeater.model[index] - if (currentItem.openAsDialog()) { + if (currentItem.shouldOpenAsDialog) { actionDialog.loader.manager = currentItem actionDialog.loader.source = currentItem.qmlPath actionDialog.title = currentItem.label