Added SettingsInheritanceManager

CURA-2361
This commit is contained in:
Jaime van Kessel 2016-09-16 09:38:52 +02:00
parent d0ad654108
commit 50f7c41ae4
4 changed files with 85 additions and 3 deletions

View file

@ -122,6 +122,7 @@ class CuraApplication(QtApplication):
self._machine_action_manager = MachineActionManager.MachineActionManager() self._machine_action_manager = MachineActionManager.MachineActionManager()
self._machine_manager = None # This is initialized on demand. self._machine_manager = None # This is initialized on demand.
self._setting_inheritance_manager = None
self._additional_components = {} # Components to add to certain areas in the interface self._additional_components = {} # Components to add to certain areas in the interface
@ -426,7 +427,7 @@ class CuraApplication(QtApplication):
# Initialise extruder so as to listen to global container stack changes before the first global container stack is set. # Initialise extruder so as to listen to global container stack changes before the first global container stack is set.
cura.Settings.ExtruderManager.getInstance() cura.Settings.ExtruderManager.getInstance()
qmlRegisterSingletonType(cura.Settings.MachineManager, "Cura", 1, 0, "MachineManager", self.getMachineManager) qmlRegisterSingletonType(cura.Settings.MachineManager, "Cura", 1, 0, "MachineManager", self.getMachineManager)
qmlRegisterSingletonType(cura.Settings.SettingInheritanceManager, "Cura", 1, 0, "SettingInheritanceManager", self.getSettingInheritanceManager)
qmlRegisterSingletonType(MachineActionManager.MachineActionManager, "Cura", 1, 0, "MachineActionManager", self.getMachineActionManager) qmlRegisterSingletonType(MachineActionManager.MachineActionManager, "Cura", 1, 0, "MachineActionManager", self.getMachineActionManager)
self.setMainQml(Resources.getPath(self.ResourceTypes.QmlFiles, "Cura.qml")) self.setMainQml(Resources.getPath(self.ResourceTypes.QmlFiles, "Cura.qml"))
self._qml_import_paths.append(Resources.getPath(self.ResourceTypes.QmlFiles)) self._qml_import_paths.append(Resources.getPath(self.ResourceTypes.QmlFiles))
@ -449,6 +450,11 @@ class CuraApplication(QtApplication):
self._machine_manager = cura.Settings.MachineManager.createMachineManager() self._machine_manager = cura.Settings.MachineManager.createMachineManager()
return self._machine_manager return self._machine_manager
def getSettingInheritanceManager(self, *args):
if self._setting_inheritance_manager is None:
self._setting_inheritance_manager = cura.Settings.SettingInheritanceManager.createSettingInheritanceManager()
return self._setting_inheritance_manager
## Get the machine action manager ## Get the machine action manager
# We ignore any *args given to this, as we also register the machine manager as qml singleton. # We ignore any *args given to this, as we also register the machine manager as qml singleton.
# It wants to give this function an engine and script engine, but we don't care about that. # It wants to give this function an engine and script engine, but we don't care about that.

View file

@ -0,0 +1,72 @@
from PyQt5.QtCore import QObject, pyqtSlot, pyqtProperty
import UM.Settings
from UM.Application import Application
import cura.Settings
class SettingInheritanceManager(QObject):
def __init__(self, parent = None):
super().__init__(parent)
Application.getInstance().globalContainerStackChanged.connect(self._onGlobalContainerChanged)
self._global_container_stack = None
self._onGlobalContainerChanged()
self._active_container_stack = None
cura.Settings.ExtruderManager.getInstance().activeExtruderChanged.connect(self._onActiveExtruderChanged)
self._onActiveExtruderChanged()
pass
@pyqtSlot()
def test(self):
print("test!")
def _onActiveExtruderChanged(self):
if self._active_container_stack:
self._active_container_stack.propertyChanged.disconnect(self._onPropertyChanged)
new_active_stack = cura.Settings.ExtruderManager.getInstance().getActiveExtruderStack()
if not new_active_stack:
new_active_stack = self._global_container_stack
if new_active_stack != self._active_container_stack:
# Check if changed
self._active_container_stack = new_active_stack
self._active_container_stack.propertyChanged.connect(self._onPropertyChanged)
def _onPropertyChanged(self, key, property_name):
if property_name == "value" and self._global_container_stack:
definitions = self._global_container_stack.getBottom().findDefinitions(key = key)
if not definitions:
return
# Pseudo code;
# Check if the property change caused a inheritance warning to trigger.
pass # We need to do sum maaagic
# Check if a setting is being overwritten.
def _settingIsOverwritingInheritance(self, key):
has_setting_function = False
stack = self._active_container_stack
containers = []
while stack:
containers.extend(stack.getContainers())
stack = stack.getNextStack()
for container in containers:
try:
has_setting_function = isinstance(container.getProperty(key, "value"), UM.Settings.SettingFunction)
except AttributeError:
continue
if has_setting_function:
break
return has_setting_function and not isinstance(self._active_container_stack.getTop().getProperty(key, "value"), UM.Settings.SettingFunction)
def _update(self):
pass
def _onGlobalContainerChanged(self):
self._global_container_stack = Application.getInstance().getGlobalContainerStack()
@staticmethod
def createSettingInheritanceManager(engine=None, script_engine=None):
return SettingInheritanceManager()

View file

@ -11,3 +11,4 @@ from .MachineManager import MachineManager
from .MaterialSettingsVisibilityHandler import MaterialSettingsVisibilityHandler from .MaterialSettingsVisibilityHandler import MaterialSettingsVisibilityHandler
from .SettingOverrideDecorator import SettingOverrideDecorator from .SettingOverrideDecorator import SettingOverrideDecorator
from .QualitySettingsModel import QualitySettingsModel from .QualitySettingsModel import QualitySettingsModel
from .SettingInheritanceManager import SettingInheritanceManager

View file

@ -17,15 +17,18 @@ Button {
signal showTooltip(string text); signal showTooltip(string text);
signal hideTooltip(); signal hideTooltip();
signal contextMenuRequested() signal contextMenuRequested()
signal showAllHiddenInheritedSettings()
text: definition.label text: definition.label
iconSource: UM.Theme.getIcon(definition.icon) iconSource: UM.Theme.getIcon(definition.icon)
checkable: true checkable: true
checked: definition.expanded checked: definition.expanded
onClicked: { forceActiveFocus(); definition.expanded ? settingDefinitionsModel.collapse(definition.key) : settingDefinitionsModel.expandAll(definition.key) } onClicked: { forceActiveFocus(); definition.expanded ? settingDefinitionsModel.collapse(definition.key) : settingDefinitionsModel.expandAll(definition.key) }
Component.onCompleted: print(definition.label, propertyProvider.isValueUsed)
UM.SimpleButton UM.SimpleButton
{ {
id: settingsButton id: settingsButton
@ -57,7 +60,7 @@ Button {
anchors.right: parent.right anchors.right: parent.right
anchors.rightMargin: UM.Theme.getSize("setting_preferences_button_margin").width anchors.rightMargin: UM.Theme.getSize("setting_preferences_button_margin").width
visible: false //hiddenValuesCount > 0 visible: true //false //hiddenValuesCount > 0
height: parent.height / 2 height: parent.height / 2
width: height width: height