From 41f2a0e22217bb4d98df6fbf95f4355938427e75 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Thu, 21 Feb 2019 20:47:38 +0100 Subject: [PATCH] Add a property to temporarily disable the material models from updating. This allows the QMl to stop the updating when it's not even visible --- cura/Machines/Models/BaseMaterialsModel.py | 16 +++++++++++++++- .../ConfigurationMenu/CustomConfiguration.qml | 1 + resources/qml/Menus/MaterialMenu.qml | 4 ++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/cura/Machines/Models/BaseMaterialsModel.py b/cura/Machines/Models/BaseMaterialsModel.py index 555bdb87ec..e936877923 100644 --- a/cura/Machines/Models/BaseMaterialsModel.py +++ b/cura/Machines/Models/BaseMaterialsModel.py @@ -16,6 +16,7 @@ from cura.Machines.MaterialNode import MaterialNode class BaseMaterialsModel(ListModel): extruderPositionChanged = pyqtSignal() + enabledChanged = pyqtSignal() def __init__(self, parent = None): super().__init__(parent) @@ -59,6 +60,7 @@ class BaseMaterialsModel(ListModel): self._available_materials = None # type: Optional[Dict[str, MaterialNode]] self._favorite_ids = set() # type: Set[str] + self._enabled = True def _updateExtruderStack(self): global_stack = self._machine_manager.activeMachine @@ -85,6 +87,18 @@ class BaseMaterialsModel(ListModel): def extruderPosition(self) -> int: return self._extruder_position + def setEnabled(self, enabled): + if self._enabled != enabled: + self._enabled = enabled + if self._enabled: + # ensure the data is there again. + self._update() + self.enabledChanged.emit() + + @pyqtProperty(bool, fset=setEnabled, notify=enabledChanged) + def enabled(self): + return self._enabled + ## This is an abstract method that needs to be implemented by the specific # models themselves. def _update(self): @@ -96,7 +110,7 @@ class BaseMaterialsModel(ListModel): def _canUpdate(self): global_stack = self._machine_manager.activeMachine - if global_stack is None: + if global_stack is None or not self._enabled: return False extruder_position = str(self._extruder_position) diff --git a/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml b/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml index f2f488a1b0..89f35b1593 100644 --- a/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml +++ b/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml @@ -265,6 +265,7 @@ Item menu: Cura.MaterialMenu { extruderIndex: Cura.ExtruderManager.activeExtruderIndex + updateModels: materialSelection.visible } } Item diff --git a/resources/qml/Menus/MaterialMenu.qml b/resources/qml/Menus/MaterialMenu.qml index 0116169ed6..ba35a160ba 100644 --- a/resources/qml/Menus/MaterialMenu.qml +++ b/resources/qml/Menus/MaterialMenu.qml @@ -15,22 +15,26 @@ Menu property int extruderIndex: 0 property string currentRootMaterialId: Cura.MachineManager.currentRootMaterialId[extruderIndex] property string activeMaterialId: Cura.MachineManager.allActiveMaterialIds[Cura.ExtruderManager.extruderIds[extruderIndex]] + property bool updateModels: true Cura.FavoriteMaterialsModel { id: favoriteMaterialsModel extruderPosition: menu.extruderIndex + enabled: updateModels } Cura.GenericMaterialsModel { id: genericMaterialsModel extruderPosition: menu.extruderIndex + enabled: updateModels } Cura.MaterialBrandsModel { id: brandModel extruderPosition: menu.extruderIndex + enabled: updateModels } MenuItem