All error checks now use the timer instead of re-checking multiple times.

This significantly speeds up all setting / container changes for multi extrusion machines

CURA-3780
This commit is contained in:
Jaime van Kessel 2017-05-09 14:38:57 +02:00
parent 6493bcd5b5
commit 19bc6bb710
2 changed files with 11 additions and 9 deletions

View file

@ -5,7 +5,8 @@ import os.path
from typing import Any, Optional from typing import Any, Optional
from PyQt5.QtCore import pyqtProperty, pyqtSlot, pyqtSignal from PyQt5.QtCore import pyqtProperty, pyqtSignal
from UM.FlameProfiler import pyqtSlot
from UM.Decorators import override from UM.Decorators import override
from UM.Logger import Logger from UM.Logger import Logger

View file

@ -45,6 +45,11 @@ class MachineManager(QObject):
self._active_container_stack = None # type: ContainerStack self._active_container_stack = None # type: ContainerStack
self._global_container_stack = None # type: ContainerStack self._global_container_stack = None # type: ContainerStack
self._error_check_timer = QTimer()
self._error_check_timer.setInterval(250)
self._error_check_timer.setSingleShot(True)
self._error_check_timer.timeout.connect(self._updateStacksHaveErrors)
Application.getInstance().globalContainerStackChanged.connect(self._onGlobalContainerChanged) Application.getInstance().globalContainerStackChanged.connect(self._onGlobalContainerChanged)
## When the global container is changed, active material probably needs to be updated. ## When the global container is changed, active material probably needs to be updated.
self.globalContainerChanged.connect(self.activeMaterialChanged) self.globalContainerChanged.connect(self.activeMaterialChanged)
@ -94,10 +99,7 @@ class MachineManager(QObject):
self._material_incompatible_message = Message(catalog.i18nc("@info:status", self._material_incompatible_message = Message(catalog.i18nc("@info:status",
"The selected material is incompatible with the selected machine or configuration.")) "The selected material is incompatible with the selected machine or configuration."))
self._error_check_timer = QTimer()
self._error_check_timer.setInterval(250)
self._error_check_timer.setSingleShot(True)
self._error_check_timer.timeout.connect(self._updateStacksHaveErrors)
globalContainerChanged = pyqtSignal() # Emitted whenever the global stack is changed (ie: when changing between printers, changing a global profile, but not when changing a value) globalContainerChanged = pyqtSignal() # Emitted whenever the global stack is changed (ie: when changing between printers, changing a global profile, but not when changing a value)
activeMaterialChanged = pyqtSignal() activeMaterialChanged = pyqtSignal()
@ -290,8 +292,7 @@ class MachineManager(QObject):
quality = self._global_container_stack.quality quality = self._global_container_stack.quality
quality.nameChanged.connect(self._onQualityNameChanged) quality.nameChanged.connect(self._onQualityNameChanged)
self._error_check_timer.start()
self._updateStacksHaveErrors()
## Update self._stacks_valid according to _checkStacksForErrors and emit if change. ## Update self._stacks_valid according to _checkStacksForErrors and emit if change.
def _updateStacksHaveErrors(self): def _updateStacksHaveErrors(self):
@ -308,7 +309,7 @@ class MachineManager(QObject):
if not self._active_container_stack: if not self._active_container_stack:
self._active_container_stack = self._global_container_stack self._active_container_stack = self._global_container_stack
self._updateStacksHaveErrors() self._error_check_timer.start()
if old_active_container_stack != self._active_container_stack: if old_active_container_stack != self._active_container_stack:
# Many methods and properties related to the active quality actually depend # Many methods and properties related to the active quality actually depend
@ -330,7 +331,7 @@ class MachineManager(QObject):
self.activeVariantChanged.emit() self.activeVariantChanged.emit()
self.activeMaterialChanged.emit() self.activeMaterialChanged.emit()
self._updateStacksHaveErrors() self._error_check_timer.start()
def _onPropertyChanged(self, key, property_name): def _onPropertyChanged(self, key, property_name):
if property_name == "value": if property_name == "value":