VSE: Remove timeline box select

Remove the box select tool from the timeline to simplify selection
logic, avoid confusion for users, and make maintaining the code
easier in the future. It also brings the selection system  closer
to other industry-standard NLEs.

It also fixes an issue caused by d2091b4b1.

More details in PR.

Pull Request: https://projects.blender.org/blender/blender/pulls/128051
This commit is contained in:
John Kiril Swenson
2024-10-03 00:37:00 +02:00
committed by Pablo Vazquez
parent 177e2ac837
commit d2a802d3c6
4 changed files with 24 additions and 87 deletions

View File

@@ -3015,13 +3015,13 @@ def km_sequencer(params):
{"properties": [("extend", True)]}),
("sequencer.select_linked", {"type": 'L', "value": 'PRESS', "ctrl": True}, None),
("sequencer.select_box", {"type": params.select_mouse, "value": 'CLICK_DRAG'},
{"properties": [("tweak", True), ("mode", 'SET')]}),
{"properties": [("mode", 'SET')]}),
("sequencer.select_box", {"type": params.select_mouse, "value": 'CLICK_DRAG', "shift": True},
{"properties": [("tweak", True), ("mode", 'ADD')]}),
{"properties": [("mode", 'ADD')]}),
("sequencer.select_box", {"type": params.select_mouse, "value": 'CLICK_DRAG', "ctrl": True},
{"properties": [("tweak", True), ("mode", 'SUB')]}),
{"properties": [("mode", 'SUB')]}),
("sequencer.select_box", {"type": params.select_mouse, "value": 'CLICK_DRAG', "alt": True},
{"properties": [("tweak", True), ("ignore_connections", True), ("mode", 'SET')]}),
{"properties": [("ignore_connections", True), ("mode", 'SET')]}),
("sequencer.select_box", {"type": 'B', "value": 'PRESS'}, None),
("sequencer.select_box", {"type": 'B', "value": 'PRESS', "ctrl": True},
{"properties": [("include_handles", True)]}),
@@ -8935,7 +8935,7 @@ def km_3d_view_tool_edit_grease_pencil_texture_gradient(params):
# ------------------------------------------------------------------------------
# Tool System (Sequencer, Generic)
def km_sequencer_editor_tool_generic_select_timeline_rcs(params, fallback):
def km_sequencer_editor_tool_generic_select_timeline_rcs(params):
return [
("sequencer.select_handle", {"type": 'LEFTMOUSE', "value": 'PRESS'}, None),
("sequencer.select_handle", {"type": 'LEFTMOUSE', "value": 'PRESS',
@@ -8949,10 +8949,11 @@ def km_sequencer_editor_tool_generic_select_timeline_rcs(params, fallback):
]
def km_sequencer_editor_tool_generic_select_timeline_lcs(params, fallback):
def km_sequencer_editor_tool_generic_select_timeline_lcs(params):
return [
*_template_items_tool_select(
params, "sequencer.select", None, cursor_prioritize=True, fallback=fallback),
("sequencer.select", {"type": 'LEFTMOUSE', "value": 'PRESS'}, None),
("sequencer.select", {"type": 'LEFTMOUSE', "value": 'PRESS',
"shift": True}, {"properties": [("toggle", True)]}),
*_template_items_change_frame(params),
]
@@ -8962,28 +8963,9 @@ def km_sequencer_editor_tool_generic_select_timeline(params, *, fallback):
_fallback_id("Sequencer Timeline Tool: Tweak", fallback),
{"space_type": 'SEQUENCE_EDITOR', "region_type": 'WINDOW'},
{"items": [
*(km_sequencer_editor_tool_generic_select_timeline_rcs(params, fallback)
*(km_sequencer_editor_tool_generic_select_timeline_rcs(params)
if (params.select_mouse == 'RIGHTMOUSE') else
km_sequencer_editor_tool_generic_select_timeline_lcs(params, fallback)),
]},
)
def km_sequencer_editor_tool_generic_select_box_timeline(params, *, fallback):
return (
_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.
*([] 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')])),
# RMB select can already set the frame, match the tweak tool.
# Ignored for preview.
*(_template_items_change_frame(params)
if params.select_mouse == 'LEFTMOUSE' else []),
km_sequencer_editor_tool_generic_select_timeline_lcs(params)),
]},
)
@@ -9012,8 +8994,7 @@ def km_sequencer_editor_tool_generic_select_box_preview(params, *, fallback):
*([] 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')])),
params.tool_tweak_event))),
]},
)
@@ -9409,8 +9390,6 @@ def generate_keymaps(params=None):
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)

View File

