ProfilesModel.py 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. # Copyright (c) 2016 Ultimaker B.V.
  2. # Uranium is released under the terms of the AGPLv3 or higher.
  3. from UM.Application import Application
  4. from UM.Settings.Models.InstanceContainersModel import InstanceContainersModel
  5. from cura.QualityManager import QualityManager
  6. from cura.Settings.ExtruderManager import ExtruderManager
  7. from cura.Settings.MachineManager import MachineManager
  8. ## QML Model for listing the current list of valid quality profiles.
  9. #
  10. class ProfilesModel(InstanceContainersModel):
  11. def __init__(self, parent = None):
  12. super().__init__(parent)
  13. Application.getInstance().globalContainerStackChanged.connect(self._update)
  14. Application.getInstance().getMachineManager().activeVariantChanged.connect(self._update)
  15. Application.getInstance().getMachineManager().activeStackChanged.connect(self._update)
  16. Application.getInstance().getMachineManager().activeMaterialChanged.connect(self._update)
  17. ## Fetch the list of containers to display.
  18. #
  19. # See UM.Settings.Models.InstanceContainersModel._fetchInstanceContainers().
  20. def _fetchInstanceContainers(self):
  21. global_container_stack = Application.getInstance().getGlobalContainerStack()
  22. if global_container_stack is None:
  23. return []
  24. global_machine_definition = global_container_stack.getBottom()
  25. extruder_stacks = ExtruderManager.getInstance().getActiveExtruderStacks()
  26. if extruder_stacks:
  27. # Multi-extruder machine detected.
  28. materials = [stack.findContainer(type="material") for stack in extruder_stacks]
  29. else:
  30. # Machine with one extruder.
  31. materials = [global_container_stack.findContainer(type="material")]
  32. quality_types = QualityManager.getInstance().findAllQualityTypesForMachineAndMaterials(global_machine_definition,
  33. materials)
  34. # Map the list of quality_types to InstanceContainers
  35. qualities = QualityManager.getInstance().findAllQualitiesForMachineMaterial(global_machine_definition,
  36. materials[0])
  37. quality_type_dict = {}
  38. for quality in qualities:
  39. quality_type_dict[quality.getMetaDataEntry("quality_type")] = quality
  40. return [quality_type_dict[quality_type] for quality_type in quality_types]