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.
This commit is contained in:
Ryan Inch 2020-04-11 22:19:23 -04:00
parent 045f3d2554
commit abec0094b5
4 changed files with 66 additions and 15 deletions

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -20,4 +20,4 @@
# QCD
slots = {}
overrides = {}
overrides = set()