From 8c53a18c48b314f0bf4e3e68176c95bec05372fa Mon Sep 17 00:00:00 2001 From: Richard Antalik Date: Wed, 22 May 2024 18:46:53 +0200 Subject: [PATCH] Cleanup: Refactor VSE selection tools keymap Split single keymap definition into timeline and preview as well as LCS and RCS definitions. This improves readability of keymap code. Tweak and Box Select tools will now use "Sequencer Timeline Tool", or "Sequencer Preview Tool" entries instead of "Sequencer Tool", so custom keymaps or scripts have to be updated. Pull Request: https://projects.blender.org/blender/blender/pulls/121846 --- .../keyconfig/keymap_data/blender_default.py | 74 +++++++++++++++---- .../keymap_data/industry_compatible_data.py | 14 +++- .../startup/bl_ui/space_toolsystem_toolbar.py | 53 +++++++++---- 3 files changed, 107 insertions(+), 34 deletions(-) diff --git a/scripts/presets/keyconfig/keymap_data/blender_default.py b/scripts/presets/keyconfig/keymap_data/blender_default.py index a07641c6050..14098c5326c 100644 --- a/scripts/presets/keyconfig/keymap_data/blender_default.py +++ b/scripts/presets/keyconfig/keymap_data/blender_default.py @@ -611,7 +611,7 @@ def _template_items_tool_select( else: # For right mouse, set the cursor. return [ - (cursor_operator, {"type": 'LEFTMOUSE', "value": 'PRESS'}, None), + (cursor_operator, {"type": 'LEFTMOUSE', "value": 'PRESS'}, None) if cursor_operator is not None else (), ("transform.translate", {"type": 'LEFTMOUSE', "value": 'CLICK_DRAG'}, {"properties": [("release_confirm", True), ("cursor_transform", True)]}), ] @@ -8781,26 +8781,37 @@ def km_3d_view_tool_sculpt_gpencil_select_lasso(params): # ------------------------------------------------------------------------------ # Tool System (Sequencer, Generic) -def km_sequencer_editor_tool_generic_select(params, *, fallback): +def km_sequencer_editor_tool_generic_select_timeline_rcs(params, fallback): + return [ + *_template_items_change_frame(params), + # Frame change can be cancelled if click happens on strip handle. In such case move the handle. + ("transform.seq_slide", {"type": 'LEFTMOUSE', "value": 'PRESS'}, + {"properties": [("view2d_edge_pan", True)]}), + ] + + +def km_sequencer_editor_tool_generic_select_timeline_lcs(params, fallback): + return [ + *_template_items_tool_select( + params, "sequencer.select", None, cursor_prioritize=True, fallback=fallback), + *_template_items_change_frame(params), + ] + + +def km_sequencer_editor_tool_generic_select_timeline(params, *, fallback): return ( - _fallback_id("Sequencer Tool: Tweak", fallback), + _fallback_id("Sequencer Timeline Tool: Tweak", fallback), {"space_type": 'SEQUENCE_EDITOR', "region_type": 'WINDOW'}, {"items": [ - *([] if (fallback and (params.select_mouse == 'RIGHTMOUSE')) else _template_items_tool_select( - params, "sequencer.select", "sequencer.cursor_set", cursor_prioritize=True, fallback=fallback)), - - *([] if params.use_fallback_tool_select_handled else - _template_sequencer_preview_select( - type=params.select_mouse, value=params.select_mouse_value, legacy=params.legacy)), - # Ignored for preview. - *_template_items_change_frame(params), + *(km_sequencer_editor_tool_generic_select_timeline_rcs(params, fallback) if (params.select_mouse == 'RIGHTMOUSE') + else km_sequencer_editor_tool_generic_select_timeline_lcs(params, fallback)), ]}, ) -def km_sequencer_editor_tool_generic_select_box(params, *, fallback): +def km_sequencer_editor_tool_generic_select_box_timeline(params, *, fallback): return ( - _fallback_id("Sequencer Tool: Select Box", fallback), + _fallback_id("Sequencer Timeline Tool: Select Box", fallback), {"space_type": 'SEQUENCE_EDITOR', "region_type": 'WINDOW'}, {"items": [ # Don't use `tool_maybe_tweak_event`, see comment for this slot. @@ -8809,7 +8820,6 @@ def km_sequencer_editor_tool_generic_select_box(params, *, fallback): **(params.select_tweak_event if (fallback and params.use_fallback_tool_select_mouse) else params.tool_tweak_event), properties=[("tweak", params.select_mouse == 'LEFTMOUSE')])), - # RMB select can already set the frame, match the tweak tool. # Ignored for preview. *(_template_items_change_frame(params) @@ -8818,6 +8828,36 @@ def km_sequencer_editor_tool_generic_select_box(params, *, fallback): ) +def km_sequencer_editor_tool_generic_select_preview(params, *, fallback): + return ( + _fallback_id("Sequencer Preview Tool: Tweak", fallback), + {"space_type": 'SEQUENCE_EDITOR', "region_type": 'WINDOW'}, + {"items": [ + *([] if (fallback and (params.select_mouse == 'RIGHTMOUSE')) else _template_items_tool_select( + params, "sequencer.select", "sequencer.cursor_set", cursor_prioritize=True, fallback=fallback)), + + *([] if params.use_fallback_tool_select_handled else + _template_sequencer_preview_select( + type=params.select_mouse, value=params.select_mouse_value, legacy=params.legacy)), + ]}, + ) + + +def km_sequencer_editor_tool_generic_select_box_preview(params, *, fallback): + return ( + _fallback_id("Sequencer Preview Tool: Select Box", fallback), + {"space_type": 'SEQUENCE_EDITOR', "region_type": 'WINDOW'}, + {"items": [ + # Don't use `tool_maybe_tweak_event`, see comment for this slot. + *([] if (fallback and not params.use_fallback_tool) else _template_items_tool_select_actions_simple( + "sequencer.select_box", + **(params.select_tweak_event if (fallback and params.use_fallback_tool_select_mouse) else + params.tool_tweak_event), + properties=[("tweak", params.select_mouse == 'LEFTMOUSE')])), + ]}, + ) + + def km_sequencer_editor_tool_generic_cursor(params): return ( "Sequencer Tool: Cursor", @@ -9179,9 +9219,11 @@ def generate_keymaps(params=None): km_3d_view_tool_sculpt_gpencil_select_box(params), km_3d_view_tool_sculpt_gpencil_select_circle(params), km_3d_view_tool_sculpt_gpencil_select_lasso(params), + *(km_sequencer_editor_tool_generic_select_timeline(params, fallback=fallback) for fallback in (False, True)), + *(km_sequencer_editor_tool_generic_select_box_timeline(params, fallback=fallback) for fallback in (False, True)), + *(km_sequencer_editor_tool_generic_select_preview(params, fallback=fallback) for fallback in (False, True)), + *(km_sequencer_editor_tool_generic_select_box_preview(params, fallback=fallback) for fallback in (False, True)), km_3d_view_tool_paint_grease_pencil_cutter(params), - *(km_sequencer_editor_tool_generic_select(params, fallback=fallback) for fallback in (False, True)), - *(km_sequencer_editor_tool_generic_select_box(params, fallback=fallback) for fallback in (False, True)), km_sequencer_editor_tool_generic_cursor(params), km_sequencer_editor_tool_blade(params), km_sequencer_editor_tool_sample(params), diff --git a/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py b/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py index e659f84b72f..afb616717b4 100644 --- a/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py +++ b/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py @@ -4386,9 +4386,16 @@ def km_3d_view_tool_edit_gpencil_select(params): ) -def km_sequencer_editor_tool_generic_select(params): +def km_sequencer_editor_tool_select_preview(params): return ( - "Sequencer Tool: Tweak", + "Sequencer Preview Tool: Tweak", + {"space_type": 'SEQUENCE_EDITOR', "region_type": 'WINDOW'}, + {"items": []} + ) + +def km_sequencer_editor_tool_select_timeline(params): + return ( + "Sequencer Timeline Tool: Tweak", {"space_type": 'SEQUENCE_EDITOR', "region_type": 'WINDOW'}, {"items": []} ) @@ -4582,7 +4589,8 @@ def generate_keymaps_impl(params=None): km_3d_view_tool_select(params), km_image_editor_tool_uv_select(params), km_3d_view_tool_edit_gpencil_select(params), - km_sequencer_editor_tool_generic_select(params), + km_sequencer_editor_tool_select_preview(params), + km_sequencer_editor_tool_select_timeline(params), km_3d_view_tool_interactive_add(params), ] diff --git a/scripts/startup/bl_ui/space_toolsystem_toolbar.py b/scripts/startup/bl_ui/space_toolsystem_toolbar.py index 167ba3967b9..3dad4fcc400 100644 --- a/scripts/startup/bl_ui/space_toolsystem_toolbar.py +++ b/scripts/startup/bl_ui/space_toolsystem_toolbar.py @@ -2997,17 +2997,17 @@ class _defs_sequencer_generic: class _defs_sequencer_select: @ToolDef.from_fn - def select(): + def select_timeline(): return dict( idname="builtin.select", label="Tweak", icon="ops.generic.select", widget=None, - keymap="Sequencer Tool: Tweak", + keymap="Sequencer Timeline Tool: Tweak", ) @ToolDef.from_fn - def box(): + def box_timeline(): def draw_settings(_context, layout, tool): props = tool.operator_properties("sequencer.select_box") row = layout.row() @@ -3018,7 +3018,33 @@ class _defs_sequencer_select: label="Select Box", icon="ops.generic.select_box", widget=None, - keymap="Sequencer Tool: Select Box", + keymap="Sequencer Timeline Tool: Select Box", + draw_settings=draw_settings, + ) + + @ToolDef.from_fn + def select_preview(): + return dict( + idname="builtin.select", + label="Tweak", + icon="ops.generic.select", + widget=None, + keymap="Sequencer Preview Tool: Tweak", + ) + + @ToolDef.from_fn + def box_preview(): + def draw_settings(_context, layout, tool): + props = tool.operator_properties("sequencer.select_box") + row = layout.row() + row.use_property_split = False + row.prop(props, "mode", text="", expand=True, icon_only=True) + return dict( + idname="builtin.select_box", + label="Select Box", + icon="ops.generic.select_box", + widget=None, + keymap="Sequencer Preview Tool: Select Box", draw_settings=draw_settings, ) @@ -3628,13 +3654,6 @@ class SEQUENCER_PT_tools_active(ToolSelectPanelHelper, Panel): yield from cls._tools.items() # Private tool lists for convenient reuse in `_tools`. - - _tools_select = ( - ( - _defs_sequencer_select.select, - _defs_sequencer_select.box, - ), - ) _tools_annotate = ( ( _defs_annotate.scribble, @@ -3651,7 +3670,10 @@ class SEQUENCER_PT_tools_active(ToolSelectPanelHelper, Panel): None: [ ], 'PREVIEW': [ - *_tools_select, + ( + _defs_sequencer_select.select_preview, + _defs_sequencer_select.box_preview, + ), _defs_sequencer_generic.cursor, None, _defs_sequencer_generic.translate, @@ -3663,12 +3685,13 @@ class SEQUENCER_PT_tools_active(ToolSelectPanelHelper, Panel): *_tools_annotate, ], 'SEQUENCER': [ - *_tools_select, + ( + _defs_sequencer_select.select_timeline, + _defs_sequencer_select.box_timeline, + ), _defs_sequencer_generic.blade, ], 'SEQUENCER_PREVIEW': [ - *_tools_select, - None, *_tools_annotate, None, _defs_sequencer_generic.blade,