diff options
Diffstat (limited to 'object_collection_manager/qcd_init.py')
-rw-r--r-- | object_collection_manager/qcd_init.py | 74 |
1 files changed, 51 insertions, 23 deletions
diff --git a/object_collection_manager/qcd_init.py b/object_collection_manager/qcd_init.py index 1273e6e0..6d4ac7e7 100644 --- a/object_collection_manager/qcd_init.py +++ b/object_collection_manager/qcd_init.py @@ -27,6 +27,7 @@ from bpy.app.handlers import persistent addon_qcd_keymaps = [] addon_qcd_view_hotkey_keymaps = [] addon_qcd_view_edit_mode_hotkey_keymaps = [] +qcd_registered = False qcd_classes = ( @@ -76,6 +77,11 @@ def load_pre_handler(dummy): def register_qcd(): + global qcd_registered + if qcd_registered: + # guard to handle default value updates (mouse hover + backspace) + return + for cls in qcd_classes: bpy.utils.register_class(cls) @@ -107,8 +113,14 @@ def register_qcd(): if prefs.enable_qcd_3dview_header_widget: register_qcd_3dview_header_widget() + qcd_registered = True + def register_qcd_view_hotkeys(): + if addon_qcd_view_hotkey_keymaps: + # guard to handle default value updates (mouse hover + backspace) + return + wm = bpy.context.window_manager if wm.keyconfigs.addon: # not present when started with --background # create qcd hotkeys @@ -135,8 +147,8 @@ def register_qcd_view_hotkeys(): ["ZERO", True, "20"], ] - for key in qcd_hotkeys: - for mode in ['Object Mode', 'Pose', 'Weight Paint']: + for mode in ['Object Mode', 'Pose', 'Weight Paint']: + for key in qcd_hotkeys: km = wm.keyconfigs.addon.keymaps.new(name=mode) kmi = km.keymap_items.new('view3d.view_qcd_slot', key[0], 'PRESS', alt=key[1]) kmi.properties.slot = key[2] @@ -149,37 +161,41 @@ def register_qcd_view_hotkeys(): kmi.properties.toggle = True addon_qcd_view_hotkey_keymaps.append((km, kmi)) - km = wm.keyconfigs.addon.keymaps.new(name=mode) - kmi = km.keymap_items.new('view3d.enable_all_qcd_slots', 'PLUS', 'PRESS', shift=True) - addon_qcd_view_hotkey_keymaps.append((km, kmi)) + km = wm.keyconfigs.addon.keymaps.new(name=mode) + kmi = km.keymap_items.new('view3d.enable_all_qcd_slots', 'PLUS', 'PRESS', shift=True) + addon_qcd_view_hotkey_keymaps.append((km, kmi)) - km = wm.keyconfigs.addon.keymaps.new(name=mode) - kmi = km.keymap_items.new('view3d.isolate_selected_objects_collections', 'EQUAL', 'PRESS') - addon_qcd_view_hotkey_keymaps.append((km, kmi)) + km = wm.keyconfigs.addon.keymaps.new(name=mode) + kmi = km.keymap_items.new('view3d.isolate_selected_objects_collections', 'EQUAL', 'PRESS') + addon_qcd_view_hotkey_keymaps.append((km, kmi)) - km = wm.keyconfigs.addon.keymaps.new(name=mode) - kmi = km.keymap_items.new('view3d.disable_selected_objects_collections', 'MINUS', 'PRESS') - addon_qcd_view_hotkey_keymaps.append((km, kmi)) + km = wm.keyconfigs.addon.keymaps.new(name=mode) + kmi = km.keymap_items.new('view3d.disable_selected_objects_collections', 'MINUS', 'PRESS') + addon_qcd_view_hotkey_keymaps.append((km, kmi)) - km = wm.keyconfigs.addon.keymaps.new(name=mode) - kmi = km.keymap_items.new('view3d.disable_all_non_qcd_slots', 'PLUS', 'PRESS', shift=True, alt=True) - addon_qcd_view_hotkey_keymaps.append((km, kmi)) + km = wm.keyconfigs.addon.keymaps.new(name=mode) + kmi = km.keymap_items.new('view3d.disable_all_non_qcd_slots', 'PLUS', 'PRESS', shift=True, alt=True) + addon_qcd_view_hotkey_keymaps.append((km, kmi)) - km = wm.keyconfigs.addon.keymaps.new(name=mode) - kmi = km.keymap_items.new('view3d.disable_all_collections', 'EQUAL', 'PRESS', alt=True, ctrl=True) - addon_qcd_view_hotkey_keymaps.append((km, kmi)) + km = wm.keyconfigs.addon.keymaps.new(name=mode) + kmi = km.keymap_items.new('view3d.disable_all_collections', 'EQUAL', 'PRESS', alt=True, ctrl=True) + addon_qcd_view_hotkey_keymaps.append((km, kmi)) - km = wm.keyconfigs.addon.keymaps.new(name=mode) - kmi = km.keymap_items.new('view3d.select_all_qcd_objects', 'PLUS', 'PRESS', shift=True, ctrl=True) - addon_qcd_view_hotkey_keymaps.append((km, kmi)) + km = wm.keyconfigs.addon.keymaps.new(name=mode) + kmi = km.keymap_items.new('view3d.select_all_qcd_objects', 'PLUS', 'PRESS', shift=True, ctrl=True) + addon_qcd_view_hotkey_keymaps.append((km, kmi)) - km = wm.keyconfigs.addon.keymaps.new(name=mode) - kmi = km.keymap_items.new('view3d.discard_qcd_history', 'EQUAL', 'PRESS', alt=True) - addon_qcd_view_hotkey_keymaps.append((km, kmi)) + km = wm.keyconfigs.addon.keymaps.new(name=mode) + kmi = km.keymap_items.new('view3d.discard_qcd_history', 'EQUAL', 'PRESS', alt=True) + addon_qcd_view_hotkey_keymaps.append((km, kmi)) def register_qcd_view_edit_mode_hotkeys(): + if addon_qcd_view_edit_mode_hotkey_keymaps: + # guard to handle default value updates (mouse hover + backspace) + return + wm = bpy.context.window_manager if wm.keyconfigs.addon: # not present when started with --background # create qcd hotkeys @@ -248,12 +264,22 @@ def register_qcd_view_edit_mode_hotkeys(): def register_qcd_3dview_header_widget(): + # unregister first to guard against default value updates (mouse hover + backspace) + # if the widget isn't registered it will just do nothing + unregister_qcd_3dview_header_widget() + + # add the widget to the header, and an update function to the top bar to get view layer changes bpy.types.VIEW3D_HT_header.append(ui.view3d_header_qcd_slots) bpy.types.TOPBAR_HT_upper_bar.append(ui.view_layer_update) def unregister_qcd(): + global qcd_registered + if not qcd_registered: + # guard to handle default value updates (mouse hover + backspace) + return + unregister_qcd_3dview_header_widget() for cls in qcd_classes: @@ -279,6 +305,8 @@ def unregister_qcd(): unregister_qcd_view_edit_mode_hotkeys() + qcd_registered = False + def unregister_qcd_view_hotkeys(): # remove keymaps when qcd view hotkeys are deactivated |