From 634db846cd7af369371e07f49c1d31e7569251b5 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Fri, 5 Feb 2021 12:57:23 +0100 Subject: [PATCH] list entity can ignore child changes --- pype/settings/entities/list_entity.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/pype/settings/entities/list_entity.py b/pype/settings/entities/list_entity.py index f1ac2983cb..8a1216b955 100644 --- a/pype/settings/entities/list_entity.py +++ b/pype/settings/entities/list_entity.py @@ -58,6 +58,8 @@ class ListEntity(ItemEntity): self.valid_value_types = (list, ) self.children = [] + self.ignore_child_changes = False + item_schema = self.schema_data["object_type"] if not isinstance(item_schema, dict): item_schema = {"type": item_schema} @@ -111,12 +113,14 @@ class ListEntity(ItemEntity): self.append(item) def on_change(self): - for callback in self.on_change_callbacks: callback() self.parent.on_child_change(self) def on_child_change(self, child_obj): + if self.ignore_child_changes: + return + # TODO is this enough? if self.override_state is OverrideState.STUDIO: self._has_studio_override = self.child_has_studio_override @@ -300,6 +304,8 @@ class ListEntity(ItemEntity): if value is not_set: raise NotImplementedError("BUG: Unexcpected part of code.") + self.ignore_child_changes = True + while self.children: self.children.pop(0) @@ -322,6 +328,8 @@ class ListEntity(ItemEntity): if self.override_state >= OverrideState.STUDIO: self._has_studio_override = self.had_studio_override + self.ignore_child_changes = False + self.on_change() def set_studio_default(self): @@ -338,6 +346,8 @@ class ListEntity(ItemEntity): if value is NOT_SET: value = self.value_on_not_set + self.ignore_child_changes = True + while self.children: self.children.pop(0) @@ -345,6 +355,8 @@ class ListEntity(ItemEntity): child_obj = self.add_new_item() child_obj.update_default_value(item) + self.ignore_child_changes = False + self._has_studio_override = False self.on_change() @@ -366,12 +378,16 @@ class ListEntity(ItemEntity): else: value = self.value_on_not_set + self.ignore_child_changes = True + for item in value: child_obj = self.add_new_item() child_obj.update_default_value(item) if self._has_studio_override: child_obj.update_studio_values(item) + self.ignore_child_changes = False + self._has_project_override = False self.on_change()