diff options
Diffstat (limited to 'object_collection_manager/qcd_init.py')
-rw-r--r-- | object_collection_manager/qcd_init.py | 140 |
1 files changed, 140 insertions, 0 deletions
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() |