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

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Fog <tintwotin>2020-12-20 08:23:08 +0300
committerRichard Antalik <richardantalik@gmail.com>2020-12-20 08:23:08 +0300
commit5a69f707516e858bb177fc95e49a942384326538 (patch)
treee01b510756d52b19cac95b4c17f3c70b8db7d1b6
parent864c8068639a1341220f5a97b683f6834928ad76 (diff)
VSE: Add options to select neighboring handles
Options added to `sequencer.select_handles()` operator. Reviewed By: ISS Differential Revision: https://developer.blender.org/D7707
-rw-r--r--release/scripts/startup/bl_ui/space_sequencer.py5
-rw-r--r--source/blender/editors/space_sequencer/sequencer_select.c67
2 files changed, 67 insertions, 5 deletions
diff --git a/release/scripts/startup/bl_ui/space_sequencer.py b/release/scripts/startup/bl_ui/space_sequencer.py
index 6561d775536..29f0bd1d6fb 100644
--- a/release/scripts/startup/bl_ui/space_sequencer.py
+++ b/release/scripts/startup/bl_ui/space_sequencer.py
@@ -453,6 +453,11 @@ class SEQUENCER_MT_select_handle(Menu):
layout.operator("sequencer.select_handles", text="Left").side = 'LEFT'
layout.operator("sequencer.select_handles", text="Right").side = 'RIGHT'
+ layout.separator()
+
+ layout.operator("sequencer.select_handles", text="Both Neighbors").side = 'BOTH_NEIGHBORS'
+ layout.operator("sequencer.select_handles", text="Left Neighbor").side = 'LEFT_NEIGHBOR'
+ layout.operator("sequencer.select_handles", text="Right Neighbor").side = 'RIGHT_NEIGHBOR'
class SEQUENCER_MT_select_channel(Menu):
bl_label = "Select Channel"
diff --git a/source/blender/editors/space_sequencer/sequencer_select.c b/source/blender/editors/space_sequencer/sequencer_select.c
index a6027a2472c..edbffa8f693 100644
--- a/source/blender/editors/space_sequencer/sequencer_select.c
+++ b/source/blender/editors/space_sequencer/sequencer_select.c
@@ -902,6 +902,25 @@ void SEQUENCER_OT_select_linked(wmOperatorType *ot)
/** \name Select Handles Operator
* \{ */
+enum {
+ SEQ_SELECT_HANDLES_SIDE_LEFT,
+ SEQ_SELECT_HANDLES_SIDE_RIGHT,
+ SEQ_SELECT_HANDLES_SIDE_BOTH,
+ SEQ_SELECT_HANDLES_SIDE_LEFT_NEIGHBOR,
+ SEQ_SELECT_HANDLES_SIDE_RIGHT_NEIGHBOR,
+ SEQ_SELECT_HANDLES_SIDE_BOTH_NEIGHBORS,
+};
+
+static const EnumPropertyItem prop_select_handles_side_types[] = {
+ {SEQ_SELECT_HANDLES_SIDE_LEFT, "LEFT", 0, "Left", ""},
+ {SEQ_SELECT_HANDLES_SIDE_RIGHT, "RIGHT", 0, "Right", ""},
+ {SEQ_SELECT_HANDLES_SIDE_BOTH, "BOTH", 0, "Both", ""},
+ {SEQ_SELECT_HANDLES_SIDE_LEFT_NEIGHBOR, "LEFT_NEIGHBOR", 0, "Left Neighbor", ""},
+ {SEQ_SELECT_HANDLES_SIDE_RIGHT_NEIGHBOR, "RIGHT_NEIGHBOR", 0, "Right Neighbor", ""},
+ {SEQ_SELECT_HANDLES_SIDE_BOTH_NEIGHBORS, "BOTH_NEIGHBORS", 0, "Both Neighbors", ""},
+ {0, NULL, 0, NULL, NULL},
+};
+
static int sequencer_select_handles_exec(bContext *C, wmOperator *op)
{
Scene *scene = CTX_data_scene(C);
@@ -911,18 +930,56 @@ static int sequencer_select_handles_exec(bContext *C, wmOperator *op)
for (seq = ed->seqbasep->first; seq; seq = seq->next) {
if (seq->flag & SELECT) {
+ Sequence *l_neighbor = find_neighboring_sequence(scene, seq, SEQ_SIDE_LEFT, -1);
+ Sequence *r_neighbor = find_neighboring_sequence(scene, seq, SEQ_SIDE_RIGHT, -1);
+
switch (sel_side) {
- case SEQ_SIDE_LEFT:
+ case SEQ_SELECT_HANDLES_SIDE_LEFT:
seq->flag &= ~SEQ_RIGHTSEL;
seq->flag |= SEQ_LEFTSEL;
break;
- case SEQ_SIDE_RIGHT:
+ case SEQ_SELECT_HANDLES_SIDE_RIGHT:
seq->flag &= ~SEQ_LEFTSEL;
seq->flag |= SEQ_RIGHTSEL;
break;
- case SEQ_SIDE_BOTH:
+ case SEQ_SELECT_HANDLES_SIDE_BOTH:
seq->flag |= SEQ_LEFTSEL | SEQ_RIGHTSEL;
break;
+ case SEQ_SELECT_HANDLES_SIDE_LEFT_NEIGHBOR:
+ if (l_neighbor) {
+ if (!(l_neighbor->flag & SELECT)) {
+ l_neighbor->flag |= SEQ_RIGHTSEL;
+ }
+ }
+ break;
+ case SEQ_SELECT_HANDLES_SIDE_RIGHT_NEIGHBOR:
+ if (r_neighbor) {
+ if (!(r_neighbor->flag & SELECT)) {
+ r_neighbor->flag |= SEQ_LEFTSEL;
+ }
+ }
+ break;
+ case SEQ_SELECT_HANDLES_SIDE_BOTH_NEIGHBORS:
+ if (l_neighbor) {
+ if (!(l_neighbor->flag & SELECT)) {
+ l_neighbor->flag |= SEQ_RIGHTSEL;
+ }
+ }
+ if (r_neighbor) {
+ if (!(r_neighbor->flag & SELECT)) {
+ r_neighbor->flag |= SEQ_LEFTSEL;
+ }
+ break;
+ }
+ }
+ }
+ }
+ /* Select strips */
+ for (seq = ed->seqbasep->first; seq; seq = seq->next) {
+ if ((seq->flag & SEQ_LEFTSEL) || (seq->flag & SEQ_RIGHTSEL)) {
+ if (!(seq->flag & SELECT)) {
+ seq->flag |= SELECT;
+ recurs_sel_seq(seq);
}
}
}
@@ -951,8 +1008,8 @@ void SEQUENCER_OT_select_handles(wmOperatorType *ot)
/* Properties. */
RNA_def_enum(ot->srna,
"side",
- prop_side_types,
- SEQ_SIDE_BOTH,
+ prop_select_handles_side_types,
+ SEQ_SELECT_HANDLES_SIDE_BOTH,
"Side",
"The side of the handle that is selected");
}