diff --git a/cura/MachineManagerModel.py b/cura/MachineManagerModel.py index 49c2288a98..c7cd4a6758 100644 --- a/cura/MachineManagerModel.py +++ b/cura/MachineManagerModel.py @@ -12,9 +12,11 @@ class MachineManagerModel(QObject): ## When the global container is changed, active material probably needs to be updated. self.globalContainerChanged.connect(self.activeMaterialChanged) + self.globalContainerChanged.connect(self.activeVariantChanged) globalContainerChanged = pyqtSignal() activeMaterialChanged = pyqtSignal() + activeVariantChanged = pyqtSignal() def _onGlobalContainerChanged(self): Application.getInstance().getGlobalContainerStack().containersChanged.connect(self._onInstanceContainersChanged) @@ -24,6 +26,8 @@ class MachineManagerModel(QObject): container_type = container.getMetaDataEntry("type") if container_type == "material": self.activeMaterialChanged.emit() + elif container_type == "variant": + self.activeVariantChanged.emit() @pyqtSlot(str) def setActiveMachine(self, stack_id): @@ -39,18 +43,24 @@ class MachineManagerModel(QObject): new_global_stack.addMetaDataEntry("type", "machine") ContainerRegistry.getInstance().addContainer(new_global_stack) - variant_instance_container = InstanceContainer(name + "_variant") + ## DEBUG CODE material_instance_container = InstanceContainer("test_material") material_instance_container.addMetaDataEntry("type", "material") material_instance_container.setDefinition(definitions[0]) - #material_instance_container.setMetaData({"type","material"}) + + variant_instance_container = InstanceContainer("test_variant") + variant_instance_container.addMetaDataEntry("type", "variant") + variant_instance_container.setDefinition(definitions[0]) + quality_instance_container = InstanceContainer(name + "_quality") current_settings_instance_container = InstanceContainer(name + "_current_settings") ContainerRegistry.getInstance().addContainer(material_instance_container) + ContainerRegistry.getInstance().addContainer(variant_instance_container) # If a definition is found, its a list. Should only have one item. new_global_stack.addContainer(definitions[0]) new_global_stack.addContainer(material_instance_container) + new_global_stack.addContainer(variant_instance_container) Application.getInstance().setGlobalContainerStack(new_global_stack) @pyqtProperty(str, notify = globalContainerChanged) @@ -71,8 +81,23 @@ class MachineManagerModel(QObject): def setActiveMaterial(self, material_id): containers = ContainerRegistry.getInstance().findInstanceContainers(id=material_id) old_material = Application.getInstance().getGlobalContainerStack().findContainer({"type":"material"}) - material_index = Application.getInstance().getGlobalContainerStack().getContainerIndex(old_material) - Application.getInstance().getGlobalContainerStack().replaceContainer(material_index, containers[0]) + if old_material: + material_index = Application.getInstance().getGlobalContainerStack().getContainerIndex(old_material) + Application.getInstance().getGlobalContainerStack().replaceContainer(material_index, containers[0]) + + @pyqtSlot(str) + def setActiveVariant(self, variant_id): + containers = ContainerRegistry.getInstance().findInstanceContainers(id=variant_id) + old_variant = Application.getInstance().getGlobalContainerStack().findContainer({"type": "variant"}) + if old_variant: + variant_index = Application.getInstance().getGlobalContainerStack().getContainerIndex(old_variant) + Application.getInstance().getGlobalContainerStack().replaceContainer(variant_index, containers[0]) + + @pyqtProperty(str, notify = activeVariantChanged) + def activeVariantName(self): + variant = Application.getInstance().getGlobalContainerStack().findContainer({"type": "variant"}) + if variant: + return variant.getName() @pyqtSlot(str, str) def renameMachine(self, machine_id, new_name): diff --git a/resources/qml/SidebarHeader.qml b/resources/qml/SidebarHeader.qml index 7feeb32d43..e4c8e8bb02 100644 --- a/resources/qml/SidebarHeader.qml +++ b/resources/qml/SidebarHeader.qml @@ -128,8 +128,8 @@ Item ToolButton { id: variantSelection - text: UM.MachineManager.activeMachineVariant - tooltip: UM.MachineManager.activeMachineVariant; + text: Cura.MachineManager.activeVariantName + tooltip: Cura.MachineManager.activeVariantName; visible: UM.MachineManager.hasVariants height: UM.Theme.getSize("setting_control").height @@ -143,6 +143,10 @@ Item Instantiator { id: variantSelectionInstantiator + model: UM.InstanceContainersModel + { + filter: {"type": "variant"} + } // model: UM.MachineVariantsModel { id: variantsModel } MenuItem { @@ -152,14 +156,14 @@ Item exclusiveGroup: variantSelectionMenuGroup; onTriggered: { - UM.MachineManager.setActiveMachineVariant(variantsModel.getItem(index).name); - if (typeof(model) !== "undefined" && !model.active) { + Cura.MachineManager.setActiveVariant(model.id); + /*if (typeof(model) !== "undefined" && !model.active) { //Selecting a variant was canceled; undo menu selection variantSelectionInstantiator.model.setProperty(index, "active", false); var activeMachineVariantName = UM.MachineManager.activeMachineVariant; var activeMachineVariantIndex = variantSelectionInstantiator.model.find("name", activeMachineVariantName); variantSelectionInstantiator.model.setProperty(activeMachineVariantIndex, "active", true); - } + }*/ } } onObjectAdded: variantsSelectionMenu.insertItem(index, object)