123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- # Copyright (c) 2017 Ultimaker B.V.
- # Cura is released under the terms of the LGPLv3 or higher.
- import os.path
- from UM.Application import Application
- from cura.Stages.CuraStage import CuraStage
- class MonitorStage(CuraStage):
- """Stage for monitoring a 3D printing while it's printing."""
- def __init__(self, parent = None):
- super().__init__(parent)
- # Wait until QML engine is created, otherwise creating the new QML components will fail
- Application.getInstance().engineCreatedSignal.connect(self._onEngineCreated)
- self._printer_output_device = None
- self._active_print_job = None
- self._active_printer = None
- def _setActivePrintJob(self, print_job):
- if self._active_print_job != print_job:
- self._active_print_job = print_job
- def _setActivePrinter(self, printer):
- if self._active_printer != printer:
- if self._active_printer:
- self._active_printer.activePrintJobChanged.disconnect(self._onActivePrintJobChanged)
- self._active_printer = printer
- if self._active_printer:
- self._setActivePrintJob(self._active_printer.activePrintJob)
- # Jobs might change, so we need to listen to it's changes.
- self._active_printer.activePrintJobChanged.connect(self._onActivePrintJobChanged)
- else:
- self._setActivePrintJob(None)
- def _onActivePrintJobChanged(self):
- self._setActivePrintJob(self._active_printer.activePrintJob)
- def _onActivePrinterChanged(self):
- self._setActivePrinter(self._printer_output_device.activePrinter)
- def _onOutputDevicesChanged(self):
- try:
- # We assume that you are monitoring the device with the highest priority.
- new_output_device = Application.getInstance().getMachineManager().printerOutputDevices[0]
- if new_output_device != self._printer_output_device:
- if self._printer_output_device:
- try:
- self._printer_output_device.printersChanged.disconnect(self._onActivePrinterChanged)
- except TypeError:
- # Ignore stupid "Not connected" errors.
- pass
- self._printer_output_device = new_output_device
- self._printer_output_device.printersChanged.connect(self._onActivePrinterChanged)
- self._setActivePrinter(self._printer_output_device.activePrinter)
- except IndexError:
- pass
- def _onEngineCreated(self):
- # We can only connect now, as we need to be sure that everything is loaded (plugins get created quite early)
- Application.getInstance().getMachineManager().outputDevicesChanged.connect(self._onOutputDevicesChanged)
- self._onOutputDevicesChanged()
- plugin_path = Application.getInstance().getPluginRegistry().getPluginPath(self.getPluginId())
- if plugin_path is not None:
- menu_component_path = os.path.join(plugin_path, "MonitorMenu.qml")
- main_component_path = os.path.join(plugin_path, "MonitorMain.qml")
- self.addDisplayComponent("menu", menu_component_path)
- self.addDisplayComponent("main", main_component_path)
|