Collection Manager: Improve indicators. Task: T69577

Change selection indication in CM popup to more easily
identify selection state and whether objects in collection
can be selected.
Change icons from circles to diamonds to differentiate from
QCD icons, as what they indicate is slightly different.
This commit is contained in:
Ryan Inch 2021-03-24 04:40:37 -04:00
parent bcd08a9506
commit ebe76f3a7b
2 changed files with 71 additions and 19 deletions

View File

@ -22,7 +22,7 @@ bl_info = {
"name": "Collection Manager",
"description": "Manage collections and their objects",
"author": "Ryan Inch",
"version": (2, 21, 0),
"version": (2, 21, 1),
"blender": (2, 80, 0),
"location": "View3D - Object Mode (Shortcut - M)",
"warning": '', # used for warning icon and text in addons panel

View File

@ -173,30 +173,52 @@ class CollectionManager(Operator):
# set selection
setsel = name_row.row(align=True)
icon = 'DOT'
some_selected = False
if any((laycol["ptr"].exclude,
collection.hide_select,
collection.hide_viewport,
laycol["ptr"].hide_viewport,
not collection.objects,)):
# objects cannot be selected
if not collection.objects:
icon = 'BLANK1'
setsel.active = False
else:
all_selected = None
all_unreachable = None
for obj in collection.objects:
if not obj.visible_get() or obj.hide_select:
if all_unreachable != False:
all_unreachable = True
else:
all_unreachable = False
if obj.select_get() == False:
# some objects remain unselected
icon = 'LAYER_USED'
break
icon = 'KEYFRAME'
all_selected = False
if icon != 'LAYER_USED':
else:
some_selected = True
if all_selected == False:
break
all_selected = True
if all_selected:
# all objects are selected
icon = 'LAYER_ACTIVE'
icon = 'KEYFRAME_HLT'
if all_unreachable:
if collection.objects:
icon = 'DOT'
setsel.active = False
prop = setsel.operator("view3d.select_collection_objects",
text="",
icon=icon,
depress=bool(icon == 'LAYER_ACTIVE')
depress=some_selected,
)
prop.is_master_collection = True
prop.collection_name = 'Master Collection'
@ -607,30 +629,60 @@ class CM_UL_items(UIList):
# set selection
setsel = c_name.row(align=True)
icon = 'DOT'
some_selected = False
if not collection.objects:
icon = 'BLANK1'
setsel.active = False
if any((laycol["ptr"].exclude,
collection.hide_select,
collection.hide_viewport,
laycol["ptr"].hide_viewport,
not collection.objects,)):
laycol["ptr"].hide_viewport,)):
# objects cannot be selected
setsel.active = False
else:
all_selected = None
all_unreachable = None
for obj in collection.objects:
if not obj.visible_get() or obj.hide_select:
if all_unreachable != False:
all_unreachable = True
else:
all_unreachable = False
if obj.select_get() == False:
# some objects remain unselected
icon = 'LAYER_USED'
break
icon = 'KEYFRAME'
all_selected = False
if icon != 'LAYER_USED':
else:
some_selected = True
if all_selected == False:
break
all_selected = True
if all_selected:
# all objects are selected
icon = 'LAYER_ACTIVE'
icon = 'KEYFRAME_HLT'
if all_unreachable:
if collection.objects:
icon = 'DOT'
setsel.active = False
prop = setsel.operator("view3d.select_collection_objects",
text="",
icon=icon,
depress=bool(icon == 'LAYER_ACTIVE')
depress=some_selected
)
prop.is_master_collection = False
prop.collection_name = item.name