Properly implement ContainerManager::createQualityChanges

Contributes to CURA-2006
This commit is contained in:
Arjen Hiemstra 2016-08-04 17:37:15 +02:00
parent b76ebbb850
commit 2ee2bc7348

View File

@ -389,26 +389,51 @@ class ContainerManager(QObject):
global_stack.getTop().clear()
@pyqtSlot()
@pyqtSlot(result = bool)
def createQualityChanges(self):
global_stack = UM.Application.getInstance().getGlobalContainerStack()
if not global_stack:
return False
user_container = global_stack.getTop()
quality_container = global_stack.findContainer(type = "quality")
if not quality_container:
return
UM.Logger.log("w", "No quality container found in stack %s, cannot create profile", global_stack.getId())
return False
MachineManager.getInstance().blurSettings.emit()
unique_name = UM.Settings.ContainerRegistry.getInstance().uniqueName(quality_container.getName())
unique_id = unique_name.lower()
unique_id.replace(" ", "_")
quality_changes = user_container.duplicate()
quality_changes.setMetaDataEntry("type", "quality_changes")
quality_changes.setMetaDataEntry("quality_base", quality_container.getId())
stacks = [ s for s in ExtruderManager.getInstance().getMachineExtruders(global_stack.getId()) ]
stacks.insert(0, global_stack)
UM.Settings.ContainerRegistry.getInstance().addContainer(quality_changes)
for stack in stacks:
user_container = stack.getTop()
quality_container = stack.findContainer(type = "quality")
quality_changes_container = stack.findContainer(type = "quality_changes")
if not quality_container or not quality_changes_container:
UM.Logger.log("w", "No quality or quality changes container found in stack %s, ignoring it", stack.getId())
return False
new_quality_changes = user_container.duplicate(stack.getId() + "_" + unique_id, unique_name)
new_quality_changes.setMetaDataEntry("type", "quality_changes")
new_quality_changes.addMetaDataEntry("quality", quality_container.getId())
if not global_stack.getMetaDataEntry("has_machine_quality"):
new_quality_changes.setDefinition(UM.Settings.ContainerRegistry.getInstance().findContainers(id = "fdmprinter")[0])
if global_stack.getMetaDataEntry("has_materials"):
material = stack.findContainer(type = "material")
new_quality_changes.addMetaDataEntry("material", material.getId())
UM.Settings.ContainerRegistry.getInstance().addContainer(new_quality_changes)
stack.replaceContainer(stack.getContainerIndex(quality_changes_container), new_quality_changes)
stack.getTop().clear()
return True
# Factory function, used by QML
@staticmethod