diff --git a/plugins/Toolbox/resources/qml/dialogs/CompatibilityDialog.qml b/plugins/Toolbox/resources/qml/dialogs/CompatibilityDialog.qml index a6ce7fc865..93945871a3 100644 --- a/plugins/Toolbox/resources/qml/dialogs/CompatibilityDialog.qml +++ b/plugins/Toolbox/resources/qml/dialogs/CompatibilityDialog.qml @@ -104,7 +104,7 @@ UM.Dialog{ { width: parent.width property int lineHeight: 60 - visible: !model.is_compatible + visible: !model.is_compatible && !model.is_dismissed height: visible ? (lineHeight + UM.Theme.getSize("default_margin").height) : 0 // We only show the incompatible packages here Image { @@ -117,6 +117,7 @@ UM.Dialog{ } Label { + id: packageName text: model.name font: UM.Theme.getFont("medium_bold") anchors.left: packageIcon.right @@ -125,6 +126,22 @@ UM.Dialog{ color: UM.Theme.getColor("text") elide: Text.ElideRight } + + Label + { + id: dismissLabel + text: "(Dismiss)" + font: UM.Theme.getFont("small") + anchors.right: parent.right + anchors.verticalCenter: packageIcon.verticalCenter + color: UM.Theme.getColor("text") + + MouseArea + { + anchors.fill: parent + onClicked: toolbox.dismissIncompatiblePackage(model.package_id) + } + } } } } diff --git a/plugins/Toolbox/src/SubscribedPackagesModel.py b/plugins/Toolbox/src/SubscribedPackagesModel.py index cf0d07c153..118048eec2 100644 --- a/plugins/Toolbox/src/SubscribedPackagesModel.py +++ b/plugins/Toolbox/src/SubscribedPackagesModel.py @@ -5,6 +5,10 @@ from PyQt5.QtCore import Qt from UM.Qt.ListModel import ListModel from cura import ApplicationMetadata +from PyQt5.QtCore import pyqtSlot + +from UM.Logger import Logger + class SubscribedPackagesModel(ListModel): def __init__(self, parent = None): @@ -18,6 +22,9 @@ class SubscribedPackagesModel(ListModel): self.addRoleName(Qt.UserRole + 1, "name") self.addRoleName(Qt.UserRole + 2, "icon_url") self.addRoleName(Qt.UserRole + 3, "is_compatible") + self.addRoleName(Qt.UserRole + 4, "is_dismissed") + self.addRoleName(Qt.UserRole + 5, "package_id") + def setMetadata(self, data): if self._metadata != data: @@ -33,7 +40,11 @@ class SubscribedPackagesModel(ListModel): for item in self._metadata: if item["package_id"] not in self._discrepancies: continue - package = {"name": item["display_name"], "sdk_versions": item["sdk_versions"]} + package = {"package_id": item["package_id"], + "name": item["display_name"], + "sdk_versions": item["sdk_versions"], + "is_dismissed": False + } if self._sdk_version not in item["sdk_versions"]: package.update({"is_compatible": False}) else: @@ -44,8 +55,10 @@ class SubscribedPackagesModel(ListModel): package.update({"icon_url": ""}) self._items.append(package) + print("All items:: %s" % self._items) self.setItems(self._items) + def hasCompatiblePackages(self) -> bool: has_compatible_items = False for item in self._items: @@ -58,4 +71,13 @@ class SubscribedPackagesModel(ListModel): for item in self._items: if item['is_compatible'] == False: has_incompatible_items = True - return has_incompatible_items \ No newline at end of file + return has_incompatible_items + + @pyqtSlot(str) + def setDismiss(self, package_id) -> None: + package_id_in_list_of_items = self.find(key="package_id", value=package_id) + if package_id_in_list_of_items != -1: + self.setProperty(package_id_in_list_of_items, property="is_dismissed", value=True) + Logger.debug("Package {} has been dismissed".format(package_id)) + + # Now store this package_id as DISMISSED somewhere in local files \ No newline at end of file diff --git a/plugins/Toolbox/src/Toolbox.py b/plugins/Toolbox/src/Toolbox.py index f28178b99e..c77e148140 100644 --- a/plugins/Toolbox/src/Toolbox.py +++ b/plugins/Toolbox/src/Toolbox.py @@ -556,6 +556,11 @@ class Toolbox(QObject, Extension): populated += 1 return populated == len(self._server_response_data.items()) + @pyqtSlot(str) + def dismissIncompatiblePackage(self, package_id): + print("---in toolbox: %s" % package_id) + self._models["subscribed_packages"].setDismiss(package_id) + # Make API Calls # -------------------------------------------------------------------------- def _makeRequestByType(self, request_type: str) -> None: