Browse Source

Factor out USBPrinterManager singleton

fieldOfView 6 years ago
parent
commit
7b00d6879a

+ 34 - 0
cura/Settings/MachineManager.py

@@ -4,6 +4,7 @@
 import collections
 import time
 from typing import Any, Callable, List, Dict, TYPE_CHECKING, Optional, cast
+import platform
 
 from UM.ConfigurationErrorMessage import ConfigurationErrorMessage
 from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator
@@ -16,6 +17,7 @@ from UM.FlameProfiler import pyqtSlot
 from UM import Util
 from UM.Logger import Logger
 from UM.Message import Message
+from UM.Resources import Resources
 
 from UM.Settings.SettingFunction import SettingFunction
 from UM.Signal import postponeSignals, CompressTechnique
@@ -1531,3 +1533,35 @@ class MachineManager(QObject):
         with postponeSignals(*self._getContainerChangedSignals(), compress = CompressTechnique.CompressPerParameterValue):
             self.updateMaterialWithVariant(None)
             self._updateQualityWithMaterial()
+
+    ##  Get default firmware file name if one is specified in the firmware
+    @pyqtSlot(result = str)
+    def getDefaultFirmwareName(self):
+        # Check if there is a valid global container stack
+        if not self._global_container_stack:
+            return ""
+
+        # The bottom of the containerstack is the machine definition
+        machine_id = self._global_container_stack.getBottom().id
+        machine_has_heated_bed = self._global_container_stack.getProperty("machine_heated_bed", "value")
+
+        baudrate = 250000
+        if platform.system() == "Linux":
+            # Linux prefers a baudrate of 115200 here because older versions of
+            # pySerial did not support a baudrate of 250000
+            baudrate = 115200
+
+        # If a firmware file is available, it should be specified in the definition for the printer
+        hex_file = self._global_container_stack.getMetaDataEntry("firmware_file", None)
+        if machine_has_heated_bed:
+            hex_file = self._global_container_stack.getMetaDataEntry("firmware_hbk_file", hex_file)
+
+        if hex_file:
+            try:
+                return Resources.getPath(cura.CuraApplication.CuraApplication.ResourceTypes.Firmware, hex_file.format(baudrate=baudrate))
+            except FileNotFoundError:
+                Logger.log("w", "Firmware file %s not found.", hex_file)
+                return ""
+        else:
+            Logger.log("w", "There is no firmware for machine %s.", machine_id)
+            return ""

+ 0 - 35
plugins/USBPrinting/USBPrinterOutputDeviceManager.py

@@ -2,14 +2,12 @@
 # Cura is released under the terms of the LGPLv3 or higher.
 
 import threading
-import platform
 import time
 import serial.tools.list_ports
 
 from PyQt5.QtCore import QObject, pyqtSlot, pyqtProperty, pyqtSignal
 
 from UM.Logger import Logger
-from UM.Resources import Resources
 from UM.Signal import Signal, signalemitter
 from UM.OutputDevice.OutputDevicePlugin import OutputDevicePlugin
 from UM.i18n import i18nCatalog
@@ -87,39 +85,6 @@ class USBPrinterOutputDeviceManager(QObject, OutputDevicePlugin):
             self._addRemovePorts(port_list)
             time.sleep(5)
 
-    @pyqtSlot(result = str)
-    def getDefaultFirmwareName(self):
-        # Check if there is a valid global container stack
-        global_container_stack = self._application.getGlobalContainerStack()
-        if not global_container_stack:
-            Logger.log("e", "There is no global container stack. Can not update firmware.")
-            return ""
-
-        # The bottom of the containerstack is the machine definition
-        machine_id = global_container_stack.getBottom().id
-        machine_has_heated_bed = global_container_stack.getProperty("machine_heated_bed", "value")
-
-        baudrate = 250000
-        if platform.system() == "Linux":
-            # Linux prefers a baudrate of 115200 here because older versions of
-            # pySerial did not support a baudrate of 250000
-            baudrate = 115200
-
-        # If a firmware file is available, it should be specified in the definition for the printer
-        hex_file = global_container_stack.getMetaDataEntry("firmware_file", None)
-        if machine_has_heated_bed:
-            hex_file = global_container_stack.getMetaDataEntry("firmware_hbk_file", hex_file)
-
-        if hex_file:
-            try:
-                return Resources.getPath(CuraApplication.ResourceTypes.Firmware, hex_file.format(baudrate=baudrate))
-            except FileNotFoundError:
-                Logger.log("w", "Firmware file %s not found.", hex_file)
-                return ""
-        else:
-            Logger.log("w", "There is no firmware for machine %s.", machine_id)
-            return ""
-
     ##  Helper to identify serial ports (and scan for them)
     def _addRemovePorts(self, serial_ports):
         # First, find and add all new or changed keys

