Fix empty material/quality profiles when switching variants

CURA-1278
This commit is contained in:
fieldOfView 2016-06-30 18:53:50 +02:00
parent dc2384c92d
commit a7939c6f3d

View file

@ -401,9 +401,9 @@ class MachineManagerModel(QObject):
preferred_material = None preferred_material = None
if old_material: if old_material:
preferred_material = old_material.getId() preferred_material_name = old_material.getName()
self.setActiveMaterial(self._updateMaterialContainer(self._global_container_stack.getBottom(), containers[0], preferred_material).id) self.setActiveMaterial(self._updateMaterialContainer(self._global_container_stack.getBottom(), containers[0], preferred_material_name).id)
@pyqtSlot(str) @pyqtSlot(str)
def setActiveQuality(self, quality_id): def setActiveQuality(self, quality_id):
@ -519,7 +519,7 @@ class MachineManagerModel(QObject):
return self._empty_variant_container return self._empty_variant_container
def _updateMaterialContainer(self, definition, variant_container = None, preferred_material = None): def _updateMaterialContainer(self, definition, variant_container = None, preferred_material_name = None):
if not definition.getMetaDataEntry("has_materials"): if not definition.getMetaDataEntry("has_materials"):
return self._empty_material_container return self._empty_material_container
@ -533,15 +533,26 @@ class MachineManagerModel(QObject):
else: else:
search_criteria["definition"] = "fdmprinter" search_criteria["definition"] = "fdmprinter"
if not preferred_material: if preferred_material_name:
search_criteria["name"] = preferred_material_name
else:
preferred_material = definition.getMetaDataEntry("preferred_material") preferred_material = definition.getMetaDataEntry("preferred_material")
if preferred_material: if preferred_material:
search_criteria["id"] = preferred_material search_criteria["id"] = preferred_material
containers = UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(**search_criteria) containers = UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(**search_criteria)
if containers: if containers:
return containers[0] return containers[0]
if "name" in search_criteria or "id" in search_criteria:
# If a material by this name can not be found, try a wider set of search criteria
search_criteria.pop("name", None)
search_criteria.pop("id", None)
containers = UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(**search_criteria)
if containers:
return containers[0]
return self._empty_material_container return self._empty_material_container
def _updateQualityContainer(self, definition, material_container = None, preferred_quality_name = None): def _updateQualityContainer(self, definition, material_container = None, preferred_quality_name = None):
@ -566,6 +577,15 @@ class MachineManagerModel(QObject):
if containers: if containers:
return containers[0] return containers[0]
if "name" in search_criteria or "id" in search_criteria:
# If a quality by this name can not be found, try a wider set of search criteria
search_criteria.pop("name", None)
search_criteria.pop("id", None)
containers = UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(**search_criteria)
if containers:
return containers[0]
return self._empty_quality_container return self._empty_quality_container
def createMachineManagerModel(engine, script_engine): def createMachineManagerModel(engine, script_engine):