Merge branch 'switching_performance_fixes' of github.com:Ultimaker/Cura

This commit is contained in:
Jaime van Kessel 2017-02-13 11:07:36 +01:00
commit 94439eddd4
2 changed files with 113 additions and 108 deletions

View File

@ -105,7 +105,6 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel):
def _onExtruderStackContainersChanged(self, container): def _onExtruderStackContainersChanged(self, container):
# The ExtrudersModel needs to be updated when the material-name or -color changes, because the user identifies extruders by material-name # The ExtrudersModel needs to be updated when the material-name or -color changes, because the user identifies extruders by material-name
if container.getMetaDataEntry("type") == "material":
self._updateExtruders() self._updateExtruders()
modelChanged = pyqtSignal() modelChanged = pyqtSignal()

View File

@ -10,6 +10,7 @@ from UM.Application import Application
from UM.Preferences import Preferences from UM.Preferences import Preferences
from UM.Logger import Logger from UM.Logger import Logger
from UM.Message import Message from UM.Message import Message
from UM.Signal import postponeSignals
import UM.Settings import UM.Settings
@ -286,11 +287,8 @@ class MachineManager(QObject):
def _onInstanceContainersChanged(self, container): def _onInstanceContainersChanged(self, container):
container_type = container.getMetaDataEntry("type") container_type = container.getMetaDataEntry("type")
if container_type == "material":
self.activeMaterialChanged.emit()
elif container_type == "variant":
self.activeVariantChanged.emit() self.activeVariantChanged.emit()
elif container_type == "quality": self.activeMaterialChanged.emit()
self.activeQualityChanged.emit() self.activeQualityChanged.emit()
self._updateStacksHaveErrors() self._updateStacksHaveErrors()
@ -694,6 +692,7 @@ class MachineManager(QObject):
# Depending on from/to material+current variant, a quality profile is chosen and set. # Depending on from/to material+current variant, a quality profile is chosen and set.
@pyqtSlot(str) @pyqtSlot(str)
def setActiveMaterial(self, material_id): def setActiveMaterial(self, material_id):
with postponeSignals(*self._getContainerChangedSignals(), compress = True):
containers = UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(id = material_id) containers = UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(id = material_id)
if not containers or not self._active_container_stack: if not containers or not self._active_container_stack:
return return
@ -752,6 +751,7 @@ class MachineManager(QObject):
@pyqtSlot(str) @pyqtSlot(str)
def setActiveVariant(self, variant_id): def setActiveVariant(self, variant_id):
with postponeSignals(*self._getContainerChangedSignals(), compress = True):
containers = UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(id = variant_id) containers = UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(id = variant_id)
if not containers or not self._active_container_stack: if not containers or not self._active_container_stack:
return return
@ -775,6 +775,7 @@ class MachineManager(QObject):
# \param quality_id The quality_id of either a quality or a quality_changes # \param quality_id The quality_id of either a quality or a quality_changes
@pyqtSlot(str) @pyqtSlot(str)
def setActiveQuality(self, quality_id): def setActiveQuality(self, quality_id):
with postponeSignals(*self._getContainerChangedSignals(), compress = True):
self.blurSettings.emit() self.blurSettings.emit()
containers = UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(id = quality_id) containers = UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(id = quality_id)
@ -806,8 +807,8 @@ class MachineManager(QObject):
name_changed_connect_stacks.append(stack_quality) name_changed_connect_stacks.append(stack_quality)
name_changed_connect_stacks.append(stack_quality_changes) name_changed_connect_stacks.append(stack_quality_changes)
self._replaceQualityOrQualityChangesInStack(stack, stack_quality, postpone_emit = True) self._replaceQualityOrQualityChangesInStack(stack, stack_quality)
self._replaceQualityOrQualityChangesInStack(stack, stack_quality_changes, postpone_emit = True) self._replaceQualityOrQualityChangesInStack(stack, stack_quality_changes)
# Send emits that are postponed in replaceContainer. # Send emits that are postponed in replaceContainer.
# Here the stacks are finished replacing and every value can be resolved based on the current state. # Here the stacks are finished replacing and every value can be resolved based on the current state.
@ -1296,3 +1297,8 @@ class MachineManager(QObject):
def _onQualityNameChanged(self): def _onQualityNameChanged(self):
self.activeQualityChanged.emit() self.activeQualityChanged.emit()
def _getContainerChangedSignals(self):
stacks = ExtruderManager.getInstance().getActiveExtruderStacks()
stacks.append(self._global_container_stack)
return [ s.containersChanged for s in stacks ]