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:
authorJoshua Leung <aligorith@gmail.com>2011-07-20 04:36:28 +0400
committerJoshua Leung <aligorith@gmail.com>2011-07-20 04:36:28 +0400
commit57fe73b3ac6ba6d7a0c3903318d9f0675e18338a (patch)
tree89b6d353e6296a08979442d5e6bed888d5766087 /source/blender/editors
parentddbfcacfa074ed301df3dd5e90a9d717ef56c352 (diff)
View All/Selected tools for NLA Editor
Diffstat (limited to 'source/blender/editors')
-rw-r--r--source/blender/editors/space_action/action_edit.c1
-rw-r--r--source/blender/editors/space_nla/nla_edit.c131
-rw-r--r--source/blender/editors/space_nla/nla_intern.h3
-rw-r--r--source/blender/editors/space_nla/nla_ops.c9
4 files changed, 144 insertions, 0 deletions
diff --git a/source/blender/editors/space_action/action_edit.c b/source/blender/editors/space_action/action_edit.c
index 70e7b483140..40d73a59a42 100644
--- a/source/blender/editors/space_action/action_edit.c
+++ b/source/blender/editors/space_action/action_edit.c
@@ -234,6 +234,7 @@ static void get_keyframe_extents (bAnimContext *ac, float *min, float *max, cons
int filter;
/* get data to filter, from Action or Dopesheet */
+ // XXX: what is sel doing here?!
filter= (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_SEL /*| ANIMFILTER_CURVESONLY*/ | ANIMFILTER_NODUPLIS);
ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype);
diff --git a/source/blender/editors/space_nla/nla_edit.c b/source/blender/editors/space_nla/nla_edit.c
index 988ff49f20e..eb22495c977 100644
--- a/source/blender/editors/space_nla/nla_edit.c
+++ b/source/blender/editors/space_nla/nla_edit.c
@@ -68,6 +68,7 @@
#include "UI_interface.h"
#include "UI_resources.h"
+#include "UI_view2d.h"
#include "nla_intern.h" // own include
#include "nla_private.h" // FIXME... maybe this shouldn't be included?
@@ -236,6 +237,136 @@ void NLA_OT_tweakmode_exit (wmOperatorType *ot)
}
/* *********************************************** */
+/* NLA Strips Range Stuff */
+
+/* *************************** Calculate Range ************************** */
+
+/* Get the min/max strip extents */
+static void get_nlastrip_extents (bAnimContext *ac, float *min, float *max, const short onlySel)
+{
+ ListBase anim_data = {NULL, NULL};
+ bAnimListElem *ale;
+ int filter;
+
+ /* get data to filter */
+ filter= (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_NODUPLIS);
+ ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype);
+
+ /* set large values to try to override */
+ *min= 999999999.0f;
+ *max= -999999999.0f;
+
+ /* check if any channels to set range with */
+ if (anim_data.first) {
+ /* go through channels, finding max extents */
+ for (ale= anim_data.first; ale; ale= ale->next) {
+ NlaTrack *nlt = (NlaTrack *)ale->data;
+ NlaStrip *strip;
+
+ for (strip = nlt->strips.first; strip; strip = strip->next) {
+ /* only consider selected strips? */
+ if ((onlySel == 0) || (strip->flag & NLASTRIP_FLAG_SELECT)) {
+ /* extend range if appropriate */
+ *min = MIN2(*min, strip->start);
+ *max = MAX2(*max, strip->end);
+ }
+ }
+ }
+
+ /* free memory */
+ BLI_freelistN(&anim_data);
+ }
+ else {
+ /* set default range */
+ if (ac->scene) {
+ *min= (float)ac->scene->r.sfra;
+ *max= (float)ac->scene->r.efra;
+ }
+ else {
+ *min= -5;
+ *max= 100;
+ }
+ }
+}
+
+/* ****************** View-All Operator ****************** */
+
+static int nlaedit_viewall(bContext *C, const short onlySel)
+{
+ bAnimContext ac;
+ View2D *v2d;
+ float extra;
+
+ /* get editor data */
+ if (ANIM_animdata_get_context(C, &ac) == 0)
+ return OPERATOR_CANCELLED;
+ v2d= &ac.ar->v2d;
+
+ /* set the horizontal range, with an extra offset so that the extreme keys will be in view */
+ get_nlastrip_extents(&ac, &v2d->cur.xmin, &v2d->cur.xmax, onlySel);
+
+ extra= 0.1f * (v2d->cur.xmax - v2d->cur.xmin);
+ v2d->cur.xmin -= extra;
+ v2d->cur.xmax += extra;
+
+ /* set vertical range */
+ v2d->cur.ymax= 0.0f;
+ v2d->cur.ymin= (float)-(v2d->mask.ymax - v2d->mask.ymin);
+
+ /* do View2D syncing */
+ UI_view2d_sync(CTX_wm_screen(C), CTX_wm_area(C), v2d, V2D_LOCK_COPY);
+
+ /* just redraw this view */
+ ED_area_tag_redraw(CTX_wm_area(C));
+
+ return OPERATOR_FINISHED;
+}
+
+/* ......... */
+
+static int nlaedit_viewall_exec(bContext *C, wmOperator *UNUSED(op))
+{
+ /* whole range */
+ return nlaedit_viewall(C, FALSE);
+}
+
+static int nlaedit_viewsel_exec(bContext *C, wmOperator *UNUSED(op))
+{
+ /* only selected */
+ return nlaedit_viewall(C, TRUE);
+}
+
+void NLA_OT_view_all (wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name= "View All";
+ ot->idname= "NLA_OT_view_all";
+ ot->description= "Reset viewable area to show full strips range";
+
+ /* api callbacks */
+ ot->exec= nlaedit_viewall_exec;
+ ot->poll= ED_operator_nla_active;
+
+ /* flags */
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+}
+
+void NLA_OT_view_selected (wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name= "View Selected";
+ ot->idname= "NLA_OT_view_selected";
+ ot->description= "Reset viewable area to show selected strips range";
+
+ /* api callbacks */
+ ot->exec= nlaedit_viewsel_exec;
+ ot->poll= ED_operator_nla_active;
+
+ /* flags */
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+}
+
+/* *********************************************** */
/* NLA Editing Operations (Constructive/Destructive) */
/* ******************** Add Action-Clip Operator ***************************** */
diff --git a/source/blender/editors/space_nla/nla_intern.h b/source/blender/editors/space_nla/nla_intern.h
index dba7fca8d0f..43ef5beb216 100644
--- a/source/blender/editors/space_nla/nla_intern.h
+++ b/source/blender/editors/space_nla/nla_intern.h
@@ -94,6 +94,9 @@ void NLA_OT_tweakmode_exit(wmOperatorType *ot);
/* --- */
+void NLA_OT_view_all(wmOperatorType *ot);
+void NLA_OT_view_selected(wmOperatorType *ot);
+
void NLA_OT_actionclip_add(wmOperatorType *ot);
void NLA_OT_transition_add(wmOperatorType *ot);
diff --git a/source/blender/editors/space_nla/nla_ops.c b/source/blender/editors/space_nla/nla_ops.c
index ea8e8961f02..38e12c46060 100644
--- a/source/blender/editors/space_nla/nla_ops.c
+++ b/source/blender/editors/space_nla/nla_ops.c
@@ -130,6 +130,10 @@ void nla_operatortypes(void)
WM_operatortype_append(NLA_OT_select_all_toggle);
WM_operatortype_append(NLA_OT_select_leftright);
+ /* view */
+ WM_operatortype_append(NLA_OT_view_all);
+ WM_operatortype_append(NLA_OT_view_selected);
+
/* edit */
WM_operatortype_append(NLA_OT_tweakmode_enter);
WM_operatortype_append(NLA_OT_tweakmode_exit);
@@ -212,6 +216,11 @@ static void nla_keymap_main (wmKeyConfig *keyconf, wmKeyMap *keymap)
WM_keymap_add_item(keymap, "NLA_OT_select_border", BKEY, KM_PRESS, 0, 0);
RNA_boolean_set(WM_keymap_add_item(keymap, "NLA_OT_select_border", BKEY, KM_PRESS, KM_ALT, 0)->ptr, "axis_range", 1);
+ /* view*/
+ /* auto-set range */
+ //WM_keymap_add_item(keymap, "NLA_OT_previewrange_set", PKEY, KM_PRESS, KM_CTRL|KM_ALT, 0);
+ WM_keymap_add_item(keymap, "NLA_OT_view_all", HOMEKEY, KM_PRESS, 0, 0);
+ WM_keymap_add_item(keymap, "NLA_OT_view_selected", PADPERIOD, KM_PRESS, 0, 0);
/* editing */
/* tweakmode