diff --git a/cura/PrinterOutputDevice.py b/cura/PrinterOutputDevice.py index b24fe11f18..c376bb496c 100644 --- a/cura/PrinterOutputDevice.py +++ b/cura/PrinterOutputDevice.py @@ -1,10 +1,15 @@ +from UM.i18n import i18nCatalog from UM.OutputDevice.OutputDevice import OutputDevice from PyQt5.QtCore import pyqtProperty, pyqtSignal, pyqtSlot, QObject +from PyQt5.QtWidgets import QMessageBox + from enum import IntEnum # For the connection state tracking. from UM.Logger import Logger - +from UM.Application import Application from UM.Signal import signalemitter +i18n_catalog = i18nCatalog("cura") + ## Printer output device adds extra interface options on top of output device. # # The assumption is made the printer is a FDM printer. @@ -276,6 +281,11 @@ class PrinterOutputDevice(QObject, OutputDevice): self._hotend_ids[index] = hotend_id self.hotendIdChanged.emit(index, hotend_id) + ## Let the user decide if the hotends and/or material should be synced with the printer + # NB: the UX needs to be implemented by the plugin + def materialHotendChangedMessage(self, callback): + Logger.log("w", "materialHotendChangedMessage needs to be implemented, returning 'Yes'") + callback(QMessageBox.Yes) ## Attempt to establish connection def connect(self): @@ -329,7 +339,7 @@ class PrinterOutputDevice(QObject, OutputDevice): return self._head_z ## Update the saved position of the head - # This function should be called when a new position for the head is recieved. + # This function should be called when a new position for the head is received. def _updateHeadPosition(self, x, y ,z): position_changed = False if self._head_x != x: diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 3eb2dd1421..c9eab930a6 100644 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -115,7 +115,7 @@ class MachineManager(QObject): if matching_extruder and matching_extruder.findContainer({"type": "variant"}).getName() != hotend_id: # Save the material that needs to be changed. Multiple changes will be handled by the callback. self._auto_hotends_changed[str(index)] = containers[0].getId() - self._materialHotendChangedMessage(self._materialHotendChangedCallback) + self._printer_output_devices[0].materialHotendChangedMessage(self._materialHotendChangedCallback) else: Logger.log("w", "No variant found for printer definition %s with id %s" % (self._global_container_stack.getBottom().getId(), hotend_id)) @@ -155,20 +155,10 @@ class MachineManager(QObject): if matching_extruder and matching_extruder.findContainer({"type":"material"}).getMetaDataEntry("GUID") != material_id: # Save the material that needs to be changed. Multiple changes will be handled by the callback. self._auto_materials_changed[str(index)] = containers[0].getId() - self._materialHotendChangedMessage(self._materialHotendChangedCallback) + self._printer_output_devices[0].materialHotendChangedMessage(self._materialHotendChangedCallback) else: Logger.log("w", "No material definition found for printer definition %s and GUID %s" % (definition_id, material_id)) - def _materialHotendChangedMessage(self, callback): - Application.getInstance().messageBox(catalog.i18nc("@window:title", "Changes on the Printer"), - catalog.i18nc("@label", - "Do you want to change the materials and hotends to match your printer?"), - catalog.i18nc("@label", - "The materials and / or hotends on your printer were changed. For best results always slice for the materials and hotends that are inserted in your printer."), - buttons=QMessageBox.Yes + QMessageBox.No, - icon=QMessageBox.Question, - callback=callback) - def _materialHotendChangedCallback(self, button): if button == QMessageBox.No: self._auto_materials_changed = {}