@@ -1859,11 +1859,11 @@ def km_sequencer(params):
{"properties": [("extend", True)]}),
("sequencer.select_linked", {"type": 'L', "value": 'PRESS', "ctrl": True}, None),
("sequencer.select_box", {"type": 'LEFTMOUSE', "value": 'CLICK_DRAG'},
{"properties": [("tweak", True), ("mode", 'SET')]}),
{"properties": [("mode", 'SET')]}),
("sequencer.select_box", {"type": 'LEFTMOUSE', "value": 'CLICK_DRAG', "shift": True},
{"properties": [("tweak", True), ("mode", 'ADD')]}),
{"properties": [("mode", 'ADD')]}),
("sequencer.select_box", {"type": 'LEFTMOUSE', "value": 'CLICK_DRAG', "ctrl": True},
{"properties": [("tweak", True), ("mode", 'SUB')]}),
{"properties": [("mode", 'SUB')]}),
("sequencer.select_grouped", {"type": 'G', "value": 'PRESS', "shift": True}, None),
("sequencer.slip", {"type": 'R', "value": 'PRESS'}, None),
("wm.context_set_int", {"type": 'O', "value": 'PRESS'},

View File

@@ -3414,22 +3414,6 @@ class _defs_sequencer_select:
keymap="Sequencer Timeline Tool: Tweak",
)
@ToolDef.from_fn
def box_timeline():
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 Timeline Tool: Select Box",
draw_settings=draw_settings,
)
@ToolDef.from_fn
def select_preview():
return dict(
@@ -4175,17 +4159,11 @@ class SEQUENCER_PT_tools_active(ToolSelectPanelHelper, Panel):
*_tools_annotate,
],
'SEQUENCER': [
(
_defs_sequencer_select.select_timeline,
_defs_sequencer_select.box_timeline,
),
_defs_sequencer_select.select_timeline,
_defs_sequencer_generic.blade,
],
'SEQUENCER_PREVIEW': [
(
_defs_sequencer_select.select_timeline,
_defs_sequencer_select.box_timeline,
),
_defs_sequencer_select.select_timeline,
*_tools_annotate,
None,
_defs_sequencer_generic.blade,

View File

@@ -2183,32 +2183,15 @@ static int sequencer_box_select_invoke(bContext *C, wmOperator *op, const wmEven
return OPERATOR_CANCELLED;
}
const bool tweak = RNA_boolean_get(op->ptr, "tweak");
int mval[2];
float mouse_co[2];
WM_event_drag_start_mval(event, region, mval);
UI_view2d_region_to_view(v2d, mval[0], mval[1], &mouse_co[0], &mouse_co[1]);
if (tweak) {
int mval[2];
float mouse_co[2];
WM_event_drag_start_mval(event, region, mval);
UI_view2d_region_to_view(v2d, mval[0], mval[1], &mouse_co[0], &mouse_co[1]);
StripSelection selection = ED_sequencer_pick_strip_and_handle(scene, v2d, mouse_co);
StripSelection selection = ED_sequencer_pick_strip_and_handle(scene, v2d, mouse_co);
if (selection.seq1 != nullptr) {
if (selection.handle != SEQ_HANDLE_NONE) {
SpaceSeq *sseq = CTX_wm_space_seq(C);
sseq->flag |= SPACE_SEQ_DESELECT_STRIP_HANDLE;
ED_sequencer_deselect_all(scene);
selection.seq1->flag |= (SELECT) | ((selection.handle == SEQ_HANDLE_RIGHT) ? SEQ_RIGHTSEL :
SEQ_LEFTSEL);
if (selection.seq2 != nullptr) {
selection.seq2->flag |= (SELECT) |
((selection.handle == SEQ_HANDLE_RIGHT) ? SEQ_LEFTSEL :
SEQ_RIGHTSEL);
}
}
return OPERATOR_CANCELLED | OPERATOR_PASS_THROUGH;
}
if (selection.seq1 != nullptr) {
return OPERATOR_CANCELLED | OPERATOR_PASS_THROUGH;
}
return WM_gesture_box_invoke(C, op, event);
@@ -2238,9 +2221,6 @@ void SEQUENCER_OT_select_box(wmOperatorType *ot)
WM_operator_properties_gesture_box(ot);
WM_operator_properties_select_operation_simple(ot);
prop = RNA_def_boolean(
ot->srna, "tweak", false, "Tweak", "Operator has been activated using a click-drag event");
RNA_def_property_flag(prop, PROP_SKIP_SAVE);
prop = RNA_def_boolean(
ot->srna, "include_handles", false, "Select Handles", "Select the strips and their handles");
RNA_def_property_flag(prop, PROP_SKIP_SAVE);