Consolidate models some more

Contributes to CURA-5162, CURA-5378
This commit is contained in:
Ian Paschal 2018-08-23 16:58:23 +02:00
parent 56a5f59964
commit 6be9b5e27f
4 changed files with 44 additions and 56 deletions

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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