mirror of
https://github.com/ynput/ayon-core.git
synced 2026-01-01 16:34:53 +01:00
basic overrides values getting implemented
This commit is contained in:
parent
8b7d565208
commit
7e65e5c830
2 changed files with 150 additions and 12 deletions
|
|
@ -304,6 +304,7 @@ class ProjectWidget(QtWidgets.QWidget, PypeConfigurationWidget):
|
|||
|
||||
self.is_overidable = False
|
||||
self.ignore_value_changes = False
|
||||
self.project_name = None
|
||||
|
||||
self.input_fields = []
|
||||
|
||||
|
|
@ -373,7 +374,6 @@ class ProjectWidget(QtWidgets.QWidget, PypeConfigurationWidget):
|
|||
|
||||
def _on_project_change(self):
|
||||
project_name = self.project_list_widget.project_name()
|
||||
|
||||
if project_name is None:
|
||||
overrides = None
|
||||
self.is_overidable = False
|
||||
|
|
@ -381,12 +381,28 @@ class ProjectWidget(QtWidgets.QWidget, PypeConfigurationWidget):
|
|||
overrides = config.project_preset_overrides(project_name)
|
||||
self.is_overidable = True
|
||||
|
||||
self.project_name = project_name
|
||||
self.ignore_value_changes = True
|
||||
for item in self.input_fields:
|
||||
item.apply_overrides(overrides)
|
||||
self.ignore_value_changes = False
|
||||
|
||||
def _save(self):
|
||||
if self.project_name is None:
|
||||
self._save_defaults()
|
||||
else:
|
||||
self._save_overrides()
|
||||
|
||||
def _save_overrides(self):
|
||||
output = {}
|
||||
for item in self.input_fields:
|
||||
value = item.overrides()
|
||||
if value is not NOT_SET:
|
||||
output.update(value)
|
||||
|
||||
print(json.dumps(output, indent=4))
|
||||
|
||||
def _save_defaults(self):
|
||||
output = {}
|
||||
for item in self.input_fields:
|
||||
output.update(item.config_value())
|
||||
|
|
@ -396,3 +412,46 @@ class ProjectWidget(QtWidgets.QWidget, PypeConfigurationWidget):
|
|||
output = _output
|
||||
|
||||
print(json.dumps(output, indent=4))
|
||||
return
|
||||
|
||||
# TODO check implementation copied from studio
|
||||
all_values = {}
|
||||
for item in self.input_fields:
|
||||
all_values.update(item.config_value())
|
||||
|
||||
for key in reversed(self.keys):
|
||||
_all_values = {key: all_values}
|
||||
all_values = _all_values
|
||||
|
||||
# Skip first key
|
||||
all_values = all_values["studio"]
|
||||
|
||||
# Load studio data with metadata
|
||||
current_presets = config.studio_presets()
|
||||
|
||||
keys_to_file = config.file_keys_from_schema(self.schema)
|
||||
for key_sequence in keys_to_file:
|
||||
# Skip first key
|
||||
key_sequence = key_sequence[1:]
|
||||
subpath = "/".join(key_sequence) + ".json"
|
||||
origin_values = current_presets
|
||||
for key in key_sequence:
|
||||
if key not in origin_values:
|
||||
origin_values = {}
|
||||
break
|
||||
origin_values = origin_values[key]
|
||||
|
||||
new_values = all_values
|
||||
for key in key_sequence:
|
||||
new_values = new_values[key]
|
||||
origin_values.update(new_values)
|
||||
|
||||
output_path = os.path.join(
|
||||
config.studio_presets_path, subpath
|
||||
)
|
||||
dirpath = os.path.dirname(output_path)
|
||||
if not os.path.exists(dirpath):
|
||||
os.makedirs(dirpath)
|
||||
|
||||
with open(output_path, "w") as file_stream:
|
||||
json.dump(origin_values, file_stream, indent=4)
|
||||
|
|
|
|||
|
|
@ -177,6 +177,11 @@ class BooleanWidget(QtWidgets.QWidget, PypeConfigurationWidget):
|
|||
def config_value(self):
|
||||
return {self.key: self.item_value()}
|
||||
|
||||
def overrides(self):
|
||||
if not self.is_overriden:
|
||||
return NOT_SET
|
||||
return self.config_value()
|
||||
|
||||
|
||||
class IntegerWidget(QtWidgets.QWidget, PypeConfigurationWidget):
|
||||
value_changed = QtCore.Signal(object)
|
||||
|
|
@ -321,6 +326,11 @@ class IntegerWidget(QtWidgets.QWidget, PypeConfigurationWidget):
|
|||
def config_value(self):
|
||||
return {self.key: self.item_value()}
|
||||
|
||||
def overrides(self):
|
||||
if not self.is_overriden:
|
||||
return NOT_SET
|
||||
return self.config_value()
|
||||
|
||||
|
||||
class FloatWidget(QtWidgets.QWidget, PypeConfigurationWidget):
|
||||
value_changed = QtCore.Signal(object)
|
||||
|
|
@ -473,6 +483,11 @@ class FloatWidget(QtWidgets.QWidget, PypeConfigurationWidget):
|
|||
def config_value(self):
|
||||
return {self.key: self.item_value()}
|
||||
|
||||
def overrides(self):
|
||||
if not self.is_overriden:
|
||||
return NOT_SET
|
||||
return self.config_value()
|
||||
|
||||
|
||||
class TextSingleLineWidget(QtWidgets.QWidget, PypeConfigurationWidget):
|
||||
value_changed = QtCore.Signal(object)
|
||||
|
|
@ -617,6 +632,11 @@ class TextSingleLineWidget(QtWidgets.QWidget, PypeConfigurationWidget):
|
|||
def config_value(self):
|
||||
return {self.key: self.item_value()}
|
||||
|
||||
def overrides(self):
|
||||
if not self.is_overriden:
|
||||
return NOT_SET
|
||||
return self.config_value()
|
||||
|
||||
|
||||
class TextMultiLineWidget(QtWidgets.QWidget, PypeConfigurationWidget):
|
||||
value_changed = QtCore.Signal(object)
|
||||
|
|
@ -757,6 +777,11 @@ class TextMultiLineWidget(QtWidgets.QWidget, PypeConfigurationWidget):
|
|||
def config_value(self):
|
||||
return {self.key: self.item_value()}
|
||||
|
||||
def overrides(self):
|
||||
if not self.is_overriden:
|
||||
return NOT_SET
|
||||
return self.config_value()
|
||||
|
||||
|
||||
class RawJsonInput(QtWidgets.QPlainTextEdit):
|
||||
tab_length = 4
|
||||
|
|
@ -955,6 +980,11 @@ class RawJsonWidget(QtWidgets.QWidget, PypeConfigurationWidget):
|
|||
def config_value(self):
|
||||
return {self.key: self.item_value()}
|
||||
|
||||
def overrides(self):
|
||||
if not self.is_overriden:
|
||||
return NOT_SET
|
||||
return self.config_value()
|
||||
|
||||
|
||||
class TextListItem(QtWidgets.QWidget, PypeConfigurationWidget):
|
||||
_btn_size = 20
|
||||
|
|
@ -1248,6 +1278,11 @@ class TextListWidget(QtWidgets.QWidget, PypeConfigurationWidget):
|
|||
def config_value(self):
|
||||
return {self.key: self.item_value()}
|
||||
|
||||
def overrides(self):
|
||||
if not self.is_overriden:
|
||||
return NOT_SET
|
||||
return self.config_value()
|
||||
|
||||
|
||||
class DictExpandWidget(QtWidgets.QWidget, PypeConfigurationWidget):
|
||||
value_changed = QtCore.Signal(object)
|
||||
|
|
@ -1473,6 +1508,18 @@ class DictExpandWidget(QtWidgets.QWidget, PypeConfigurationWidget):
|
|||
self.input_fields.append(item)
|
||||
return item
|
||||
|
||||
def overrides(self):
|
||||
if not self.is_overriden and not self.child_overriden:
|
||||
return NOT_SET
|
||||
|
||||
values = {}
|
||||
for input_field in self.input_fields:
|
||||
value = input_field.overrides()
|
||||
if value is NOT_SET:
|
||||
continue
|
||||
values.update(value)
|
||||
return {self.key: values}
|
||||
|
||||
|
||||
class DictInvisible(QtWidgets.QWidget, PypeConfigurationWidget):
|
||||
# TODO is not overridable by itself
|
||||
|
|
@ -1612,6 +1659,18 @@ class DictInvisible(QtWidgets.QWidget, PypeConfigurationWidget):
|
|||
)
|
||||
self.update_style()
|
||||
|
||||
def overrides(self):
|
||||
if not self.is_overriden and not self.child_overriden:
|
||||
return NOT_SET
|
||||
|
||||
values = {}
|
||||
for input_field in self.input_fields:
|
||||
value = input_field.overrides()
|
||||
if value is NOT_SET:
|
||||
continue
|
||||
values.update(value)
|
||||
return {self.key: values}
|
||||
|
||||
|
||||
class DictFormWidget(QtWidgets.QWidget):
|
||||
value_changed = QtCore.Signal(object)
|
||||
|
|
@ -1628,7 +1687,7 @@ class DictFormWidget(QtWidgets.QWidget):
|
|||
self.any_parent_is_group = any_parent_is_group
|
||||
|
||||
self.is_modified = False
|
||||
self.is_overriden = False
|
||||
self._is_overriden = False
|
||||
self.is_group = False
|
||||
|
||||
super(DictFormWidget, self).__init__(parent)
|
||||
|
|
@ -1646,13 +1705,9 @@ class DictFormWidget(QtWidgets.QWidget):
|
|||
return
|
||||
self.value_changed.emit(self)
|
||||
|
||||
def item_value(self):
|
||||
output = {}
|
||||
for input_field in self.input_fields.values():
|
||||
# TODO maybe merge instead of update should be used
|
||||
# NOTE merge is custom function which merges 2 dicts
|
||||
output.update(input_field.config_value())
|
||||
return output
|
||||
@property
|
||||
def is_overriden(self):
|
||||
return self._parent.is_overriden
|
||||
|
||||
@property
|
||||
def child_modified(self):
|
||||
|
|
@ -1676,9 +1731,6 @@ class DictFormWidget(QtWidgets.QWidget):
|
|||
def ignore_value_changes(self):
|
||||
return self._parent.ignore_value_changes
|
||||
|
||||
def config_value(self):
|
||||
return self.item_value()
|
||||
|
||||
def add_children_gui(self, child_configuration, values):
|
||||
item_type = child_configuration["type"]
|
||||
key = child_configuration["key"]
|
||||
|
|
@ -1697,6 +1749,28 @@ class DictFormWidget(QtWidgets.QWidget):
|
|||
self.input_fields[key] = item
|
||||
return item
|
||||
|
||||
def item_value(self):
|
||||
output = {}
|
||||
for input_field in self.input_fields.values():
|
||||
# TODO maybe merge instead of update should be used
|
||||
# NOTE merge is custom function which merges 2 dicts
|
||||
output.update(input_field.config_value())
|
||||
return output
|
||||
|
||||
def config_value(self):
|
||||
return self.item_value()
|
||||
|
||||
def overrides(self):
|
||||
if not self.is_overiden and not self.child_overriden:
|
||||
return NOT_SET
|
||||
|
||||
values = {}
|
||||
for input_field in self.input_fields:
|
||||
value = input_field.overrides()
|
||||
if value is not NOT_SET:
|
||||
values.update(value)
|
||||
return values
|
||||
|
||||
|
||||
class ModifiableDictItem(QtWidgets.QWidget, PypeConfigurationWidget):
|
||||
_btn_size = 20
|
||||
|
|
@ -2064,6 +2138,11 @@ class ModifiableDict(ExpandingWidget, PypeConfigurationWidget):
|
|||
def config_value(self):
|
||||
return {self.key: self.item_value()}
|
||||
|
||||
def overrides(self):
|
||||
if not self.is_overiden:
|
||||
return NOT_SET
|
||||
return self.config_value()
|
||||
|
||||
|
||||
TypeToKlass.types["boolean"] = BooleanWidget
|
||||
TypeToKlass.types["text-singleline"] = TextSingleLineWidget
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue