Add generic material packages to materials page

Contributes to CURA-5510
This commit is contained in:
Ian Paschal 2018-07-16 16:13:43 +02:00
parent e3a193d6a6
commit 0bde1487e7
5 changed files with 47 additions and 11 deletions

View file

@ -33,6 +33,7 @@ class PackagesModel(ListModel):
self.addRoleName(Qt.UserRole + 16, "has_configs")
self.addRoleName(Qt.UserRole + 17, "supported_configs")
self.addRoleName(Qt.UserRole + 18, "download_count")
self.addRoleName(Qt.UserRole + 19, "tags")
# List of filters for queries. The result is the union of the each list of results.
self._filter = {} # type: Dict[str, str]
@ -78,13 +79,15 @@ class PackagesModel(ListModel):
"is_installed": package["is_installed"] if "is_installed" in package else False,
"has_configs": has_configs,
"supported_configs": configs_model,
"download_count": package["download_count"] if "download_count" in package else 0
"download_count": package["download_count"] if "download_count" in package else 0,
"tags": package["tags"] if "tags" in package else []
})
# Filter on all the key-word arguments.
for key, value in self._filter.items():
if "*" in value:
if key is "tags":
key_filter = lambda item, value = value: value in item["tags"]
elif "*" in value:
key_filter = lambda candidate, key = key, value = value: self._matchRegExp(candidate, key, value)
else:
key_filter = lambda candidate, key = key, value = value: self._matchString(candidate, key, value)

View file

@ -71,7 +71,8 @@ class Toolbox(QObject, Extension):
"plugins_installed": [],
"materials_showcase": [],
"materials_available": [],
"materials_installed": []
"materials_installed": [],
"materials_generic": []
} # type: Dict[str, List[Any]]
# Models:
@ -83,7 +84,8 @@ class Toolbox(QObject, Extension):
"plugins_installed": PackagesModel(self),
"materials_showcase": AuthorsModel(self),
"materials_available": PackagesModel(self),
"materials_installed": PackagesModel(self)
"materials_installed": PackagesModel(self),
"materials_generic": PackagesModel(self)
} # type: Dict[str, ListModel]
# These properties are for keeping track of the UI state:
@ -178,7 +180,8 @@ class Toolbox(QObject, Extension):
"plugins_showcase": QUrl("{base_url}/showcase".format(base_url=self._api_url)),
"plugins_available": QUrl("{base_url}/packages?package_type=plugin".format(base_url=self._api_url)),
"materials_showcase": QUrl("{base_url}/showcase".format(base_url=self._api_url)),
"materials_available": QUrl("{base_url}/packages?package_type=material".format(base_url=self._api_url))
"materials_available": QUrl("{base_url}/packages?package_type=material".format(base_url=self._api_url)),
"materials_generic": QUrl("{base_url}/packages?package_type=material&tags=generic".format(base_url=self._api_url))
}
# Get the API root for the packages API depending on Cura version settings.
@ -229,6 +232,7 @@ class Toolbox(QObject, Extension):
self._makeRequestByType("plugins_showcase")
self._makeRequestByType("materials_showcase")
self._makeRequestByType("materials_available")
self._makeRequestByType("materials_generic")
# Gather installed packages:
self._updateInstalledModels()
@ -640,6 +644,8 @@ class Toolbox(QObject, Extension):
self._models[type].setFilter({"type": "plugin"})
if type is "authors":
self._models[type].setFilter({"package_types": "material"})
if type is "materials_generic":
self._models[type].setFilter({"tags": "generic"})
self.metadataChanged.emit()
@ -761,6 +767,10 @@ class Toolbox(QObject, Extension):
def materialsInstalledModel(self) -> PackagesModel:
return cast(PackagesModel, self._models["materials_installed"])
@pyqtProperty(QObject, notify=metadataChanged)
def materialsGenericModel(self) -> PackagesModel:
return cast(PackagesModel, self._models["materials_generic"])
# Filter Models: