Browse Source

Let IntentModel update on a timer

This prevents some double updates
Jaime van Kessel 5 years ago
parent
commit
7954f6633f
1 changed files with 12 additions and 4 deletions
  1. 12 4
      cura/Machines/Models/IntentModel.py

+ 12 - 4
cura/Machines/Models/IntentModel.py

@@ -2,7 +2,7 @@
 # Cura is released under the terms of the LGPLv3 or higher.
 from typing import Optional, Dict, Any, Set, List
 
-from PyQt5.QtCore import Qt, QObject, pyqtProperty, pyqtSignal
+from PyQt5.QtCore import Qt, QObject, pyqtProperty, pyqtSignal, QTimer
 
 import cura.CuraApplication
 from UM.Qt.ListModel import ListModel
@@ -32,9 +32,14 @@ class IntentModel(ListModel):
 
         self._intent_category = "engineering"
 
+        self._update_timer = QTimer()
+        self._update_timer.setInterval(100)
+        self._update_timer.setSingleShot(True)
+        self._update_timer.timeout.connect(self._update)
+
         machine_manager = cura.CuraApplication.CuraApplication.getInstance().getMachineManager()
-        machine_manager.globalContainerChanged.connect(self._update)
-        machine_manager.extruderChanged.connect(self._update)  # We also need to update if an extruder gets disabled
+        machine_manager.globalContainerChanged.connect(self._updateDelayed)
+        machine_manager.extruderChanged.connect(self._updateDelayed)  # We also need to update if an extruder gets disabled
         ContainerRegistry.getInstance().containerAdded.connect(self._onChanged)
         ContainerRegistry.getInstance().containerRemoved.connect(self._onChanged)
         self._layer_height_unit = ""  # This is cached
@@ -52,9 +57,12 @@ class IntentModel(ListModel):
     def intentCategory(self) -> str:
         return self._intent_category
 
+    def _updateDelayed(self):
+        self._update_timer.start()
+
     def _onChanged(self, container):
         if container.getMetaDataEntry("type") == "intent":
-            self._update()
+            self._updateDelayed()
 
     def _update(self) -> None:
         new_items = []  # type: List[Dict[str, Any]]