Create a definition_changes container instead of a second variant

This commit is contained in:
fieldOfView 2016-11-23 22:53:03 +01:00
parent 9e048aa6ad
commit 21bcb0e434
3 changed files with 36 additions and 50 deletions

View file

@ -380,6 +380,8 @@ class CuraApplication(QtApplication):
path = Resources.getStoragePath(self.ResourceTypes.UserInstanceContainer, file_name) path = Resources.getStoragePath(self.ResourceTypes.UserInstanceContainer, file_name)
elif instance_type == "variant": elif instance_type == "variant":
path = Resources.getStoragePath(self.ResourceTypes.VariantInstanceContainer, file_name) path = Resources.getStoragePath(self.ResourceTypes.VariantInstanceContainer, file_name)
elif instance_type == "definition_changes":
path = Resources.getStoragePath(self.ResourceTypes.MachineStack, file_name)
if path: if path:
instance.setPath(path) instance.setPath(path)

View file

@ -4,11 +4,11 @@
from PyQt5.QtCore import pyqtProperty, pyqtSignal, pyqtSlot from PyQt5.QtCore import pyqtProperty, pyqtSignal, pyqtSlot
from cura.MachineAction import MachineAction from cura.MachineAction import MachineAction
import cura.Settings.CuraContainerRegistry
import UM.Application import UM.Application
import UM.Settings.InstanceContainer import UM.Settings.InstanceContainer
import UM.Settings.DefinitionContainer import UM.Settings.DefinitionContainer
import UM.Settings.ContainerRegistry
import UM.Logger import UM.Logger
import UM.i18n import UM.i18n
@ -29,48 +29,28 @@ class MachineSettingsAction(MachineAction):
if not global_container_stack: if not global_container_stack:
return return
# First check if there is a variant previously generated by this machine # Make sure there is a definition_changes container to store the machine settings
machine_settings_variant = global_container_stack.findContainer({"type": "variant", "subtype": "machine_settings"}) definition_changes_container = global_container_stack.findContainer({"type": "definition_changes"})
if not machine_settings_variant: if not definition_changes_container:
variant = global_container_stack.findContainer({"type": "variant"}) definition_changes_container = self._createDefinitionChangesContainer(global_container_stack)
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)
# Notify the UI in which container to store the machine settings data # 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: if container_index != self._container_index:
self._container_index = container_index self._container_index = container_index
self.containerIndexChanged.emit() self.containerIndexChanged.emit()
def _createMachineSettingsVariant(self, global_container_stack, container_index = None): def _createDefinitionChangesContainer(self, global_container_stack, container_index = None):
machine_settings_variant = UM.Settings.InstanceContainer(global_container_stack.getName() + "_variant") definition_changes_container = UM.Settings.InstanceContainer(global_container_stack.getName() + "_settings")
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() definition = global_container_stack.getBottom()
machine_settings_variant.setDefinition(definition) definition_changes_container.setDefinition(definition)
machine_settings_variant.addMetaDataEntry("type", "variant") definition_changes_container.addMetaDataEntry("type", "definition_changes")
machine_settings_variant.addMetaDataEntry("subtype", "machine_settings")
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: return definition_changes_container
global_container_stack.replaceContainer(container_index, machine_settings_variant)
else:
global_container_stack.insertContainer(-1, machine_settings_variant)
return machine_settings_variant
containerIndexChanged = pyqtSignal() containerIndexChanged = pyqtSignal()

View file

@ -27,19 +27,23 @@ class UMOUpgradeSelection(MachineAction):
def setHeatedBed(self, heated_bed = True): def setHeatedBed(self, heated_bed = True):
global_container_stack = Application.getInstance().getGlobalContainerStack() global_container_stack = Application.getInstance().getGlobalContainerStack()
if global_container_stack: if global_container_stack:
variant = global_container_stack.findContainer({"type": "variant"}) # Make sure there is a definition_changes container to store the machine settings
if variant: definition_changes_container = global_container_stack.findContainer({"type": "definition_changes"})
if variant.getId() == "empty_variant": if not definition_changes_container:
variant_index = global_container_stack.getContainerIndex(variant) definition_changes_container = self._createDefinitionChangesContainer(global_container_stack)
variant = self._createVariant(global_container_stack, variant_index)
variant.setProperty("machine_heated_bed", "value", heated_bed) definition_changes_container.setProperty("machine_heated_bed", "value", heated_bed)
self.heatedBedChanged.emit() self.heatedBedChanged.emit()
def _createVariant(self, global_container_stack, variant_index): def _createDefinitionChangesContainer(self, global_container_stack):
# Create and switch to a variant to store the settings in # Create a definition_changes container to store the settings in and add it to the stack
new_variant = UM.Settings.InstanceContainer(global_container_stack.getName() + "_variant") definition_changes_container = UM.Settings.InstanceContainer(global_container_stack.getName() + "_settings")
new_variant.addMetaDataEntry("type", "variant") definition = global_container_stack.getBottom()
new_variant.setDefinition(global_container_stack.getBottom()) definition_changes_container.setDefinition(definition)
UM.Settings.ContainerRegistry.getInstance().addContainer(new_variant) definition_changes_container.addMetaDataEntry("type", "definition_changes")
global_container_stack.replaceContainer(variant_index, new_variant)
return new_variant 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