diff --git a/plugins/Toolbox/resources/qml/ToolboxInstalledTile.qml b/plugins/Toolbox/resources/qml/ToolboxInstalledTile.qml index 435319b5e9..78c970659c 100644 --- a/plugins/Toolbox/resources/qml/ToolboxInstalledTile.qml +++ b/plugins/Toolbox/resources/qml/ToolboxInstalledTile.qml @@ -10,7 +10,6 @@ Item { height: UM.Theme.getSize("toolbox_installed_tile").height width: parent.width - property bool canUpdate: false property bool isEnabled: true Rectangle @@ -109,7 +108,6 @@ Item { target: toolbox onEnabledChanged: isEnabled = toolbox.isEnabled(model.id) - onMetadataChanged: canUpdate = toolbox.canUpdate(model.id) } } } diff --git a/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml b/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml index 204b755909..0ca0bd4fd5 100644 --- a/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml +++ b/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml @@ -8,6 +8,8 @@ import UM 1.1 as UM Column { + property bool canUpdate: false + property bool canDowngrade: false width: UM.Theme.getSize("toolbox_action_button").width spacing: UM.Theme.getSize("narrow_margin").height @@ -36,7 +38,7 @@ Column Button { id: removeButton - text: catalog.i18nc("@action:button", "Uninstall") + text: canDowngrade ? catalog.i18nc("@action:button", "Downgrade") : catalog.i18nc("@action:button", "Uninstall") visible: !model.is_bundled enabled: !toolbox.isDownloading style: ButtonStyle @@ -72,5 +74,11 @@ Column } } onClicked: toolbox.uninstall(model.id) + Connections + { + target: toolbox + onMetadataChanged: canUpdate = toolbox.canUpdate(model.id) + onMetadataChanged: canDowngrade = toolbox.canDowngrade(model.id) + } } } diff --git a/plugins/Toolbox/src/Toolbox.py b/plugins/Toolbox/src/Toolbox.py index 622198666d..776f2a3870 100644 --- a/plugins/Toolbox/src/Toolbox.py +++ b/plugins/Toolbox/src/Toolbox.py @@ -300,6 +300,20 @@ class Toolbox(QObject, Extension): remote_version = Version(remote_package["package_version"]) return remote_version > local_version + @pyqtSlot(str, result=bool) + def canDowngrade(self, package_id: str) -> bool: + local_package = self._package_manager.getInstalledPackageInfo(package_id) + if local_package is None: + return False + + remote_package = self.getRemotePackage(package_id) + if remote_package is None: + return False + + local_version = Version(local_package["package_version"]) + remote_version = Version(remote_package["package_version"]) + return remote_version < local_version + @pyqtSlot(str, result = bool) def isInstalled(self, package_id: str) -> bool: return self._package_manager.isPackageInstalled(package_id)