PrinterModel.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  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, QVariant, pyqtSlot
  4. from UM.Logger import Logger
  5. from typing import Optional, List
  6. MYPY = False
  7. if MYPY:
  8. from cura.PrinterOutput.PrintJobModel import PrintJobModel
  9. from cura.PrinterOutput.ExtruderModel import ExtruderModel
  10. class PrinterModel(QObject):
  11. bedTemperatureChanged = pyqtSignal()
  12. targetBedTemperatureChanged = pyqtSignal()
  13. printerStateChanged = pyqtSignal()
  14. activePrintJobChanged = pyqtSignal()
  15. nameChanged = pyqtSignal()
  16. def __init__(self, parent=None):
  17. super().__init__(parent)
  18. self._bed_temperature = 0
  19. self._target_bed_temperature = 0
  20. self._name = ""
  21. self._extruders = [] # type: List[ExtruderModel]
  22. self._active_print_job = None # type: Optional[PrintJobModel]
  23. # Features of the printer;
  24. self._can_pause = True
  25. self._can_abort = True
  26. self._can_pre_heat_bed = True
  27. self._can_control_manually = True
  28. @pyqtProperty(str, notify=nameChanged)
  29. def name(self):
  30. return self._name
  31. def setName(self, name):
  32. self._setName(name)
  33. self.updateName(name)
  34. def _setName(self, name):
  35. Logger.log("w", "_setTargetBedTemperature is not implemented by this model")
  36. def updateName(self, name):
  37. if self._name != name:
  38. self._name = name
  39. self.nameChanged.emit()
  40. ## Update the bed temperature. This only changes it locally.
  41. def updateBedTemperature(self, temperature):
  42. if self._bed_temperature != temperature:
  43. self._bed_temperature = temperature
  44. self.bedTemperatureChanged.emit()
  45. def updateTargetBedTemperature(self, temperature):
  46. if self._target_bed_temperature != temperature:
  47. self._target_bed_temperature = temperature
  48. self.targetBedTemperatureChanged.emit()
  49. ## Set the target bed temperature. This ensures that it's actually sent to the remote.
  50. @pyqtSlot(int)
  51. def setTargetBedTemperature(self, temperature):
  52. self._setTargetBedTemperature(temperature)
  53. self.updateTargetBedTemperature(temperature)
  54. ## Protected setter for the bed temperature of the connected printer (if any).
  55. # /parameter temperature Temperature bed needs to go to (in deg celsius)
  56. # /sa setTargetBedTemperature
  57. def _setTargetBedTemperature(self, temperature):
  58. Logger.log("w", "_setTargetBedTemperature is not implemented by this model")
  59. def updateActivePrintJob(self, print_job):
  60. if self._active_print_job != print_job:
  61. self._active_print_job = print_job
  62. self.activePrintJobChanged.emit()
  63. @pyqtProperty(QObject, notify = activePrintJobChanged)
  64. def activePrintJob(self):
  65. return self._active_print_job
  66. @pyqtProperty(str, notify=printerStateChanged)
  67. def printerState(self):
  68. return self._printer_state
  69. @pyqtProperty(int, notify = bedTemperatureChanged)
  70. def bedTemperature(self):
  71. return self._bed_temperature
  72. @pyqtProperty(int, notify=targetBedTemperatureChanged)
  73. def targetBedTemperature(self):
  74. return self._target_bed_temperature
  75. # Does the printer support pre-heating the bed at all
  76. @pyqtProperty(bool, constant=True)
  77. def canPreHeatBed(self):
  78. return self._can_pre_heat_bed
  79. # Does the printer support pause at all
  80. @pyqtProperty(bool, constant=True)
  81. def canPause(self):
  82. return self._can_pause
  83. # Does the printer support abort at all
  84. @pyqtProperty(bool, constant=True)
  85. def canAbort(self):
  86. return self._can_abort
  87. # Does the printer support manual control at all
  88. @pyqtProperty(bool, constant=True)
  89. def canControlManually(self):
  90. return self._can_control_manually