Browse Source

Added 'dismiss' link and logic for removing the item from the dialog

CURA-7090
Dimitriovski 5 years ago
parent
commit
c86cc3ae5a

+ 18 - 1
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)
+                                }
+                            }
                         }
                     }
                 }

+ 24 - 2
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
+        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

+ 5 - 0
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: