Animation Editors: Menu Tweaks
authorJoshua Leung <aligorith@gmail.com>
Thu, 22 Oct 2009 09:07:19 +0000 (09:07 +0000)
committerJoshua Leung <aligorith@gmail.com>
Thu, 22 Oct 2009 09:07:19 +0000 (09:07 +0000)
* Submenus displaying the options available for certain operators now will now show the hotkey for the operator on the menu entries.

* Added an option for mirroring keyframes in the Graph Editor which makes use of the new cursor

source/blender/editors/animation/anim_filter.c
source/blender/editors/animation/keyframes_edit.c
source/blender/editors/include/ED_keyframes_edit.h
source/blender/editors/space_action/action_header.c
source/blender/editors/space_graph/graph_draw.c
source/blender/editors/space_graph/graph_edit.c
source/blender/editors/space_graph/graph_header.c
source/blender/editors/space_graph/graph_intern.h
source/blender/editors/space_nla/nla_header.c

index 7414d2fdf85dfc7a0e783f6b599b4eb74f01d047..8c4f10fb2224e57e918555973a69dd09111322ac 100644 (file)
@@ -373,9 +373,18 @@ short ANIM_animdata_get_context (const bContext *C, bAnimContext *ac)
  *
  *     - id: ID block which should have an AnimData pointer following it immediately, to use
  *     - adtOk: line or block of code to execute for AnimData-blocks case (usually ANIMDATA_ADD_ANIMDATA)
- *     - nlaOk: line or block of code to execute for NLA case
+ *     - nlaOk: line or block of code to execute for NLA tracks+strips case
  *     - driversOk: line or block of code to execute for Drivers case
  *     - keysOk: line or block of code for Keyframes case
+ *
+ * The checks for the various cases are as follows:
+ *     0) top level: checks for animdata and also that all the F-Curves for the block will be visible
+ *     1) animdata check: for filtering animdata blocks only
+ *     2A) nla tracks: include animdata block's data as there are NLA tracks+strips there
+ *     2B) actions to convert to nla: include animdata block's data as there is an action that can be 
+ *             converted to a new NLA strip, and the filtering options allow this
+ *     3) drivers: include drivers from animdata block (for Drivers mode in Graph Editor)
+ *     4) normal keyframes: only when there is an active action
  */
 #define ANIMDATA_FILTER_CASES(id, adtOk, nlaOk, driversOk, keysOk) \
        {\
index 3b2830e9045790a873b5adf88ff75adab19bfc03..7373edb6841e4756d45a42c27b961d643bd7ec41 100644 (file)
@@ -669,6 +669,19 @@ static short mirror_bezier_marker(BeztEditData *bed, BezTriple *bezt)
        return 0;
 }
 
+static short mirror_bezier_value(BeztEditData *bed, BezTriple *bezt)
+{
+       float diff;
+       
+       /* value to mirror over is stored in the custom data -> first float value slot */
+       if (bezt->f2 & SELECT) {
+               diff= (bed->f1 - bezt->vec[1][1]);
+               bezt->vec[1][1]= (bed->f1 + diff);
+       }
+       
+       return 0;
+}
+
 /* Note: for markers case, need to set global vars (eww...) */
 // calchandles_fcurve
 BeztEditFunc ANIM_editkeyframes_mirror(short type)
@@ -682,6 +695,8 @@ BeztEditFunc ANIM_editkeyframes_mirror(short type)
                        return mirror_bezier_xaxis;
                case MIRROR_KEYS_MARKER: /* mirror over marker */
                        return mirror_bezier_marker; 
+               case MIRROR_KEYS_VALUE: /* mirror over given value */
+                       return mirror_bezier_value;
                default: /* just in case */
                        return mirror_bezier_yaxis;
                        break;
index 57a6c5fc7738cb681afd40fe13323e8726c2d9c5..4a0a3ee24dbc0cd3880eff2fc1e0a52dbc0dcb85 100644 (file)
@@ -82,6 +82,7 @@ typedef enum eEditKeyframes_Mirror {
        MIRROR_KEYS_YAXIS,
        MIRROR_KEYS_XAXIS,
        MIRROR_KEYS_MARKER,
+       MIRROR_KEYS_VALUE,
 } eEditKeyframes_Mirror;
 
 /* ************************************************ */
