diff --git a/plugins/Marketplace/LocalPackageList.py b/plugins/Marketplace/LocalPackageList.py index ff221ed606..f71c5e4f06 100644 --- a/plugins/Marketplace/LocalPackageList.py +++ b/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) diff --git a/plugins/Marketplace/PackageModel.py b/plugins/Marketplace/PackageModel.py index 5ca25b370b..0ade18839e 100644 --- a/plugins/Marketplace/PackageModel.py +++ b/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 diff --git a/plugins/Marketplace/resources/qml/Packages.qml b/plugins/Marketplace/resources/qml/Packages.qml index cdc066626c..e5414e3f67 100644 --- a/plugins/Marketplace/resources/qml/Packages.qml +++ b/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