Browse Source

Changes to make um2 upgrade work with new stack changes

CURA-3742
Jaime van Kessel 7 years ago
parent
commit
bd25448021

+ 2 - 3
cura/Settings/MachineManager.py

@@ -773,9 +773,8 @@ class MachineManager(QObject):
             old_material = self._active_container_stack.material
             if old_variant:
                 self.blurSettings.emit()
-                variant_index = self._active_container_stack.getContainerIndex(old_variant)
-                self._active_container_stack.replaceContainer(variant_index, containers[0])
-                Logger.log("d", "Active variant changed")
+                self._active_container_stack.variant = containers[0]
+                Logger.log("d", "Active variant changed to {active_variant_id}".format(active_variant_id = containers[0].getId()))
                 preferred_material = None
                 if old_material:
                     preferred_material_name = old_material.getName()

+ 7 - 6
plugins/UltimakerMachineActions/UM2UpgradeSelection.py

@@ -8,6 +8,7 @@ from PyQt5.QtCore import pyqtSlot, pyqtSignal, pyqtProperty
 
 from UM.i18n import i18nCatalog
 from UM.Application import Application
+from UM.Util import parseBool
 catalog = i18nCatalog("cura")
 
 import UM.Settings.InstanceContainer
@@ -30,13 +31,13 @@ class UM2UpgradeSelection(MachineAction):
     def hasVariants(self):
         global_container_stack = Application.getInstance().getGlobalContainerStack()
         if global_container_stack:
-            return global_container_stack.getMetaDataEntry("has_variants", "false") == "True"
+            return parseBool(global_container_stack.getMetaDataEntry("has_variants", "false"))
 
     @pyqtSlot(bool)
     def setHasVariants(self, has_variants = True):
         global_container_stack = Application.getInstance().getGlobalContainerStack()
         if global_container_stack:
-            variant_container = global_container_stack.findContainer({"type": "variant"})
+            variant_container = global_container_stack.variant
             variant_index = global_container_stack.getContainerIndex(variant_container)
 
             if has_variants:
@@ -46,11 +47,12 @@ class UM2UpgradeSelection(MachineAction):
                     global_container_stack.addMetaDataEntry("has_variants", True)
 
                 # Set the variant container to a sane default
-                if variant_container.getId() == "empty_variant":
+                empty_container = ContainerRegistry.getInstance().getEmptyInstanceContainer()
+                if type(variant_container) == type(empty_container):
                     search_criteria = { "type": "variant", "definition": "ultimaker2", "id": "*0.4*" }
                     containers = self._container_registry.findInstanceContainers(**search_criteria)
                     if containers:
-                        global_container_stack.replaceContainer(variant_index, containers[0])
+                        global_container_stack.variant = containers[0]
             else:
                 # The metadata entry is stored in an ini, and ini files are parsed as strings only.
                 # Because any non-empty string evaluates to a boolean True, we have to remove the entry to make it False.
@@ -58,7 +60,6 @@ class UM2UpgradeSelection(MachineAction):
                     global_container_stack.removeMetaDataEntry("has_variants")
 
                 # Set the variant container to an empty variant
-                if variant_container.getId() == "empty_variant":
-                    global_container_stack.replaceContainer(variant_index, self._container_registry.findInstanceContainers(id="empty_variant")[0])
+                global_container_stack.variant = ContainerRegistry.getInstance().getEmptyInstanceContainer()
 
             Application.getInstance().globalContainerStackChanged.emit()