diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py index 3bf248970e..fa045e9496 100755 --- a/cura/Settings/ExtruderManager.py +++ b/cura/Settings/ExtruderManager.py @@ -30,10 +30,11 @@ class ExtruderManager(QObject): def __init__(self, parent = None): super().__init__(parent) + self._application = Application.getInstance() + self._extruder_trains = {} # Per machine, a dictionary of extruder container stack IDs. Only for separately defined extruders. self._active_extruder_index = -1 # Indicates the index of the active extruder stack. -1 means no active extruder stack self._selected_object_extruders = [] - self._global_container_stack_definition_id = None self._addCurrentMachineExtruders() #Application.getInstance().globalContainerStackChanged.connect(self._globalContainerStackChanged) @@ -365,10 +366,6 @@ class ExtruderManager(QObject): return result[:machine_extruder_count] def _globalContainerStackChanged(self) -> None: - global_container_stack = Application.getInstance().getGlobalContainerStack() - if global_container_stack and global_container_stack.getBottom() and global_container_stack.getBottom().getId() != self._global_container_stack_definition_id: - self._global_container_stack_definition_id = global_container_stack.getBottom().getId() - # If the global container changed, the machine changed and might have extruders that were not registered yet self._addCurrentMachineExtruders() @@ -376,7 +373,7 @@ class ExtruderManager(QObject): ## Adds the extruders of the currently active machine. def _addCurrentMachineExtruders(self) -> None: - global_stack = Application.getInstance().getGlobalContainerStack() + global_stack = self._application.getGlobalContainerStack() extruders_changed = False if global_stack: diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index cbb201610b..6fc9245ffc 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -311,10 +311,11 @@ class MachineManager(QObject): ExtruderManager.getInstance().setActiveExtruderIndex(0) # Switch to first extruder Application.getInstance().setGlobalContainerStack(global_stack) self._global_container_stack = global_stack - self.globalContainerChanged.emit() - self._onGlobalContainerChanged() + Application.getInstance().setGlobalContainerStack(global_stack) ExtruderManager.getInstance()._globalContainerStackChanged() self._initMachineState(containers[0]) + self.globalContainerChanged.emit() + self._onGlobalContainerChanged() self.__emitChangedSignals() diff --git a/resources/qml/Menus/NozzleMenu.qml b/resources/qml/Menus/NozzleMenu.qml index 153bd88220..0b961a5a11 100644 --- a/resources/qml/Menus/NozzleMenu.qml +++ b/resources/qml/Menus/NozzleMenu.qml @@ -13,22 +13,12 @@ Menu title: "Nozzle" property int extruderIndex: 0 - property QtObject extruderStack: Cura.MachineManager.getExtruder(menu.extruderIndex) - property bool hasExtruderStack: extruderStack != null Cura.NozzleModel { id: nozzleModel } - Connections - { - target: Cura.MachineManager - onGlobalContainerChanged: { - menu.extruderStack = Cura.MachineManager.getExtruder(menu.extruderIndex); - } - } - Instantiator { model: nozzleModel @@ -37,10 +27,12 @@ Menu { text: model.hotend_name checkable: true - checked: menu.hasExtruderStack && extruderStack.variant.name == model.hotend_name + checked: { + return Cura.MachineManager.activeVariantNames[extruderIndex] == model.hotend_name + } exclusiveGroup: group onTriggered: { - Cura.MachineManager.setVariantGroup(extruderIndex, model.container_node); + Cura.MachineManager.setVariantGroup(menu.extruderIndex, model.container_node); } }