mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-06 22:47:29 -06:00
Make PerObjectSettingVisiblityHandler inherit SettingVisiblityHandler and some other cleanup
This commit is contained in:
parent
8c8caa2cac
commit
38ce6cd4b8
1 changed files with 30 additions and 27 deletions
|
@ -3,36 +3,44 @@ from UM.Application import Application
|
||||||
from UM.Settings.SettingInstance import SettingInstance
|
from UM.Settings.SettingInstance import SettingInstance
|
||||||
from UM.Logger import Logger
|
from UM.Logger import Logger
|
||||||
|
|
||||||
|
import UM.Settings.Models
|
||||||
|
|
||||||
from cura.SettingOverrideDecorator import SettingOverrideDecorator
|
from cura.SettingOverrideDecorator import SettingOverrideDecorator
|
||||||
|
|
||||||
## The per object setting visibility handler ensures that only setting defintions that have a matching instance Container
|
## The per object setting visibility handler ensures that only setting defintions that have a matching instance Container
|
||||||
# are returned as visible.
|
# are returned as visible.
|
||||||
class PerObjectSettingVisibilityHandler(QObject):
|
class PerObjectSettingVisibilityHandler(UM.Settings.Models.SettingVisibilityHandler):
|
||||||
def __init__(self, parent = None, *args, **kwargs):
|
def __init__(self, parent = None, *args, **kwargs):
|
||||||
super().__init__(parent = parent, *args, **kwargs)
|
super().__init__(parent = parent, *args, **kwargs)
|
||||||
self._selected_object_id = None
|
|
||||||
|
|
||||||
visibilityChanged = pyqtSignal()
|
self._selected_object_id = None
|
||||||
|
self._node = None
|
||||||
|
self._stack = None
|
||||||
|
|
||||||
def setSelectedObjectId(self, id):
|
def setSelectedObjectId(self, id):
|
||||||
self._selected_object_id = id
|
if id != self._selected_object_id:
|
||||||
self.visibilityChanged.emit()
|
self._selected_object_id = id
|
||||||
|
|
||||||
|
self._node = Application.getInstance().getController().getScene().findObject(self._selected_object_id)
|
||||||
|
if self._node:
|
||||||
|
self._stack = self._node.callDecoration("getStack")
|
||||||
|
|
||||||
|
self.visibilityChanged.emit()
|
||||||
|
|
||||||
@pyqtProperty("quint64", fset = setSelectedObjectId)
|
@pyqtProperty("quint64", fset = setSelectedObjectId)
|
||||||
def selectedObjectId(self):
|
def selectedObjectId(self):
|
||||||
pass
|
return self._selected_object_id
|
||||||
|
|
||||||
def setVisible(self, visible):
|
def setVisible(self, visible):
|
||||||
node = Application.getInstance().getController().getScene().findObject(self._selected_object_id)
|
if not self._node:
|
||||||
if not node:
|
|
||||||
return
|
return
|
||||||
stack = node.callDecoration("getStack")
|
|
||||||
if not stack:
|
|
||||||
node.addDecorator(SettingOverrideDecorator())
|
|
||||||
stack = node.callDecoration("getStack")
|
|
||||||
|
|
||||||
settings = stack.getTop()
|
if not self._stack:
|
||||||
all_instances = settings.findInstances(**{})
|
self._node.addDecorator(SettingOverrideDecorator())
|
||||||
|
self._stack = self._node.callDecoration("getStack")
|
||||||
|
|
||||||
|
settings = self._stack.getTop()
|
||||||
|
all_instances = settings.findInstances()
|
||||||
visibility_changed = False # Flag to check if at the end the signal needs to be emitted
|
visibility_changed = False # Flag to check if at the end the signal needs to be emitted
|
||||||
|
|
||||||
# Remove all instances that are not in visibility list
|
# Remove all instances that are not in visibility list
|
||||||
|
@ -41,13 +49,12 @@ class PerObjectSettingVisibilityHandler(QObject):
|
||||||
settings.removeInstance(instance.definition.key)
|
settings.removeInstance(instance.definition.key)
|
||||||
visibility_changed = True
|
visibility_changed = True
|
||||||
|
|
||||||
# Add all instances that are not added, but are in visiblity list
|
# Add all instances that are not added, but are in visibility list
|
||||||
for item in visible:
|
for item in visible:
|
||||||
if not settings.getInstance(item):
|
if not settings.getInstance(item):
|
||||||
definition_container = Application.getInstance().getGlobalContainerStack().getBottom()
|
definition = self._stack.getSettingDefinition(item)
|
||||||
definitions = definition_container.findDefinitions(key = item)
|
if definition:
|
||||||
if definitions:
|
settings.addInstance(SettingInstance(definition, settings))
|
||||||
settings.addInstance(SettingInstance(definitions[0], settings))
|
|
||||||
visibility_changed = True
|
visibility_changed = True
|
||||||
else:
|
else:
|
||||||
Logger.log("w", "Unable to add instance (%s) to perobject visibility because we couldn't find the matching definition", item)
|
Logger.log("w", "Unable to add instance (%s) to perobject visibility because we couldn't find the matching definition", item)
|
||||||
|
@ -57,20 +64,16 @@ class PerObjectSettingVisibilityHandler(QObject):
|
||||||
|
|
||||||
def getVisible(self):
|
def getVisible(self):
|
||||||
visible_settings = set()
|
visible_settings = set()
|
||||||
node = Application.getInstance().getController().getScene().findObject(self._selected_object_id)
|
if not self._node:
|
||||||
if not node:
|
|
||||||
return visible_settings
|
return visible_settings
|
||||||
|
|
||||||
stack = node.callDecoration("getStack")
|
if not self._stack:
|
||||||
if not stack:
|
|
||||||
return visible_settings
|
return visible_settings
|
||||||
|
|
||||||
settings = stack.getTop()
|
settings = self._stack.getTop()
|
||||||
if not settings:
|
if not settings:
|
||||||
return visible_settings
|
return visible_settings
|
||||||
|
|
||||||
all_instances = settings.findInstances(**{})
|
visible_settings = set(map(lambda i: i.definition.key, settings.findInstances()))
|
||||||
for instance in all_instances:
|
|
||||||
visible_settings.add(instance.definition.key)
|
|
||||||
return visible_settings
|
return visible_settings
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue