Collection Manager: Add prefs to disable QCD. Task: T69577
Adds two checkboxes to preferences. One to disable the whole QCD system, the other is a sub-checkbox to disable the QCD view (number) hotkeys.
This commit is contained in:
parent
61f1c0aef5
commit
e61a7e8bfe
|
@ -22,7 +22,7 @@ bl_info = {
|
|||
"name": "Collection Manager",
|
||||
"description": "Manage collections and their objects",
|
||||
"author": "Ryan Inch",
|
||||
"version": (2,3,2),
|
||||
"version": (2,4,1),
|
||||
"blender": (2, 80, 0),
|
||||
"location": "View3D - Object Mode (Shortcut - M)",
|
||||
"warning": '', # used for warning icon and text in addons panel
|
||||
|
@ -36,23 +36,22 @@ if "bpy" in locals():
|
|||
|
||||
importlib.reload(internals)
|
||||
importlib.reload(operators)
|
||||
importlib.reload(preferences)
|
||||
importlib.reload(qcd_move_widget)
|
||||
importlib.reload(qcd_operators)
|
||||
importlib.reload(ui)
|
||||
importlib.reload(qcd_init)
|
||||
importlib.reload(preferences)
|
||||
|
||||
else:
|
||||
from . import internals
|
||||
from . import operators
|
||||
from . import preferences
|
||||
from . import qcd_move_widget
|
||||
from . import qcd_operators
|
||||
from . import ui
|
||||
from . import qcd_init
|
||||
from . import preferences
|
||||
|
||||
import os
|
||||
import bpy
|
||||
import bpy.utils.previews
|
||||
from bpy.app.handlers import persistent
|
||||
from bpy.types import PropertyGroup
|
||||
from bpy.props import (
|
||||
CollectionProperty,
|
||||
|
@ -103,134 +102,42 @@ classes = (
|
|||
operators.CMSetCollectionOperator,
|
||||
operators.CMPhantomModeOperator,
|
||||
preferences.CMPreferences,
|
||||
qcd_move_widget.QCDMoveWidget,
|
||||
qcd_operators.MoveToQCDSlot,
|
||||
qcd_operators.ViewQCDSlot,
|
||||
qcd_operators.ViewMoveQCDSlot,
|
||||
qcd_operators.RenumerateQCDSlots,
|
||||
ui.CM_UL_items,
|
||||
ui.CollectionManager,
|
||||
ui.CMRestrictionTogglesPanel,
|
||||
CollectionManagerProperties,
|
||||
)
|
||||
|
||||
@persistent
|
||||
def depsgraph_update_post_handler(dummy):
|
||||
if qcd_operators.move_triggered:
|
||||
qcd_operators.move_triggered = False
|
||||
return
|
||||
|
||||
qcd_operators.move_selection.clear()
|
||||
qcd_operators.move_active = None
|
||||
qcd_operators.get_move_selection()
|
||||
qcd_operators.get_move_active()
|
||||
|
||||
@persistent
|
||||
def save_internal_data(dummy):
|
||||
cm = bpy.context.scene.collection_manager
|
||||
|
||||
cm.qcd_slots_blend_data = internals.qcd_slots.get_data_for_blend()
|
||||
|
||||
@persistent
|
||||
def load_internal_data(dummy):
|
||||
cm = bpy.context.scene.collection_manager
|
||||
data = cm.qcd_slots_blend_data
|
||||
|
||||
if not data:
|
||||
return
|
||||
|
||||
internals.qcd_slots.load_blend_data(data)
|
||||
|
||||
def register():
|
||||
for cls in classes:
|
||||
bpy.utils.register_class(cls)
|
||||
|
||||
|
||||
pcoll = bpy.utils.previews.new()
|
||||
icons_dir = os.path.join(os.path.dirname(__file__), "icons")
|
||||
pcoll.load("active_icon_base", os.path.join(icons_dir, "minus.png"), 'IMAGE', True)
|
||||
pcoll.load("active_icon_text", os.path.join(icons_dir, "minus.png"), 'IMAGE', True)
|
||||
pcoll.load("active_icon_text_sel", os.path.join(icons_dir, "minus.png"), 'IMAGE', True)
|
||||
ui.preview_collections["icons"] = pcoll
|
||||
|
||||
|
||||
bpy.types.Scene.collection_manager = PointerProperty(type=CollectionManagerProperties)
|
||||
|
||||
bpy.types.VIEW3D_HT_header.append(ui.view3d_header_qcd_slots)
|
||||
|
||||
# create the global menu hotkey
|
||||
wm = bpy.context.window_manager
|
||||
km = wm.keyconfigs.addon.keymaps.new(name='Object Mode')
|
||||
kmi = km.keymap_items.new('view3d.collection_manager', 'M', 'PRESS')
|
||||
addon_keymaps.append((km, kmi))
|
||||
|
||||
# create qcd hotkeys
|
||||
qcd_hotkeys = [
|
||||
["ONE", False, "1"],
|
||||
["TWO", False, "2"],
|
||||
["THREE", False, "3"],
|
||||
["FOUR", False, "4"],
|
||||
["FIVE", False, "5"],
|
||||
["SIX", False, "6"],
|
||||
["SEVEN", False, "7"],
|
||||
["EIGHT", False, "8"],
|
||||
["NINE", False, "9"],
|
||||
["ZERO", False, "10"],
|
||||
["ONE", True, "11"],
|
||||
["TWO", True, "12"],
|
||||
["THREE", True, "13"],
|
||||
["FOUR", True, "14"],
|
||||
["FIVE", True, "15"],
|
||||
["SIX", True, "16"],
|
||||
["SEVEN", True, "17"],
|
||||
["EIGHT", True, "18"],
|
||||
["NINE", True, "19"],
|
||||
["ZERO", True, "20"],
|
||||
]
|
||||
|
||||
for key in qcd_hotkeys:
|
||||
km = wm.keyconfigs.addon.keymaps.new(name='Object Mode')
|
||||
kmi = km.keymap_items.new('view3d.view_qcd_slot', key[0], 'PRESS', alt=key[1])
|
||||
kmi.properties.slot = key[2]
|
||||
kmi.properties.toggle = False
|
||||
addon_keymaps.append((km, kmi))
|
||||
|
||||
km = wm.keyconfigs.addon.keymaps.new(name='Object Mode')
|
||||
kmi = km.keymap_items.new('view3d.view_qcd_slot', key[0], 'PRESS',shift=True, alt=key[1])
|
||||
kmi.properties.slot = key[2]
|
||||
kmi.properties.toggle = True
|
||||
addon_keymaps.append((km, kmi))
|
||||
|
||||
km = wm.keyconfigs.addon.keymaps.new(name='Object Mode')
|
||||
kmi = km.keymap_items.new('view3d.qcd_move_widget', 'V', 'PRESS')
|
||||
addon_keymaps.append((km, kmi))
|
||||
|
||||
bpy.app.handlers.depsgraph_update_post.append(depsgraph_update_post_handler)
|
||||
bpy.app.handlers.save_pre.append(save_internal_data)
|
||||
bpy.app.handlers.load_post.append(load_internal_data)
|
||||
if bpy.context.preferences.addons[__package__].preferences.enable_qcd:
|
||||
qcd_init.register_qcd()
|
||||
|
||||
def unregister():
|
||||
bpy.app.handlers.depsgraph_update_post.remove(depsgraph_update_post_handler)
|
||||
bpy.app.handlers.save_pre.remove(save_internal_data)
|
||||
bpy.app.handlers.load_post.remove(load_internal_data)
|
||||
|
||||
for cls in classes:
|
||||
bpy.utils.unregister_class(cls)
|
||||
|
||||
for pcoll in ui.preview_collections.values():
|
||||
bpy.utils.previews.remove(pcoll)
|
||||
ui.preview_collections.clear()
|
||||
ui.last_icon_theme_text = None
|
||||
ui.last_icon_theme_text_sel = None
|
||||
|
||||
del bpy.types.Scene.collection_manager
|
||||
|
||||
bpy.types.VIEW3D_HT_header.remove(ui.view3d_header_qcd_slots)
|
||||
|
||||
# remove keymaps when add-on is deactivated
|
||||
for km, kmi in addon_keymaps:
|
||||
km.keymap_items.remove(kmi)
|
||||
addon_keymaps.clear()
|
||||
|
||||
qcd_init.unregister_qcd()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
register()
|
||||
|
|
|
@ -26,6 +26,24 @@ from bpy.props import (
|
|||
FloatVectorProperty,
|
||||
)
|
||||
|
||||
from . import qcd_init
|
||||
|
||||
def update_qcd_status(self, context):
|
||||
if self.enable_qcd:
|
||||
qcd_init.register_qcd()
|
||||
|
||||
if self.enable_qcd_view_hotkeys:
|
||||
qcd_init.register_qcd_view_hotkeys()
|
||||
|
||||
else:
|
||||
qcd_init.unregister_qcd()
|
||||
|
||||
def update_qcd_view_hotkeys_status(self, context):
|
||||
if self.enable_qcd_view_hotkeys:
|
||||
qcd_init.register_qcd_view_hotkeys()
|
||||
else:
|
||||
qcd_init.unregister_qcd_view_hotkeys()
|
||||
|
||||
def get_tool_text(self):
|
||||
if self.tool_text_override:
|
||||
return self["tool_text_color"]
|
||||
|
@ -161,6 +179,22 @@ def set_tooltip_outline(self, values):
|
|||
class CMPreferences(AddonPreferences):
|
||||
bl_idname = __package__
|
||||
|
||||
# ENABLE QCD BOOLS
|
||||
enable_qcd: BoolProperty(
|
||||
name="QCD",
|
||||
description="Enable/Disable QCD System",
|
||||
default=True,
|
||||
update=update_qcd_status,
|
||||
)
|
||||
|
||||
enable_qcd_view_hotkeys: BoolProperty(
|
||||
name="QCD Hotkeys",
|
||||
description="Enable/Disable the view (number) hotkeys for QCD",
|
||||
default=True,
|
||||
update=update_qcd_view_hotkeys_status,
|
||||
)
|
||||
|
||||
|
||||
# OVERRIDE BOOLS
|
||||
tool_text_override: BoolProperty(
|
||||
name="Text",
|
||||
|
@ -376,6 +410,13 @@ class CMPreferences(AddonPreferences):
|
|||
layout = self.layout
|
||||
box = layout.box()
|
||||
|
||||
box.row().prop(self, "enable_qcd")
|
||||
|
||||
if not self.enable_qcd:
|
||||
return
|
||||
|
||||
box.row().prop(self, "enable_qcd_view_hotkeys")
|
||||
|
||||
box.row().label(text="QCD Move Widget")
|
||||
|
||||
tool_box = box.box()
|
||||
|
|
|
@ -0,0 +1,140 @@
|
|||
import os
|
||||
import bpy
|
||||
import bpy.utils.previews
|
||||
from bpy.app.handlers import persistent
|
||||
|
||||
from . import preferences
|
||||
from . import qcd_move_widget
|
||||
from . import qcd_operators
|
||||
from . import ui
|
||||
|
||||
addon_qcd_keymaps = []
|
||||
addon_qcd_view_hotkey_keymaps = []
|
||||
|
||||
qcd_classes = (
|
||||
qcd_move_widget.QCDMoveWidget,
|
||||
qcd_operators.MoveToQCDSlot,
|
||||
qcd_operators.ViewQCDSlot,
|
||||
qcd_operators.ViewMoveQCDSlot,
|
||||
qcd_operators.RenumerateQCDSlots,
|
||||
)
|
||||
|
||||
@persistent
|
||||
def depsgraph_update_post_handler(dummy):
|
||||
if qcd_operators.move_triggered:
|
||||
qcd_operators.move_triggered = False
|
||||
return
|
||||
|
||||
qcd_operators.move_selection.clear()
|
||||
qcd_operators.move_active = None
|
||||
qcd_operators.get_move_selection()
|
||||
qcd_operators.get_move_active()
|
||||
|
||||
@persistent
|
||||
def save_internal_data(dummy):
|
||||
cm = bpy.context.scene.collection_manager
|
||||
|
||||
cm.qcd_slots_blend_data = internals.qcd_slots.get_data_for_blend()
|
||||
|
||||
@persistent
|
||||
def load_internal_data(dummy):
|
||||
cm = bpy.context.scene.collection_manager
|
||||
data = cm.qcd_slots_blend_data
|
||||
|
||||
if not data:
|
||||
return
|
||||
|
||||
internals.qcd_slots.load_blend_data(data)
|
||||
|
||||
def register_qcd():
|
||||
for cls in qcd_classes:
|
||||
bpy.utils.register_class(cls)
|
||||
|
||||
pcoll = bpy.utils.previews.new()
|
||||
icons_dir = os.path.join(os.path.dirname(__file__), "icons")
|
||||
pcoll.load("active_icon_base", os.path.join(icons_dir, "minus.png"), 'IMAGE', True)
|
||||
pcoll.load("active_icon_text", os.path.join(icons_dir, "minus.png"), 'IMAGE', True)
|
||||
pcoll.load("active_icon_text_sel", os.path.join(icons_dir, "minus.png"), 'IMAGE', True)
|
||||
ui.preview_collections["icons"] = pcoll
|
||||
|
||||
wm = bpy.context.window_manager
|
||||
km = wm.keyconfigs.addon.keymaps.new(name='Object Mode')
|
||||
kmi = km.keymap_items.new('view3d.qcd_move_widget', 'V', 'PRESS')
|
||||
addon_qcd_keymaps.append((km, kmi))
|
||||
|
||||
bpy.app.handlers.depsgraph_update_post.append(depsgraph_update_post_handler)
|
||||
bpy.app.handlers.save_pre.append(save_internal_data)
|
||||
bpy.app.handlers.load_post.append(load_internal_data)
|
||||
|
||||
if bpy.context.preferences.addons[__package__].preferences.enable_qcd_view_hotkeys:
|
||||
register_qcd_view_hotkeys()
|
||||
|
||||
bpy.types.VIEW3D_HT_header.append(ui.view3d_header_qcd_slots)
|
||||
|
||||
def register_qcd_view_hotkeys():
|
||||
wm = bpy.context.window_manager
|
||||
# create qcd hotkeys
|
||||
qcd_hotkeys = [
|
||||
["ONE", False, "1"],
|
||||
["TWO", False, "2"],
|
||||
["THREE", False, "3"],
|
||||
["FOUR", False, "4"],
|
||||
["FIVE", False, "5"],
|
||||
["SIX", False, "6"],
|
||||
["SEVEN", False, "7"],
|
||||
["EIGHT", False, "8"],
|
||||
["NINE", False, "9"],
|
||||
["ZERO", False, "10"],
|
||||
["ONE", True, "11"],
|
||||
["TWO", True, "12"],
|
||||
["THREE", True, "13"],
|
||||
["FOUR", True, "14"],
|
||||
["FIVE", True, "15"],
|
||||
["SIX", True, "16"],
|
||||
["SEVEN", True, "17"],
|
||||
["EIGHT", True, "18"],
|
||||
["NINE", True, "19"],
|
||||
["ZERO", True, "20"],
|
||||
]
|
||||
|
||||
for key in qcd_hotkeys:
|
||||
km = wm.keyconfigs.addon.keymaps.new(name='Object Mode')
|
||||
kmi = km.keymap_items.new('view3d.view_qcd_slot', key[0], 'PRESS', alt=key[1])
|
||||
kmi.properties.slot = key[2]
|
||||
kmi.properties.toggle = False
|
||||
addon_qcd_view_hotkey_keymaps.append((km, kmi))
|
||||
|
||||
km = wm.keyconfigs.addon.keymaps.new(name='Object Mode')
|
||||
kmi = km.keymap_items.new('view3d.view_qcd_slot', key[0], 'PRESS',shift=True, alt=key[1])
|
||||
kmi.properties.slot = key[2]
|
||||
kmi.properties.toggle = True
|
||||
addon_qcd_view_hotkey_keymaps.append((km, kmi))
|
||||
|
||||
def unregister_qcd():
|
||||
bpy.types.VIEW3D_HT_header.remove(ui.view3d_header_qcd_slots)
|
||||
|
||||
for cls in qcd_classes:
|
||||
bpy.utils.unregister_class(cls)
|
||||
|
||||
bpy.app.handlers.depsgraph_update_post.remove(depsgraph_update_post_handler)
|
||||
bpy.app.handlers.save_pre.remove(save_internal_data)
|
||||
bpy.app.handlers.load_post.remove(load_internal_data)
|
||||
|
||||
for pcoll in ui.preview_collections.values():
|
||||
bpy.utils.previews.remove(pcoll)
|
||||
ui.preview_collections.clear()
|
||||
ui.last_icon_theme_text = None
|
||||
ui.last_icon_theme_text_sel = None
|
||||
|
||||
# remove keymaps when qcd is deactivated
|
||||
for km, kmi in addon_qcd_keymaps:
|
||||
km.keymap_items.remove(kmi)
|
||||
addon_qcd_keymaps.clear()
|
||||
|
||||
unregister_qcd_view_hotkeys()
|
||||
|
||||
def unregister_qcd_view_hotkeys():
|
||||
# remove keymaps when qcd view hotkeys are deactivated
|
||||
for km, kmi in addon_qcd_view_hotkey_keymaps:
|
||||
km.keymap_items.remove(kmi)
|
||||
addon_qcd_view_hotkey_keymaps.clear()
|
|
@ -107,9 +107,10 @@ class CollectionManager(Operator):
|
|||
|
||||
sec1.operator("view3d.expand_all_items", text=text)
|
||||
|
||||
renum = toggle_row.row()
|
||||
renum.alignment = 'LEFT'
|
||||
renum.operator("view3d.renumerate_qcd_slots")
|
||||
if context.preferences.addons[__package__].preferences.enable_qcd:
|
||||
renum = toggle_row.row()
|
||||
renum.alignment = 'LEFT'
|
||||
renum.operator("view3d.renumerate_qcd_slots")
|
||||
|
||||
for laycol in collection_tree:
|
||||
if laycol["has_children"]:
|
||||
|
@ -305,9 +306,10 @@ class CM_UL_items(UIList):
|
|||
|
||||
row.label(icon='GROUP')
|
||||
|
||||
QCD = row.row()
|
||||
QCD.scale_x = 0.4
|
||||
QCD.prop(item, "qcd_slot", text="")
|
||||
if context.preferences.addons[__package__].preferences.enable_qcd:
|
||||
QCD = row.row()
|
||||
QCD.scale_x = 0.4
|
||||
QCD.prop(item, "qcd_slot", text="")
|
||||
|
||||
name_row = row.row()
|
||||
|
||||
|
|
Loading…
Reference in New Issue