PrintJobOutputModel.py 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. # Copyright (c) 2017 Ultimaker B.V.
  2. # Cura is released under the terms of the LGPLv3 or higher.
  3. from PyQt5.QtCore import pyqtSignal, pyqtProperty, QObject, pyqtSlot
  4. from typing import Optional, TYPE_CHECKING
  5. if TYPE_CHECKING:
  6. from cura.PrinterOutput.PrinterOutputController import PrinterOutputController
  7. from cura.PrinterOutput.PrinterOutputModel import PrinterOutputModel
  8. from cura.PrinterOutput.ConfigurationModel import ConfigurationModel
  9. class PrintJobOutputModel(QObject):
  10. stateChanged = pyqtSignal()
  11. timeTotalChanged = pyqtSignal()
  12. timeElapsedChanged = pyqtSignal()
  13. nameChanged = pyqtSignal()
  14. keyChanged = pyqtSignal()
  15. assignedPrinterChanged = pyqtSignal()
  16. ownerChanged = pyqtSignal()
  17. configurationChanged =pyqtSignal()
  18. def __init__(self, output_controller: "PrinterOutputController", key: str = "", name: str = "", parent=None) -> None:
  19. super().__init__(parent)
  20. self._output_controller = output_controller
  21. self._state = ""
  22. self._time_total = 0
  23. self._time_elapsed = 0
  24. self._name = name # Human readable name
  25. self._key = key # Unique identifier
  26. self._assigned_printer = None # type: Optional[PrinterOutputModel]
  27. self._owner = "" # Who started/owns the print job?
  28. self._configuration = None # type: Optional[ConfigurationModel]
  29. @pyqtProperty(QObject, notify=configurationChanged)
  30. def configuration(self) -> Optional["ConfigurationModel"]:
  31. return self._configuration
  32. def updateConfiguration(self, configuration: Optional["ConfigurationModel"]) -> None:
  33. if self._configuration != configuration:
  34. self._configuration = configuration
  35. self.configurationChanged.emit()
  36. @pyqtProperty(str, notify=ownerChanged)
  37. def owner(self):
  38. return self._owner
  39. def updateOwner(self, owner):
  40. if self._owner != owner:
  41. self._owner = owner
  42. self.ownerChanged.emit()
  43. @pyqtProperty(QObject, notify=assignedPrinterChanged)
  44. def assignedPrinter(self):
  45. return self._assigned_printer
  46. def updateAssignedPrinter(self, assigned_printer: "PrinterOutputModel"):
  47. if self._assigned_printer != assigned_printer:
  48. old_printer = self._assigned_printer
  49. self._assigned_printer = assigned_printer
  50. if old_printer is not None:
  51. # If the previously assigned printer is set, this job is moved away from it.
  52. old_printer.updateActivePrintJob(None)
  53. self.assignedPrinterChanged.emit()
  54. @pyqtProperty(str, notify=keyChanged)
  55. def key(self):
  56. return self._key
  57. def updateKey(self, key: str):
  58. if self._key != key:
  59. self._key = key
  60. self.keyChanged.emit()
  61. @pyqtProperty(str, notify = nameChanged)
  62. def name(self):
  63. return self._name
  64. def updateName(self, name: str):
  65. if self._name != name:
  66. self._name = name
  67. self.nameChanged.emit()
  68. @pyqtProperty(int, notify = timeTotalChanged)
  69. def timeTotal(self):
  70. return self._time_total
  71. @pyqtProperty(int, notify = timeElapsedChanged)
  72. def timeElapsed(self):
  73. return self._time_elapsed
  74. @pyqtProperty(str, notify=stateChanged)
  75. def state(self):
  76. return self._state
  77. def updateTimeTotal(self, new_time_total):
  78. if self._time_total != new_time_total:
  79. self._time_total = new_time_total
  80. self.timeTotalChanged.emit()
  81. def updateTimeElapsed(self, new_time_elapsed):
  82. if self._time_elapsed != new_time_elapsed:
  83. self._time_elapsed = new_time_elapsed
  84. self.timeElapsedChanged.emit()
  85. def updateState(self, new_state):
  86. if self._state != new_state:
  87. self._state = new_state
  88. self.stateChanged.emit()
  89. @pyqtSlot(str)
  90. def setState(self, state):
  91. self._output_controller.setJobState(self, state)