Cleanup: trailing space

This commit is contained in:
Campbell Barton 2019-12-09 21:03:28 +11:00
parent ec6873e90f
commit f5fbe860fe
4 changed files with 434 additions and 434 deletions

View File

@ -33,7 +33,7 @@ bl_info = {
if "bpy" in locals():
import importlib
importlib.reload(internals)
importlib.reload(operators)
importlib.reload(ui)
@ -78,16 +78,16 @@ classes = (
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)
@ -96,26 +96,26 @@ def register():
km = wm.keyconfigs.addon.keymaps.new(name='Object Mode')
kmi = km.keymap_items.new('view3d.collection_manager', 'M', 'PRESS')
addon_keymaps.append((km, kmi))
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
# remove keymaps when add-on is deactivated
for km, kmi in addon_keymaps:
km.keymap_items.remove(kmi)
addon_keymaps.clear()
if __name__ == "__main__":
register()

View File

@ -18,12 +18,12 @@ def update_col_name(self, context):
if self.name == '':
self.name = self.last_name
return
if self.last_name != '':
layer_collections[self.last_name]["ptr"].collection.name = self.name
update_property_group(context)
self.last_name = self.name
class CMListCollection(PropertyGroup):
@ -38,9 +38,9 @@ def update_collection_tree(context):
layer_collections.clear()
max_lvl = 0
row_index = 0
init_laycol_list = context.view_layer.layer_collection.children
master_laycol = {"id": 0,
"name": context.view_layer.layer_collection.name,
"lvl": -1,
@ -52,13 +52,13 @@ def update_collection_tree(context):
"children": [],
"ptr": context.view_layer.layer_collection
}
get_all_collections(context, init_laycol_list, master_laycol, collection_tree, visible=True)
def get_all_collections(context, collections, parent, tree, level=0, visible=False):
global row_index
for item in collections:
laycol = {"id": len(layer_collections) +1,
"name": item.name,
@ -71,21 +71,21 @@ def get_all_collections(context, collections, parent, tree, level=0, visible=Fal
"children": [],
"ptr": item
}
row_index += 1
layer_collections[item.name] = laycol
tree.append(laycol)
if len(item.children) > 0:
global max_lvl
max_lvl += 1
laycol["has_children"] = True
if item.name in expanded and laycol["visible"]:
laycol["expanded"] = True
get_all_collections(context, item.children, laycol, laycol["children"], level+1, visible=True)
else:
get_all_collections(context, item.children, laycol, laycol["children"], level+1)
@ -98,10 +98,10 @@ def update_property_group(context):
def create_property_group(context, tree):
global in_filter
for laycol in tree:
new_cm_listitem = context.scene.CMListCollection.add()
new_cm_listitem.name = laycol["name"]
if laycol["has_children"]:
create_property_group(context, laycol["children"])

File diff suppressed because it is too large Load Diff

View File

@ -18,28 +18,28 @@ from .operators import (
class CollectionManager(Operator):
bl_label = "Collection Manager"
bl_idname = "view3d.collection_manager"
last_view_layer = ""
def draw(self, context):
layout = self.layout
scn = context.scene
view_layer = context.view_layer.name
if view_layer != self.last_view_layer:
update_collection_tree(context)
self.last_view_layer = view_layer
title_row = layout.split(factor=0.5)
main = title_row.row()
view = title_row.row(align=True)
view.alignment = 'RIGHT'
main.label(text="Collection Manager")
view.prop(context.view_layer, "use", text="")
view.separator()
window = context.window
scene = window.scene
view.template_search(
@ -47,89 +47,89 @@ class CollectionManager(Operator):
scene, "view_layers",
new="scene.view_layer_add",
unlink="scene.view_layer_remove")
layout.row().separator()
layout.row().separator()
filter_row = layout.row()
filter_row.alignment = 'RIGHT'
filter_row.popover(panel="COLLECTIONMANAGER_PT_restriction_toggles", text="", icon='FILTER')
toggle_row = layout.split(factor=0.3)
toggle_row.alignment = 'LEFT'
sec1 = toggle_row.row()
sec1.alignment = 'LEFT'
sec1.enabled = False
if len(expanded) > 0:
text = "Collapse All Items"
else:
text = "Expand All Items"
sec1.operator("view3d.expand_all_items", text=text)
for laycol in collection_tree:
if laycol["has_children"]:
sec1.enabled = True
break
sec2 = toggle_row.row()
sec2.alignment = 'RIGHT'
if scn.show_exclude:
exclude_all_history = rto_history["exclude_all"].get(view_layer, [])
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, [])
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, [])
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, [])
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, [])
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)
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 SubCollection", icon='COLLECTION_NEW').child = True
phantom_row = layout.row()
toggle_text = "Disable " if scn.CM_Phantom_Mode else "Enable "
phantom_row.operator("view3d.toggle_phantom_mode", text=toggle_text+"Phantom Mode")
if scn.CM_Phantom_Mode:
view.enabled = False
addcollec_row.enabled = False
def execute(self, context):
wm = context.window_manager
lvl = 0
#expanded.clear()
#excludeall_history.clear()
#restrictselectall_history.clear()
#hideall_history.clear()
@ -137,14 +137,14 @@ class CollectionManager(Operator):
#disablerenderall_history.clear()
update_property_group(context)
lvl = get_max_lvl()
if lvl > 25:
lvl = 25
self.view_layer = context.view_layer.name
# sync selection in ui list with active layer collection
try:
active_laycol_name = context.view_layer.active_layer_collection.name
@ -152,21 +152,21 @@ class CollectionManager(Operator):
context.scene.CMListIndex = active_laycol_row_index
except:
context.scene.CMListIndex = 0
if context.scene.CM_Phantom_Mode:
if set(layer_collections.keys()) != set(phantom_history["initial_state"].keys()):
context.scene.CM_Phantom_Mode = False
if context.view_layer.name != phantom_history["view_layer"]:
context.scene.CM_Phantom_Mode = False
return wm.invoke_popup(self, width=(400+(lvl*20)))
def update_selection(self, context):
selected_item = context.scene.CMListCollection[context.scene.CMListIndex]
layer_collection = layer_collections[selected_item.name]["ptr"]
context.view_layer.active_layer_collection = layer_collection
@ -186,7 +186,7 @@ def filter_items_by_name_insensitive(pattern, bitflag, items, propname="name", f
if flags is None:
flags = [0] * len(items)
# Make pattern case-insensitive
pattern = pattern.lower()
@ -195,43 +195,43 @@ def filter_items_by_name_insensitive(pattern, bitflag, items, propname="name", f
for i, item in enumerate(items):
name = getattr(item, propname, None)
# Make name case-insensitive
name = name.lower()
# This is similar to a logical xor
if bool(name and fnmatch.fnmatch(name, pattern)) is not bool(reverse):
flags[i] |= bitflag
return flags
class CM_UL_items(UIList):
last_filter_value = ""
filter_by_selected: BoolProperty(
name="Filter By Selected",
default=False,
description="Filter collections by selected items"
)
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
laycol = layer_collections[item.name]
collection = laycol["ptr"].collection
split = layout.split(factor=0.96)
row = split.row(align=True)
row.alignment = 'LEFT'
# indent child items
if laycol["lvl"] > 0:
for x in range(laycol["lvl"]):
row.label(icon='BLANK1')
# add expander if collection has children to make UIList act like tree view
if laycol["has_children"]:
if laycol["expanded"]:
@ -239,156 +239,156 @@ class CM_UL_items(UIList):
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.expand = True
prop.name = item.name
prop.index = index
else:
row.label(icon='BLANK1')
row.label(icon='GROUP')
name_row = row.row()
#if rename[0] and index == scn.CMListIndex:
#name_row.activate_init = True
#rename[0] = False
name_row.prop(item, "name", text="", expand=True)
# used as a separator (actual separator not wide enough)
row.label()
# add set_collection op
row_setcol = row.row()
row_setcol.operator_context = 'INVOKE_DEFAULT'
icon = 'MESH_CUBE'
if len(context.selected_objects) > 0 and context.active_object:
if context.active_object.name in collection.objects:
icon = 'SNAP_VOLUME'
else:
row_setcol.enabled = 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, {})
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
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
if scn.show_selectable:
select_history_base = rto_history["select"].get(view_layer, {})
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'
row.operator("view3d.restrict_select_collection", text="", icon=icon, emboss=emboss, depress=depress).name = item.name
if scn.show_hideviewport:
hide_history_base = rto_history["hide"].get(view_layer, {})
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
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
if scn.show_disableviewport:
disable_history_base = rto_history["disable"].get(view_layer, {})
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'
row.operator("view3d.disable_viewport_collection", text="", icon=icon, emboss=emboss, depress=depress).name = item.name
if scn.show_render:
render_history_base = rto_history["render"].get(view_layer, {})
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'
row.operator("view3d.disable_render_collection", text="", icon=icon, emboss=emboss, depress=depress).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
if scn.CM_Phantom_Mode:
name_row.enabled = False
row_setcol.enabled = False
rm_op.enabled = False
def draw_filter(self, context, layout):
row = layout.row()
subrow = row.row(align=True)
subrow.prop(self, "filter_name", text="")
icon = 'ZOOM_OUT' if self.use_filter_invert else 'ZOOM_IN'
subrow.prop(self, "use_filter_invert", text="", icon=icon)
subrow = row.row(align=True)
subrow.prop(self, "filter_by_selected", text="", icon='SNAP_VOLUME')
def filter_items(self, context, data, propname):
flt_flags = []
flt_neworder = []
list_items = getattr(data, propname)
if self.filter_name:
flt_flags = filter_items_by_name_insensitive(self.filter_name, self.bitflag_filter_item, list_items)
elif self.filter_by_selected:
flt_flags = [0] * len(list_items)
for idx, item in enumerate(list_items):
collection = layer_collections[item.name]["ptr"].collection
# check if any of the selected objects are in the collection
if not set(context.selected_objects).isdisjoint(collection.objects):
flt_flags[idx] |= self.bitflag_filter_item
else: # display as treeview
flt_flags = [self.bitflag_filter_item] * len(list_items)
for idx, item in enumerate(list_items):
if not layer_collections[item.name]["visible"]:
flt_flags[idx] = 0
return flt_flags, flt_neworder
return flt_flags, flt_neworder
def invoke(self, context, event):
pass
@ -398,13 +398,13 @@ class CMRestrictionTogglesPanel(Panel):
bl_idname = "COLLECTIONMANAGER_PT_restriction_toggles"
bl_space_type = 'VIEW_3D'
bl_region_type = 'HEADER'
def draw(self, context):
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)