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:
authorAlessio Monti di Sopra <a.monti>2019-11-03 08:53:39 +0300
committerRichard Antalik <richardantalik@gmail.com>2019-11-03 08:53:48 +0300
commitd4bef6a215080e99119089148c0368e60c43f436 (patch)
treef95a4fd0ad98289856790afa13c8304b5c443af7 /source/blender/editors/space_sequencer/sequencer_edit.c
parentb9c2f8f3c89c3386e50cfcfc95c17ff6366222bb (diff)
VSE: add a Set frame range to Strips operator
Add operator that sets the frame range, with an option to choose the regular or the preview one, around the selected strips. Reviewed By: ISS Differential Revision: https://developer.blender.org/D6078
Diffstat (limited to 'source/blender/editors/space_sequencer/sequencer_edit.c')
-rw-r--r--source/blender/editors/space_sequencer/sequencer_edit.c64
1 files changed, 64 insertions, 0 deletions
diff --git a/source/blender/editors/space_sequencer/sequencer_edit.c b/source/blender/editors/space_sequencer/sequencer_edit.c
index ca1c55b80eb..dc4299b637b 100644
--- a/source/blender/editors/space_sequencer/sequencer_edit.c
+++ b/source/blender/editors/space_sequencer/sequencer_edit.c
@@ -4185,3 +4185,67 @@ void SEQUENCER_OT_export_subtitles(struct wmOperatorType *ot)
FILE_DEFAULTDISPLAY,
FILE_SORT_ALPHA);
}
+
+static int sequencer_set_range_to_strips_exec(bContext *C, wmOperator *op)
+{
+ Scene *scene = CTX_data_scene(C);
+ Editing *ed = BKE_sequencer_editing_get(scene, false);
+ Sequence *seq;
+
+ int sfra = MAXFRAME;
+ int efra = -MAXFRAME;
+ bool selected = false;
+ const bool preview = RNA_boolean_get(op->ptr, "preview");
+
+ for (seq = ed->seqbasep->first; seq; seq = seq->next) {
+ if (seq->flag & SELECT) {
+ selected = true;
+ sfra = min_ii(sfra, seq->startdisp);
+ efra = max_ii(efra, seq->enddisp - 1);
+ }
+ }
+
+ if (!selected) {
+ BKE_report(op->reports, RPT_WARNING, "Select one or more strips");
+ return OPERATOR_CANCELLED;
+ }
+ else if (efra < 0) {
+ BKE_report(op->reports, RPT_ERROR, "Can't set a negative range");
+ return OPERATOR_CANCELLED;
+ }
+
+ if (preview) {
+ scene->r.flag |= SCER_PRV_RANGE;
+ scene->r.psfra = max_ii(0, sfra);
+ scene->r.pefra = efra;
+ }
+ else {
+ scene->r.flag &= ~SCER_PRV_RANGE;
+ scene->r.sfra = max_ii(0, sfra);
+ scene->r.efra = efra;
+ }
+
+ WM_event_add_notifier(C, NC_SCENE | ND_FRAME, scene);
+
+ return OPERATOR_FINISHED;
+}
+
+void SEQUENCER_OT_set_range_to_strips(struct wmOperatorType *ot)
+{
+ PropertyRNA *prop;
+
+ /* identifiers */
+ ot->name = "Set Range to Strips";
+ ot->idname = "SEQUENCER_OT_set_range_to_strips";
+ ot->description = "Set the frame range to the selected strips start and end";
+
+ /* api callbacks */
+ ot->exec = sequencer_set_range_to_strips_exec;
+ ot->poll = sequencer_edit_poll;
+
+ /* flags */
+ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+
+ prop = RNA_def_boolean(ot->srna, "preview", false, "Preview", "Set the preview range instead");
+ RNA_def_property_flag(prop, PROP_SKIP_SAVE);
+}