Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRyan Inch <mythologylover75@gmail.com>2020-03-18 07:45:26 +0300
committerRyan Inch <mythologylover75@gmail.com>2020-03-18 07:48:47 +0300
commite61a7e8bfe226aa1db7b5126f50cd9e7ba295239 (patch)
tree167d5bc8876fc9f03a25d3e8ac7ebe0b4c4861f1 /object_collection_manager
parent61f1c0aef5a6dc480a77c8246cbed9a9dab3c789 (diff)
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.
Diffstat (limited to 'object_collection_manager')
-rw-r--r--object_collection_manager/__init__.py113
-rw-r--r--object_collection_manager/preferences.py41
-rw-r--r--object_collection_manager/qcd_init.py140
-rw-r--r--object_collection_manager/ui.py14
4 files changed, 199 insertions, 109 deletions
diff --git a/object_collection_manager/__init__.py b/object_collection_manager/__init__.py
index a55d60fa..b7e44f88 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,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()
diff --git a/object_collection_manager/preferences.py b/object_collection_manager/preferences.py
index 154ee3ee..d40b4303 100644
--- a/object_collection_manager/preferences.py
+++ b/object_collection_manager/preferences.py
@@ -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()
diff --git a/object_collection_manager/qcd_init.py b/object_collection_manager/qcd_init.py
new file mode 100644
index 00000000..4857719a
--- /dev/null
+++ b/object_collection_manager/qcd_init.py
@@ -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()
diff --git a/object_collection_manager/ui.py b/object_collection_manager/ui.py
index 7325a3e1..55dcbfb4 100644
--- a/object_collection_manager/ui.py
+++ b/object_collection_manager/ui.py
@@ -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()