From 6d142109dc18a52a67a8b7b734b73691ae3d6777 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Tue, 4 May 2021 10:18:25 +0200 Subject: [PATCH 1/4] can properties are private and don't care about dynamic item property --- openpype/settings/entities/base_entity.py | 47 +++++------------------ 1 file changed, 10 insertions(+), 37 deletions(-) diff --git a/openpype/settings/entities/base_entity.py b/openpype/settings/entities/base_entity.py index b5c42e1da0..e6aa468f1e 100644 --- a/openpype/settings/entities/base_entity.py +++ b/openpype/settings/entities/base_entity.py @@ -457,25 +457,16 @@ class BaseItemEntity(BaseEntity): pass @property - def can_discard_changes(self): - """Result defines if `discard_changes` will be processed. - - Also can be used as validation before the method is called. - """ + def _can_discard_changes(self): + """Defines if `discard_changes` will be processed.""" return self.has_unsaved_changes @property - def can_add_to_studio_default(self): - """Result defines if `add_to_studio_default` will be processed. - - Also can be used as validation before the method is called. - """ + def _can_add_to_studio_default(self): + """Defines if `add_to_studio_default` will be processed.""" if self._override_state is not OverrideState.STUDIO: return False - if self.is_dynamic_item or self.is_in_dynamic_item: - return False - # Skip if entity is under group if self.group_item: return False @@ -487,30 +478,18 @@ class BaseItemEntity(BaseEntity): return True @property - def can_remove_from_studio_default(self): - """Result defines if `remove_from_studio_default` can be triggered. - - This can be also used as validation before the method is called. - """ + def _can_remove_from_studio_default(self): + """Defines if `remove_from_studio_default` can be processed.""" if self._override_state is not OverrideState.STUDIO: return False - if self.is_dynamic_item or self.is_in_dynamic_item: - return False - if not self.has_studio_override: return False return True @property - def can_add_to_project_override(self): - """Result defines if `add_to_project_override` can be triggered. - - Also can be used as validation before the method is called. - """ - if self.is_dynamic_item or self.is_in_dynamic_item: - return False - + def _can_add_to_project_override(self): + """Defines if `add_to_project_override` can be processed.""" # Show only when project overrides are set if self._override_state is not OverrideState.PROJECT: return False @@ -525,14 +504,8 @@ class BaseItemEntity(BaseEntity): return True @property - def can_remove_from_project_override(self): - """Result defines if `remove_from_project_override` can be triggered. - - This can be also used as validation before the method is called. - """ - if self.is_dynamic_item or self.is_in_dynamic_item: - return False - + def _can_remove_from_project_override(self): + """Defines if `remove_from_project_override` can be processed.""" if self._override_state is not OverrideState.PROJECT: return False From 96744b85ce81dca6c2bc4c1ad9bd9b4748655a08 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Tue, 4 May 2021 10:18:58 +0200 Subject: [PATCH 2/4] added can_trigger properties which says if action can be initialized on entity --- openpype/settings/entities/base_entity.py | 58 +++++++++++++++++++++-- 1 file changed, 53 insertions(+), 5 deletions(-) diff --git a/openpype/settings/entities/base_entity.py b/openpype/settings/entities/base_entity.py index e6aa468f1e..2b9fd02904 100644 --- a/openpype/settings/entities/base_entity.py +++ b/openpype/settings/entities/base_entity.py @@ -517,6 +517,54 @@ class BaseItemEntity(BaseEntity): return False return True + @property + def can_trigger_discard_changes(self): + """Defines if can trigger `discard_changes`. + + Also can be used as validation before the method is called. + """ + return self._can_discard_changes + + @property + def can_trigger_add_to_studio_default(self): + """Defines if can trigger `add_to_studio_default`. + + Also can be used as validation before the method is called. + """ + if self.is_dynamic_item or self.is_in_dynamic_item: + return False + return self._can_add_to_studio_default + + @property + def can_trigger_remove_from_studio_default(self): + """Defines if can trigger `remove_from_studio_default`. + + Also can be used as validation before the method is called. + """ + if self.is_dynamic_item or self.is_in_dynamic_item: + return False + return self._can_remove_from_studio_default + + @property + def can_trigger_add_to_project_override(self): + """Defines if can trigger `add_to_project_override`. + + Also can be used as validation before the method is called. + """ + if self.is_dynamic_item or self.is_in_dynamic_item: + return False + return self._can_add_to_project_override + + @property + def can_trigger_remove_from_project_override(self): + """Defines if can trigger `remove_from_project_override`. + + Also can be used as validation before the method is called. + """ + if self.is_dynamic_item or self.is_in_dynamic_item: + return False + return self._can_remove_from_project_override + def discard_changes(self, on_change_trigger=None): """Discard changes on entity and it's children. @@ -541,7 +589,7 @@ class BaseItemEntity(BaseEntity): """ initialized = False if on_change_trigger is None: - if not self.can_discard_changes: + if not self.can_trigger_discard_changes: return initialized = True @@ -561,7 +609,7 @@ class BaseItemEntity(BaseEntity): 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: + if not self.can_trigger_add_to_studio_default: return initialized = True @@ -598,7 +646,7 @@ class BaseItemEntity(BaseEntity): """ initialized = False if on_change_trigger is None: - if not self.can_remove_from_studio_default: + if not self.can_trigger_remove_from_studio_default: return initialized = True @@ -622,7 +670,7 @@ class BaseItemEntity(BaseEntity): 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: + if not self.can_trigger_add_to_project_override: return initialized = True @@ -662,7 +710,7 @@ class BaseItemEntity(BaseEntity): initialized = False if on_change_trigger is None: - if not self.can_remove_from_project_override: + if not self.can_trigger_remove_from_project_override: return initialized = True on_change_trigger = [] From e468fc340d5a05cbff15b1eb77166515d6d78373 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Tue, 4 May 2021 10:19:53 +0200 Subject: [PATCH 3/4] fix attribute names of check methods --- openpype/settings/entities/dict_mutable_keys_entity.py | 6 +++--- openpype/settings/entities/input_entities.py | 6 +++--- openpype/settings/entities/list_entity.py | 6 +++--- openpype/tools/settings/settings/widgets/base.py | 10 +++++----- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/openpype/settings/entities/dict_mutable_keys_entity.py b/openpype/settings/entities/dict_mutable_keys_entity.py index 19eb83072e..0d567667be 100644 --- a/openpype/settings/entities/dict_mutable_keys_entity.py +++ b/openpype/settings/entities/dict_mutable_keys_entity.py @@ -522,7 +522,7 @@ class DictMutableKeysEntity(EndpointEntity): self.had_project_override = value is not NOT_SET def _discard_changes(self, on_change_trigger): - if not self.can_discard_changes: + if not self._can_discard_changes: return self.set_override_state(self._override_state) @@ -533,7 +533,7 @@ class DictMutableKeysEntity(EndpointEntity): self.on_change() def _remove_from_studio_default(self, on_change_trigger): - if not self.can_remove_from_studio_default: + if not self._can_remove_from_studio_default: return value = self._default_value @@ -574,7 +574,7 @@ class DictMutableKeysEntity(EndpointEntity): self.on_change() def _remove_from_project_override(self, on_change_trigger): - if not self.can_remove_from_project_override: + if not self._can_remove_from_project_override: return if self._has_studio_override: diff --git a/openpype/settings/entities/input_entities.py b/openpype/settings/entities/input_entities.py index 2ca20542ef..1b2e10ca1d 100644 --- a/openpype/settings/entities/input_entities.py +++ b/openpype/settings/entities/input_entities.py @@ -251,7 +251,7 @@ class InputEntity(EndpointEntity): self._current_value = copy.deepcopy(value) def _discard_changes(self, on_change_trigger=None): - if not self.can_discard_changes: + if not self._can_discard_changes: return self._value_is_modified = False @@ -289,7 +289,7 @@ class InputEntity(EndpointEntity): self.on_change() def _remove_from_studio_default(self, on_change_trigger): - if not self.can_remove_from_studio_default: + if not self._can_remove_from_studio_default: return value = self._default_value @@ -307,7 +307,7 @@ class InputEntity(EndpointEntity): self.on_change() def _remove_from_project_override(self, on_change_trigger): - if not self.can_remove_from_project_override: + if not self._can_remove_from_project_override: return self._has_project_override = False diff --git a/openpype/settings/entities/list_entity.py b/openpype/settings/entities/list_entity.py index ee647264b7..4db5720e37 100644 --- a/openpype/settings/entities/list_entity.py +++ b/openpype/settings/entities/list_entity.py @@ -343,7 +343,7 @@ class ListEntity(EndpointEntity): return output def _discard_changes(self, on_change_trigger): - if not self.can_discard_changes: + if not self._can_discard_changes: return not_set = object() @@ -405,7 +405,7 @@ class ListEntity(EndpointEntity): self.on_change() def _remove_from_studio_default(self, on_change_trigger): - if not self.can_remove_from_studio_default: + if not self._can_remove_from_studio_default: return value = self._default_value @@ -433,7 +433,7 @@ class ListEntity(EndpointEntity): self.on_change() def _remove_from_project_override(self, on_change_trigger): - if not self.can_remove_from_project_override: + if not self._can_remove_from_project_override: return if self._has_studio_override: diff --git a/openpype/tools/settings/settings/widgets/base.py b/openpype/tools/settings/settings/widgets/base.py index 4010b8ab20..3d633a100e 100644 --- a/openpype/tools/settings/settings/widgets/base.py +++ b/openpype/tools/settings/settings/widgets/base.py @@ -71,7 +71,7 @@ class BaseWidget(QtWidgets.QWidget): def _discard_changes_action(self, menu, actions_mapping): # TODO use better condition as unsaved changes may be caused due to # changes in schema. - if not self.entity.can_discard_changes: + if not self.entity.can_trigger_discard_changes: return def discard_changes(): @@ -86,7 +86,7 @@ class BaseWidget(QtWidgets.QWidget): def _add_to_studio_default(self, menu, actions_mapping): """Set values as studio overrides.""" # Skip if not in studio overrides - if not self.entity.can_add_to_studio_default: + if not self.entity.can_trigger_add_to_studio_default: return action = QtWidgets.QAction("Add to studio default") @@ -94,7 +94,7 @@ class BaseWidget(QtWidgets.QWidget): menu.addAction(action) def _remove_from_studio_default_action(self, menu, actions_mapping): - if not self.entity.can_remove_from_studio_default: + if not self.entity.can_trigger_remove_from_studio_default: return def remove_from_studio_default(): @@ -106,7 +106,7 @@ class BaseWidget(QtWidgets.QWidget): menu.addAction(action) def _add_to_project_override_action(self, menu, actions_mapping): - if not self.entity.can_add_to_project_override: + if not self.entity.can_trigger_add_to_project_override: return action = QtWidgets.QAction("Add to project project override") @@ -114,7 +114,7 @@ class BaseWidget(QtWidgets.QWidget): menu.addAction(action) def _remove_from_project_override_action(self, menu, actions_mapping): - if not self.entity.can_remove_from_project_override: + if not self.entity.can_trigger_remove_from_project_override: return def remove_from_project_override(): From 2bca53f6da11fc762046d37e82c4d4fdb1ace2da Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Tue, 4 May 2021 10:20:03 +0200 Subject: [PATCH 4/4] fix reset_callbacks on strict list --- openpype/settings/entities/item_entities.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/openpype/settings/entities/item_entities.py b/openpype/settings/entities/item_entities.py index 56e7d1c7b2..c3c6c598f6 100644 --- a/openpype/settings/entities/item_entities.py +++ b/openpype/settings/entities/item_entities.py @@ -453,4 +453,5 @@ class ListStrictEntity(ItemEntity): def reset_callbacks(self): super(ListStrictEntity, self).reset_callbacks() - self.child_obj.reset_callbacks() + for child_obj in self.children: + child_obj.reset_callbacks()