diff options
author | Ryan Inch <mythologylover75@gmail.com> | 2020-04-12 05:19:23 +0300 |
---|---|---|
committer | Ryan Inch <mythologylover75@gmail.com> | 2020-04-12 08:55:54 +0300 |
commit | abec0094b526778bb106f922d3a5c583c13c3a92 (patch) | |
tree | 1a86b6d0cb209cc9c27689f5b24cf984531e1c7e | |
parent | 045f3d25541b96d6cb986df5a918621d4893c660 (diff) |
Collection Manager: Fix name update. Task: T69577
Fix expanded and QCD slots/overrides not getting updated
properly when renaming a collection. This was especially
problematic when the name change triggered other name changes.
-rw-r--r-- | object_collection_manager/__init__.py | 2 | ||||
-rw-r--r-- | object_collection_manager/internals.py | 63 | ||||
-rw-r--r-- | object_collection_manager/operators.py | 14 | ||||
-rw-r--r-- | object_collection_manager/persistent_data.py | 2 |
4 files changed, 66 insertions, 15 deletions
diff --git a/object_collection_manager/__init__.py b/object_collection_manager/__init__.py index 52267e0e..1f94d77d 100644 --- a/object_collection_manager/__init__.py +++ b/object_collection_manager/__init__.py @@ -22,7 +22,7 @@ bl_info = { "name": "Collection Manager", "description": "Manage collections and their objects", "author": "Ryan Inch", - "version": (2,5,4), + "version": (2,5,5), "blender": (2, 80, 0), "location": "View3D - Object Mode (Shortcut - M)", "warning": '', # used for warning icon and text in addons panel diff --git a/object_collection_manager/internals.py b/object_collection_manager/internals.py index 6b962119..d905aeb2 100644 --- a/object_collection_manager/internals.py +++ b/object_collection_manager/internals.py @@ -39,7 +39,7 @@ move_active = None layer_collections = {} collection_tree = [] collection_state = {} -expanded = [] +expanded = set() row_index = 0 max_lvl = 0 @@ -49,7 +49,7 @@ def get_max_lvl(): class QCDSlots(): _slots = {} - overrides = {} + overrides = set() allow_update = True def __init__(self): @@ -85,8 +85,8 @@ class QCDSlots(): for key, value in blend_slots.items(): self._slots[key] = value - for key, value in blend_overrides.items(): - self.overrides[key] = value + for key in blend_overrides: + self.overrides.add(key) def length(self): return len(self._slots) @@ -108,7 +108,7 @@ class QCDSlots(): self._slots[idx] = name if name in self.overrides: - del self.overrides[name] + self.overrides.remove(name) def update_slot(self, idx, name): self.add_slot(idx, name) @@ -127,7 +127,7 @@ class QCDSlots(): def add_override(self, name): qcd_slots.del_slot(name=name) - qcd_slots.overrides[name] = True + qcd_slots.overrides.add(name) def clear_slots(self): self._slots.clear() @@ -177,17 +177,68 @@ def update_col_name(self, context): self.name = self.last_name return + # if statement prevents update on list creation if self.last_name != '': # update collection name layer_collections[self.last_name]["ptr"].collection.name = self.name + # update expanded + if self.last_name in expanded: + expanded.remove(self.last_name) + expanded.add(self.name) + # update qcd_slot idx = qcd_slots.get_idx(self.last_name) if idx: qcd_slots.update_slot(idx, self.name) + # update qcd_overrides + if self.last_name in qcd_slots.overrides: + qcd_slots.overrides.remove(self.last_name) + qcd_slots.overrides.add(self.name) + + cm_list_collection = context.scene.collection_manager.cm_list_collection + + # update names in expanded and qcd slots for any other collection names + # that changed as a result of this name change + count = 0 + laycol_iter_list = list(context.view_layer.layer_collection.children) + + while laycol_iter_list: + layer_collection = laycol_iter_list[0] + cm_list_item = cm_list_collection[count] + + if cm_list_item.name != layer_collection.name: + # update expanded + if cm_list_item.name in expanded: + if not cm_list_item.name in layer_collections: + expanded.remove(cm_list_item.name) + + expanded.add(layer_collection.name) + + # update qcd_slot + idx = cm_list_item.qcd_slot_idx + if idx: + qcd_slots.update_slot(idx, layer_collection.name) + + # update qcd_overrides + if cm_list_item.name in qcd_slots.overrides: + if not cm_list_item.name in layer_collections: + qcd_slots.overrides.remove(cm_list_item.name) + + qcd_slots.overrides.add(layer_collection.name) + + if layer_collection.children: + laycol_iter_list[0:0] = list(layer_collection.children) + + + laycol_iter_list.remove(layer_collection) + count += 1 + + update_property_group(context) + self.last_name = self.name diff --git a/object_collection_manager/operators.py b/object_collection_manager/operators.py index 1590e42f..41052e42 100644 --- a/object_collection_manager/operators.py +++ b/object_collection_manager/operators.py @@ -74,7 +74,7 @@ class ExpandAllOperator(Operator): else: for laycol in layer_collections.values(): if laycol["ptr"].children: - expanded.append(laycol["name"]) + expanded.add(laycol["name"]) # update tree view update_property_group(context) @@ -121,7 +121,7 @@ class ExpandSublevelOperator(Operator): expanded.remove(self.name) expand = False else: - expanded.append(self.name) + expanded.add(self.name) expand = True # do expanding/collapsing @@ -129,7 +129,7 @@ class ExpandSublevelOperator(Operator): for item in laycol.children: if expand: if not item.name in expanded: - expanded.append(item.name) + expanded.add(item.name) else: if item.name in expanded: expanded.remove(item.name) @@ -157,7 +157,7 @@ class ExpandSublevelOperator(Operator): if cls.isolated: for item in expand_history["history"]: - expanded.append(item) + expanded.add(item) expand_history["target"] = "" expand_history["history"].clear() @@ -171,7 +171,7 @@ class ExpandSublevelOperator(Operator): else: # expand/collapse collection if self.expand: - expanded.append(self.name) + expanded.add(self.name) else: expanded.remove(self.name) @@ -1988,7 +1988,7 @@ class CMRemoveCollectionOperator(Operator): qcd_slots.del_slot(name=self.collection_name) if self.collection_name in qcd_slots.overrides: - del qcd_slots.overrides[self.collection_name] + qcd_slots.overrides.remove(self.collection_name) # reset history for rto in rto_history.values(): @@ -2020,7 +2020,7 @@ class CMNewCollectionOperator(Operator): # add new collection if self.child: laycol["ptr"].collection.children.link(new_collection) - expanded.append(laycol["name"]) + expanded.add(laycol["name"]) # update tree view property update_property_group(context) diff --git a/object_collection_manager/persistent_data.py b/object_collection_manager/persistent_data.py index a3432b7d..80399db5 100644 --- a/object_collection_manager/persistent_data.py +++ b/object_collection_manager/persistent_data.py @@ -20,4 +20,4 @@ # QCD slots = {} -overrides = {} +overrides = set() |