diff --git a/cura/Machines/Models/MachineListModel.py b/cura/Machines/Models/MachineListModel.py index cb7c3b5998..82b889ac4b 100644 --- a/cura/Machines/Models/MachineListModel.py +++ b/cura/Machines/Models/MachineListModel.py @@ -29,11 +29,11 @@ class MachineListModel(ListModel): IsAbstractMachineRole = Qt.ItemDataRole.UserRole + 7 ComponentTypeRole = Qt.ItemDataRole.UserRole + 8 - def __init__(self, parent: Optional[QObject] = None, machines: List[GlobalStack] = None, listenToChanges: bool = True) -> None: + def __init__(self, parent: Optional[QObject] = None, machines_filter: Optional[List[GlobalStack]] = None) -> None: super().__init__(parent) self._show_cloud_printers = False - self._machines = machines + self._machines_filter = machines_filter self._catalog = i18nCatalog("cura") @@ -51,11 +51,10 @@ class MachineListModel(ListModel): self._change_timer.setSingleShot(True) self._change_timer.timeout.connect(self._update) - if listenToChanges: - CuraContainerRegistry.getInstance().containerAdded.connect(self._onContainerChanged) - CuraContainerRegistry.getInstance().containerMetaDataChanged.connect(self._onContainerChanged) - CuraContainerRegistry.getInstance().containerRemoved.connect(self._onContainerChanged) - self._updateDelayed() + CuraContainerRegistry.getInstance().containerAdded.connect(self._onContainerChanged) + CuraContainerRegistry.getInstance().containerMetaDataChanged.connect(self._onContainerChanged) + CuraContainerRegistry.getInstance().containerRemoved.connect(self._onContainerChanged) + self._updateDelayed() showCloudPrintersChanged = pyqtSignal(bool) @@ -80,19 +79,13 @@ class MachineListModel(ListModel): self._change_timer.start() def _getMachineStacks(self) -> List[ContainerStack]: - if self._machines is not None: - return self._machines return CuraContainerRegistry.getInstance().findContainerStacks(type="machine") def _getAbstractMachineStacks(self) -> List[ContainerStack]: - if self._machines is not None: - return list(filter(lambda machine: parseBool(machine.getMetaDataEntry("is_abstract_machine", False)), self._machines)) return CuraContainerRegistry.getInstance().findContainerStacks(is_abstract_machine = "True") - def update(self, machines: List[ContainerStack] = None) -> None: - if machines is not None: - self._machines = machines - + def set_machines_filter(self, machines_filter: Optional[List[GlobalStack]]) -> None: + self._machines_filter = machines_filter self._update() def _update(self) -> None: @@ -106,6 +99,12 @@ class MachineListModel(ListModel): abstract_machine_stacks = self._getAbstractMachineStacks() abstract_machine_stacks.sort(key = lambda machine: machine.getName().upper(), reverse = True) + + if self._machines_filter is not None: + filter_ids = [machine_filter.id for machine_filter in self._machines_filter] + other_machine_stacks = [machine for machine in other_machine_stacks if machine.id in filter_ids] + abstract_machine_stacks = [machine for machine in abstract_machine_stacks if machine.id in filter_ids] + for abstract_machine in abstract_machine_stacks: definition_id = abstract_machine.definition.getId() online_machine_stacks = machines_manager.getMachinesWithDefinition(definition_id, online_only = True) diff --git a/plugins/3MFReader/WorkspaceDialog.py b/plugins/3MFReader/WorkspaceDialog.py index 9e0c8158cd..da7b8737e3 100644 --- a/plugins/3MFReader/WorkspaceDialog.py +++ b/plugins/3MFReader/WorkspaceDialog.py @@ -62,7 +62,7 @@ class WorkspaceDialog(QObject): self._extruders = [] self._objects_on_plate = False self._is_printer_group = False - self._updatable_machines_model = MachineListModel(self, listenToChanges=False) + self._updatable_machines_model = MachineListModel(self) self._missing_package_metadata: List[Dict[str, str]] = [] self._plugin_registry: PluginRegistry = CuraApplication.getInstance().getPluginRegistry() self._install_missing_package_dialog: Optional[QObject] = None @@ -164,7 +164,7 @@ class WorkspaceDialog(QObject): return cast(MachineListModel, self._updatable_machines_model) def setUpdatableMachines(self, updatable_machines: List[GlobalStack]) -> None: - self._updatable_machines_model.update(updatable_machines) + self._updatable_machines_model.set_machines_filter(updatable_machines) self.updatableMachinesChanged.emit() @pyqtProperty(str, notify=qualityTypeChanged)