diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py index 8f38eda519..b7fca7e6f9 100755 --- a/cura/Settings/ExtruderManager.py +++ b/cura/Settings/ExtruderManager.py @@ -1,4 +1,4 @@ -# Copyright (c) 2018 Ultimaker B.V. +# Copyright (c) 2019 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. from PyQt5.QtCore import pyqtSignal, pyqtProperty, QObject, QVariant # For communicating data and events to Qt. @@ -320,12 +320,8 @@ class ExtruderManager(QObject): self.resetSelectedObjectExtruders() - ## Adds the extruders of the currently active machine. - def _addCurrentMachineExtruders(self) -> None: - global_stack = self._application.getGlobalContainerStack() - if not global_stack: - return - + ## Adds the extruders to the selected machine. + def addMachineExtruders(self, global_stack: GlobalStack) -> None: extruders_changed = False container_registry = ContainerRegistry.getInstance() global_stack_id = global_stack.getId() @@ -351,8 +347,6 @@ class ExtruderManager(QObject): self.fixSingleExtrusionMachineExtruderDefinition(global_stack) if extruders_changed: self.extrudersChanged.emit(global_stack_id) - self.setActiveExtruderIndex(0) - self.activeExtruderChanged.emit() # After 3.4, all single-extrusion machines have their own extruder definition files instead of reusing # "fdmextruder". We need to check a machine here so its extruder definition is correct according to this. diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 2454d5a67c..4dc8e672aa 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -219,7 +219,10 @@ class MachineManager(QObject): return 0 return len(general_definition_containers[0].getAllKeys()) + ## Triggered when the global container stack is changed in CuraApplication. def _onGlobalContainerChanged(self) -> None: + import traceback + traceback.print_stack() if self._global_container_stack: try: self._global_container_stack.containersChanged.disconnect(self._onContainersChanged) @@ -298,7 +301,6 @@ class MachineManager(QObject): self.blurSettings.emit() # Ensure no-one has focus. container_registry = CuraContainerRegistry.getInstance() - containers = container_registry.findContainerStacks(id = stack_id) if not containers: return @@ -308,21 +310,25 @@ class MachineManager(QObject): # Make sure that the default machine actions for this machine have been added self._application.getMachineActionManager().addDefaultMachineActions(global_stack) - ExtruderManager.getInstance().fixSingleExtrusionMachineExtruderDefinition(global_stack) + extruder_manager = ExtruderManager.getInstance() + extruder_manager.fixSingleExtrusionMachineExtruderDefinition(global_stack) if not global_stack.isValid(): # Mark global stack as invalid ConfigurationErrorMessage.getInstance().addFaultyContainers(global_stack.getId()) return # We're done here self._global_container_stack = global_stack + extruder_manager.addMachineExtruders(global_stack) self._application.setGlobalContainerStack(global_stack) - ExtruderManager.getInstance()._globalContainerStackChanged() - self._onGlobalContainerChanged() # Switch to the first enabled extruder self.updateDefaultExtruder() default_extruder_position = int(self.defaultExtruderPosition) - ExtruderManager.getInstance().setActiveExtruderIndex(default_extruder_position) + old_active_extruder_index = extruder_manager.activeExtruderIndex + extruder_manager.setActiveExtruderIndex(default_extruder_position) + if old_active_extruder_index == default_extruder_position: + # This signal might not have been emitted yet (if it didn't change) but we still want the models to update that depend on it because we changed the contents of the containers too. + extruder_manager.activeExtruderChanged.emit() self.__emitChangedSignals()