|
@@ -1,138 +0,0 @@
|
|
|
-# Copyright (c) 2015 Ultimaker B.V.
|
|
|
-# Uranium is released under the terms of the AGPLv3 or higher.
|
|
|
-
|
|
|
-from PyQt5.QtCore import Qt, pyqtSlot, QUrl
|
|
|
-
|
|
|
-from UM.Application import Application
|
|
|
-from UM.Qt.ListModel import ListModel
|
|
|
-#from UM.Settings.SettingOverrideDecorator import SettingOverrideDecorator
|
|
|
-
|
|
|
-class SettingOverrideModel(ListModel):
|
|
|
- KeyRole = Qt.UserRole + 1
|
|
|
- LabelRole = Qt.UserRole + 2
|
|
|
- DescriptionRole = Qt.UserRole + 3
|
|
|
- ValueRole = Qt.UserRole + 4
|
|
|
- TypeRole = Qt.UserRole + 5
|
|
|
- UnitRole = Qt.UserRole + 6
|
|
|
- ValidRole = Qt.UserRole + 7
|
|
|
- OptionsRole = Qt.UserRole + 8
|
|
|
- WarningDescriptionRole = Qt.UserRole + 9
|
|
|
- ErrorDescriptionRole = Qt.UserRole + 10
|
|
|
- GlobalOnlyRole = Qt.UserRole + 11
|
|
|
-
|
|
|
- def __init__(self, node, parent = None):
|
|
|
- super().__init__(parent)
|
|
|
-
|
|
|
- self._ignore_setting_change = None
|
|
|
-
|
|
|
- self._node = node
|
|
|
- self._node.decoratorsChanged.connect(self._onDecoratorsChanged)
|
|
|
- self._onDecoratorsChanged(None)
|
|
|
-
|
|
|
- #self._activeProfile = Application.getInstance().getMachineManager().getWorkingProfile() #To be able to get notified when a setting changes.
|
|
|
- #self._activeProfile.settingValueChanged.connect(self._onProfileSettingValueChanged)
|
|
|
- #Application.getInstance().getMachineManager().activeProfileChanged.connect(self._onProfileChanged)
|
|
|
-
|
|
|
- self.addRoleName(self.KeyRole, "key")
|
|
|
- self.addRoleName(self.LabelRole, "label")
|
|
|
- self.addRoleName(self.DescriptionRole, "description")
|
|
|
- self.addRoleName(self.ValueRole,"value")
|
|
|
- self.addRoleName(self.TypeRole, "type")
|
|
|
- self.addRoleName(self.UnitRole, "unit")
|
|
|
- self.addRoleName(self.ValidRole, "valid")
|
|
|
- self.addRoleName(self.OptionsRole, "options")
|
|
|
- self.addRoleName(self.WarningDescriptionRole, "warning_description")
|
|
|
- self.addRoleName(self.ErrorDescriptionRole, "error_description")
|
|
|
- self.addRoleName(self.GlobalOnlyRole, "global_only")
|
|
|
-
|
|
|
- @pyqtSlot(str, "QVariant")
|
|
|
- def setSettingValue(self, key, value):
|
|
|
- if not self._decorator:
|
|
|
- return
|
|
|
-
|
|
|
- self._decorator.setSettingValue(key, value)
|
|
|
-
|
|
|
- def _onDecoratorsChanged(self, node):
|
|
|
- return
|
|
|
- '''if not self._node.getDecorator(SettingOverrideDecorator):
|
|
|
- self.clear()
|
|
|
- return
|
|
|
-
|
|
|
- self._decorator = self._node.getDecorator(SettingOverrideDecorator)
|
|
|
- self._decorator.settingAdded.connect(self._onSettingsChanged)
|
|
|
- self._decorator.settingRemoved.connect(self._onSettingsChanged)
|
|
|
- self._decorator.settingValueChanged.connect(self._onSettingValueChanged)
|
|
|
- self._onSettingsChanged()'''
|
|
|
-
|
|
|
- def _createOptionsModel(self, options):
|
|
|
- if not options:
|
|
|
- return None
|
|
|
-
|
|
|
- model = ListModel()
|
|
|
- model.addRoleName(Qt.UserRole + 1, "value")
|
|
|
- model.addRoleName(Qt.UserRole + 2, "name")
|
|
|
- for value, name in options.items():
|
|
|
- model.appendItem({"value": str(value), "name": str(name)})
|
|
|
- return model
|
|
|
-
|
|
|
- ## Updates the active profile in this model if the active profile is
|
|
|
- # changed.
|
|
|
- #
|
|
|
- # This links the settingValueChanged of the new profile to this model's
|
|
|
- # _onSettingValueChanged function, so that it properly listens to those
|
|
|
- # events again.
|
|
|
- def _onProfileChanged(self):
|
|
|
- if self._activeProfile: #Unlink from the old profile.
|
|
|
- self._activeProfile.settingValueChanged.disconnect(self._onProfileSettingValueChanged)
|
|
|
- old_profile = self._activeProfile
|
|
|
- self._activeProfile = Application.getInstance().getMachineManager().getWorkingProfile()
|
|
|
- self._activeProfile.settingValueChanged.connect(self._onProfileSettingValueChanged) #Re-link to the new profile.
|
|
|
- for setting_name in old_profile.getChangedSettings().keys(): #Update all changed settings in the old and new profiles.
|
|
|
- self._onProfileSettingValueChanged(setting_name)
|
|
|
- for setting_name in self._activeProfile.getChangedSettings().keys():
|
|
|
- self._onProfileSettingValueChanged(setting_name)
|
|
|
-
|
|
|
- ## Updates the global_only property of a setting once a setting value
|
|
|
- # changes.
|
|
|
- #
|
|
|
- # This method should only get called on settings that are dependent on the
|
|
|
- # changed setting.
|
|
|
- #
|
|
|
- # \param setting_name The setting that needs to be updated.
|
|
|
- def _onProfileSettingValueChanged(self, setting_name):
|
|
|
- index = self.find("key", setting_name)
|
|
|
- if index != -1:
|
|
|
- self.setProperty(index, "global_only", Application.getInstance().getMachineManager().getActiveMachineInstance().getMachineDefinition().getSetting(setting_name).getGlobalOnly())
|
|
|
-
|
|
|
- def _onSettingsChanged(self):
|
|
|
- self.clear()
|
|
|
-
|
|
|
- items = []
|
|
|
- for key, setting in self._decorator.getAllSettings().items():
|
|
|
- value = self._decorator.getSettingValue(key)
|
|
|
- items.append({
|
|
|
- "key": key,
|
|
|
- "label": setting.getLabel(),
|
|
|
- "description": setting.getDescription(),
|
|
|
- "value": str(value),
|
|
|
- "type": setting.getType(),
|
|
|
- "unit": setting.getUnit(),
|
|
|
- "valid": setting.validate(value),
|
|
|
- "options": self._createOptionsModel(setting.getOptions()),
|
|
|
- "warning_description": setting.getWarningDescription(),
|
|
|
- "error_description": setting.getErrorDescription(),
|
|
|
- "global_only": setting.getGlobalOnly()
|
|
|
- })
|
|
|
-
|
|
|
- items.sort(key = lambda i: i["key"])
|
|
|
-
|
|
|
- for item in items:
|
|
|
- self.appendItem(item)
|
|
|
-
|
|
|
- def _onSettingValueChanged(self, setting):
|
|
|
- index = self.find("key", setting.getKey())
|
|
|
- value = self._decorator.getSettingValue(setting.getKey())
|
|
|
- if index != -1:
|
|
|
- self.setProperty(index, "value", str(value))
|
|
|
- self.setProperty(index, "valid", setting.validate(value))
|
|
|
- self.setProperty(index, "global_only", setting.getGlobalOnly())
|