diff --git a/cura/PrinterOutput/Models/PrinterOutputModel.py b/cura/PrinterOutput/Models/PrinterOutputModel.py index 13fe85e674..105ead96f5 100644 --- a/cura/PrinterOutput/Models/PrinterOutputModel.py +++ b/cura/PrinterOutput/Models/PrinterOutputModel.py @@ -7,6 +7,7 @@ from UM.Math.Vector import Vector from cura.PrinterOutput.Peripheral import Peripheral from cura.PrinterOutput.Models.PrinterConfigurationModel import PrinterConfigurationModel from cura.PrinterOutput.Models.ExtruderOutputModel import ExtruderOutputModel +from UM.Logger import Logger if TYPE_CHECKING: from cura.PrinterOutput.Models.PrintJobOutputModel import PrintJobOutputModel @@ -50,6 +51,8 @@ class PrinterOutputModel(QObject): self._printer_configuration.extruderConfigurations = [extruder.extruderConfiguration for extruder in self._extruders] + self._available_printer_configurations = [] # type: List[PrinterConfigurationModel] + self._camera_url = QUrl() # type: QUrl @pyqtProperty(str, constant = True) @@ -290,7 +293,7 @@ class PrinterOutputModel(QObject): def _onControllerCanUpdateFirmwareChanged(self) -> None: self.canUpdateFirmwareChanged.emit() - # Returns the configuration (material, variant and buildplate) of the current printer + # Returns the active configuration (material, variant and buildplate) of the current printer @pyqtProperty(QObject, notify = configurationChanged) def printerConfiguration(self) -> Optional[PrinterConfigurationModel]: if self._printer_configuration.isValid(): @@ -309,4 +312,26 @@ class PrinterOutputModel(QObject): def removePeripheral(self, peripheral: Peripheral) -> None: self._peripherals.remove(peripheral) - self.peripheralsChanged.emit() \ No newline at end of file + self.peripheralsChanged.emit() + + availableConfigurationsChanged = pyqtSignal() + + @pyqtProperty("QVariantList", notify = availableConfigurationsChanged) + def availableConfigurations(self) -> List[PrinterConfigurationModel]: + return self._available_printer_configurations + + def addAvailableConfiguration(self, new_configuration: PrinterConfigurationModel) -> None: + self._available_printer_configurations.append(new_configuration) + self.availableConfigurationsChanged.emit() + + def removeAvailableConfiguration(self, config_to_remove: PrinterConfigurationModel) -> None: + try: + self._available_printer_configurations.remove(config_to_remove) + except ValueError: + Logger.log("w", "Unable to remove configuration that isn't in the list of available configurations") + else: + self.availableConfigurationsChanged.emit() + + def setAvailableConfigurations(self, new_configurations: List[PrinterConfigurationModel]) -> None: + self._available_printer_configurations = new_configurations + self.availableConfigurationsChanged.emit()