index aaf4b51c75e560470d86328080001285359ad45c..6ec106077f7dfe6e3fae4ca167126c04ddc0dda9 100644 (file)
@@ -167,62 +167,11 @@ static void act_edit_transformmenu(bContext *C, uiLayout *layout, void *arg_unus
        uiItemEnumO(layout, "Scale", 0, "TFM_OT_transform", "mode", TFM_TIME_SCALE);
 }
 
-static void act_edit_snapmenu(bContext *C, uiLayout *layout, void *arg_unused)
-{
-       uiLayoutSetOperatorContext(layout, WM_OP_EXEC_DEFAULT); 
-       uiItemEnumO(layout, NULL, 0, "ACT_OT_snap", "type", ACTKEYS_SNAP_CFRA);
-       uiItemEnumO(layout, NULL, 0, "ACT_OT_snap", "type", ACTKEYS_SNAP_NEAREST_FRAME);
-       uiItemEnumO(layout, NULL, 0, "ACT_OT_snap", "type", ACTKEYS_SNAP_NEAREST_SECOND);
-       uiItemEnumO(layout, NULL, 0, "ACT_OT_snap", "type", ACTKEYS_SNAP_NEAREST_MARKER);
-}
-
-static void act_edit_mirrormenu(bContext *C, uiLayout *layout, void *arg_unused)
-{
-       uiLayoutSetOperatorContext(layout, WM_OP_EXEC_DEFAULT);
-       uiItemEnumO(layout, NULL, 0, "ACT_OT_mirror", "type", ACTKEYS_MIRROR_CFRA);
-       uiItemEnumO(layout, NULL, 0, "ACT_OT_mirror", "type", ACTKEYS_MIRROR_YAXIS);
-       uiItemEnumO(layout, NULL, 0, "ACT_OT_mirror", "type", ACTKEYS_MIRROR_XAXIS);
-       uiItemEnumO(layout, NULL, 0, "ACT_OT_mirror", "type", ACTKEYS_MIRROR_MARKER);
-}
-
-static void act_edit_keytypesmenu(bContext *C, uiLayout *layout, void *arg_unused)
-{
-       uiLayoutSetOperatorContext(layout, WM_OP_EXEC_DEFAULT);
-       uiItemEnumO(layout, NULL, 0, "ACT_OT_keyframe_type", "type", BEZT_KEYTYPE_KEYFRAME);
-       uiItemEnumO(layout, NULL, 0, "ACT_OT_keyframe_type", "type", BEZT_KEYTYPE_BREAKDOWN);
-       uiItemEnumO(layout, NULL, 0, "ACT_OT_keyframe_type", "type", BEZT_KEYTYPE_EXTREME);
-}
-
-static void act_edit_handlesmenu(bContext *C, uiLayout *layout, void *arg_unused)
-{
-       uiLayoutSetOperatorContext(layout, WM_OP_EXEC_DEFAULT);
-       uiItemEnumO(layout, NULL, 0, "ACT_OT_handle_type", "type", HD_FREE);
-       uiItemEnumO(layout, NULL, 0, "ACT_OT_handle_type", "type", HD_AUTO);
-       uiItemEnumO(layout, NULL, 0, "ACT_OT_handle_type", "type", HD_VECT);
-       uiItemEnumO(layout, NULL, 0, "ACT_OT_handle_type", "type", HD_ALIGN);
-       uiItemEnumO(layout, NULL, 0, "ACT_OT_handle_type", "type", HD_AUTO_ANIM); // xxx?
-}
-
-static void act_edit_ipomenu(bContext *C, uiLayout *layout, void *arg_unused)
-{
-       uiLayoutSetOperatorContext(layout, WM_OP_EXEC_DEFAULT);
-       uiItemEnumO(layout, NULL, 0, "ACT_OT_interpolation_type", "type", BEZT_IPO_CONST);
-       uiItemEnumO(layout, NULL, 0, "ACT_OT_interpolation_type", "type", BEZT_IPO_LIN);
-       uiItemEnumO(layout, NULL, 0, "ACT_OT_interpolation_type", "type", BEZT_IPO_BEZ);
-}
-
-static void act_edit_expomenu(bContext *C, uiLayout *layout, void *arg_unused)
-{
-       uiLayoutSetOperatorContext(layout, WM_OP_EXEC_DEFAULT);
-       uiItemEnumO(layout, NULL, 0, "ACT_OT_extrapolation_type", "type", FCURVE_EXTRAPOLATE_CONSTANT);
-       uiItemEnumO(layout, NULL, 0, "ACT_OT_extrapolation_type", "type", FCURVE_EXTRAPOLATE_LINEAR);
-}
-
 static void act_editmenu(bContext *C, uiLayout *layout, void *arg_unused)
 {
        uiItemMenuF(layout, "Transform", 0, act_edit_transformmenu, NULL);
-       uiItemMenuF(layout, "Snap", 0, act_edit_snapmenu, NULL);
-       uiItemMenuF(layout, "Mirror", 0, act_edit_mirrormenu, NULL);
+       uiItemMenuEnumO(layout, "Snap", 0, "ACT_OT_snap", "type");
+       uiItemMenuEnumO(layout, "Mirror", 0, "ACT_OT_mirror", "type");
        
        uiItemS(layout);
        
@@ -235,10 +184,10 @@ static void act_editmenu(bContext *C, uiLayout *layout, void *arg_unused)
        
        uiItemS(layout);
        
-       uiItemMenuF(layout, "Keyframe Type", 0, act_edit_keytypesmenu, NULL);
-       uiItemMenuF(layout, "Handle Type", 0, act_edit_handlesmenu, NULL);
-       uiItemMenuF(layout, "Interpolation Mode", 0, act_edit_ipomenu, NULL);
-       uiItemMenuF(layout, "Extrapolation Mode", 0, act_edit_expomenu, NULL);
+       uiItemMenuEnumO(layout, "Keyframe Type", 0, "ACT_OT_keyframe_type", "type");
+       uiItemMenuEnumO(layout, "Handle Type", 0, "ACT_OT_handle_type", "type");
+       uiItemMenuEnumO(layout, "Interpolation Type", 0, "ACT_OT_interpolation_type", "type");
+       uiItemMenuEnumO(layout, "Extrapolation Type", 0, "ACT_OT_extrapolation_type", "type");
        
        uiItemS(layout);
        
index 5baa2372e0dcab65d1669b05dc1276dea76fffbd..052c5c4a743b8da943e7101646ec3d9d7e48b3ac 100644 (file)
@@ -87,9 +87,6 @@
 #include "UI_resources.h"
 #include "UI_view2d.h"
 
-/* XXX */
-extern void gl_round_box(int mode, float minx, float miny, float maxx, float maxy, float rad);
-
 /* *************************** */
 /* Utility Drawing Defines */
 
@@ -881,7 +878,7 @@ void graph_draw_curves (bAnimContext *ac, SpaceIpo *sipo, ARegion *ar, View2DGri
                                        draw_fcurve_vertices(sipo, ar, fcu);
                                }
                                else {
-                                       /* samples: should we only draw two indicators at either end as indicators? */
+                                       /* samples: only draw two indicators at either end as indicators */
                                        draw_fcurve_samples(sipo, ar, fcu);
                                }
                        }
