diff --git a/cura/Settings/ExtrudersModel.py b/cura/Settings/ExtrudersModel.py index c3db797e19..ae8cff3c9a 100644 --- a/cura/Settings/ExtrudersModel.py +++ b/cura/Settings/ExtrudersModel.py @@ -24,6 +24,8 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel): ## Human-readable name of the extruder. NameRole = Qt.UserRole + 2 + ## Is the extruder enabled? + EnabledRole = Qt.UserRole + 9 ## Colour of the material loaded in the extruder. ColorRole = Qt.UserRole + 3 @@ -58,6 +60,7 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel): self.addRoleName(self.IdRole, "id") self.addRoleName(self.NameRole, "name") + self.addRoleName(self.EnabledRole, "enabled") self.addRoleName(self.ColorRole, "color") self.addRoleName(self.IndexRole, "index") self.addRoleName(self.DefinitionRole, "definition") @@ -185,6 +188,7 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel): item = { "id": extruder.getId(), "name": extruder.getName(), + "enabled": extruder.isEnabled, "color": color, "index": position, "definition": extruder.getBottom().getId(), diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 52058789c3..5faebd4dac 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -811,10 +811,12 @@ class MachineManager(QObject): def setExtruderEnabled(self, position: int, enabled) -> None: extruder = self.getExtruder(position) extruder.setEnabled(enabled) + self.updateDefaultExtruder() if enabled == False: - self.updateDefaultExtruder() self.correctExtruderSettings() self.extruderChanged.emit() + # HACK to update items in SettingExtruder + ExtruderManager.getInstance().extrudersChanged.emit(self._global_container_stack.getId()) def _onMachineNameChanged(self): self.globalContainerChanged.emit() diff --git a/resources/qml/Settings/SettingExtruder.qml b/resources/qml/Settings/SettingExtruder.qml index 17a0dd5eee..3db5d327f4 100644 --- a/resources/qml/Settings/SettingExtruder.qml +++ b/resources/qml/Settings/SettingExtruder.qml @@ -17,14 +17,22 @@ SettingItem id: control anchors.fill: parent - model: Cura.ExtrudersModel { onModelChanged: control.color = getItem(control.currentIndex).color } + model: Cura.ExtrudersModel { + onModelChanged: { + control.color = getItem(control.currentIndex).color; + } + } textRole: "name" onActivated: { - forceActiveFocus(); - propertyProvider.setPropertyValue("value", model.getItem(index).index); + if (model.getItem(index).enabled) { + forceActiveFocus(); + propertyProvider.setPropertyValue("value", model.getItem(index).index); + } else { + currentIndex = propertyProvider.properties.value; // keep the old value + } } onActiveFocusChanged: @@ -173,7 +181,13 @@ SettingItem { text: model.name renderType: Text.NativeRendering - color: UM.Theme.getColor("setting_control_text") + color: { + if (model.enabled) { + UM.Theme.getColor("setting_control_text") + } else { + UM.Theme.getColor("action_button_disabled_text"); + } + } font: UM.Theme.getFont("default") elide: Text.ElideRight verticalAlignment: Text.AlignVCenter