From 85f0117bec9540b6ff85d74d706c4ea8253780ac Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Wed, 12 May 2021 15:20:55 +0200 Subject: [PATCH] fix remove_delete_flag method --- .../project_manager/project_manager/model.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/openpype/tools/project_manager/project_manager/model.py b/openpype/tools/project_manager/project_manager/model.py index dd514369ea..ed84ab631b 100644 --- a/openpype/tools/project_manager/project_manager/model.py +++ b/openpype/tools/project_manager/project_manager/model.py @@ -430,7 +430,7 @@ class HierarchyModel(QtCore.QAbstractItemModel): return result[0] return None - def remove_delete_flag(self, item_ids): + def remove_delete_flag(self, item_ids, with_children=True): remove_tag_items_by_id = {} for item_id in item_ids: item = self.items_by_id[item_id] @@ -440,7 +440,7 @@ class HierarchyModel(QtCore.QAbstractItemModel): if item.data(None, REMOVED_ROLE): remove_tag_items_by_id[item_id] = item - for item in remove_tag_items_by_id.values(): + for item in tuple(remove_tag_items_by_id.values()): parent = item.parent() while True: if not isinstance(parent, (AssetItem, TaskItem)): @@ -454,6 +454,18 @@ class HierarchyModel(QtCore.QAbstractItemModel): parent = parent.parent() + if not with_children: + continue + + def _children_recursion(_item, store_obj): + if isinstance(_item, AssetItem): + for row in range(_item.rowCount()): + _child_item = _item.child(row) + if _child_item.id not in store_obj: + store_obj[_child_item.id] = _child_item + _children_recursion(_child_item, store_obj) + _children_recursion(item, remove_tag_items_by_id) + for item in remove_tag_items_by_id.values(): item.setData(None, False, REMOVED_ROLE)