+ 0 - 1
plugins/USBPrinting/__init__.py

@@ -14,5 +14,4 @@ def getMetaData():
 def register(app):
     # We are violating the QT API here (as we use a factory, which is technically not allowed).
     # but we don't really have another means for doing this (and it seems to you know -work-)
-    qmlRegisterSingletonType(USBPrinterOutputDeviceManager.USBPrinterOutputDeviceManager, "Cura", 1, 0, "USBPrinterManager", USBPrinterOutputDeviceManager.USBPrinterOutputDeviceManager.getInstance)
     return {"output_device": USBPrinterOutputDeviceManager.USBPrinterOutputDeviceManager(app)}

+ 16 - 16
plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml

@@ -17,7 +17,7 @@ Cura.MachineAction
         property int rightRow: (checkupMachineAction.width * 0.60) | 0
         property bool heatupHotendStarted: false
         property bool heatupBedStarted: false
-        property bool usbConnected: Cura.USBPrinterManager.connectedPrinterList.rowCount() > 0
+        property bool printerConnected: Cura.MachineManager.printerConnected
 
         UM.I18nCatalog { id: catalog; name:"cura"}
         Label
@@ -86,7 +86,7 @@ Cura.MachineAction
                 anchors.left: connectionLabel.right
                 anchors.top: parent.top
                 wrapMode: Text.WordWrap
-                text: checkupMachineAction.usbConnected ? catalog.i18nc("@info:status","Connected"): catalog.i18nc("@info:status","Not connected")
+                text: checkupMachineAction.printerConnected ? catalog.i18nc("@info:status","Connected"): catalog.i18nc("@info:status","Not connected")
             }
             //////////////////////////////////////////////////////////
             Label
@@ -97,7 +97,7 @@ Cura.MachineAction
                 anchors.top: connectionLabel.bottom
                 wrapMode: Text.WordWrap
                 text: catalog.i18nc("@label","Min endstop X: ")
-                visible: checkupMachineAction.usbConnected
+                visible: checkupMachineAction.printerConnected
             }
             Label
             {
@@ -107,7 +107,7 @@ Cura.MachineAction
                 anchors.top: connectionLabel.bottom
                 wrapMode: Text.WordWrap
                 text: manager.xMinEndstopTestCompleted ? catalog.i18nc("@info:status","Works") : catalog.i18nc("@info:status","Not checked")
-                visible: checkupMachineAction.usbConnected
+                visible: checkupMachineAction.printerConnected
             }
             //////////////////////////////////////////////////////////////
             Label
@@ -118,7 +118,7 @@ Cura.MachineAction
                 anchors.top: endstopXLabel.bottom
                 wrapMode: Text.WordWrap
                 text: catalog.i18nc("@label","Min endstop Y: ")
-                visible: checkupMachineAction.usbConnected
+                visible: checkupMachineAction.printerConnected
             }
             Label
             {
@@ -128,7 +128,7 @@ Cura.MachineAction
                 anchors.top: endstopXLabel.bottom
                 wrapMode: Text.WordWrap
                 text: manager.yMinEndstopTestCompleted ? catalog.i18nc("@info:status","Works") : catalog.i18nc("@info:status","Not checked")
-                visible: checkupMachineAction.usbConnected
+                visible: checkupMachineAction.printerConnected
             }
             /////////////////////////////////////////////////////////////////////
             Label
@@ -139,7 +139,7 @@ Cura.MachineAction
                 anchors.top: endstopYLabel.bottom
                 wrapMode: Text.WordWrap
                 text: catalog.i18nc("@label","Min endstop Z: ")
