diff --git a/cura/Machines/Models/BaseMaterialsModel.py b/cura/Machines/Models/BaseMaterialsModel.py index 4759c8b5b0..ceba1f6eeb 100644 --- a/cura/Machines/Models/BaseMaterialsModel.py +++ b/cura/Machines/Models/BaseMaterialsModel.py @@ -21,6 +21,8 @@ class BaseMaterialsModel(ListModel): MaterialRole = Qt.UserRole + 5 ColorRole = Qt.UserRole + 6 ContainerNodeRole = Qt.UserRole + 7 + ColorCodeRole = Qt.UserRole + 8 + GUIDRole = Qt.UserRole + 9 extruderPositionChanged = pyqtSignal() @@ -31,10 +33,12 @@ class BaseMaterialsModel(ListModel): self.addRoleName(self.RootMaterialIdRole, "root_material_id") self.addRoleName(self.IdRole, "id") + self.addRoleName(self.GUIDRole, "guid") self.addRoleName(self.NameRole, "name") self.addRoleName(self.BrandRole, "brand") self.addRoleName(self.MaterialRole, "material") self.addRoleName(self.ColorRole, "color_name") + self.addRoleName(self.ColorCodeRole, "color_code") self.addRoleName(self.ContainerNodeRole, "container_node") self._extruder_position = 0 diff --git a/cura/Machines/Models/BrandMaterialsModel.py b/cura/Machines/Models/BrandMaterialsModel.py index ad48b3ea21..c5edd6e57c 100644 --- a/cura/Machines/Models/BrandMaterialsModel.py +++ b/cura/Machines/Models/BrandMaterialsModel.py @@ -50,6 +50,7 @@ class BrandMaterialsModel(ListModel): self._extruder_stack = None from cura.CuraApplication import CuraApplication + self._container_registry = CuraApplication.getInstance().getContainerRegistry() self._machine_manager = CuraApplication.getInstance().getMachineManager() self._extruder_manager = CuraApplication.getInstance().getExtruderManager() self._material_manager = CuraApplication.getInstance().getMaterialManager() @@ -104,30 +105,45 @@ class BrandMaterialsModel(ListModel): brand_group_dict = {} for root_material_id, container_node in available_material_dict.items(): metadata = container_node.metadata - brand = metadata["brand"] - # Only add results for generic materials - if brand.lower() == "generic": - continue + # Do not include the materials from a to-be-removed package if bool(metadata.get("removed", False)): continue + # Skip generic materials, and add brands we haven't seen yet to the dict + brand = metadata["brand"] + if brand.lower() == "generic": + continue if brand not in brand_group_dict: brand_group_dict[brand] = {} + # Add material types we haven't seen yet to the dict material_type = metadata["material"] if material_type not in brand_group_dict[brand]: brand_group_dict[brand][material_type] = [] - item = {"root_material_id": root_material_id, - "id": metadata["id"], - "name": metadata["name"], - "brand": metadata["brand"], - "material": metadata["material"], - "color_name": metadata["color_name"], - "container_node": container_node - } + # Now handle the individual materials + item = { + "root_material_id": root_material_id, + # "root_material_id": container_node.metadata["base_file"] <- as written in material management model + "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": False + } brand_group_dict[brand][material_type].append(item) for brand, material_dict in brand_group_dict.items(): diff --git a/cura/Machines/Models/FavoriteMaterialsModel.py b/cura/Machines/Models/FavoriteMaterialsModel.py index cbe59a1a09..9d05f8cb4a 100644 --- a/cura/Machines/Models/FavoriteMaterialsModel.py +++ b/cura/Machines/Models/FavoriteMaterialsModel.py @@ -17,7 +17,7 @@ class FavoriteMaterialsModel(BaseMaterialsModel): self._machine_manager.activeStackChanged.connect(self._update) #Update when switching machines. self._material_manager.materialsUpdated.connect(self._update) #Update when the list of materials changes. - + self._material_manager.favoritesUpdated.connect(self._update) # Update when favorites are changed self._update() def _update(self): @@ -38,7 +38,9 @@ class FavoriteMaterialsModel(BaseMaterialsModel): self.setItems([]) return - favorite_ids = self._preferences.getValue("cura/favorite_materials") + favorite_ids = self._material_manager.getFavorites() + + print("favorite_ids:", favorite_ids) item_list = [] for root_material_id, container_node in available_material_dict.items():