index bcd57aa233f40f6304fc7f0d9e9590d8475bdd62..a87cc54fad927b3f9c397081bbe4d24e8e0b9bed 100644 (file)
@@ -1551,7 +1551,8 @@ void GRAPH_OT_snap (wmOperatorType *ot)
 
 /* defines for mirror keyframes tool */
 EnumPropertyItem prop_graphkeys_mirror_types[] = {
-       {GRAPHKEYS_MIRROR_CFRA, "CFRA", 0, "By Times over Current frame", ""},
+       {GRAPHKEYS_MIRROR_CFRA, "CFRA", 0, "By Times over Current Frame", ""},
+       {GRAPHKEYS_MIRROR_VALUE, "VALUE", 0, "By Values over Cursor Value", ""},
        {GRAPHKEYS_MIRROR_YAXIS, "YAXIS", 0, "By Times over Time=0", ""},
        {GRAPHKEYS_MIRROR_XAXIS, "XAXIS", 0, "By Values over Value=0", ""},
        {GRAPHKEYS_MIRROR_MARKER, "MARKER", 0, "By Times over First Selected Marker", ""},
@@ -1594,6 +1595,10 @@ static void mirror_graph_keys(bAnimContext *ac, short mode)
                else
                        return;
        }
+       else if (mode == GRAPHKEYS_MIRROR_VALUE) {
+               SpaceIpo *sipo= (SpaceIpo *)ac->sa->spacedata.first;
+               bed.f1= (sipo) ? sipo->cursorVal : 0.0f;
+       }
        
        /* filter data */
        filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CURVEVISIBLE| ANIMFILTER_FOREDIT | ANIMFILTER_CURVESONLY);
