Browse Source

Improve the Favorites, Base, and Brand materials models (WIP)

Contribuetes to CURA-5378
Ian Paschal 6 years ago
parent
commit
68bccd8bf7

+ 4 - 0
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

+ 28 - 12
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():

+ 4 - 2
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():