From 21bcb0e434b85c6e05cfd3b9b0410240d18e396d Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Wed, 23 Nov 2016 22:53:03 +0100 Subject: [PATCH] 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