ExtruderStack.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. # Copyright (c) 2017 Ultimaker B.V.
  2. # Cura is released under the terms of the AGPLv3 or higher.
  3. from PyQt5.QtCore import pyqtProperty, pyqtSignal, pyqtSlot
  4. from UM.Decorators import override
  5. from UM.MimeTypeDatabase import MimeType, MimeTypeDatabase
  6. from UM.Settings.ContainerStack import ContainerStack, InvalidContainerStackError
  7. from UM.Settings.ContainerRegistry import ContainerRegistry
  8. from UM.Settings.InstanceContainer import InstanceContainer
  9. from UM.Settings.DefinitionContainer import DefinitionContainer
  10. from UM.Settings.Interfaces import ContainerInterface
  11. from . import Exceptions
  12. from .CuraContainerStack import CuraContainerStack
  13. class ExtruderStack(CuraContainerStack):
  14. def __init__(self, container_id, *args, **kwargs):
  15. super().__init__(container_id, *args, **kwargs)
  16. self.addMetaDataEntry("type", "extruder_train") # For backward compatibility
  17. @override(ContainerStack)
  18. def setNextStack(self, stack):
  19. super().setNextStack(stack)
  20. stack.addExtruder(self)
  21. @override(ContainerStack)
  22. def getProperty(self, key: str, property_name: str) -> Any:
  23. if not self._next_stack:
  24. raise Exceptions.NoGlobalStackError("Extruder {id} is missing the next stack!".format(id = self.id))
  25. if not super().getProperty(key, "settable_per_extruder"):
  26. return self.getNextStack().getProperty(key, property_name)
  27. return super().getProperty(key, property_name)
  28. extruder_stack_mime = MimeType(
  29. name = "application/x-cura-extruderstack",
  30. comment = "Cura Extruder Stack",
  31. suffixes = ["extruder.cfg"]
  32. )
  33. MimeTypeDatabase.addMimeType(extruder_stack_mime)
  34. ContainerRegistry.addContainerTypeByName(ExtruderStack, "extruder_stack", extruder_stack_mime.name)