From 47d082b5dcaeda869c2fb16bd80b34158efa075e Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 21 Aug 2019 09:42:49 +0200 Subject: [PATCH] Fix updating of material models CURA-6600 --- cura/Machines/MaterialManager.py | 24 ++++++++++++++++++++++ cura/Machines/Models/BaseMaterialsModel.py | 1 + 2 files changed, 25 insertions(+) diff --git a/cura/Machines/MaterialManager.py b/cura/Machines/MaterialManager.py index 72862d43f0..2ea03701db 100644 --- a/cura/Machines/MaterialManager.py +++ b/cura/Machines/MaterialManager.py @@ -10,6 +10,7 @@ from PyQt5.Qt import QTimer, QObject, pyqtSignal, pyqtSlot from UM.ConfigurationErrorMessage import ConfigurationErrorMessage from UM.Decorators import deprecated from UM.Logger import Logger +from UM.Settings.ContainerRegistry import ContainerRegistry from UM.Settings.SettingFunction import SettingFunction from UM.Util import parseBool import cura.CuraApplication #Imported like this to prevent circular imports. @@ -68,6 +69,29 @@ class MaterialManager(QObject): self._favorites = set(cura.CuraApplication.CuraApplication.getInstance().getPreferences().getValue("cura/favorite_materials").split(";")) self.materialsUpdated.emit() + self._update_timer = QTimer(self) + self._update_timer.setInterval(300) + + self._update_timer.setSingleShot(True) + self._update_timer.timeout.connect(self.materialsUpdated) + + container_registry = ContainerRegistry.getInstance() + container_registry.containerMetaDataChanged.connect(self._onContainerMetadataChanged) + container_registry.containerAdded.connect(self._onContainerMetadataChanged) + container_registry.containerRemoved.connect(self._onContainerMetadataChanged) + + def _onContainerMetadataChanged(self, container): + self._onContainerChanged(container) + + def _onContainerChanged(self, container): + container_type = container.getMetaDataEntry("type") + if container_type != "material": + return + + # update the maps + + self._update_timer.start() + def getMaterialGroup(self, root_material_id: str) -> Optional[MaterialGroup]: return self._material_group_map.get(root_material_id) diff --git a/cura/Machines/Models/BaseMaterialsModel.py b/cura/Machines/Models/BaseMaterialsModel.py index 188ce1791b..9ee45c7525 100644 --- a/cura/Machines/Models/BaseMaterialsModel.py +++ b/cura/Machines/Models/BaseMaterialsModel.py @@ -34,6 +34,7 @@ class BaseMaterialsModel(ListModel): # Update this model when switching machines self._machine_manager.activeStackChanged.connect(self._update) + self._material_manager.materialsUpdated.connect(self._update) self.addRoleName(Qt.UserRole + 1, "root_material_id") self.addRoleName(Qt.UserRole + 2, "id")