diff --git a/plugins/USBPrinting/USBPrinterOutputDeviceManager.py b/plugins/USBPrinting/USBPrinterOutputDeviceManager.py index 801ce4743f..7d1b3fea3b 100644 --- a/plugins/USBPrinting/USBPrinterOutputDeviceManager.py +++ b/plugins/USBPrinting/USBPrinterOutputDeviceManager.py @@ -103,10 +103,11 @@ class USBPrinterOutputDeviceManager(QObject, OutputDevicePlugin, Extension): self._firmware_view.show() - @pyqtSlot() - def updateAllFirmware(self): + @pyqtSlot(str) + def updateAllFirmware(self, file_name): + file_name = file_name.replace("file://", "") # File dialogs prepend the path with file://, which we don't need / want if not self._usb_output_devices: - Message(i18n_catalog.i18nc("@info","Cannot update firmware, there were no connected printers found.")).show() + Message(i18n_catalog.i18nc("@info", "Cannot update firmware, there were no connected printers found.")).show() return for printer_connection in self._usb_output_devices: @@ -114,26 +115,26 @@ class USBPrinterOutputDeviceManager(QObject, OutputDevicePlugin, Extension): self.spawnFirmwareInterface("") for printer_connection in self._usb_output_devices: try: - self._usb_output_devices[printer_connection].updateFirmware(Resources.getPath(CuraApplication.ResourceTypes.Firmware, self._getDefaultFirmwareName())) + self._usb_output_devices[printer_connection].updateFirmware(file_name) except FileNotFoundError: # Should only happen in dev environments where the resources/firmware folder is absent. self._usb_output_devices[printer_connection].setProgress(100, 100) - Logger.log("w", "No firmware found for printer %s called '%s'" %(printer_connection, self._getDefaultFirmwareName())) + Logger.log("w", "No firmware found for printer %s called '%s'" % (printer_connection, self.getDefaultFirmwareName())) Message(i18n_catalog.i18nc("@info", "Could not find firmware required for the printer at %s.") % printer_connection).show() self._firmware_view.close() continue - @pyqtSlot(str, result = bool) - def updateFirmwareBySerial(self, serial_port): + @pyqtSlot(str, str, result = bool) + def updateFirmwareBySerial(self, serial_port, file_name): if serial_port in self._usb_output_devices: self.spawnFirmwareInterface(self._usb_output_devices[serial_port].getSerialPort()) try: - self._usb_output_devices[serial_port].updateFirmware(Resources.getPath(CuraApplication.ResourceTypes.Firmware, self._getDefaultFirmwareName())) + self._usb_output_devices[serial_port].updateFirmware(file_name) except FileNotFoundError: self._firmware_view.close() - Logger.log("e", "Could not find firmware required for this machine called '%s'" %(self._getDefaultFirmwareName())) + Logger.log("e", "Could not find firmware required for this machine called '%s'" % (self.getDefaultFirmwareName())) return False return True return False @@ -147,7 +148,8 @@ class USBPrinterOutputDeviceManager(QObject, OutputDevicePlugin, Extension): return USBPrinterOutputDeviceManager._instance - def _getDefaultFirmwareName(self): + @pyqtSlot(result = str) + def getDefaultFirmwareName(self): # Check if there is a valid global container stack global_container_stack = Application.getInstance().getGlobalContainerStack() if not global_container_stack: @@ -193,13 +195,13 @@ class USBPrinterOutputDeviceManager(QObject, OutputDevicePlugin, Extension): Logger.log("d", "Choosing basic firmware for machine %s.", machine_id) hex_file = machine_without_extras[machine_id] # Return "basic" firmware else: - Logger.log("e", "There is no firmware for machine %s.", machine_id) + Logger.log("w", "There is no firmware for machine %s.", machine_id) if hex_file: - return hex_file.format(baudrate=baudrate) + return Resources.getPath(CuraApplication.ResourceTypes.Firmware, hex_file.format(baudrate=baudrate)) else: - Logger.log("e", "Could not find any firmware for machine %s.", machine_id) - raise FileNotFoundError() + Logger.log("w", "Could not find any firmware for machine %s.", machine_id) + return "" ## Helper to identify serial ports (and scan for them) def _addRemovePorts(self, serial_ports): diff --git a/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml b/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml index 0c9b80c010..ce2e2a39cb 100644 --- a/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml +++ b/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml @@ -5,6 +5,7 @@ import QtQuick 2.2 import QtQuick.Controls 1.1 import QtQuick.Layouts 1.1 import QtQuick.Window 2.1 +import QtQuick.Dialogs 1.2 // For filedialog import UM 1.2 as UM import Cura 1.0 as Cura @@ -44,34 +45,45 @@ Cura.MachineAction anchors.topMargin: UM.Theme.getSize("default_margin").height width: parent.width wrapMode: Text.WordWrap - text: catalog.i18nc("@label", "The firmware shipping with new Ultimakers works, but upgrades have been made to make better prints, and make calibration easier."); + text: catalog.i18nc("@label", "The firmware shipping with new Printers works, but new versions tend to have more features and improvements."); } - Label - { - id: upgradeText2 - anchors.top: upgradeText1.bottom - anchors.topMargin: UM.Theme.getSize("default_margin").height - width: parent.width - wrapMode: Text.WordWrap - text: catalog.i18nc("@label", "Cura requires these new features and thus your firmware will most likely need to be upgraded. You can do so now."); - } Row { - anchors.top: upgradeText2.bottom + anchors.top: upgradeText1.bottom anchors.topMargin: UM.Theme.getSize("default_margin").height anchors.horizontalCenter: parent.horizontalCenter width: childrenRect.width spacing: UM.Theme.getSize("default_margin").width + property var firmwareName: Cura.USBPrinterManager.getDefaultFirmwareName() Button { - id: upgradeButton - text: catalog.i18nc("@action:button","Upgrade to Marlin Firmware"); + id: autoUpgradeButton + text: catalog.i18nc("@action:button", "Automatically upgrade Firmware"); + enabled: parent.firmwareName != "" onClicked: { - Cura.USBPrinterManager.updateAllFirmware() + Cura.USBPrinterManager.updateAllFirmware(parent.firmwareName) + } + } + Button + { + id: manualUpgradeButton + text: catalog.i18nc("@action:button", "Upload custom Firmware"); + onClicked: + { + customFirmwareDialog.open() } } } + + FileDialog + { + id: customFirmwareDialog + title: catalog.i18nc("@title:window", "Select custom firmware") + nameFilters: "Firmware image files (*.hex)" + selectExisting: true + onAccepted: Cura.USBPrinterManager.updateAllFirmware(fileUrl) + } } } \ No newline at end of file