1# Copyright (c) 2019 Ultimaker B.V.
2# Cura is released under the terms of the LGPLv3 or higher.
3
4from UM.Logger import Logger
5from UM.Signal import Signal
6
7MYPY = False
8if MYPY:
9    from .Models.PrintJobOutputModel import PrintJobOutputModel
10    from .Models.ExtruderOutputModel import ExtruderOutputModel
11    from .Models.PrinterOutputModel import PrinterOutputModel
12    from .PrinterOutputDevice import PrinterOutputDevice
13
14
15class PrinterOutputController:
16    def __init__(self, output_device: "PrinterOutputDevice") -> None:
17        self.can_pause = True
18        self.can_abort = True
19        self.can_pre_heat_bed = True
20        self.can_pre_heat_hotends = True
21        self.can_send_raw_gcode = True
22        self.can_control_manually = True
23        self.can_update_firmware = False
24        self._output_device = output_device
25
26    def setTargetHotendTemperature(self, printer: "PrinterOutputModel", position: int, temperature: float) -> None:
27        Logger.log("w", "Set target hotend temperature not implemented in controller")
28
29    def setTargetBedTemperature(self, printer: "PrinterOutputModel", temperature: float) -> None:
30        Logger.log("w", "Set target bed temperature not implemented in controller")
31
32    def setJobState(self, job: "PrintJobOutputModel", state: str) -> None:
33        Logger.log("w", "Set job state not implemented in controller")
34
35    def cancelPreheatBed(self, printer: "PrinterOutputModel") -> None:
36        Logger.log("w", "Cancel preheat bed not implemented in controller")
37
38    def preheatBed(self, printer: "PrinterOutputModel", temperature, duration) -> None:
39        Logger.log("w", "Preheat bed not implemented in controller")
40
41    def cancelPreheatHotend(self, extruder: "ExtruderOutputModel") -> None:
42        Logger.log("w", "Cancel preheat hotend not implemented in controller")
43
44    def preheatHotend(self, extruder: "ExtruderOutputModel", temperature, duration) -> None:
45        Logger.log("w", "Preheat hotend not implemented in controller")
46
47    def setHeadPosition(self, printer: "PrinterOutputModel", x, y, z, speed) -> None:
48        Logger.log("w", "Set head position not implemented in controller")
49
50    def moveHead(self, printer: "PrinterOutputModel", x, y, z, speed) -> None:
51        Logger.log("w", "Move head not implemented in controller")
52
53    def homeBed(self, printer: "PrinterOutputModel") -> None:
54        Logger.log("w", "Home bed not implemented in controller")
55
56    def homeHead(self, printer: "PrinterOutputModel") -> None:
57        Logger.log("w", "Home head not implemented in controller")
58
59    def sendRawCommand(self, printer: "PrinterOutputModel", command: str) -> None:
60        Logger.log("w", "Custom command not implemented in controller")
61
62    canUpdateFirmwareChanged = Signal()
63    def setCanUpdateFirmware(self, can_update_firmware: bool) -> None:
64        if can_update_firmware != self.can_update_firmware:
65            self.can_update_firmware = can_update_firmware
66            self.canUpdateFirmwareChanged.emit()