diff --git a/pype/settings/entities/base_entity.py b/pype/settings/entities/base_entity.py index 295d83507b..187e1abb60 100644 --- a/pype/settings/entities/base_entity.py +++ b/pype/settings/entities/base_entity.py @@ -546,8 +546,23 @@ class BaseItemEntity(BaseEntity): """Entity's implementation to discard all changes made by user.""" pass + def add_to_studio_default(self, on_change_trigger=None): + initialized = False + if on_change_trigger is None: + if not self.can_add_to_studio_default: + return + + initialized = True + on_change_trigger = [] + + self._add_to_studio_default(on_change_trigger) + + if initialized: + for callback in on_change_trigger: + callback() + @abstractmethod - def add_to_studio_default(self): + def _add_to_studio_default(self, on_change_trigger): """Item's implementation to set current values as studio's overrides. Mark item and it's children as they have studio overrides. @@ -592,8 +607,23 @@ class BaseItemEntity(BaseEntity): """ pass + def add_to_project_override(self, on_change_trigger=None): + initialized = False + if on_change_trigger is None: + if not self.can_add_to_project_override: + return + + initialized = True + on_change_trigger = [] + + self._add_to_project_override(on_change_trigger) + + if initialized: + for callback in on_change_trigger: + callback() + @abstractmethod - def add_to_project_override(self): + def _add_to_project_override(self, on_change_trigger): """Item's implementation to set values as overriden for project. Mark item and all it's children to be stored as project overrides. diff --git a/pype/settings/entities/dict_immutable_keys_entity.py b/pype/settings/entities/dict_immutable_keys_entity.py index 2223bfe65f..c983dace2c 100644 --- a/pype/settings/entities/dict_immutable_keys_entity.py +++ b/pype/settings/entities/dict_immutable_keys_entity.py @@ -435,13 +435,10 @@ class DictImmutableKeysEntity(ItemEntity): self._ignore_child_changes = False - def add_to_studio_default(self): - if self._override_state is not OverrideState.STUDIO: - return - + def _add_to_studio_default(self, on_change_trigger): self._ignore_child_changes = True for child_obj in self.non_gui_children.values(): - child_obj.add_to_studio_default() + child_obj.add_to_studio_default(on_change_trigger) self._ignore_child_changes = False self.parent.on_child_change(self) @@ -451,13 +448,10 @@ class DictImmutableKeysEntity(ItemEntity): child_obj.remove_from_studio_default(on_change_trigger) self._ignore_child_changes = False - def add_to_project_override(self): - if self._override_state is not OverrideState.PROJECT: - return - + def _add_to_project_override(self, _on_change_trigger): self._ignore_child_changes = True for child_obj in self.non_gui_children.values(): - child_obj.add_to_project_override() + child_obj.add_to_project_override(_on_change_trigger) self._ignore_child_changes = False self.parent.on_child_change(self) diff --git a/pype/settings/entities/dict_mutable_keys_entity.py b/pype/settings/entities/dict_mutable_keys_entity.py index 1e130f0a29..f8c86a3159 100644 --- a/pype/settings/entities/dict_mutable_keys_entity.py +++ b/pype/settings/entities/dict_mutable_keys_entity.py @@ -443,9 +443,7 @@ class DictMutableKeysEntity(EndpointEntity): self.set_override_state(self._override_state) on_change_trigger.append(self.on_change) - def add_to_studio_default(self): - if self._override_state is not OverrideState.STUDIO: - return + def _add_to_studio_default(self, _on_change_trigger): self._has_studio_override = True self.on_change() @@ -473,9 +471,7 @@ class DictMutableKeysEntity(EndpointEntity): on_change_trigger.append(self.on_change) - def add_to_project_override(self): - if self._override_state is not OverrideState.PROJECT: - return + def _add_to_project_override(self, _on_change_trigger): self._has_project_override = True self.on_change() diff --git a/pype/settings/entities/input_entities.py b/pype/settings/entities/input_entities.py index f113cca0f5..0f9f5c8a36 100644 --- a/pype/settings/entities/input_entities.py +++ b/pype/settings/entities/input_entities.py @@ -276,9 +276,7 @@ class InputEntity(EndpointEntity): raise NotImplementedError("BUG: Unexcpected part of code.") - def add_to_studio_default(self): - if self._override_state is not OverrideState.STUDIO: - return + def _add_to_studio_default(self, _on_change_trigger): self._has_studio_override = True self.on_change() @@ -293,9 +291,7 @@ class InputEntity(EndpointEntity): on_change_trigger.append(self.on_change) - def add_to_project_override(self): - if self._override_state is not OverrideState.PROJECT: - return + def _add_to_project_override(self, _on_change_trigger): self._has_project_override = True self.on_change() diff --git a/pype/settings/entities/item_entities.py b/pype/settings/entities/item_entities.py index 20a7dbc513..30be845d60 100644 --- a/pype/settings/entities/item_entities.py +++ b/pype/settings/entities/item_entities.py @@ -162,20 +162,20 @@ class PathEntity(ItemEntity): def update_studio_value(self, value): self.child_obj.update_studio_value(value) - def _discard_changes(self, *args): - self.child_obj.discard_changes(*args) + def _discard_changes(self, *args, **kwargs): + self.child_obj.discard_changes(*args, **kwargs) - def add_to_studio_default(self): - self.child_obj.add_to_studio_default() + def _add_to_studio_default(self, *args, **kwargs): + self.child_obj.add_to_studio_default(*args, **kwargs) - def _remove_from_studio_default(self, *args): - self.child_obj.remove_from_studio_default(*args) + def _remove_from_studio_default(self, *args, **kwargs): + self.child_obj.remove_from_studio_default(*args, **kwargs) - def add_to_project_override(self): - self.child_obj.add_to_project_override() + def _add_to_project_override(self, *args, **kwargs): + self.child_obj.add_to_project_override(*args, **kwargs) - def _remove_from_project_override(self, *args): - self.child_obj.remove_from_project_override(*args) + def _remove_from_project_override(self, *args, **kwargs): + self.child_obj.remove_from_project_override(*args, **kwargs) def reset_callbacks(self): super(PathEntity, self).reset_callbacks() @@ -359,9 +359,7 @@ class ListStrictEntity(ItemEntity): for child_obj in self.children: child_obj.discard_changes(on_change_trigger) - def add_to_studio_default(self): - if self._override_state is not OverrideState.STUDIO: - return + def _add_to_studio_default(self, _on_change_trigger): self._has_studio_override = True self.on_change() @@ -375,14 +373,11 @@ class ListStrictEntity(ItemEntity): self._has_studio_override = False - def add_to_project_override(self): + def _add_to_project_override(self, _on_change_trigger): self._has_project_override = True self.on_change() def _remove_from_project_override(self, on_change_trigger): - if self._override_state is not OverrideState.PROJECT: - return - self._ignore_child_changes = True for child_obj in self.children: diff --git a/pype/settings/entities/list_entity.py b/pype/settings/entities/list_entity.py index 943863c3e0..2c252aa053 100644 --- a/pype/settings/entities/list_entity.py +++ b/pype/settings/entities/list_entity.py @@ -357,9 +357,7 @@ class ListEntity(EndpointEntity): on_change_trigger.append(self.on_change) - def add_to_studio_default(self): - if self._override_state is not OverrideState.STUDIO: - return + def _add_to_studio_default(self, _on_change_trigger): self._has_studio_override = True self.on_change() @@ -387,7 +385,7 @@ class ListEntity(EndpointEntity): on_change_trigger.append(self.on_change) - def add_to_project_override(self): + def _add_to_project_override(self, _on_change_trigger): self._has_project_override = True self.on_change() diff --git a/pype/settings/entities/root_entities.py b/pype/settings/entities/root_entities.py index 8070b65698..32696e7458 100644 --- a/pype/settings/entities/root_entities.py +++ b/pype/settings/entities/root_entities.py @@ -321,20 +321,20 @@ class RootEntity(BaseItemEntity): for child_obj in self.non_gui_children.values(): child_obj.discard_changes(on_change_trigger) - def add_to_studio_default(self): + def _add_to_studio_default(self, *args, **kwargs): """Implementation of abstract method only trigger children callback.""" for child_obj in self.non_gui_children.values(): - child_obj.add_to_studio_default() + child_obj.add_to_studio_default(*args, **kwargs) def _remove_from_studio_default(self, on_change_trigger): """Implementation of abstract method only trigger children callback.""" for child_obj in self.non_gui_children.values(): child_obj.remove_from_studio_default(on_change_trigger) - def add_to_project_override(self): + def _add_to_project_override(self, *args, **kwargs): """Implementation of abstract method only trigger children callback.""" for child_obj in self.non_gui_children.values(): - child_obj.add_to_project_override() + child_obj.add_to_project_override(*args, **kwargs) def _remove_from_project_override(self, on_change_trigger): """Implementation of abstract method only trigger children callback."""