From b9c31d1c5df84d142bf90e2b01a7d87f750051bd Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Mon, 25 Jan 2021 18:43:27 +0100 Subject: [PATCH] has unsaved changes should work properly --- pype/settings/entities/base_entity.py | 4 +++- pype/settings/entities/constants.py | 1 + pype/settings/entities/input_entities.py | 23 ++++++++++++++++++++--- 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/pype/settings/entities/base_entity.py b/pype/settings/entities/base_entity.py index 89cd447361..9c4e30bdec 100644 --- a/pype/settings/entities/base_entity.py +++ b/pype/settings/entities/base_entity.py @@ -159,6 +159,8 @@ class BaseEntity: self.defaults_not_set = False # Default input attributes + self.had_default_value = False + self.has_studio_override = False self.had_studio_override = False @@ -168,7 +170,7 @@ class BaseEntity: self.value_is_modified = False self.is_invalid = False - self.override_state = OverrideState.STUDIO + self.override_state = OverrideState.NOT_DEFINED @property def path(self): diff --git a/pype/settings/entities/constants.py b/pype/settings/entities/constants.py index dfc5414609..91405a02f6 100644 --- a/pype/settings/entities/constants.py +++ b/pype/settings/entities/constants.py @@ -35,6 +35,7 @@ __all__ = ( class OverrideState(enum.Enum): + NOT_DEFINED = object() DEFAULTS = object() STUDIO = object() PROJECT = object() diff --git a/pype/settings/entities/input_entities.py b/pype/settings/entities/input_entities.py index 405b051e70..c2966e1e56 100644 --- a/pype/settings/entities/input_entities.py +++ b/pype/settings/entities/input_entities.py @@ -125,17 +125,33 @@ class InputEntity(ItemEntity): @property def has_unsaved_changes(self): + if self.override_state is OverrideState.NOT_DEFINED: + return False + if self.value_is_modified: return True - if self.override_state is OverrideState.STUDIO: + if self.override_state is OverrideState.DEFAULTS: + if not self.had_default_value: + return True + + elif self.override_state is OverrideState.STUDIO: if self.has_studio_override != self.had_studio_override: return True + if not self.has_studio_override and not self.had_default_value: + return True + elif self.override_state is OverrideState.PROJECT: if self.has_project_override != self.had_project_override: return True + if ( + not self.has_project_override + and not self.has_studio_override + and not self.had_default_value + ): + return True return False def settings_value(self): @@ -179,9 +195,10 @@ class InputEntity(ItemEntity): if value is NOT_SET: value = self.value_on_not_set - self.value_is_modified = True + self.had_default_value = False else: - self.value_is_modified = False + self.had_default_value = True + self.value_is_modified = False self._current_value = copy.deepcopy(value)