-                visible: checkupMachineAction.usbConnected
+                visible: checkupMachineAction.printerConnected
             }
             Label
             {
@@ -149,7 +149,7 @@ Cura.MachineAction
                 anchors.top: endstopYLabel.bottom
                 wrapMode: Text.WordWrap
                 text: manager.zMinEndstopTestCompleted ? catalog.i18nc("@info:status","Works") : catalog.i18nc("@info:status","Not checked")
-                visible: checkupMachineAction.usbConnected
+                visible: checkupMachineAction.printerConnected
             }
             ////////////////////////////////////////////////////////////
             Label
@@ -161,7 +161,7 @@ Cura.MachineAction
                 anchors.top: endstopZLabel.bottom
                 wrapMode: Text.WordWrap
                 text: catalog.i18nc("@label","Nozzle temperature check: ")
-                visible: checkupMachineAction.usbConnected
+                visible: checkupMachineAction.printerConnected
             }
             Label
             {
@@ -171,7 +171,7 @@ Cura.MachineAction
                 anchors.left: nozzleTempLabel.right
                 wrapMode: Text.WordWrap
                 text: catalog.i18nc("@info:status","Not checked")
-                visible: checkupMachineAction.usbConnected
+                visible: checkupMachineAction.printerConnected
             }
             Item
             {
@@ -181,7 +181,7 @@ Cura.MachineAction
                 anchors.top: nozzleTempLabel.top
                 anchors.left: bedTempStatus.right
                 anchors.leftMargin: Math.round(UM.Theme.getSize("default_margin").width/2)
-                visible: checkupMachineAction.usbConnected
+                visible: checkupMachineAction.printerConnected
                 Button
                 {
                     text: checkupMachineAction.heatupHotendStarted ? catalog.i18nc("@action:button","Stop Heating") : catalog.i18nc("@action:button","Start Heating")
@@ -209,7 +209,7 @@ Cura.MachineAction
                 wrapMode: Text.WordWrap
                 text: manager.hotendTemperature + "°C"
                 font.bold: true
-                visible: checkupMachineAction.usbConnected
+                visible: checkupMachineAction.printerConnected
             }
             /////////////////////////////////////////////////////////////////////////////
             Label
@@ -221,7 +221,7 @@ Cura.MachineAction
                 anchors.top: nozzleTempLabel.bottom
                 wrapMode: Text.WordWrap
                 text: catalog.i18nc("@label","Build plate temperature check:")
-                visible: checkupMachineAction.usbConnected && manager.hasHeatedBed
+                visible: checkupMachineAction.printerConnected && manager.hasHeatedBed
             }
 
             Label
@@ -232,7 +232,7 @@ Cura.MachineAction
                 anchors.left: bedTempLabel.right
                 wrapMode: Text.WordWrap
                 text: manager.bedTestCompleted ? catalog.i18nc("@info:status","Not checked"): catalog.i18nc("@info:status","Checked")
-                visible: checkupMachineAction.usbConnected && manager.hasHeatedBed
+                visible: checkupMachineAction.printerConnected && manager.hasHeatedBed
             }
             Item
             {
@@ -242,7 +242,7 @@ Cura.MachineAction
                 anchors.top: bedTempLabel.top
                 anchors.left: bedTempStatus.right
                 anchors.leftMargin: Math.round(UM.Theme.getSize("default_margin").width/2)
-                visible: checkupMachineAction.usbConnected && manager.hasHeatedBed
+                visible: checkupMachineAction.printerConnected && manager.hasHeatedBed
                 Button
                 {
                     text: checkupMachineAction.heatupBedStarted ?catalog.i18nc("@action:button","Stop Heating") : catalog.i18nc("@action:button","Start Heating")
@@ -270,7 +270,7 @@ Cura.MachineAction
                 wrapMode: Text.WordWrap
                 text: manager.bedTemperature + "°C"
                 font.bold: true
-                visible: checkupMachineAction.usbConnected && manager.hasHeatedBed
+                visible: checkupMachineAction.printerConnected && manager.hasHeatedBed
             }
             Label
             {

+ 1 - 1
plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml

@@ -51,7 +51,7 @@ Cura.MachineAction
             anchors.horizontalCenter: parent.horizontalCenter
             width: childrenRect.width
             spacing: UM.Theme.getSize("default_margin").width
-            property var firmwareName: Cura.USBPrinterManager.getDefaultFirmwareName()
+            property var firmwareName: Cura.MachineManager.getDefaultFirmwareName()
             Button
             {
                 id: autoUpgradeButton