mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-06 22:47:29 -06:00
Hide materials belong to a to-be-removed package
This commit is contained in:
parent
5255d6ca2a
commit
76417b7fb2
6 changed files with 46 additions and 10 deletions
|
@ -6,7 +6,6 @@ from cura.Settings.GlobalStack import GlobalStack
|
||||||
|
|
||||||
from UM.PackageManager import PackageManager #The class we're extending.
|
from UM.PackageManager import PackageManager #The class we're extending.
|
||||||
from UM.Resources import Resources #To find storage paths for some resource types.
|
from UM.Resources import Resources #To find storage paths for some resource types.
|
||||||
from UM.Settings.ContainerRegistry import ContainerRegistry
|
|
||||||
|
|
||||||
|
|
||||||
class CuraPackageManager(PackageManager):
|
class CuraPackageManager(PackageManager):
|
||||||
|
@ -25,14 +24,14 @@ class CuraPackageManager(PackageManager):
|
||||||
# The list consists of 3-tuples: (global_stack, extruder_nr, container_id)
|
# The list consists of 3-tuples: (global_stack, extruder_nr, container_id)
|
||||||
def getMachinesUsingPackage(self, package_id: str):
|
def getMachinesUsingPackage(self, package_id: str):
|
||||||
ids = self.getPackageContainerIds(package_id)
|
ids = self.getPackageContainerIds(package_id)
|
||||||
container_stacks = ContainerRegistry.getInstance().findContainerStacks()
|
container_stacks = self._application.getContainerRegistry().findContainerStacks()
|
||||||
global_stacks = [container_stack for container_stack in container_stacks if isinstance(container_stack, GlobalStack)]
|
global_stacks = [container_stack for container_stack in container_stacks if isinstance(container_stack, GlobalStack)]
|
||||||
machine_with_materials = []
|
machine_with_materials = []
|
||||||
machine_with_qualities = []
|
machine_with_qualities = []
|
||||||
for container_id in ids:
|
for container_id in ids:
|
||||||
for global_stack in global_stacks:
|
for global_stack in global_stacks:
|
||||||
for extruder_nr, extruder_stack in global_stack.extruders.items():
|
for extruder_nr, extruder_stack in global_stack.extruders.items():
|
||||||
if container_id == extruder_stack.material.getId() or container_id == extruder_stack.material.getMetaData().get("base_file"):
|
if container_id in (extruder_stack.material.getId(), extruder_stack.material.getMetaData().get("base_file")):
|
||||||
machine_with_materials.append((global_stack, extruder_nr, container_id))
|
machine_with_materials.append((global_stack, extruder_nr, container_id))
|
||||||
if container_id == extruder_stack.quality.getId():
|
if container_id == extruder_stack.quality.getId():
|
||||||
machine_with_qualities.append((global_stack, extruder_nr, container_id))
|
machine_with_qualities.append((global_stack, extruder_nr, container_id))
|
||||||
|
|
|
@ -1,8 +1,11 @@
|
||||||
# Copyright (c) 2018 Ultimaker B.V.
|
# Copyright (c) 2018 Ultimaker B.V.
|
||||||
# Cura is released under the terms of the LGPLv3 or higher.
|
# Cura is released under the terms of the LGPLv3 or higher.
|
||||||
|
|
||||||
from typing import List
|
from typing import List, TYPE_CHECKING
|
||||||
from cura.Machines.MaterialNode import MaterialNode #For type checking.
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from cura.Machines.MaterialNode import MaterialNode
|
||||||
|
|
||||||
|
|
||||||
## A MaterialGroup represents a group of material InstanceContainers that are derived from a single material profile.
|
## A MaterialGroup represents a group of material InstanceContainers that are derived from a single material profile.
|
||||||
# The main InstanceContainer which has the ID of the material profile file name is called the "root_material". For
|
# The main InstanceContainer which has the ID of the material profile file name is called the "root_material". For
|
||||||
|
@ -18,11 +21,11 @@ from cura.Machines.MaterialNode import MaterialNode #For type checking.
|
||||||
class MaterialGroup:
|
class MaterialGroup:
|
||||||
__slots__ = ("name", "is_read_only", "root_material_node", "derived_material_node_list")
|
__slots__ = ("name", "is_read_only", "root_material_node", "derived_material_node_list")
|
||||||
|
|
||||||
def __init__(self, name: str, root_material_node: MaterialNode) -> None:
|
def __init__(self, name: str, root_material_node: "MaterialNode") -> None:
|
||||||
self.name = name
|
self.name = name
|
||||||
self.is_read_only = False
|
self.is_read_only = False
|
||||||
self.root_material_node = root_material_node # type: MaterialNode
|
self.root_material_node = root_material_node # type: MaterialNode
|
||||||
self.derived_material_node_list = [] #type: List[MaterialNode]
|
self.derived_material_node_list = [] # type: List[MaterialNode]
|
||||||
|
|
||||||
def __str__(self) -> str:
|
def __str__(self) -> str:
|
||||||
return "%s[%s]" % (self.__class__.__name__, self.name)
|
return "%s[%s]" % (self.__class__.__name__, self.name)
|
||||||
|
|
|
@ -109,6 +109,10 @@ class BrandMaterialsModel(ListModel):
|
||||||
if brand.lower() == "generic":
|
if brand.lower() == "generic":
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
# Do not include the materials from a to-be-removed package
|
||||||
|
if bool(metadata.get("removed", False)):
|
||||||
|
continue
|
||||||
|
|
||||||
if brand not in brand_group_dict:
|
if brand not in brand_group_dict:
|
||||||
brand_group_dict[brand] = {}
|
brand_group_dict[brand] = {}
|
||||||
|
|
||||||
|
|
|
@ -41,10 +41,15 @@ class GenericMaterialsModel(BaseMaterialsModel):
|
||||||
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():
|
||||||
metadata = container_node.metadata
|
metadata = container_node.metadata
|
||||||
|
|
||||||
# Only add results for generic materials
|
# Only add results for generic materials
|
||||||
if metadata["brand"].lower() != "generic":
|
if metadata["brand"].lower() != "generic":
|
||||||
continue
|
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,
|
item = {"root_material_id": root_material_id,
|
||||||
"id": metadata["id"],
|
"id": metadata["id"],
|
||||||
"name": metadata["name"],
|
"name": metadata["name"],
|
||||||
|
|
|
@ -360,16 +360,38 @@ class Toolbox(QObject, Extension):
|
||||||
material_manager = application.getMaterialManager()
|
material_manager = application.getMaterialManager()
|
||||||
quality_manager = application.getQualityManager()
|
quality_manager = application.getQualityManager()
|
||||||
machine_manager = application.getMachineManager()
|
machine_manager = application.getMachineManager()
|
||||||
for global_stack, extruder_nr, _ in self._package_used_materials:
|
|
||||||
|
for global_stack, extruder_nr, container_id in self._package_used_materials:
|
||||||
default_material_node = material_manager.getDefaultMaterial(global_stack, extruder_nr, global_stack.extruders[extruder_nr].variant.getName())
|
default_material_node = material_manager.getDefaultMaterial(global_stack, extruder_nr, global_stack.extruders[extruder_nr].variant.getName())
|
||||||
machine_manager.setMaterial(extruder_nr, default_material_node, global_stack = global_stack)
|
machine_manager.setMaterial(extruder_nr, default_material_node, global_stack = global_stack)
|
||||||
for global_stack, extruder_nr, _ in self._package_used_qualities:
|
for global_stack, extruder_nr, container_id in self._package_used_qualities:
|
||||||
default_quality_group = quality_manager.getDefaultQualityType(global_stack)
|
default_quality_group = quality_manager.getDefaultQualityType(global_stack)
|
||||||
machine_manager.setQualityGroup(default_quality_group, global_stack = global_stack)
|
machine_manager.setQualityGroup(default_quality_group, global_stack = global_stack)
|
||||||
|
|
||||||
|
self._markPackageMaterialsAsRemove(self._package_id_to_uninstall)
|
||||||
|
|
||||||
self.uninstall(self._package_id_to_uninstall)
|
self.uninstall(self._package_id_to_uninstall)
|
||||||
self._resetUninstallVariables()
|
self._resetUninstallVariables()
|
||||||
self.closeConfirmResetDialog()
|
self.closeConfirmResetDialog()
|
||||||
|
|
||||||
|
def _markPackageMaterialsAsRemove(self, package_id: str) -> None:
|
||||||
|
container_registry = self._application.getContainerRegistry()
|
||||||
|
|
||||||
|
all_containers = self._package_manager.getPackageContainerIds(package_id)
|
||||||
|
for container_id in all_containers:
|
||||||
|
containers = container_registry.findInstanceContainers(id = container_id)
|
||||||
|
if not containers:
|
||||||
|
continue
|
||||||
|
container = containers[0]
|
||||||
|
if container.getMetaDataEntry("type") != "material":
|
||||||
|
continue
|
||||||
|
root_material_id = container.getMetaDataEntry("base_file")
|
||||||
|
root_material_containers = container_registry.findInstanceContainers(id = root_material_id)
|
||||||
|
if not root_material_containers:
|
||||||
|
continue
|
||||||
|
root_material_container = root_material_containers[0]
|
||||||
|
root_material_container.setMetaDataEntry("removed", True)
|
||||||
|
|
||||||
@pyqtSlot(str)
|
@pyqtSlot(str)
|
||||||
def uninstall(self, package_id: str) -> None:
|
def uninstall(self, package_id: str) -> None:
|
||||||
self._package_manager.removePackage(package_id, force_add = True)
|
self._package_manager.removePackage(package_id, force_add = True)
|
||||||
|
|
|
@ -63,6 +63,7 @@ class XmlMaterialProfile(InstanceContainer):
|
||||||
|
|
||||||
# Prevent recursion
|
# Prevent recursion
|
||||||
if not apply_to_all:
|
if not apply_to_all:
|
||||||
|
super().addMetaDataEntry(key, value)
|
||||||
super().setMetaDataEntry(key, value)
|
super().setMetaDataEntry(key, value)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
@ -74,12 +75,14 @@ class XmlMaterialProfile(InstanceContainer):
|
||||||
# Update the root material container
|
# Update the root material container
|
||||||
root_material_container = material_group.root_material_node.getContainer()
|
root_material_container = material_group.root_material_node.getContainer()
|
||||||
if root_material_container is not None:
|
if root_material_container is not None:
|
||||||
|
root_material_container.addMetaDataEntry(key, value)
|
||||||
root_material_container.setMetaDataEntry(key, value, apply_to_all = False)
|
root_material_container.setMetaDataEntry(key, value, apply_to_all = False)
|
||||||
|
|
||||||
# Update all containers derived from it
|
# Update all containers derived from it
|
||||||
for node in material_group.derived_material_node_list:
|
for node in material_group.derived_material_node_list:
|
||||||
container = node.getContainer()
|
container = node.getContainer()
|
||||||
if container is not None:
|
if container is not None:
|
||||||
|
container.addMetaDataEntry(key, value)
|
||||||
container.setMetaDataEntry(key, value, apply_to_all = False)
|
container.setMetaDataEntry(key, value, apply_to_all = False)
|
||||||
|
|
||||||
## Overridden from InstanceContainer, similar to setMetaDataEntry.
|
## Overridden from InstanceContainer, similar to setMetaDataEntry.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue