Fix VariantManager.getVariant() and simplify NozzleModel

CURA-4606
This commit is contained in:
Lipu Fei 2018-03-12 15:23:49 +01:00
parent 55c3f06e73
commit 220e4a64c6
2 changed files with 23 additions and 11 deletions

View file

@ -21,28 +21,32 @@ class NozzleModel(ListModel):
self.addRoleName(self.HotendNameRole, "hotend_name") self.addRoleName(self.HotendNameRole, "hotend_name")
self.addRoleName(self.ContainerNodeRole, "container_node") self.addRoleName(self.ContainerNodeRole, "container_node")
Application.getInstance().globalContainerStackChanged.connect(self._update) self._application = Application.getInstance()
Application.getInstance().getMachineManager().activeVariantChanged.connect(self._update) self._machine_manager = self._application.getMachineManager()
Application.getInstance().getMachineManager().activeStackChanged.connect(self._update) self._variant_manager = self._application.getVariantManager()
Application.getInstance().getMachineManager().activeMaterialChanged.connect(self._update)
self._machine_manager.globalContainerChanged.connect(self._update)
self._machine_manager.activeVariantChanged.connect(self._update)
self._machine_manager.activeStackChanged.connect(self._update)
self._machine_manager.activeMaterialChanged.connect(self._update)
def _update(self): def _update(self):
Logger.log("d", "Updating {model_class_name}.".format(model_class_name = self.__class__.__name__)) Logger.log("d", "Updating {model_class_name}.".format(model_class_name = self.__class__.__name__))
self.items.clear() self.items.clear()
variant_manager = Application.getInstance()._variant_manager global_stack = self._machine_manager.activeMachine
active_global_stack = Application.getInstance().getMachineManager()._global_container_stack if global_stack is None:
if active_global_stack is None:
self.setItems([]) self.setItems([])
return return
has_variants = parseBool(active_global_stack.getMetaDataEntry("has_variants", False)) has_variants = parseBool(global_stack.getMetaDataEntry("has_variants", False))
if not has_variants: if not has_variants:
self.setItems([]) self.setItems([])
return return
variant_node_dict = variant_manager.getVariantNodes(active_global_stack) from cura.Machines.VariantManager import VariantType
variant_node_dict = self._variant_manager.getVariantNodes(global_stack, VariantType.NOZZLE)
if not variant_node_dict: if not variant_node_dict:
self.setItems([]) self.setItems([])
return return

View file

@ -83,11 +83,19 @@ class VariantManager:
# Almost the same as getVariantMetadata() except that this returns an InstanceContainer if present. # Almost the same as getVariantMetadata() except that this returns an InstanceContainer if present.
# #
def getVariantNode(self, machine_definition_id: str, variant_name: str, def getVariantNode(self, machine_definition_id: str, variant_name: str,
variant_type: Optional["VariantType"] = VariantType.NOZZLE) -> Optional["ContainerNode"]: variant_type: Optional["VariantType"] = None) -> Optional["ContainerNode"]:
if variant_type is None:
variant_node = None
variant_type_dict = self._machine_to_variant_dict_map[machine_definition_id]
for variant_dict in variant_type_dict.values():
if variant_name in variant_dict:
variant_node = variant_dict[variant_name]
break
return variant_node
return self._machine_to_variant_dict_map[machine_definition_id].get(variant_type, {}).get(variant_name) return self._machine_to_variant_dict_map[machine_definition_id].get(variant_type, {}).get(variant_name)
def getVariantNodes(self, machine: "GlobalStack", def getVariantNodes(self, machine: "GlobalStack",
variant_type: Optional["VariantType"] = VariantType.NOZZLE) -> dict: variant_type: Optional["VariantType"] = None) -> dict:
machine_definition_id = machine.definition.getId() machine_definition_id = machine.definition.getId()
return self._machine_to_variant_dict_map.get(machine_definition_id, {}).get(variant_type, {}) return self._machine_to_variant_dict_map.get(machine_definition_id, {}).get(variant_type, {})