Browse Source

Added sections to the packagelists

By providing a `section_title` with a string to the `package_data`
packages can be subdivided in sections, each with its own header.
For remote packages this will be `None` and therefore no sections are
created there.

Contributes to CURA-8558
j.spijker@ultimaker.com 3 years ago
parent
commit
c4c99f6657

+ 4 - 1
plugins/Marketplace/LocalPackageList.py

@@ -41,8 +41,11 @@ class LocalPackageList(PackageList):
 
         bundled = plugin_registry.getInstalledPlugins()
         for b in bundled:
-            package = PackageModel({"package_id": b, "display_name": b}, parent = self)
+            package = PackageModel({"package_id": b, "display_name": b, "section_title": "bundled"}, parent = self)
             self.appendItem({"package": package})
         packages = package_manager.getInstalledPackageIDs()
+        for p in packages:
+            package = PackageModel({"package_id": p, "display_name": p, "section_title": "package"}, parent = self)
+            self.appendItem({"package": package})
         self.setIsLoading(False)
         self.setHasMore(False)

+ 6 - 1
plugins/Marketplace/PackageModel.py

@@ -2,7 +2,7 @@
 # Cura is released under the terms of the LGPLv3 or higher.
 
 from PyQt5.QtCore import pyqtProperty, QObject
-from typing import Any, Dict
+from typing import Any, Dict, Optional
 
 from UM.i18n import i18nCatalog  # To translate placeholder names if data is not present.
 
@@ -25,6 +25,7 @@ class PackageModel(QObject):
         super().__init__(parent)
         self._package_id = package_data.get("package_id", "UnknownPackageId")
         self._display_name = package_data.get("display_name", catalog.i18nc("@label:property", "Unknown Package"))
+        self._section_title = package_data.get("section_title", None)
 
     @pyqtProperty(str, constant = True)
     def packageId(self) -> str:
@@ -33,3 +34,7 @@ class PackageModel(QObject):
     @pyqtProperty(str, constant = True)
     def displayName(self) -> str:
         return self._display_name
+
+    @pyqtProperty(str, constant = True)
+    def sectionTitle(self) -> Optional[str]:
+        return self._section_title

+ 23 - 0
plugins/Marketplace/resources/qml/Packages.qml

@@ -24,6 +24,29 @@ ScrollView
 
         spacing: UM.Theme.getSize("default_margin").height
 
+        section.property: "package.sectionTitle"
+        section.criteria: ViewSection.FullString
+        section.delegate: Rectangle
+        {
+            width: packagesListview.width
+            height: sectionHeaderText.implicitHeight + UM.Theme.getSize("default_margin").height
+
+            color: UM.Theme.getColor("detail_background")
+
+            required property string section
+
+            Label
+            {
+                id: sectionHeaderText
+                anchors.verticalCenter: parent.verticalCenter
+                anchors.left: parent.left
+
+                text: parent.section
+                font: UM.Theme.getFont("large")
+                color: UM.Theme.getColor("text")
+            }
+        }
+
         delegate: Rectangle
         {
             width: packagesListview.width