diff --git a/plugins/Marketplace/PackageList.py b/plugins/Marketplace/PackageList.py index 62cac7228e..8a70096802 100644 --- a/plugins/Marketplace/PackageList.py +++ b/plugins/Marketplace/PackageList.py @@ -2,9 +2,14 @@ # Cura is released under the terms of the LGPLv3 or higher. from PyQt5.QtCore import Qt - +from typing import List, TYPE_CHECKING from UM.Qt.ListModel import ListModel +from .PackageModel import PackageModel # This list is a list of PackageModels. + +if TYPE_CHECKING: + from PyQt5.QtCore import QObject + class PackageList(ListModel): """ Represents a list of packages to be displayed in the interface. @@ -13,9 +18,12 @@ class PackageList(ListModel): paginated. """ - PackageIDRole = Qt.UserRole + 1 - DisplayNameRole = Qt.UserRole + 2 - # TODO: Add more roles here when we need to display more information about packages. + PackageRole = Qt.UserRole + 1 + + def __init__(self, parent: "QObject" = None): + super().__init__(parent) + + self._packages: List[PackageModel] = [] def _update(self) -> None: # TODO: Get list of packages from Marketplace class. diff --git a/plugins/Marketplace/PackageModel.py b/plugins/Marketplace/PackageModel.py new file mode 100644 index 0000000000..340a26c451 --- /dev/null +++ b/plugins/Marketplace/PackageModel.py @@ -0,0 +1,25 @@ +# Copyright (c) 2021 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +from PyQt5.QtCore import pyqtProperty, QObject + +class PackageModel(QObject): + """ + Represents a package, containing all the relevant information to be displayed about a package. + + Effectively this behaves like a glorified named tuple, but as a QObject so that its properties can be obtained from + QML. + """ + + def __init__(self, package_id: str, display_name: str, parent: QObject = None): + super().__init__(parent) + self._package_id = package_id + self._display_name = display_name + + @pyqtProperty(str, constant = True) + def packageId(self) -> str: + return self._package_id + + @pyqtProperty(str, constant = True) + def displayName(self) -> str: + return self._display_name