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

Contribuetes to CURA-5378
This commit is contained in:
Ian Paschal 2018-08-20 17:16:54 +02:00
parent 2410c21839
commit 68bccd8bf7
3 changed files with 36 additions and 14 deletions

View File

@ -21,6 +21,8 @@ class BaseMaterialsModel(ListModel):
MaterialRole = Qt.UserRole + 5 MaterialRole = Qt.UserRole + 5
ColorRole = Qt.UserRole + 6 ColorRole = Qt.UserRole + 6
ContainerNodeRole = Qt.UserRole + 7 ContainerNodeRole = Qt.UserRole + 7
ColorCodeRole = Qt.UserRole + 8
GUIDRole = Qt.UserRole + 9
extruderPositionChanged = pyqtSignal() extruderPositionChanged = pyqtSignal()
@ -31,10 +33,12 @@ class BaseMaterialsModel(ListModel):
self.addRoleName(self.RootMaterialIdRole, "root_material_id") self.addRoleName(self.RootMaterialIdRole, "root_material_id")
self.addRoleName(self.IdRole, "id") self.addRoleName(self.IdRole, "id")
self.addRoleName(self.GUIDRole, "guid")
self.addRoleName(self.NameRole, "name") self.addRoleName(self.NameRole, "name")
self.addRoleName(self.BrandRole, "brand") self.addRoleName(self.BrandRole, "brand")
self.addRoleName(self.MaterialRole, "material") self.addRoleName(self.MaterialRole, "material")
self.addRoleName(self.ColorRole, "color_name") self.addRoleName(self.ColorRole, "color_name")
self.addRoleName(self.ColorCodeRole, "color_code")
self.addRoleName(self.ContainerNodeRole, "container_node") self.addRoleName(self.ContainerNodeRole, "container_node")
self._extruder_position = 0 self._extruder_position = 0

View File

@ -50,6 +50,7 @@ class BrandMaterialsModel(ListModel):
self._extruder_stack = None self._extruder_stack = None
from cura.CuraApplication import CuraApplication from cura.CuraApplication import CuraApplication
self._container_registry = CuraApplication.getInstance().getContainerRegistry()
self._machine_manager = CuraApplication.getInstance().getMachineManager() self._machine_manager = CuraApplication.getInstance().getMachineManager()
self._extruder_manager = CuraApplication.getInstance().getExtruderManager() self._extruder_manager = CuraApplication.getInstance().getExtruderManager()
self._material_manager = CuraApplication.getInstance().getMaterialManager() self._material_manager = CuraApplication.getInstance().getMaterialManager()
@ -104,29 +105,44 @@ class BrandMaterialsModel(ListModel):
brand_group_dict = {} brand_group_dict = {}
for root_material_id, container_node in available_material_dict.items(): for root_material_id, container_node in available_material_dict.items():
metadata = container_node.metadata 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 # Do not include the materials from a to-be-removed package
if bool(metadata.get("removed", False)): if bool(metadata.get("removed", False)):
continue 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: if brand not in brand_group_dict:
brand_group_dict[brand] = {} brand_group_dict[brand] = {}
# Add material types we haven't seen yet to the dict
material_type = metadata["material"] material_type = metadata["material"]
if material_type not in brand_group_dict[brand]: if material_type not in brand_group_dict[brand]:
brand_group_dict[brand][material_type] = [] brand_group_dict[brand][material_type] = []
item = {"root_material_id": root_material_id, # 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"], "id": metadata["id"],
"container_id": metadata["id"], # TODO: Remove duplicate in material manager qml
"guid": metadata["GUID"],
"name": metadata["name"], "name": metadata["name"],
"brand": metadata["brand"], "brand": metadata["brand"],
"description": metadata["description"],
"material": metadata["material"], "material": metadata["material"],
"color_name": metadata["color_name"], "color_name": metadata["color_name"],
"container_node": container_node "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) brand_group_dict[brand][material_type].append(item)

View File

@ -17,7 +17,7 @@ class FavoriteMaterialsModel(BaseMaterialsModel):
self._machine_manager.activeStackChanged.connect(self._update) #Update when switching machines. 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.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() self._update()
def _update(self): def _update(self):
@ -38,7 +38,9 @@ class FavoriteMaterialsModel(BaseMaterialsModel):
self.setItems([]) self.setItems([])
return return
favorite_ids = self._preferences.getValue("cura/favorite_materials") favorite_ids = self._material_manager.getFavorites()
print("favorite_ids:", favorite_ids)
item_list = [] item_list = []
for root_material_id, container_node in available_material_dict.items(): for root_material_id, container_node in available_material_dict.items():