Collection Manager: Code cleanup. Task: T69577
Combined all my global blender properties into a property group. General code cleanup.
This commit is contained in:
parent
7861d837ba
commit
cebfa3b6e6
|
@ -22,7 +22,7 @@ bl_info = {
|
|||
"name": "Collection Manager",
|
||||
"description": "Manage collections and their objects",
|
||||
"author": "Ryan Inch",
|
||||
"version": (1,9,2),
|
||||
"version": (1,9,3),
|
||||
"blender": (2, 80, 0),
|
||||
"location": "View3D - Object Mode (Shortcut - M)",
|
||||
"warning": '', # used for warning icon and text in addons panel
|
||||
|
@ -44,12 +44,28 @@ else:
|
|||
from . import ui
|
||||
|
||||
import bpy
|
||||
from bpy.types import PropertyGroup
|
||||
from bpy.props import (
|
||||
CollectionProperty,
|
||||
IntProperty,
|
||||
BoolProperty,
|
||||
PointerProperty,
|
||||
)
|
||||
|
||||
|
||||
class CollectionManagerProperties(PropertyGroup):
|
||||
cm_list_collection: CollectionProperty(type=internals.CMListCollection)
|
||||
cm_list_index: IntProperty(update=ui.update_selection)
|
||||
|
||||
show_exclude: BoolProperty(default=True, name="Exclude from View Layer")
|
||||
show_selectable: BoolProperty(default=True, name="Selectable")
|
||||
show_hide_viewport: BoolProperty(default=True, name="Hide in Viewport")
|
||||
show_disable_viewport: BoolProperty(default=False, name="Disable in Viewports")
|
||||
show_render: BoolProperty(default=False, name="Disable in Renders")
|
||||
|
||||
in_phantom_mode: BoolProperty(default=False)
|
||||
|
||||
|
||||
addon_keymaps = []
|
||||
|
||||
classes = (
|
||||
|
@ -74,23 +90,14 @@ classes = (
|
|||
ui.CM_UL_items,
|
||||
ui.CollectionManager,
|
||||
ui.CMRestrictionTogglesPanel,
|
||||
CollectionManagerProperties,
|
||||
)
|
||||
|
||||
def register():
|
||||
for cls in classes:
|
||||
bpy.utils.register_class(cls)
|
||||
|
||||
bpy.types.Scene.CMListCollection = CollectionProperty(type=internals.CMListCollection)
|
||||
bpy.types.Scene.CMListIndex = IntProperty(update=ui.update_selection)
|
||||
|
||||
bpy.types.Scene.show_exclude = BoolProperty(default=True, name="Exclude from View Layer")
|
||||
bpy.types.Scene.show_selectable = BoolProperty(default=True, name="Selectable")
|
||||
bpy.types.Scene.show_hideviewport = BoolProperty(default=True, name="Hide in Viewport")
|
||||
bpy.types.Scene.show_disableviewport = BoolProperty(default=False, name="Disable in Viewports")
|
||||
bpy.types.Scene.show_render = BoolProperty(default=False, name="Disable in Renders")
|
||||
|
||||
bpy.types.Scene.CM_Phantom_Mode = BoolProperty(default=False)
|
||||
|
||||
bpy.types.Scene.collection_manager = PointerProperty(type=CollectionManagerProperties)
|
||||
|
||||
# create the global menu hotkey
|
||||
wm = bpy.context.window_manager
|
||||
|
@ -102,16 +109,7 @@ def unregister():
|
|||
for cls in classes:
|
||||
bpy.utils.unregister_class(cls)
|
||||
|
||||
del bpy.types.Scene.CMListCollection
|
||||
del bpy.types.Scene.CMListIndex
|
||||
|
||||
del bpy.types.Scene.show_exclude
|
||||
del bpy.types.Scene.show_selectable
|
||||
del bpy.types.Scene.show_hideviewport
|
||||
del bpy.types.Scene.show_disableviewport
|
||||
del bpy.types.Scene.show_render
|
||||
|
||||
del bpy.types.Scene.CM_Phantom_Mode
|
||||
del bpy.types.Scene.collection_manager
|
||||
|
||||
# remove keymaps when add-on is deactivated
|
||||
for km, kmi in addon_keymaps:
|
||||
|
|
|
@ -65,10 +65,11 @@ def update_collection_tree(context):
|
|||
max_lvl = 0
|
||||
row_index = 0
|
||||
|
||||
init_laycol_list = context.view_layer.layer_collection.children
|
||||
layer_collection = context.view_layer.layer_collection
|
||||
init_laycol_list = layer_collection.children
|
||||
|
||||
master_laycol = {"id": 0,
|
||||
"name": context.view_layer.layer_collection.name,
|
||||
"name": layer_collection.name,
|
||||
"lvl": -1,
|
||||
"row_index": -1,
|
||||
"visible": True,
|
||||
|
@ -76,7 +77,7 @@ def update_collection_tree(context):
|
|||
"expanded": True,
|
||||
"parent": None,
|
||||
"children": [],
|
||||
"ptr": context.view_layer.layer_collection
|
||||
"ptr": layer_collection
|
||||
}
|
||||
|
||||
get_all_collections(context, init_laycol_list, master_laycol, collection_tree, visible=True)
|
||||
|
@ -120,15 +121,17 @@ def get_all_collections(context, collections, parent, tree, level=0, visible=Fal
|
|||
|
||||
def update_property_group(context):
|
||||
update_collection_tree(context)
|
||||
context.scene.CMListCollection.clear()
|
||||
context.scene.collection_manager.cm_list_collection.clear()
|
||||
create_property_group(context, collection_tree)
|
||||
|
||||
|
||||
def create_property_group(context, tree):
|
||||
global in_filter
|
||||
|
||||
cm = context.scene.collection_manager
|
||||
|
||||
for laycol in tree:
|
||||
new_cm_listitem = context.scene.CMListCollection.add()
|
||||
new_cm_listitem = cm.cm_list_collection.add()
|
||||
new_cm_listitem.name = laycol["name"]
|
||||
|
||||
if laycol["has_children"]:
|
||||
|
|
|
@ -120,7 +120,7 @@ class ExpandSublevelOperator(Operator):
|
|||
|
||||
|
||||
# set selected row to the collection you're expanding/collapsing and update tree view
|
||||
context.scene.CMListIndex = self.index
|
||||
context.scene.collection_manager.cm_list_index = self.index
|
||||
update_property_group(context)
|
||||
|
||||
return {'FINISHED'}
|
||||
|
@ -192,7 +192,8 @@ class CMExcludeOperator(Operator):
|
|||
if modifiers == {"shift"}:
|
||||
# isolate/de-isolate exclusion of collections
|
||||
|
||||
active_layer_collections = [x["ptr"] for x in layer_collections.values() if not x["ptr"].exclude]
|
||||
active_layer_collections = [x["ptr"] for x in layer_collections.values()
|
||||
if not x["ptr"].exclude]
|
||||
|
||||
# check if previous state should be restored
|
||||
if cls.isolated and self.name == target:
|
||||
|
@ -206,7 +207,8 @@ class CMExcludeOperator(Operator):
|
|||
cls.isolated = False
|
||||
|
||||
# check if all collections should be enabled
|
||||
elif len(active_layer_collections) == 1 and active_layer_collections[0].name == self.name:
|
||||
elif (len(active_layer_collections) == 1 and
|
||||
active_layer_collections[0].name == self.name):
|
||||
# enable all collections
|
||||
for item in layer_collections.values():
|
||||
item["ptr"].exclude = False
|
||||
|
@ -441,8 +443,8 @@ class CMRestrictSelectOperator(Operator):
|
|||
laycol = layer_collections[self.name]
|
||||
|
||||
# get active collections
|
||||
active_layer_collections = [x["ptr"] for x in layer_collections.values() \
|
||||
if x["ptr"].collection.hide_select == False]
|
||||
active_layer_collections = [x["ptr"] for x in layer_collections.values()
|
||||
if x["ptr"].collection.hide_select == False]
|
||||
|
||||
# check if previous state should be restored
|
||||
if cls.isolated and self.name == target:
|
||||
|
@ -456,7 +458,8 @@ class CMRestrictSelectOperator(Operator):
|
|||
cls.isolated = False
|
||||
|
||||
# check if all collections should be enabled
|
||||
elif len(active_layer_collections) == 1 and active_layer_collections[0].name == self.name:
|
||||
elif (len(active_layer_collections) == 1 and
|
||||
active_layer_collections[0].name == self.name):
|
||||
# make all collections selectable
|
||||
for item in layer_collections.values():
|
||||
item["ptr"].collection.hide_select = False
|
||||
|
@ -622,17 +625,19 @@ class CMUnRestrictSelectAllOperator(Operator):
|
|||
keep_history = False
|
||||
|
||||
for item in layer_collections.values():
|
||||
collection = item["ptr"].collection
|
||||
|
||||
if event.shift:
|
||||
keep_history = True
|
||||
select_all_history.append(item["ptr"].collection.hide_select)
|
||||
item["ptr"].collection.hide_select = not item["ptr"].collection.hide_select
|
||||
select_all_history.append(collection.hide_select)
|
||||
collection.hide_select = not collection.hide_select
|
||||
|
||||
else:
|
||||
if item["ptr"].collection.hide_select:
|
||||
if collection.hide_select:
|
||||
keep_history = True
|
||||
|
||||
select_all_history.append(item["ptr"].collection.hide_select)
|
||||
item["ptr"].collection.hide_select = False
|
||||
select_all_history.append(collection.hide_select)
|
||||
collection.hide_select = False
|
||||
|
||||
if not keep_history:
|
||||
del rto_history["select_all"][view_layer]
|
||||
|
@ -677,8 +682,8 @@ class CMHideOperator(Operator):
|
|||
laycol = layer_collections[self.name]
|
||||
|
||||
# get active collections
|
||||
active_layer_collections = [x["ptr"] for x in layer_collections.values() \
|
||||
if x["ptr"].hide_viewport == False]
|
||||
active_layer_collections = [x["ptr"] for x in layer_collections.values()
|
||||
if x["ptr"].hide_viewport == False]
|
||||
|
||||
# check if previous state should be restored
|
||||
if cls.isolated and self.name == target:
|
||||
|
@ -692,7 +697,8 @@ class CMHideOperator(Operator):
|
|||
cls.isolated = False
|
||||
|
||||
# check if all collections should be enabled
|
||||
elif len(active_layer_collections) == 1 and active_layer_collections[0].name == self.name:
|
||||
elif (len(active_layer_collections) == 1 and
|
||||
active_layer_collections[0].name == self.name):
|
||||
# show all collections
|
||||
for laycol in layer_collections.values():
|
||||
laycol["ptr"].hide_viewport = False
|
||||
|
@ -913,8 +919,8 @@ class CMDisableViewportOperator(Operator):
|
|||
laycol = layer_collections[self.name]
|
||||
|
||||
# get active collections
|
||||
active_layer_collections = [x["ptr"] for x in layer_collections.values() \
|
||||
if x["ptr"].collection.hide_viewport == False]
|
||||
active_layer_collections = [x["ptr"] for x in layer_collections.values()
|
||||
if x["ptr"].collection.hide_viewport == False]
|
||||
|
||||
# check if previous state should be restored
|
||||
if cls.isolated and self.name == target:
|
||||
|
@ -928,7 +934,8 @@ class CMDisableViewportOperator(Operator):
|
|||
cls.isolated = False
|
||||
|
||||
# check if all collections should be enabled
|
||||
elif len(active_layer_collections) == 1 and active_layer_collections[0].name == self.name:
|
||||
elif (len(active_layer_collections) == 1 and
|
||||
active_layer_collections[0].name == self.name):
|
||||
# enable all collections in viewport
|
||||
for laycol in layer_collections.values():
|
||||
laycol["ptr"].collection.hide_viewport = False
|
||||
|
@ -1094,18 +1101,19 @@ class CMUnDisableViewportAllOperator(Operator):
|
|||
keep_history = False
|
||||
|
||||
for item in layer_collections.values():
|
||||
collection = item["ptr"].collection
|
||||
|
||||
if event.shift:
|
||||
keep_history = True
|
||||
disable_all_history.append(item["ptr"].collection.hide_viewport)
|
||||
item["ptr"].collection.hide_viewport = not \
|
||||
item["ptr"].collection.hide_viewport
|
||||
disable_all_history.append(collection.hide_viewport)
|
||||
collection.hide_viewport = not collection.hide_viewport
|
||||
|
||||
else:
|
||||
if item["ptr"].collection.hide_viewport:
|
||||
if collection.hide_viewport:
|
||||
keep_history = True
|
||||
|
||||
disable_all_history.append(item["ptr"].collection.hide_viewport)
|
||||
item["ptr"].collection.hide_viewport = False
|
||||
disable_all_history.append(collection.hide_viewport)
|
||||
collection.hide_viewport = False
|
||||
|
||||
if not keep_history:
|
||||
del rto_history["disable_all"][view_layer]
|
||||
|
@ -1150,8 +1158,8 @@ class CMDisableRenderOperator(Operator):
|
|||
laycol = layer_collections[self.name]
|
||||
|
||||
# get active collections
|
||||
active_layer_collections = [x["ptr"] for x in layer_collections.values() \
|
||||
if x["ptr"].collection.hide_render == False]
|
||||
active_layer_collections = [x["ptr"] for x in layer_collections.values()
|
||||
if x["ptr"].collection.hide_render == False]
|
||||
|
||||
# check if previous state should be restored
|
||||
if cls.isolated and self.name == target:
|
||||
|
@ -1165,7 +1173,8 @@ class CMDisableRenderOperator(Operator):
|
|||
cls.isolated = False
|
||||
|
||||
# check if all collections should be enabled
|
||||
elif len(active_layer_collections) == 1 and active_layer_collections[0].name == self.name:
|
||||
elif (len(active_layer_collections) == 1 and
|
||||
active_layer_collections[0].name == self.name):
|
||||
# allow render of all collections
|
||||
for laycol in layer_collections.values():
|
||||
laycol["ptr"].collection.hide_render = False
|
||||
|
@ -1331,18 +1340,19 @@ class CMUnDisableRenderAllOperator(Operator):
|
|||
keep_history = False
|
||||
|
||||
for item in layer_collections.values():
|
||||
collection = item["ptr"].collection
|
||||
|
||||
if event.shift:
|
||||
keep_history = True
|
||||
render_all_history.append(item["ptr"].collection.hide_render)
|
||||
item["ptr"].collection.hide_render = not \
|
||||
item["ptr"].collection.hide_render
|
||||
render_all_history.append(collection.hide_render)
|
||||
collection.hide_render = not collection.hide_render
|
||||
|
||||
else:
|
||||
if item["ptr"].collection.hide_render:
|
||||
if collection.hide_render:
|
||||
keep_history = True
|
||||
|
||||
render_all_history.append(item["ptr"].collection.hide_render)
|
||||
item["ptr"].collection.hide_render = False
|
||||
render_all_history.append(collection.hide_render)
|
||||
collection.hide_render = False
|
||||
|
||||
if not keep_history:
|
||||
del rto_history["render_all"][view_layer]
|
||||
|
@ -1367,6 +1377,8 @@ class CMRemoveCollectionOperator(Operator):
|
|||
def execute(self, context):
|
||||
global rto_history
|
||||
|
||||
cm = context.scene.collection_manager
|
||||
|
||||
laycol = layer_collections[self.collection_name]
|
||||
collection = laycol["ptr"].collection
|
||||
parent_collection = laycol["parent"]["ptr"].collection
|
||||
|
@ -1389,8 +1401,8 @@ class CMRemoveCollectionOperator(Operator):
|
|||
update_property_group(context)
|
||||
|
||||
|
||||
if len(context.scene.CMListCollection) == context.scene.CMListIndex:
|
||||
context.scene.CMListIndex = len(context.scene.CMListCollection) - 1
|
||||
if len(cm.cm_list_collection) == cm.cm_list_index:
|
||||
cm.cm_list_index = len(cm.cm_list_collection) - 1
|
||||
update_property_group(context)
|
||||
|
||||
|
||||
|
@ -1413,12 +1425,13 @@ class CMNewCollectionOperator(Operator):
|
|||
global rto_history
|
||||
|
||||
new_collection = bpy.data.collections.new('Collection')
|
||||
scn = context.scene
|
||||
cm = context.scene.collection_manager
|
||||
|
||||
|
||||
# if there are collections
|
||||
if len(scn.CMListCollection) > 0:
|
||||
if len(cm.cm_list_collection) > 0:
|
||||
# get selected collection
|
||||
laycol = layer_collections[scn.CMListCollection[scn.CMListIndex].name]
|
||||
laycol = layer_collections[cm.cm_list_collection[cm.cm_list_index].name]
|
||||
|
||||
# add new collection
|
||||
if self.child:
|
||||
|
@ -1428,7 +1441,7 @@ class CMNewCollectionOperator(Operator):
|
|||
# update tree view property
|
||||
update_property_group(context)
|
||||
|
||||
scn.CMListIndex = layer_collections[new_collection.name]["row_index"]
|
||||
cm.cm_list_index = layer_collections[new_collection.name]["row_index"]
|
||||
|
||||
else:
|
||||
laycol["parent"]["ptr"].collection.children.link(new_collection)
|
||||
|
@ -1436,16 +1449,16 @@ class CMNewCollectionOperator(Operator):
|
|||
# update tree view property
|
||||
update_property_group(context)
|
||||
|
||||
scn.CMListIndex = layer_collections[new_collection.name]["row_index"]
|
||||
cm.cm_list_index = layer_collections[new_collection.name]["row_index"]
|
||||
|
||||
# if no collections add top level collection and select it
|
||||
else:
|
||||
scn.collection.children.link(new_collection)
|
||||
context.scene.collection.children.link(new_collection)
|
||||
|
||||
# update tree view property
|
||||
update_property_group(context)
|
||||
|
||||
scn.CMListIndex = 0
|
||||
cm.cm_list_index = 0
|
||||
|
||||
global rename
|
||||
rename[0] = True
|
||||
|
@ -1482,18 +1495,18 @@ class CMPhantomModeOperator(Operator):
|
|||
global phantom_history
|
||||
global rto_history
|
||||
|
||||
scn = context.scene
|
||||
view_layer = context.view_layer.name
|
||||
cm = context.scene.collection_manager
|
||||
view_layer = context.view_layer
|
||||
|
||||
# enter Phantom Mode
|
||||
if not scn.CM_Phantom_Mode:
|
||||
if not cm.in_phantom_mode:
|
||||
|
||||
scn.CM_Phantom_Mode = True
|
||||
cm.in_phantom_mode = True
|
||||
|
||||
# save current visibility state
|
||||
phantom_history["view_layer"] = view_layer
|
||||
phantom_history["view_layer"] = view_layer.name
|
||||
|
||||
laycol_iter_list = [context.view_layer.layer_collection.children]
|
||||
laycol_iter_list = [view_layer.layer_collection.children]
|
||||
while len(laycol_iter_list) > 0:
|
||||
new_laycol_iter_list = []
|
||||
for laycol_iter in laycol_iter_list:
|
||||
|
@ -1514,13 +1527,13 @@ class CMPhantomModeOperator(Operator):
|
|||
|
||||
# save current rto history
|
||||
for rto, history, in rto_history.items():
|
||||
if history.get(view_layer, None):
|
||||
phantom_history[rto+"_history"] = deepcopy(history[view_layer])
|
||||
if history.get(view_layer.name, None):
|
||||
phantom_history[rto+"_history"] = deepcopy(history[view_layer.name])
|
||||
|
||||
|
||||
# return to normal mode
|
||||
else:
|
||||
laycol_iter_list = [context.view_layer.layer_collection.children]
|
||||
laycol_iter_list = [view_layer.layer_collection.children]
|
||||
while len(laycol_iter_list) > 0:
|
||||
new_laycol_iter_list = []
|
||||
for laycol_iter in laycol_iter_list:
|
||||
|
@ -1551,15 +1564,15 @@ class CMPhantomModeOperator(Operator):
|
|||
|
||||
# restore previous rto history
|
||||
for rto, history, in rto_history.items():
|
||||
if view_layer in history:
|
||||
del history[view_layer]
|
||||
if view_layer.name in history:
|
||||
del history[view_layer.name]
|
||||
|
||||
if phantom_history[rto+"_history"]:
|
||||
history[view_layer] = deepcopy(phantom_history[rto+"_history"])
|
||||
history[view_layer.name] = deepcopy(phantom_history[rto+"_history"])
|
||||
|
||||
phantom_history[rto+"_history"].clear()
|
||||
|
||||
scn.CM_Phantom_Mode = False
|
||||
cm.in_phantom_mode = False
|
||||
|
||||
|
||||
return {'FINISHED'}
|
||||
|
|
|
@ -49,12 +49,12 @@ class CollectionManager(Operator):
|
|||
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
scn = context.scene
|
||||
view_layer = context.view_layer.name
|
||||
cm = context.scene.collection_manager
|
||||
view_layer = context.view_layer
|
||||
|
||||
if view_layer != self.last_view_layer:
|
||||
if view_layer.name != self.last_view_layer:
|
||||
update_collection_tree(context)
|
||||
self.last_view_layer = view_layer
|
||||
self.last_view_layer = view_layer.name
|
||||
|
||||
title_row = layout.split(factor=0.5)
|
||||
main = title_row.row()
|
||||
|
@ -63,7 +63,7 @@ class CollectionManager(Operator):
|
|||
|
||||
main.label(text="Collection Manager")
|
||||
|
||||
view.prop(context.view_layer, "use", text="")
|
||||
view.prop(view_layer, "use", text="")
|
||||
view.separator()
|
||||
|
||||
window = context.window
|
||||
|
@ -104,48 +104,54 @@ class CollectionManager(Operator):
|
|||
sec2 = toggle_row.row()
|
||||
sec2.alignment = 'RIGHT'
|
||||
|
||||
if scn.show_exclude:
|
||||
exclude_all_history = rto_history["exclude_all"].get(view_layer, [])
|
||||
if cm.show_exclude:
|
||||
exclude_all_history = rto_history["exclude_all"].get(view_layer.name, [])
|
||||
depress = True if len(exclude_all_history) else False
|
||||
|
||||
sec2.operator("view3d.un_exclude_all_collections", text="", icon='CHECKBOX_HLT', depress=depress)
|
||||
|
||||
if scn.show_selectable:
|
||||
select_all_history = rto_history["select_all"].get(view_layer, [])
|
||||
if cm.show_selectable:
|
||||
select_all_history = rto_history["select_all"].get(view_layer.name, [])
|
||||
depress = True if len(select_all_history) else False
|
||||
|
||||
sec2.operator("view3d.un_restrict_select_all_collections", text="", icon='RESTRICT_SELECT_OFF', depress=depress)
|
||||
|
||||
if scn.show_hideviewport:
|
||||
hide_all_history = rto_history["hide_all"].get(view_layer, [])
|
||||
if cm.show_hide_viewport:
|
||||
hide_all_history = rto_history["hide_all"].get(view_layer.name, [])
|
||||
depress = True if len(hide_all_history) else False
|
||||
|
||||
sec2.operator("view3d.un_hide_all_collections", text="", icon='HIDE_OFF', depress=depress)
|
||||
|
||||
if scn.show_disableviewport:
|
||||
disable_all_history = rto_history["disable_all"].get(view_layer, [])
|
||||
if cm.show_disable_viewport:
|
||||
disable_all_history = rto_history["disable_all"].get(view_layer.name, [])
|
||||
depress = True if len(disable_all_history) else False
|
||||
|
||||
sec2.operator("view3d.un_disable_viewport_all_collections", text="", icon='RESTRICT_VIEW_OFF', depress=depress)
|
||||
|
||||
if scn.show_render:
|
||||
render_all_history = rto_history["render_all"].get(view_layer, [])
|
||||
if cm.show_render:
|
||||
render_all_history = rto_history["render_all"].get(view_layer.name, [])
|
||||
depress = True if len(render_all_history) else False
|
||||
|
||||
sec2.operator("view3d.un_disable_render_all_collections", text="", icon='RESTRICT_RENDER_OFF', depress=depress)
|
||||
|
||||
layout.row().template_list("CM_UL_items", "", context.scene, "CMListCollection", context.scene, "CMListIndex", rows=15, sort_lock=True)
|
||||
layout.row().template_list("CM_UL_items", "",
|
||||
cm, "cm_list_collection",
|
||||
cm, "cm_list_index",
|
||||
rows=15,
|
||||
sort_lock=True)
|
||||
|
||||
addcollec_row = layout.row()
|
||||
addcollec_row.operator("view3d.add_collection", text="Add Collection", icon='COLLECTION_NEW').child = False
|
||||
addcollec_row.operator("view3d.add_collection", text="Add Collection",
|
||||
icon='COLLECTION_NEW').child = False
|
||||
|
||||
addcollec_row.operator("view3d.add_collection", text="Add SubCollection", icon='COLLECTION_NEW').child = True
|
||||
addcollec_row.operator("view3d.add_collection", text="Add SubCollection",
|
||||
icon='COLLECTION_NEW').child = True
|
||||
|
||||
phantom_row = layout.row()
|
||||
toggle_text = "Disable " if scn.CM_Phantom_Mode else "Enable "
|
||||
toggle_text = "Disable " if cm.in_phantom_mode else "Enable "
|
||||
phantom_row.operator("view3d.toggle_phantom_mode", text=toggle_text+"Phantom Mode")
|
||||
|
||||
if scn.CM_Phantom_Mode:
|
||||
if cm.in_phantom_mode:
|
||||
view.enabled = False
|
||||
addcollec_row.enabled = False
|
||||
|
||||
|
@ -154,23 +160,27 @@ class CollectionManager(Operator):
|
|||
wm = context.window_manager
|
||||
|
||||
update_property_group(context)
|
||||
self.view_layer = context.view_layer.name
|
||||
|
||||
cm = context.scene.collection_manager
|
||||
view_layer = context.view_layer
|
||||
|
||||
self.view_layer = view_layer.name
|
||||
|
||||
# sync selection in ui list with active layer collection
|
||||
try:
|
||||
active_laycol_name = context.view_layer.active_layer_collection.name
|
||||
active_laycol_name = view_layer.active_layer_collection.name
|
||||
active_laycol_row_index = layer_collections[active_laycol_name]["row_index"]
|
||||
context.scene.CMListIndex = active_laycol_row_index
|
||||
cm.cm_list_index = active_laycol_row_index
|
||||
except:
|
||||
context.scene.CMListIndex = -1
|
||||
cm.cm_list_index = -1
|
||||
|
||||
# check if in phantom mode and if it's still viable
|
||||
if context.scene.CM_Phantom_Mode:
|
||||
if cm.in_phantom_mode:
|
||||
if set(layer_collections.keys()) != set(phantom_history["initial_state"].keys()):
|
||||
context.scene.CM_Phantom_Mode = False
|
||||
cm.in_phantom_mode = False
|
||||
|
||||
if context.view_layer.name != phantom_history["view_layer"]:
|
||||
context.scene.CM_Phantom_Mode = False
|
||||
if view_layer.name != phantom_history["view_layer"]:
|
||||
cm.in_phantom_mode = False
|
||||
|
||||
# handle window sizing
|
||||
max_width = 960
|
||||
|
@ -191,12 +201,12 @@ class CollectionManager(Operator):
|
|||
|
||||
|
||||
def update_selection(self, context):
|
||||
scn = context.scene
|
||||
cm = context.scene.collection_manager
|
||||
|
||||
if scn.CMListIndex == -1:
|
||||
if cm.cm_list_index == -1:
|
||||
return
|
||||
|
||||
selected_item = scn.CMListCollection[scn.CMListIndex]
|
||||
selected_item = cm.cm_list_collection[cm.cm_list_index]
|
||||
layer_collection = layer_collections[selected_item.name]["ptr"]
|
||||
|
||||
context.view_layer.active_layer_collection = layer_collection
|
||||
|
@ -250,8 +260,8 @@ class CM_UL_items(UIList):
|
|||
def draw_item(self, context, layout, data, item, icon, active_data,active_propname, index):
|
||||
self.use_filter_show = True
|
||||
|
||||
scn = context.scene
|
||||
view_layer = context.view_layer.name
|
||||
cm = context.scene.collection_manager
|
||||
view_layer = context.view_layer
|
||||
laycol = layer_collections[item.name]
|
||||
collection = laycol["ptr"].collection
|
||||
|
||||
|
@ -267,13 +277,15 @@ class CM_UL_items(UIList):
|
|||
# add expander if collection has children to make UIList act like tree view
|
||||
if laycol["has_children"]:
|
||||
if laycol["expanded"]:
|
||||
prop = row.operator("view3d.expand_sublevel", text="", icon='DISCLOSURE_TRI_DOWN', emboss=False)
|
||||
prop = row.operator("view3d.expand_sublevel", text="",
|
||||
icon='DISCLOSURE_TRI_DOWN', emboss=False)
|
||||
prop.expand = False
|
||||
prop.name = item.name
|
||||
prop.index = index
|
||||
|
||||
else:
|
||||
prop = row.operator("view3d.expand_sublevel", text="", icon='DISCLOSURE_TRI_RIGHT', emboss=False)
|
||||
prop = row.operator("view3d.expand_sublevel", text="",
|
||||
icon='DISCLOSURE_TRI_RIGHT', emboss=False)
|
||||
prop.expand = True
|
||||
prop.name = item.name
|
||||
prop.index = index
|
||||
|
@ -286,7 +298,7 @@ class CM_UL_items(UIList):
|
|||
|
||||
name_row = row.row()
|
||||
|
||||
#if rename[0] and index == scn.CMListIndex:
|
||||
#if rename[0] and index == cm.cm_list_index:
|
||||
#name_row.activate_init = True
|
||||
#rename[0] = False
|
||||
|
||||
|
@ -308,72 +320,77 @@ class CM_UL_items(UIList):
|
|||
row_setcol.enabled = False
|
||||
|
||||
|
||||
prop = row_setcol.operator("view3d.set_collection", text="", icon=icon, emboss=False)
|
||||
prop = row_setcol.operator("view3d.set_collection", text="",
|
||||
icon=icon, emboss=False)
|
||||
prop.collection_index = laycol["id"]
|
||||
prop.collection_name = item.name
|
||||
|
||||
|
||||
if scn.show_exclude:
|
||||
exclude_history_base = rto_history["exclude"].get(view_layer, {})
|
||||
if cm.show_exclude:
|
||||
exclude_history_base = rto_history["exclude"].get(view_layer.name, {})
|
||||
exclude_target = exclude_history_base.get("target", "")
|
||||
exclude_history = exclude_history_base.get("history", [])
|
||||
|
||||
depress = True if len(exclude_history) and exclude_target == item.name else False
|
||||
emboss = True if len(exclude_history) and exclude_target == item.name else False
|
||||
highlight = bool(exclude_history and exclude_target == item.name)
|
||||
icon = 'CHECKBOX_DEHLT' if laycol["ptr"].exclude else 'CHECKBOX_HLT'
|
||||
|
||||
row.operator("view3d.exclude_collection", text="", icon=icon, emboss=emboss, depress=depress).name = item.name
|
||||
row.operator("view3d.exclude_collection", text="", icon=icon,
|
||||
emboss=highlight, depress=highlight).name = item.name
|
||||
|
||||
if scn.show_selectable:
|
||||
select_history_base = rto_history["select"].get(view_layer, {})
|
||||
if cm.show_selectable:
|
||||
select_history_base = rto_history["select"].get(view_layer.name, {})
|
||||
select_target = select_history_base.get("target", "")
|
||||
select_history = select_history_base.get("history", [])
|
||||
|
||||
depress = True if len(select_history) and select_target == item.name else False
|
||||
emboss = True if len(select_history) and select_target == item.name else False
|
||||
icon = 'RESTRICT_SELECT_ON' if laycol["ptr"].collection.hide_select else 'RESTRICT_SELECT_OFF'
|
||||
highlight = bool(select_history and select_target == item.name)
|
||||
icon = ('RESTRICT_SELECT_ON' if laycol["ptr"].collection.hide_select else
|
||||
'RESTRICT_SELECT_OFF')
|
||||
|
||||
row.operator("view3d.restrict_select_collection", text="", icon=icon, emboss=emboss, depress=depress).name = item.name
|
||||
row.operator("view3d.restrict_select_collection", text="", icon=icon,
|
||||
emboss=highlight, depress=highlight).name = item.name
|
||||
|
||||
if scn.show_hideviewport:
|
||||
hide_history_base = rto_history["hide"].get(view_layer, {})
|
||||
if cm.show_hide_viewport:
|
||||
hide_history_base = rto_history["hide"].get(view_layer.name, {})
|
||||
hide_target = hide_history_base.get("target", "")
|
||||
hide_history = hide_history_base.get("history", [])
|
||||
|
||||
depress = True if len(hide_history) and hide_target == item.name else False
|
||||
emboss = True if len(hide_history) and hide_target == item.name else False
|
||||
highlight = bool(hide_history and hide_target == item.name)
|
||||
icon = 'HIDE_ON' if laycol["ptr"].hide_viewport else 'HIDE_OFF'
|
||||
|
||||
row.operator("view3d.hide_collection", text="", icon=icon, emboss=emboss, depress=depress).name = item.name
|
||||
row.operator("view3d.hide_collection", text="", icon=icon,
|
||||
emboss=highlight, depress=highlight).name = item.name
|
||||
|
||||
if scn.show_disableviewport:
|
||||
disable_history_base = rto_history["disable"].get(view_layer, {})
|
||||
if cm.show_disable_viewport:
|
||||
disable_history_base = rto_history["disable"].get(view_layer.name, {})
|
||||
disable_target = disable_history_base.get("target", "")
|
||||
disable_history = disable_history_base.get("history", [])
|
||||
|
||||
depress = True if len(disable_history) and disable_target == item.name else False
|
||||
emboss = True if len(disable_history) and disable_target == item.name else False
|
||||
icon = 'RESTRICT_VIEW_ON' if laycol["ptr"].collection.hide_viewport else 'RESTRICT_VIEW_OFF'
|
||||
highlight = bool(disable_history and disable_target == item.name)
|
||||
icon = ('RESTRICT_VIEW_ON' if laycol["ptr"].collection.hide_viewport else
|
||||
'RESTRICT_VIEW_OFF')
|
||||
|
||||
row.operator("view3d.disable_viewport_collection", text="", icon=icon, emboss=emboss, depress=depress).name = item.name
|
||||
row.operator("view3d.disable_viewport_collection", text="", icon=icon,
|
||||
emboss=highlight, depress=highlight).name = item.name
|
||||
|
||||
if scn.show_render:
|
||||
render_history_base = rto_history["render"].get(view_layer, {})
|
||||
if cm.show_render:
|
||||
render_history_base = rto_history["render"].get(view_layer.name, {})
|
||||
render_target = render_history_base.get("target", "")
|
||||
render_history = render_history_base.get("history", [])
|
||||
|
||||
depress = True if len(render_history) and render_target == item.name else False
|
||||
emboss = True if len(render_history) and render_target == item.name else False
|
||||
icon = 'RESTRICT_RENDER_ON' if laycol["ptr"].collection.hide_render else 'RESTRICT_RENDER_OFF'
|
||||
highlight = bool(render_history and render_target == item.name)
|
||||
icon = ('RESTRICT_RENDER_ON' if laycol["ptr"].collection.hide_render else
|
||||
'RESTRICT_RENDER_OFF')
|
||||
|
||||
row.operator("view3d.disable_render_collection", text="", icon=icon, emboss=emboss, depress=depress).name = item.name
|
||||
row.operator("view3d.disable_render_collection", text="", icon=icon,
|
||||
emboss=highlight, depress=highlight).name = item.name
|
||||
|
||||
|
||||
rm_op = split.row()
|
||||
rm_op.alignment = 'RIGHT'
|
||||
rm_op.operator("view3d.remove_collection", text="", icon='X', emboss=False).collection_name = item.name
|
||||
rm_op.operator("view3d.remove_collection", text="", icon='X',
|
||||
emboss=False).collection_name = item.name
|
||||
|
||||
if scn.CM_Phantom_Mode:
|
||||
if cm.in_phantom_mode:
|
||||
name_row.enabled = False
|
||||
row_setcol.enabled = False
|
||||
rm_op.enabled = False
|
||||
|
@ -432,13 +449,13 @@ class CMRestrictionTogglesPanel(Panel):
|
|||
bl_region_type = 'HEADER'
|
||||
|
||||
def draw(self, context):
|
||||
cm = context.scene.collection_manager
|
||||
|
||||
layout = self.layout
|
||||
|
||||
row = layout.row()
|
||||
|
||||
row.prop(context.scene, "show_exclude", icon='CHECKBOX_HLT', icon_only=True)
|
||||
row.prop(context.scene, "show_selectable", icon='RESTRICT_SELECT_OFF', icon_only=True)
|
||||
row.prop(context.scene, "show_hideviewport", icon='HIDE_OFF', icon_only=True)
|
||||
row.prop(context.scene, "show_disableviewport", icon='RESTRICT_VIEW_OFF', icon_only=True)
|
||||
row.prop(context.scene, "show_render", icon='RESTRICT_RENDER_OFF', icon_only=True)
|
||||
row.prop(cm, "show_exclude", icon='CHECKBOX_HLT', icon_only=True)
|
||||
row.prop(cm, "show_selectable", icon='RESTRICT_SELECT_OFF', icon_only=True)
|
||||
row.prop(cm, "show_hide_viewport", icon='HIDE_OFF', icon_only=True)
|
||||
row.prop(cm, "show_disable_viewport", icon='RESTRICT_VIEW_OFF', icon_only=True)
|
||||
row.prop(cm, "show_render", icon='RESTRICT_RENDER_OFF', icon_only=True)
|
||||
|
|
Loading…
Reference in New Issue