mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-06 22:47:29 -06:00
Make extra sure cache is emptied when objects get altered.
See the (new) cachePerInstance decorator in UM/Decorators, and the accompanying CachedMemberFunction handler-class. part of CURA-11761
This commit is contained in:
parent
f8aa923ce0
commit
d0252554c4
3 changed files with 10 additions and 2 deletions
|
@ -5,7 +5,7 @@ from typing import Any, cast, List, Optional, Dict
|
||||||
from PyQt6.QtCore import pyqtProperty, pyqtSignal, QObject
|
from PyQt6.QtCore import pyqtProperty, pyqtSignal, QObject
|
||||||
|
|
||||||
from UM.Application import Application
|
from UM.Application import Application
|
||||||
from UM.Decorators import override
|
from UM.Decorators import CachedMemberFunctions, override
|
||||||
from UM.FlameProfiler import pyqtSlot
|
from UM.FlameProfiler import pyqtSlot
|
||||||
from UM.Logger import Logger
|
from UM.Logger import Logger
|
||||||
from UM.Settings.ContainerStack import ContainerStack, InvalidContainerStackError
|
from UM.Settings.ContainerStack import ContainerStack, InvalidContainerStackError
|
||||||
|
@ -237,6 +237,7 @@ class CuraContainerStack(ContainerStack):
|
||||||
:param new_value: The new value to set the property to.
|
:param new_value: The new value to set the property to.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
CachedMemberFunctions.clearInstanceCache(self)
|
||||||
container_index = _ContainerIndexes.UserChanges
|
container_index = _ContainerIndexes.UserChanges
|
||||||
self._containers[container_index].setProperty(key, property_name, property_value, container, set_from_cache)
|
self._containers[container_index].setProperty(key, property_name, property_value, container, set_from_cache)
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@ from typing import Any, Dict, TYPE_CHECKING, Optional
|
||||||
|
|
||||||
from PyQt6.QtCore import pyqtProperty, pyqtSignal
|
from PyQt6.QtCore import pyqtProperty, pyqtSignal
|
||||||
|
|
||||||
from UM.Decorators import override
|
from UM.Decorators import CachedMemberFunctions, override
|
||||||
from UM.MimeTypeDatabase import MimeType, MimeTypeDatabase
|
from UM.MimeTypeDatabase import MimeType, MimeTypeDatabase
|
||||||
from UM.Settings.ContainerStack import ContainerStack
|
from UM.Settings.ContainerStack import ContainerStack
|
||||||
from UM.Settings.ContainerRegistry import ContainerRegistry
|
from UM.Settings.ContainerRegistry import ContainerRegistry
|
||||||
|
@ -86,6 +86,7 @@ class ExtruderStack(CuraContainerStack):
|
||||||
def setCompatibleMaterialDiameter(self, value: float) -> None:
|
def setCompatibleMaterialDiameter(self, value: float) -> None:
|
||||||
old_approximate_diameter = self.getApproximateMaterialDiameter()
|
old_approximate_diameter = self.getApproximateMaterialDiameter()
|
||||||
if self.getCompatibleMaterialDiameter() != value:
|
if self.getCompatibleMaterialDiameter() != value:
|
||||||
|
CachedMemberFunctions.clearInstanceCache(self)
|
||||||
self.definitionChanges.setProperty("material_diameter", "value", value)
|
self.definitionChanges.setProperty("material_diameter", "value", value)
|
||||||
self.compatibleMaterialDiameterChanged.emit()
|
self.compatibleMaterialDiameterChanged.emit()
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,7 @@ import xml.etree.ElementTree as ET
|
||||||
from UM.PluginRegistry import PluginRegistry
|
from UM.PluginRegistry import PluginRegistry
|
||||||
from UM.Resources import Resources
|
from UM.Resources import Resources
|
||||||
from UM.Logger import Logger
|
from UM.Logger import Logger
|
||||||
|
from UM.Decorators import CachedMemberFunctions
|
||||||
import UM.Dictionary
|
import UM.Dictionary
|
||||||
from UM.Settings.InstanceContainer import InstanceContainer
|
from UM.Settings.InstanceContainer import InstanceContainer
|
||||||
from UM.Settings.ContainerRegistry import ContainerRegistry
|
from UM.Settings.ContainerRegistry import ContainerRegistry
|
||||||
|
@ -71,6 +72,8 @@ class XmlMaterialProfile(InstanceContainer):
|
||||||
Logger.log("w", "Can't change metadata {key} of material {material_id} because it's read-only.".format(key = key, material_id = self.getId()))
|
Logger.log("w", "Can't change metadata {key} of material {material_id} because it's read-only.".format(key = key, material_id = self.getId()))
|
||||||
return
|
return
|
||||||
|
|
||||||
|
CachedMemberFunctions.clearInstanceCache(self)
|
||||||
|
|
||||||
# Some metadata such as diameter should also be instantiated to be a setting. Go though all values for the
|
# Some metadata such as diameter should also be instantiated to be a setting. Go though all values for the
|
||||||
# "properties" field and apply the new values to SettingInstances as well.
|
# "properties" field and apply the new values to SettingInstances as well.
|
||||||
new_setting_values_dict = {}
|
new_setting_values_dict = {}
|
||||||
|
@ -480,6 +483,7 @@ class XmlMaterialProfile(InstanceContainer):
|
||||||
first.append(element)
|
first.append(element)
|
||||||
|
|
||||||
def clearData(self):
|
def clearData(self):
|
||||||
|
CachedMemberFunctions.clearInstanceCache(self)
|
||||||
self._metadata = {
|
self._metadata = {
|
||||||
"id": self.getId(),
|
"id": self.getId(),
|
||||||
"name": ""
|
"name": ""
|
||||||
|
@ -519,6 +523,8 @@ class XmlMaterialProfile(InstanceContainer):
|
||||||
def deserialize(self, serialized, file_name = None):
|
def deserialize(self, serialized, file_name = None):
|
||||||
"""Overridden from InstanceContainer"""
|
"""Overridden from InstanceContainer"""
|
||||||
|
|
||||||
|
CachedMemberFunctions.clearInstanceCache(self)
|
||||||
|
|
||||||
containers_to_add = []
|
containers_to_add = []
|
||||||
# update the serialized data first
|
# update the serialized data first
|
||||||
from UM.Settings.Interfaces import ContainerInterface
|
from UM.Settings.Interfaces import ContainerInterface
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue