From 6be9b5e27fb8cc2e0d3a9941b3824b40bc94d20a Mon Sep 17 00:00:00 2001 From: Ian Paschal Date: Thu, 23 Aug 2018 16:58:23 +0200 Subject: [PATCH] Consolidate models some more Contributes to CURA-5162, CURA-5378 --- cura/Machines/Models/BaseMaterialsModel.py | 42 ++++++++++++++++--- .../Machines/Models/FavoriteMaterialsModel.py | 13 +----- cura/Machines/Models/GenericMaterialsModel.py | 21 +++------- cura/Machines/Models/MaterialBrandsModel.py | 24 +---------- 4 files changed, 44 insertions(+), 56 deletions(-) diff --git a/cura/Machines/Models/BaseMaterialsModel.py b/cura/Machines/Models/BaseMaterialsModel.py index 122c38804c..ff006d00ae 100644 --- a/cura/Machines/Models/BaseMaterialsModel.py +++ b/cura/Machines/Models/BaseMaterialsModel.py @@ -21,6 +21,7 @@ class BaseMaterialsModel(ListModel): self._application = CuraApplication.getInstance() # Make these managers available to all material models + self._container_registry = self._application.getInstance().getContainerRegistry() self._extruder_manager = self._application.getExtruderManager() self._machine_manager = self._application.getMachineManager() self._material_manager = self._application.getMaterialManager() @@ -39,11 +40,17 @@ class BaseMaterialsModel(ListModel): self.addRoleName(Qt.UserRole + 3, "GUID") self.addRoleName(Qt.UserRole + 4, "name") self.addRoleName(Qt.UserRole + 5, "brand") - self.addRoleName(Qt.UserRole + 6, "material") - self.addRoleName(Qt.UserRole + 7, "color_name") - self.addRoleName(Qt.UserRole + 8, "color_code") - self.addRoleName(Qt.UserRole + 9, "container_node") - self.addRoleName(Qt.UserRole + 10, "is_favorite") + self.addRoleName(Qt.UserRole + 6, "description") + self.addRoleName(Qt.UserRole + 7, "material") + self.addRoleName(Qt.UserRole + 8, "color_name") + self.addRoleName(Qt.UserRole + 9, "color_code") + self.addRoleName(Qt.UserRole + 10, "density") + self.addRoleName(Qt.UserRole + 11, "diameter") + self.addRoleName(Qt.UserRole + 12, "approximate_diameter") + self.addRoleName(Qt.UserRole + 13, "adhesion_info") + self.addRoleName(Qt.UserRole + 14, "is_read_only") + self.addRoleName(Qt.UserRole + 15, "container_node") + self.addRoleName(Qt.UserRole + 16, "is_favorite") self._extruder_position = 0 self._extruder_stack = None @@ -101,3 +108,28 @@ class BaseMaterialsModel(ListModel): return True + ## This is another convenience function which is shared by all material + # models so it's put here to avoid having so much duplicated code. + def _createMaterialItem(self, root_material_id, container_node): + metadata = container_node.metadata + item = { + "root_material_id": root_material_id, + "id": metadata["id"], + "container_id": metadata["id"], # TODO: Remove duplicate in material manager qml + "GUID": metadata["GUID"], + "name": metadata["name"], + "brand": metadata["brand"], + "description": metadata["description"], + "material": metadata["material"], + "color_name": metadata["color_name"], + "color_code": metadata["color_code"], + "density": metadata.get("properties", {}).get("density", ""), + "diameter": metadata.get("properties", {}).get("diameter", ""), + "approximate_diameter": metadata["approximate_diameter"], + "adhesion_info": metadata["adhesion_info"], + "is_read_only": self._container_registry.isReadOnly(metadata["id"]), + "container_node": container_node, + "is_favorite": root_material_id in self._favorite_ids + } + return item + diff --git a/cura/Machines/Models/FavoriteMaterialsModel.py b/cura/Machines/Models/FavoriteMaterialsModel.py index 34e148e2fd..3c5ca226fe 100644 --- a/cura/Machines/Models/FavoriteMaterialsModel.py +++ b/cura/Machines/Models/FavoriteMaterialsModel.py @@ -34,18 +34,7 @@ class FavoriteMaterialsModel(BaseMaterialsModel): if root_material_id not in self._favorite_ids: continue - item = { - "root_material_id": root_material_id, - "id": metadata["id"], - "GUID": metadata["GUID"], - "name": metadata["name"], - "brand": metadata["brand"], - "material": metadata["material"], - "color_name": metadata["color_name"], - "color_code": metadata["color_code"], - "container_node": container_node, - "is_favorite": True # Don't need to set since we only include favorites anyway - } + item = self._createMaterialItem(root_material_id, container_node) item_list.append(item) # Sort the item list alphabetically by name diff --git a/cura/Machines/Models/GenericMaterialsModel.py b/cura/Machines/Models/GenericMaterialsModel.py index 3432f3e35c..27e6fdfd7c 100644 --- a/cura/Machines/Models/GenericMaterialsModel.py +++ b/cura/Machines/Models/GenericMaterialsModel.py @@ -25,26 +25,15 @@ class GenericMaterialsModel(BaseMaterialsModel): for root_material_id, container_node in self._available_materials.items(): metadata = container_node.metadata - # Only add results for generic materials - if metadata["brand"].lower() != "generic": - continue - # Do not include the materials from a to-be-removed package if bool(metadata.get("removed", False)): continue - item = { - "root_material_id": root_material_id, - "id": metadata["id"], - "GUID": metadata["GUID"], - "name": metadata["name"], - "brand": metadata["brand"], - "material": metadata["material"], - "color_name": metadata["color_name"], - "color_code": metadata["color_code"], - "container_node": container_node, - "is_favorite": root_material_id in self._favorite_ids - } + # Only add results for generic materials + if metadata["brand"].lower() != "generic": + continue + + item = self._createMaterialItem(root_material_id, container_node) item_list.append(item) # Sort the item list alphabetically by name diff --git a/cura/Machines/Models/MaterialBrandsModel.py b/cura/Machines/Models/MaterialBrandsModel.py index 89d9fc7bfd..3f917abb16 100644 --- a/cura/Machines/Models/MaterialBrandsModel.py +++ b/cura/Machines/Models/MaterialBrandsModel.py @@ -21,13 +21,9 @@ class MaterialBrandsModel(BaseMaterialsModel): def __init__(self, parent = None): super().__init__(parent) - from cura.CuraApplication import CuraApplication - self.addRoleName(Qt.UserRole + 1, "name") self.addRoleName(Qt.UserRole + 2, "material_types") - self._container_registry = CuraApplication.getInstance().getContainerRegistry() - self._update() def _update(self): @@ -64,25 +60,7 @@ class MaterialBrandsModel(BaseMaterialsModel): brand_group_dict[brand][material_type] = [] # Now handle the individual materials - item = { - "root_material_id": root_material_id, - "id": metadata["id"], - "container_id": metadata["id"], # TODO: Remove duplicate in material manager qml - "GUID": metadata["GUID"], - "name": metadata["name"], - "brand": metadata["brand"], - "description": metadata["description"], - "material": metadata["material"], - "color_name": metadata["color_name"], - "color_code": metadata["color_code"], - "density": metadata.get("properties", {}).get("density", ""), - "diameter": metadata.get("properties", {}).get("diameter", ""), - "approximate_diameter": metadata["approximate_diameter"], - "adhesion_info": metadata["adhesion_info"], - "is_read_only": self._container_registry.isReadOnly(metadata["id"]), - "container_node": container_node, - "is_favorite": root_material_id in self._favorite_ids - } + item = self._createMaterialItem(root_material_id, container_node) brand_group_dict[brand][material_type].append(item) # Part 2: Organize the tree into models