index 7385642801a4e8d0cb2ed8396730304c1360a5ad..63c95b18e2d299c77396319dc6462b89e1de1ee8 100644 (file)
@@ -159,55 +159,11 @@ static void graph_edit_transformmenu(bContext *C, uiLayout *layout, void *arg_un
        uiItemEnumO(layout, "Scale", 0, "TFM_OT_transform", "mode", TFM_TIME_SCALE);
 }
 
-static void graph_edit_snapmenu(bContext *C, uiLayout *layout, void *arg_unused)
-{
-       uiLayoutSetOperatorContext(layout, WM_OP_EXEC_DEFAULT);
-       uiItemEnumO(layout, NULL, 0, "GRAPH_OT_snap", "type", GRAPHKEYS_SNAP_CFRA);
-       uiItemEnumO(layout, NULL, 0, "GRAPH_OT_snap", "type", GRAPHKEYS_SNAP_VALUE);
-       uiItemEnumO(layout, NULL, 0, "GRAPH_OT_snap", "type", GRAPHKEYS_SNAP_NEAREST_FRAME);
-       uiItemEnumO(layout, NULL, 0, "GRAPH_OT_snap", "type", GRAPHKEYS_SNAP_NEAREST_SECOND);
-       uiItemEnumO(layout, NULL, 0, "GRAPH_OT_snap", "type", GRAPHKEYS_SNAP_NEAREST_MARKER);
-}
-
-static void graph_edit_mirrormenu(bContext *C, uiLayout *layout, void *arg_unused)
-{
-       uiLayoutSetOperatorContext(layout, WM_OP_EXEC_DEFAULT);
-       uiItemEnumO(layout, NULL, 0, "GRAPH_OT_mirror", "type", GRAPHKEYS_MIRROR_CFRA);
-       uiItemEnumO(layout, NULL, 0, "GRAPH_OT_mirror", "type", GRAPHKEYS_MIRROR_YAXIS);
-       uiItemEnumO(layout, NULL, 0, "GRAPH_OT_mirror", "type", GRAPHKEYS_MIRROR_XAXIS);
-       uiItemEnumO(layout, NULL, 0, "GRAPH_OT_mirror", "type", GRAPHKEYS_MIRROR_MARKER);
-}
-
-static void graph_edit_handlesmenu(bContext *C, uiLayout *layout, void *arg_unused)
-{
-       uiLayoutSetOperatorContext(layout, WM_OP_EXEC_DEFAULT);
-       uiItemEnumO(layout, NULL, 0, "GRAPH_OT_handle_type", "type", HD_FREE);
-       uiItemEnumO(layout, NULL, 0, "GRAPH_OT_handle_type", "type", HD_AUTO);
-       uiItemEnumO(layout, NULL, 0, "GRAPH_OT_handle_type", "type", HD_VECT);
-       uiItemEnumO(layout, NULL, 0, "GRAPH_OT_handle_type", "type", HD_ALIGN);
-       uiItemEnumO(layout, NULL, 0, "GRAPH_OT_handle_type", "type", HD_AUTO_ANIM); // xxx?
-}
-
-static void graph_edit_ipomenu(bContext *C, uiLayout *layout, void *arg_unused)
-{
-       uiLayoutSetOperatorContext(layout, WM_OP_EXEC_DEFAULT);
-       uiItemEnumO(layout, NULL, 0, "GRAPH_OT_interpolation_type", "type", BEZT_IPO_CONST);
-       uiItemEnumO(layout, NULL, 0, "GRAPH_OT_interpolation_type", "type", BEZT_IPO_LIN);
-       uiItemEnumO(layout, NULL, 0, "GRAPH_OT_interpolation_type", "type", BEZT_IPO_BEZ);
-}
-
-static void graph_edit_expomenu(bContext *C, uiLayout *layout, void *arg_unused)
-{
-       uiLayoutSetOperatorContext(layout, WM_OP_EXEC_DEFAULT);
-       uiItemEnumO(layout, NULL, 0, "GRAPH_OT_extrapolation_type", "type", FCURVE_EXTRAPOLATE_CONSTANT);
-       uiItemEnumO(layout, NULL, 0, "GRAPH_OT_extrapolation_type", "type", FCURVE_EXTRAPOLATE_LINEAR);
-}
-
 static void graph_editmenu(bContext *C, uiLayout *layout, void *arg_unused)
 {
        uiItemMenuF(layout, "Transform", 0, graph_edit_transformmenu, NULL);
-       uiItemMenuF(layout, "Snap", 0, graph_edit_snapmenu, NULL);
-       uiItemMenuF(layout, "Mirror", 0, graph_edit_mirrormenu, NULL);
+       uiItemMenuEnumO(layout, "Snap", 0, "GRAPH_OT_snap", "type");
+       uiItemMenuEnumO(layout, "Mirror", 0, "GRAPH_OT_mirror", "type");
        
        uiItemS(layout);
        
@@ -221,9 +177,9 @@ static void graph_editmenu(bContext *C, uiLayout *layout, void *arg_unused)
        
        uiItemS(layout);
        
-       uiItemMenuF(layout, "Handle Type", 0, graph_edit_handlesmenu, NULL);
-       uiItemMenuF(layout, "Interpolation Mode", 0, graph_edit_ipomenu, NULL);
-       uiItemMenuF(layout, "Extrapolation Mode", 0, graph_edit_expomenu, NULL);
+       uiItemMenuEnumO(layout, "Handle Type", 0, "GRAPH_OT_handle_type", "type");
+       uiItemMenuEnumO(layout, "Interpolation Mode", 0, "GRAPH_OT_interpolation_type", "type");
+       uiItemMenuEnumO(layout, "Extrapolation Mode", 0, "GRAPH_OT_extrapolation_type", "type");
        
        uiItemS(layout);
        
index f03c9ece26214ea38a55a9b6605133d4835052cc..1e0f66751f083a78b4bb979b790891fd617d77de 100644 (file)
@@ -130,6 +130,7 @@ enum {
        GRAPHKEYS_MIRROR_YAXIS,
        GRAPHKEYS_MIRROR_XAXIS,
        GRAPHKEYS_MIRROR_MARKER,
+       GRAPHKEYS_MIRROR_VALUE,
 } eGraphKeys_Mirror_Mode;
 
 /* ----------- */
index be0b4381f00d332e9cee181882dbdeb9f966bab7..a2524a1b2dc0a396ec3ae2f063e6e81849744f03 100644 (file)
@@ -139,20 +139,12 @@ static void nla_edit_transformmenu(bContext *C, uiLayout *layout, void *arg_unus
        uiItemEnumO(layout, "Scale", 0, "TFM_OT_transform", "mode", TFM_TIME_SCALE);
 }
 
-static void nla_edit_snapmenu(bContext *C, uiLayout *layout, void *arg_unused)
-{
-       uiItemEnumO(layout, NULL, 0, "NLA_OT_snap", "type", NLAEDIT_SNAP_CFRA);
-       uiItemEnumO(layout, NULL, 0, "NLA_OT_snap", "type", NLAEDIT_SNAP_NEAREST_FRAME);
-       uiItemEnumO(layout, NULL, 0, "NLA_OT_snap", "type", NLAEDIT_SNAP_NEAREST_SECOND);
-       uiItemEnumO(layout, NULL, 0, "NLA_OT_snap", "type", NLAEDIT_SNAP_NEAREST_MARKER);
-}
-
 static void nla_editmenu(bContext *C, uiLayout *layout, void *arg_unused)
 {
        Scene *scene= CTX_data_scene(C);
        
        uiItemMenuF(layout, "Transform", 0, nla_edit_transformmenu, NULL);
-       uiItemMenuF(layout, "Snap", 0, nla_edit_snapmenu, NULL);
+       uiItemMenuEnumO(layout, "Snap", 0, "NLA_OT_snap", "type");
        
        uiItemS(layout);
        
@@ -248,13 +240,13 @@ void nla_header_buttons(const bContext *C, ARegion *ar)
        /* auto-snap selector */
        if (snla->flag & SNLA_DRAWTIME) {
                uiDefButS(block, MENU, B_REDR,
-                               "Auto-Snap Keyframes %t|No Time-Snap %x0|Nearest Second %x2|Nearest Marker %x3", 
+                               "Auto-Snap %t|No Time-Snap %x0|Nearest Second %x2|Nearest Marker %x3", 
                                xco,yco,90,YIC, &snla->autosnap, 0, 1, 0, 0, 
                                "Auto-snapping mode for times when transforming");
        }
        else {
                uiDefButS(block, MENU, B_REDR, 
-                               "Auto-Snap Keyframes %t|No Time-Snap %x0|Nearest Frame %x2|Nearest Marker %x3", 
+                               "Auto-Snap %t|No Time-Snap %x0|Nearest Frame %x2|Nearest Marker %x3", 
                                xco,yco,90,YIC, &snla->autosnap, 0, 1, 0, 0, 
                                "Auto-snapping mode for times when transforming");
        }