From 1325c3188244f4f33736a5bb35dd945008323ca2 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Tue, 8 Nov 2016 10:45:43 +0100 Subject: [PATCH 1/9] Remove hardcoded container index --- .../MachineSettingsAction.py | 22 ++++++++++++++----- .../MachineSettingsAction.qml | 22 +++++++++---------- 2 files changed, 28 insertions(+), 16 deletions(-) diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.py b/plugins/MachineSettingsAction/MachineSettingsAction.py index a37aa9c5cb..a6c24232c9 100644 --- a/plugins/MachineSettingsAction/MachineSettingsAction.py +++ b/plugins/MachineSettingsAction/MachineSettingsAction.py @@ -1,7 +1,7 @@ # Copyright (c) 2016 Ultimaker B.V. # Cura is released under the terms of the AGPLv3 or higher. -from PyQt5.QtCore import pyqtSlot +from PyQt5.QtCore import pyqtProperty, pyqtSignal, pyqtSlot from cura.MachineAction import MachineAction import cura.Settings.CuraContainerRegistry @@ -19,23 +19,35 @@ class MachineSettingsAction(MachineAction): super().__init__("MachineSettingsAction", catalog.i18nc("@action", "Machine Settings")) self._qml_url = "MachineSettingsAction.qml" + self._container_index = 0 + cura.Settings.CuraContainerRegistry.getInstance().containerAdded.connect(self._onContainerAdded) def _reset(self): global_container_stack = UM.Application.getInstance().getGlobalContainerStack() if global_container_stack: variant = global_container_stack.findContainer({"type": "variant"}) - if variant and variant.getId() == "empty_variant": + if variant: variant_index = global_container_stack.getContainerIndex(variant) - self._createVariant(global_container_stack, variant_index) + if variant_index != self._container_index: + self._container_index = variant_index + self.containerIndexChanged.emit() + if variant.getId() == "empty_variant": + self._createVariant(global_container_stack, self._container_index) - def _createVariant(self, global_container_stack, variant_index): + def _createVariant(self, global_container_stack): # Create and switch to a variant to store the settings in new_variant = UM.Settings.InstanceContainer(global_container_stack.getName() + "_variant") new_variant.addMetaDataEntry("type", "variant") new_variant.setDefinition(global_container_stack.getBottom()) UM.Settings.ContainerRegistry.getInstance().addContainer(new_variant) - global_container_stack.replaceContainer(variant_index, new_variant) + global_container_stack.replaceContainer(self._container_index, new_variant) + + containerIndexChanged = pyqtSignal() + + @pyqtProperty(int, notify = containerIndexChanged) + def containerIndex(self): + return self._container_index def _onContainerAdded(self, container): # Add this action as a supported action to all machine definitions diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.qml b/plugins/MachineSettingsAction/MachineSettingsAction.qml index a1d9bcfafd..c90eba1e0a 100644 --- a/plugins/MachineSettingsAction/MachineSettingsAction.qml +++ b/plugins/MachineSettingsAction/MachineSettingsAction.qml @@ -377,7 +377,7 @@ Cura.MachineAction containerStackId: Cura.MachineManager.activeMachineId key: "machine_width" watchedProperties: [ "value" ] - storeIndex: 4 + storeIndex: manager.containerIndex } UM.SettingPropertyProvider @@ -387,7 +387,7 @@ Cura.MachineAction containerStackId: Cura.MachineManager.activeMachineId key: "machine_depth" watchedProperties: [ "value" ] - storeIndex: 4 + storeIndex: manager.containerIndex } UM.SettingPropertyProvider @@ -397,7 +397,7 @@ Cura.MachineAction containerStackId: Cura.MachineManager.activeMachineId key: "machine_height" watchedProperties: [ "value" ] - storeIndex: 4 + storeIndex: manager.containerIndex } UM.SettingPropertyProvider @@ -407,7 +407,7 @@ Cura.MachineAction containerStackId: Cura.MachineManager.activeMachineId key: "machine_heated_bed" watchedProperties: [ "value" ] - storeIndex: 4 + storeIndex: manager.containerIndex } UM.SettingPropertyProvider @@ -417,7 +417,7 @@ Cura.MachineAction containerStackId: Cura.MachineManager.activeMachineId key: "machine_center_is_zero" watchedProperties: [ "value" ] - storeIndex: 4 + storeIndex: manager.containerIndex } UM.SettingPropertyProvider @@ -427,7 +427,7 @@ Cura.MachineAction containerStackId: Cura.MachineManager.activeMachineId key: "machine_gcode_flavor" watchedProperties: [ "value" ] - storeIndex: 4 + storeIndex: manager.containerIndex } UM.SettingPropertyProvider @@ -437,7 +437,7 @@ Cura.MachineAction containerStackId: Cura.MachineManager.activeMachineId key: "machine_nozzle_size" watchedProperties: [ "value" ] - storeIndex: 4 + storeIndex: manager.containerIndex } UM.SettingPropertyProvider @@ -447,7 +447,7 @@ Cura.MachineAction containerStackId: Cura.MachineManager.activeMachineId key: "gantry_height" watchedProperties: [ "value" ] - storeIndex: 4 + storeIndex: manager.containerIndex } UM.SettingPropertyProvider @@ -457,7 +457,7 @@ Cura.MachineAction containerStackId: Cura.MachineManager.activeMachineId key: "machine_head_with_fans_polygon" watchedProperties: [ "value" ] - storeIndex: 4 + storeIndex: manager.containerIndex } @@ -468,7 +468,7 @@ Cura.MachineAction containerStackId: Cura.MachineManager.activeMachineId key: "machine_start_gcode" watchedProperties: [ "value" ] - storeIndex: 4 + storeIndex: manager.containerIndex } UM.SettingPropertyProvider @@ -478,7 +478,7 @@ Cura.MachineAction containerStackId: Cura.MachineManager.activeMachineId key: "machine_end_gcode" watchedProperties: [ "value" ] - storeIndex: 4 + storeIndex: manager.containerIndex } } \ No newline at end of file From b6689870f520b3649086c3d59b252339ee71ce90 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Tue, 8 Nov 2016 13:04:24 +0100 Subject: [PATCH 2/9] Make Machine Settings compatible with machines that use variants (UM2+) For machines that use variants, a second variant container is added between the machine definition and the variant. --- .../MachineSettingsAction.py | 71 +++++++++++++------ 1 file changed, 48 insertions(+), 23 deletions(-) diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.py b/plugins/MachineSettingsAction/MachineSettingsAction.py index a6c24232c9..1b26cfcc97 100644 --- a/plugins/MachineSettingsAction/MachineSettingsAction.py +++ b/plugins/MachineSettingsAction/MachineSettingsAction.py @@ -21,27 +21,56 @@ class MachineSettingsAction(MachineAction): self._container_index = 0 - cura.Settings.CuraContainerRegistry.getInstance().containerAdded.connect(self._onContainerAdded) + self._container_registry = UM.Settings.ContainerRegistry.getInstance() + self._container_registry.containerAdded.connect(self._onContainerAdded) def _reset(self): global_container_stack = UM.Application.getInstance().getGlobalContainerStack() - if global_container_stack: - variant = global_container_stack.findContainer({"type": "variant"}) - if variant: - variant_index = global_container_stack.getContainerIndex(variant) - if variant_index != self._container_index: - self._container_index = variant_index - self.containerIndexChanged.emit() - if variant.getId() == "empty_variant": - self._createVariant(global_container_stack, self._container_index) + if not global_container_stack: + return - def _createVariant(self, global_container_stack): - # Create and switch to a variant to store the settings in - new_variant = UM.Settings.InstanceContainer(global_container_stack.getName() + "_variant") - new_variant.addMetaDataEntry("type", "variant") - new_variant.setDefinition(global_container_stack.getBottom()) - UM.Settings.ContainerRegistry.getInstance().addContainer(new_variant) - global_container_stack.replaceContainer(self._container_index, new_variant) + # First check if there is a variant previously generated by this machine + machine_settings_variant = global_container_stack.findContainer({"type": "variant", "subtype": "machine_settings"}) + if not machine_settings_variant: + # There may be a variant created by the UMOUpgradeSelection machine action + machine_settings_variant = global_container_stack.findContainer({"type": "variant", "id": global_container_stack.getName() + "_variant"}) + + if not machine_settings_variant: + variant = global_container_stack.findContainer({"type": "variant"}) + if variant and variant.getId() == "empty_variant": + # There is an empty variant that we can use to store the machine settings + container_index = global_container_stack.getContainerIndex(variant) + machine_settings_variant = self._createMachineVariant(global_container_stack, container_index) + else: + # Add a second variant before the current variant to store the machine settings + machine_settings_variant = self._createMachineVariant(global_container_stack) + + # Notify the UI in which container to store the machine settings data + container_index = global_container_stack.getContainerIndex(machine_settings_variant) + if container_index != self._container_index: + self._container_index = container_index + self.containerIndexChanged.emit() + + def _createMachineSettingsVariant(self, global_container_stack, container_index = None): + machine_settings_variant = UM.Settings.InstanceContainer(global_container_stack.getName() + "_variant") + if global_container_stack.getMetaDataEntry("has_variants", False): + # If the current machine uses visible variants (eg for nozzle selection), make sure + # not to add this variant to the list. + definition = self._container_registry.findDefinitionContainers(id="fdmprinter")[0] + else: + definition = global_container_stack.getBottom() + machine_settings_variant.setDefinition(definition) + machine_settings_variant.addMetaDataEntry("type", "variant") + machine_settings_variant.addMetaDataEntry("subtype", "machine_settings") + + self._container_registry.addContainer(machine_settings_variant) + + if container_index: + global_container_stack.replaceContainer(container_index, machine_settings_variant) + else: + index = len(global_container_stack.getContainers()) - 1 + global_container_stack.addContainer(machine_settings_variant, index) + return machine_settings_variant containerIndexChanged = pyqtSignal() @@ -56,10 +85,6 @@ class MachineSettingsAction(MachineAction): # Multiextruder printers are not currently supported UM.Logger.log("d", "Not attaching MachineSettingsAction to %s; Multi-extrusion printers are not supported", container.getId()) return - if container.getMetaDataEntry("has_variants", False): - # Machines that use variants are not currently supported - UM.Logger.log("d", "Not attaching MachineSettingsAction to %s; Machines that use variants are not supported", container.getId()) - return UM.Application.getInstance().getMachineActionManager().addSupportedAction(container.getId(), self.getKey()) @@ -90,7 +115,7 @@ class MachineSettingsAction(MachineAction): # Set the material container to a sane default if material_container.getId() == "empty_material": search_criteria = { "type": "material", "definition": "fdmprinter", "id": "*pla*" } - containers = UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(**search_criteria) + containers = self._container_registry.findInstanceContainers(**search_criteria) if containers: global_container_stack.replaceContainer(material_index, containers[0]) else: @@ -99,7 +124,7 @@ class MachineSettingsAction(MachineAction): if "has_materials" in global_container_stack.getMetaData(): global_container_stack.removeMetaDataEntry("has_materials") - empty_material = UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(id = "empty_material")[0] + empty_material = self._container_registry.findInstanceContainers(id = "empty_material")[0] global_container_stack.replaceContainer(material_index, empty_material) UM.Application.getInstance().globalContainerStackChanged.emit() \ No newline at end of file From 5f147b6c784b0caab2ea75e0e68aae94b8fa2f9e Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Tue, 8 Nov 2016 13:13:59 +0100 Subject: [PATCH 3/9] Hide nozzle size setting for machines that use variants for nozzle sizes --- plugins/MachineSettingsAction/MachineSettingsAction.qml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.qml b/plugins/MachineSettingsAction/MachineSettingsAction.qml index c90eba1e0a..65968d1817 100644 --- a/plugins/MachineSettingsAction/MachineSettingsAction.qml +++ b/plugins/MachineSettingsAction/MachineSettingsAction.qml @@ -273,17 +273,20 @@ Cura.MachineAction Label { text: catalog.i18nc("@label", "Nozzle size") + visible: !Cura.MachineManager.hasVariants } TextField { id: nozzleSizeField text: machineNozzleSizeProvider.properties.value + visible: !Cura.MachineManager.hasVariants validator: RegExpValidator { regExp: /[0-9\.]{0,6}/ } onEditingFinished: { machineNozzleSizeProvider.setPropertyValue("value", text) } } Label { text: catalog.i18nc("@label", "mm") + visible: !Cura.MachineManager.hasVariants } } } From c8cedb301a3eab52ae8ffd3d23f210e15d36e6bb Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Tue, 8 Nov 2016 14:12:05 +0100 Subject: [PATCH 4/9] Use insertContainer instead of adding a parameter to addContainer --- plugins/MachineSettingsAction/MachineSettingsAction.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.py b/plugins/MachineSettingsAction/MachineSettingsAction.py index 1b26cfcc97..a965c2cc0a 100644 --- a/plugins/MachineSettingsAction/MachineSettingsAction.py +++ b/plugins/MachineSettingsAction/MachineSettingsAction.py @@ -69,7 +69,7 @@ class MachineSettingsAction(MachineAction): global_container_stack.replaceContainer(container_index, machine_settings_variant) else: index = len(global_container_stack.getContainers()) - 1 - global_container_stack.addContainer(machine_settings_variant, index) + global_container_stack.insertContainer(index, machine_settings_variant) return machine_settings_variant containerIndexChanged = pyqtSignal() From 78475d68b34c58655e49894dc0c9a3037afe1217 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Tue, 8 Nov 2016 14:32:27 +0100 Subject: [PATCH 5/9] Fix creating variants --- plugins/MachineSettingsAction/MachineSettingsAction.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.py b/plugins/MachineSettingsAction/MachineSettingsAction.py index a965c2cc0a..8e6ff57b81 100644 --- a/plugins/MachineSettingsAction/MachineSettingsAction.py +++ b/plugins/MachineSettingsAction/MachineSettingsAction.py @@ -40,10 +40,10 @@ class MachineSettingsAction(MachineAction): if variant and variant.getId() == "empty_variant": # There is an empty variant that we can use to store the machine settings container_index = global_container_stack.getContainerIndex(variant) - machine_settings_variant = self._createMachineVariant(global_container_stack, container_index) + machine_settings_variant = self._createMachineSettingsVariant(global_container_stack, container_index) else: # Add a second variant before the current variant to store the machine settings - machine_settings_variant = self._createMachineVariant(global_container_stack) + machine_settings_variant = self._createMachineSettingsVariant(global_container_stack) # Notify the UI in which container to store the machine settings data container_index = global_container_stack.getContainerIndex(machine_settings_variant) @@ -68,8 +68,7 @@ class MachineSettingsAction(MachineAction): if container_index: global_container_stack.replaceContainer(container_index, machine_settings_variant) else: - index = len(global_container_stack.getContainers()) - 1 - global_container_stack.insertContainer(index, machine_settings_variant) + global_container_stack.insertContainer(-1, machine_settings_variant) return machine_settings_variant containerIndexChanged = pyqtSignal() From 497b6f99a4bdb067a9194719d8dae7531f1e0e29 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Tue, 8 Nov 2016 17:40:27 +0100 Subject: [PATCH 6/9] Fix finding existing variant by id ContainerStack.findContainer cannot find a container by id directly. --- .../MachineSettingsAction.py | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.py b/plugins/MachineSettingsAction/MachineSettingsAction.py index 8e6ff57b81..9b52a18af2 100644 --- a/plugins/MachineSettingsAction/MachineSettingsAction.py +++ b/plugins/MachineSettingsAction/MachineSettingsAction.py @@ -32,18 +32,19 @@ class MachineSettingsAction(MachineAction): # First check if there is a variant previously generated by this machine machine_settings_variant = global_container_stack.findContainer({"type": "variant", "subtype": "machine_settings"}) if not machine_settings_variant: - # There may be a variant created by the UMOUpgradeSelection machine action - machine_settings_variant = global_container_stack.findContainer({"type": "variant", "id": global_container_stack.getName() + "_variant"}) + variant = global_container_stack.findContainer({"type": "variant"}) + if variant: + if variant.getId() == global_container_stack.getName() + "_variant": + # There is a variant created by the UMOUpgradeSelection machine action + machine_settings_variant = variant + if variant.getId() == "empty_variant": + # There is an empty variant that we can replace to store the machine settings + container_index = global_container_stack.getContainerIndex(variant) + machine_settings_variant = self._createMachineSettingsVariant(global_container_stack, container_index) if not machine_settings_variant: - variant = global_container_stack.findContainer({"type": "variant"}) - if variant and variant.getId() == "empty_variant": - # There is an empty variant that we can use to store the machine settings - container_index = global_container_stack.getContainerIndex(variant) - machine_settings_variant = self._createMachineSettingsVariant(global_container_stack, container_index) - else: - # Add a second variant before the current variant to store the machine settings - machine_settings_variant = self._createMachineSettingsVariant(global_container_stack) + # Add a new variant to store the machine settings + machine_settings_variant = self._createMachineSettingsVariant(global_container_stack) # Notify the UI in which container to store the machine settings data container_index = global_container_stack.getContainerIndex(machine_settings_variant) From edf4589150f6e41e93f3a0f33730dac97bf8c8a4 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Wed, 9 Nov 2016 11:44:38 +0100 Subject: [PATCH 7/9] Use fixed width font and no wrapping in start/end gcode editor --- plugins/MachineSettingsAction/MachineSettingsAction.qml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.qml b/plugins/MachineSettingsAction/MachineSettingsAction.qml index 65968d1817..f6b20a648a 100644 --- a/plugins/MachineSettingsAction/MachineSettingsAction.qml +++ b/plugins/MachineSettingsAction/MachineSettingsAction.qml @@ -311,6 +311,8 @@ Cura.MachineAction id: machineStartGcodeField width: parent.width height: parent.height - y + font: UM.Theme.getFont("fixed") + wrapMode: TextEdit.NoWrap text: machineStartGcodeProvider.properties.value onActiveFocusChanged: { @@ -333,6 +335,8 @@ Cura.MachineAction id: machineEndGcodeField width: parent.width height: parent.height - y + font: UM.Theme.getFont("fixed") + wrapMode: TextEdit.NoWrap text: machineEndGcodeProvider.properties.value onActiveFocusChanged: { From 9e048aa6adf20afe71ec6fd32ea158304221a539 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Wed, 9 Nov 2016 15:29:23 +0100 Subject: [PATCH 8/9] Get gcode flavor options from propertyprovider instead of hardcoding --- .../MachineSettingsAction.qml | 33 +++++++++++++++---- 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.qml b/plugins/MachineSettingsAction/MachineSettingsAction.qml index f6b20a648a..ea299438f0 100644 --- a/plugins/MachineSettingsAction/MachineSettingsAction.qml +++ b/plugins/MachineSettingsAction/MachineSettingsAction.qml @@ -147,19 +147,40 @@ Cura.MachineAction ComboBox { - model: ["RepRap (Marlin/Sprinter)", "UltiGCode", "Repetier"] + model: ListModel + { + id: flavorModel + Component.onCompleted: + { + // Options come in as a string-representation of an OrderedDict + var options = machineGCodeFlavorProvider.properties.options.match(/^OrderedDict\(\[\((.*)\)\]\)$/); + if(options) + { + options = options[1].split("), (") + for(var i = 0; i < options.length; i++) + { + var option = options[i].substring(1, options[i].length - 1).split("', '") + flavorModel.append({text: option[1], value: option[0]}); + } + } + } + } currentIndex: { - var index = model.indexOf(machineGCodeFlavorProvider.properties.value); - if(index == -1) + var currentValue = machineGCodeFlavorProvider.properties.value; + var index = 0; + for(var i = 0; i < flavorModel.count; i++) { - index = 0; + if(flavorModel.get(i).value == currentValue) { + index = i; + break; + } } return index } onActivated: { - machineGCodeFlavorProvider.setPropertyValue("value", model[index]); + machineGCodeFlavorProvider.setPropertyValue("value", flavorModel.get(index).value); manager.updateHasMaterialsMetadata(); } } @@ -433,7 +454,7 @@ Cura.MachineAction containerStackId: Cura.MachineManager.activeMachineId key: "machine_gcode_flavor" - watchedProperties: [ "value" ] + watchedProperties: [ "value", "options" ] storeIndex: manager.containerIndex } From 21bcb0e434b85c6e05cfd3b9b0410240d18e396d Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Wed, 23 Nov 2016 22:53:03 +0100 Subject: [PATCH 9/9] Create a definition_changes container instead of a second variant --- cura/CuraApplication.py | 2 + .../MachineSettingsAction.py | 50 ++++++------------- .../UMOUpgradeSelection.py | 34 +++++++------ 3 files changed, 36 insertions(+), 50 deletions(-) diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index 7be20305c4..e8c8ba981a 100644 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -380,6 +380,8 @@ class CuraApplication(QtApplication): path = Resources.getStoragePath(self.ResourceTypes.UserInstanceContainer, file_name) elif instance_type == "variant": path = Resources.getStoragePath(self.ResourceTypes.VariantInstanceContainer, file_name) + elif instance_type == "definition_changes": + path = Resources.getStoragePath(self.ResourceTypes.MachineStack, file_name) if path: instance.setPath(path) diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.py b/plugins/MachineSettingsAction/MachineSettingsAction.py index 9b52a18af2..c3a7f50952 100644 --- a/plugins/MachineSettingsAction/MachineSettingsAction.py +++ b/plugins/MachineSettingsAction/MachineSettingsAction.py @@ -4,11 +4,11 @@ from PyQt5.QtCore import pyqtProperty, pyqtSignal, pyqtSlot from cura.MachineAction import MachineAction -import cura.Settings.CuraContainerRegistry import UM.Application import UM.Settings.InstanceContainer import UM.Settings.DefinitionContainer +import UM.Settings.ContainerRegistry import UM.Logger import UM.i18n @@ -29,48 +29,28 @@ class MachineSettingsAction(MachineAction): if not global_container_stack: return - # First check if there is a variant previously generated by this machine - machine_settings_variant = global_container_stack.findContainer({"type": "variant", "subtype": "machine_settings"}) - if not machine_settings_variant: - variant = global_container_stack.findContainer({"type": "variant"}) - if variant: - if variant.getId() == global_container_stack.getName() + "_variant": - # There is a variant created by the UMOUpgradeSelection machine action - machine_settings_variant = variant - if variant.getId() == "empty_variant": - # There is an empty variant that we can replace to store the machine settings - container_index = global_container_stack.getContainerIndex(variant) - machine_settings_variant = self._createMachineSettingsVariant(global_container_stack, container_index) - - if not machine_settings_variant: - # Add a new variant to store the machine settings - machine_settings_variant = self._createMachineSettingsVariant(global_container_stack) + # Make sure there is a definition_changes container to store the machine settings + definition_changes_container = global_container_stack.findContainer({"type": "definition_changes"}) + if not definition_changes_container: + definition_changes_container = self._createDefinitionChangesContainer(global_container_stack) # Notify the UI in which container to store the machine settings data - container_index = global_container_stack.getContainerIndex(machine_settings_variant) + container_index = global_container_stack.getContainerIndex(definition_changes_container) if container_index != self._container_index: self._container_index = container_index self.containerIndexChanged.emit() - def _createMachineSettingsVariant(self, global_container_stack, container_index = None): - machine_settings_variant = UM.Settings.InstanceContainer(global_container_stack.getName() + "_variant") - if global_container_stack.getMetaDataEntry("has_variants", False): - # If the current machine uses visible variants (eg for nozzle selection), make sure - # not to add this variant to the list. - definition = self._container_registry.findDefinitionContainers(id="fdmprinter")[0] - else: - definition = global_container_stack.getBottom() - machine_settings_variant.setDefinition(definition) - machine_settings_variant.addMetaDataEntry("type", "variant") - machine_settings_variant.addMetaDataEntry("subtype", "machine_settings") + def _createDefinitionChangesContainer(self, global_container_stack, container_index = None): + definition_changes_container = UM.Settings.InstanceContainer(global_container_stack.getName() + "_settings") + definition = global_container_stack.getBottom() + definition_changes_container.setDefinition(definition) + definition_changes_container.addMetaDataEntry("type", "definition_changes") - self._container_registry.addContainer(machine_settings_variant) + self._container_registry.addContainer(definition_changes_container) + # Insert definition_changes between the definition and the variant + global_container_stack.insertContainer(-1, definition_changes_container) - if container_index: - global_container_stack.replaceContainer(container_index, machine_settings_variant) - else: - global_container_stack.insertContainer(-1, machine_settings_variant) - return machine_settings_variant + return definition_changes_container containerIndexChanged = pyqtSignal() diff --git a/plugins/UltimakerMachineActions/UMOUpgradeSelection.py b/plugins/UltimakerMachineActions/UMOUpgradeSelection.py index b92dc30c68..e85ec7b434 100644 --- a/plugins/UltimakerMachineActions/UMOUpgradeSelection.py +++ b/plugins/UltimakerMachineActions/UMOUpgradeSelection.py @@ -27,19 +27,23 @@ class UMOUpgradeSelection(MachineAction): def setHeatedBed(self, heated_bed = True): global_container_stack = Application.getInstance().getGlobalContainerStack() if global_container_stack: - variant = global_container_stack.findContainer({"type": "variant"}) - if variant: - if variant.getId() == "empty_variant": - variant_index = global_container_stack.getContainerIndex(variant) - variant = self._createVariant(global_container_stack, variant_index) - variant.setProperty("machine_heated_bed", "value", heated_bed) - self.heatedBedChanged.emit() + # Make sure there is a definition_changes container to store the machine settings + definition_changes_container = global_container_stack.findContainer({"type": "definition_changes"}) + if not definition_changes_container: + definition_changes_container = self._createDefinitionChangesContainer(global_container_stack) - def _createVariant(self, global_container_stack, variant_index): - # Create and switch to a variant to store the settings in - new_variant = UM.Settings.InstanceContainer(global_container_stack.getName() + "_variant") - new_variant.addMetaDataEntry("type", "variant") - new_variant.setDefinition(global_container_stack.getBottom()) - UM.Settings.ContainerRegistry.getInstance().addContainer(new_variant) - global_container_stack.replaceContainer(variant_index, new_variant) - return new_variant \ No newline at end of file + definition_changes_container.setProperty("machine_heated_bed", "value", heated_bed) + self.heatedBedChanged.emit() + + def _createDefinitionChangesContainer(self, global_container_stack): + # Create a definition_changes container to store the settings in and add it to the stack + definition_changes_container = UM.Settings.InstanceContainer(global_container_stack.getName() + "_settings") + definition = global_container_stack.getBottom() + definition_changes_container.setDefinition(definition) + definition_changes_container.addMetaDataEntry("type", "definition_changes") + + UM.Settings.ContainerRegistry.getInstance().addContainer(definition_changes_container) + # Insert definition_changes between the definition and the variant + global_container_stack.insertContainer(-1, definition_changes_container) + + return definition_changes_container