diff options
author | Ryan Inch <mythologylover75@gmail.com> | 2021-03-24 11:40:37 +0300 |
---|---|---|
committer | Ryan Inch <mythologylover75@gmail.com> | 2021-03-24 11:40:37 +0300 |
commit | ebe76f3a7ba96b3881567def29b7e2527e018e9a (patch) | |
tree | e460c10ab3fe9c766e309c02ccf6ee95f35f4af4 /object_collection_manager | |
parent | bcd08a9506d33bdd7358201031b04d041ef22d94 (diff) |
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.
Diffstat (limited to 'object_collection_manager')
-rw-r--r-- | object_collection_manager/__init__.py | 2 | ||||
-rw-r--r-- | object_collection_manager/ui.py | 88 |
2 files changed, 71 insertions, 19 deletions
diff --git a/object_collection_manager/__init__.py b/object_collection_manager/__init__.py index bbfdd0b1..d8e50022 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, 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 diff --git a/object_collection_manager/ui.py b/object_collection_manager/ui.py index a81c18ae..09899581 100644 --- a/object_collection_manager/ui.py +++ b/object_collection_manager/ui.py @@ -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 + + else: + some_selected = True + + if all_selected == False: + break - if icon != 'LAYER_USED': + 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 |