diff options
-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 |