MachineAction.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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._finished = False
  36. self._reset()
  37. ## Protected implementation of reset.
  38. # /sa reset()
  39. def _reset(self):
  40. pass
  41. @pyqtSlot()
  42. def setFinished(self):
  43. self._finished = True
  44. self._reset()
  45. self.onFinished.emit()
  46. @pyqtProperty(bool, notify = onFinished)
  47. def finished(self):
  48. return self._finished
  49. def _createViewFromQML(self):
  50. path = QUrl.fromLocalFile(
  51. os.path.join(PluginRegistry.getInstance().getPluginPath(self.getPluginId()), self._qml_url))
  52. self._component = QQmlComponent(Application.getInstance()._engine, path)
  53. self._context = QQmlContext(Application.getInstance()._engine.rootContext())
  54. self._context.setContextProperty("manager", self)
  55. self._view = self._component.create(self._context)
  56. @pyqtProperty(QObject, constant = True)
  57. def displayItem(self):
  58. if not self._component:
  59. self._createViewFromQML()
  60. return self._view