MachineAction.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. # Copyright (c) 2016 Ultimaker B.V.
  2. # Cura is released under the terms of the AGPLv3 or higher.
  3. from PyQt5.QtCore import QObject, pyqtSlot, pyqtProperty, pyqtSignal, QUrl
  4. from PyQt5.QtQml import QQmlComponent, QQmlContext
  5. from UM.PluginObject import PluginObject
  6. from UM.PluginRegistry import PluginRegistry
  7. from UM.Application import Application
  8. import os
  9. class MachineAction(QObject, PluginObject):
  10. def __init__(self, key, label = ""):
  11. super().__init__()
  12. self._key = key
  13. self._label = label
  14. self._qml_url = ""
  15. self._component = None
  16. self._context = None
  17. self._view = None
  18. self._finished = False
  19. labelChanged = pyqtSignal()
  20. onFinished = pyqtSignal()
  21. def getKey(self):
  22. return self._key
  23. @pyqtProperty(str, notify = labelChanged)
  24. def label(self):
  25. return self._label
  26. def setLabel(self, label):
  27. if self._label != label:
  28. self._label = label
  29. self.labelChanged.emit()
  30. ## Reset the action to it's default state.
  31. # This should not be re-implemented by child classes, instead re-implement _reset.
  32. # /sa _reset
  33. @pyqtSlot()
  34. def reset(self):
  35. self._component = None
  36. self._finished = False
  37. self._reset()
  38. ## Protected implementation of reset.
  39. # /sa reset()
  40. def _reset(self):
  41. pass
  42. @pyqtSlot()
  43. def setFinished(self):
  44. self._finished = True
  45. self._reset()
  46. self.onFinished.emit()
  47. @pyqtProperty(bool, notify = onFinished)
  48. def finished(self):
  49. return self._finished
  50. def _createViewFromQML(self):
  51. path = QUrl.fromLocalFile(
  52. os.path.join(PluginRegistry.getInstance().getPluginPath(self.getPluginId()), self._qml_url))
  53. self._component = QQmlComponent(Application.getInstance()._engine, path)
  54. self._context = QQmlContext(Application.getInstance()._engine.rootContext())
  55. self._context.setContextProperty("manager", self)
  56. self._view = self._component.create(self._context)
  57. @pyqtProperty(QObject, constant = True)
  58. def displayItem(self):
  59. if not self._component:
  60. self._createViewFromQML()
  61. return self._view