Revision: 19598
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19598
Author:   aligorith
Date:     2009-04-08 14:35:38 +0200 (Wed, 08 Apr 2009)

Log Message:
-----------
Animation Editors: Restored operators to expand and collapse channels

There are two operators: one for expanding channels and one for collapsing 
them. These operators each have a property, "All", which specifies if they 
should expand/collapse all channels regardless of selection.

TODO:
* A few of the sub-object channel types still needs to be supported by this.

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/editors/animation/anim_channels.c

Modified: 
branches/blender2.5/blender/source/blender/editors/animation/anim_channels.c
===================================================================
--- 
branches/blender2.5/blender/source/blender/editors/animation/anim_channels.c    
    2009-04-08 12:01:23 UTC (rev 19597)
+++ 
branches/blender2.5/blender/source/blender/editors/animation/anim_channels.c    
    2009-04-08 12:35:38 UTC (rev 19598)
@@ -695,6 +695,7 @@
        ACHANNEL_SETTING_PROTECT = 1,
        ACHANNEL_SETTING_MUTE,
        ACHANNEL_SETTING_VISIBLE,
+       ACHANNEL_SETTING_EXPAND,
 } eAnimChannel_Settings;
 
 /* defines for setting animation-channel flags */
@@ -718,27 +719,46 @@
 /* Set/clear a particular flag (setting) for all selected + visible channels 
  *     setting: the setting to modify
  *     mode: eAnimChannels_SetFlag
+ *     onlysel: only selected channels get the flag set
  */
-static void setflag_anim_channels (bAnimContext *ac, short setting, short mode)
+static void setflag_anim_channels (bAnimContext *ac, short setting, short 
mode, short onlysel)
 {
        ListBase anim_data = {NULL, NULL};
        bAnimListElem *ale;
        int filter;
        
        /* filter data */
-       filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CHANNELS | ANIMFILTER_SEL);
+       filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CHANNELS);
+       if (onlysel) filter |= ANIMFILTER_SEL;
        ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype);
        
        /* affect selected channels */
        for (ale= anim_data.first; ale; ale= ale->next) {
                switch (ale->type) {
+                       case ANIMTYPE_OBJECT:
+                       {
+                               Base *base= (Base *)ale->data;
+                               Object *ob= base->object;
+                               
+                               if (setting == ACHANNEL_SETTING_EXPAND) {
+                                       // XXX - settings should really be 
moved out of ob->nlaflag
+                                       if (mode == ACHANNEL_SETFLAG_TOGGLE)    
ob->nlaflag ^= OB_ADS_COLLAPSED;
+                                       else if (mode == ACHANNEL_SETFLAG_ADD)  
ob->nlaflag &= ~OB_ADS_COLLAPSED;
+                                       else                                    
                                ob->nlaflag |= OB_ADS_COLLAPSED;
+                               }
+                       }
+                               break;
                        case ANIMTYPE_GROUP:
                        {
                                bActionGroup *agrp= (bActionGroup *)ale->data;
                                
-                               /* only 'protect' is available */
-                               if (setting == ACHANNEL_SETTING_PROTECT) {
-                                       ACHANNEL_SET_FLAG(agrp, mode, 
AGRP_PROTECTED);
+                               switch (setting) {
+                                       case ACHANNEL_SETTING_PROTECT:
+                                               ACHANNEL_SET_FLAG(agrp, mode, 
AGRP_PROTECTED);
+                                               break;
+                                       case ACHANNEL_SETTING_EXPAND:
+                                               ACHANNEL_SET_FLAG(agrp, mode, 
AGRP_EXPANDED);
+                                               break;
                                }
                        }
                                break;
@@ -746,31 +766,31 @@
                        {
                                FCurve *fcu= (FCurve *)ale->data;
                                
-                               /* mute */
-                               if (setting == ACHANNEL_SETTING_MUTE) {
-                                       ACHANNEL_SET_FLAG(fcu, mode, 
FCURVE_MUTED);
+                               switch (setting) {
+                                       case ACHANNEL_SETTING_MUTE:
+                                               ACHANNEL_SET_FLAG(fcu, mode, 
FCURVE_MUTED);
+                                               break;
+                                       case ACHANNEL_SETTING_PROTECT:
+                                               ACHANNEL_SET_FLAG(fcu, mode, 
FCURVE_PROTECTED);
+                                               break;
+                                       case ACHANNEL_SETTING_VISIBLE:
+                                               ACHANNEL_SET_FLAG(fcu, mode, 
FCURVE_VISIBLE);
+                                               break;
                                }
-                               else if (setting == ACHANNEL_SETTING_PROTECT) {
-                                       ACHANNEL_SET_FLAG(fcu, mode, 
FCURVE_PROTECTED);
-                               }
-                               else if (setting == ACHANNEL_SETTING_VISIBLE) {
-                                       ACHANNEL_SET_FLAG(fcu, mode, 
FCURVE_VISIBLE);
-                               }
                        }
                                break;
                        case ANIMTYPE_GPLAYER:
                        {
                                bGPDlayer *gpl= (bGPDlayer *)ale->data;
                                
-                               /* 'protect' and 'mute' */
-                               if (setting == ACHANNEL_SETTING_MUTE) {
-                                       /* mute */
-                                       ACHANNEL_SET_FLAG(gpl, mode, 
GP_LAYER_HIDE);
+                               switch (setting) {
+                                       case ACHANNEL_SETTING_MUTE:
+                                               ACHANNEL_SET_FLAG(gpl, mode, 
GP_LAYER_HIDE);
+                                               break;
+                                       case ACHANNEL_SETTING_PROTECT:
+                                               ACHANNEL_SET_FLAG(gpl, mode, 
GP_LAYER_LOCKED);
+                                               break;
                                }
-                               else if (setting == ACHANNEL_SETTING_PROTECT) {
-                                       /* protected */
-                                       ACHANNEL_SET_FLAG(gpl, mode, 
GP_LAYER_LOCKED);
-                               }
                        }
                                break;
                }
@@ -795,7 +815,7 @@
        setting= RNA_enum_get(op->ptr, "type");
        
        /* modify setting */
-       setflag_anim_channels(&ac, setting, mode);
+       setflag_anim_channels(&ac, setting, mode, 1);
        
        /* set notifier tha things have changed */
        ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_CHANNELS);
@@ -888,6 +908,88 @@
        RNA_def_enum(ot->srna, "type", prop_animchannel_settings_types, 
ACHANNEL_SETTING_PROTECT, "Type", "");
 }
 
+/* ********************** Expand Channels Operator *********************** */
+
+static int animchannels_expand_exec (bContext *C, wmOperator *op)
+{
+       bAnimContext ac;
+       short onlysel= 1;
+       
+       /* get editor data */
+       if (ANIM_animdata_get_context(C, &ac) == 0)
+               return OPERATOR_CANCELLED;
+               
+       /* only affect selected channels? */
+       if (RNA_boolean_get(op->ptr, "all"))
+               onlysel= 0;
+       
+       /* modify setting */
+       setflag_anim_channels(&ac, ACHANNEL_SETTING_EXPAND, 
ACHANNEL_SETFLAG_ADD, onlysel);
+       
+       /* set notifier that things have changed */
+       ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_CHANNELS);
+       
+       return OPERATOR_FINISHED;
+}
+
+void ANIM_OT_channels_expand (wmOperatorType *ot)
+{
+       /* identifiers */
+       ot->name= "Expand Channels";
+       ot->idname= "ANIM_OT_channels_expand";
+       
+       /* api callbacks */
+       ot->exec= animchannels_expand_exec;
+       ot->poll= ED_operator_areaactive;
+       
+       /* flags */
+       ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+       
+       /* props */
+       RNA_def_boolean(ot->srna, "all", 0, "All", "Expand all channels (not 
just selected ones)");
+}
+
+/* ********************** Collapse Channels Operator *********************** */
+
+static int animchannels_collapse_exec (bContext *C, wmOperator *op)
+{
+       bAnimContext ac;
+       short onlysel= 1;
+       
+       /* get editor data */
+       if (ANIM_animdata_get_context(C, &ac) == 0)
+               return OPERATOR_CANCELLED;
+               
+       /* only affect selected channels? */
+       if (RNA_boolean_get(op->ptr, "all"))
+               onlysel= 0;
+       
+       /* modify setting */
+       setflag_anim_channels(&ac, ACHANNEL_SETTING_EXPAND, 
ACHANNEL_SETFLAG_CLEAR, onlysel);
+       
+       /* set notifier that things have changed */
+       ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_CHANNELS);
+       
+       return OPERATOR_FINISHED;
+}
+
+void ANIM_OT_channels_collapse (wmOperatorType *ot)
+{
+       /* identifiers */
+       ot->name= "Collapse Channels";
+       ot->idname= "ANIM_OT_channels_collapse";
+       
+       /* api callbacks */
+       ot->exec= animchannels_collapse_exec;
+       ot->poll= ED_operator_areaactive;
+       
+       /* flags */
+       ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+       
+       /* props */
+       RNA_def_boolean(ot->srna, "all", 0, "All", "Collapse all channels (not 
just selected ones)");
+}
+
 /* ********************** Select All Operator *********************** */
 
 static int animchannels_deselectall_exec(bContext *C, wmOperator *op)
@@ -1389,11 +1491,11 @@
        return OPERATOR_FINISHED;
 }
  
-void ANIM_OT_channels_mouseclick (wmOperatorType *ot)
+void ANIM_OT_channels_click (wmOperatorType *ot)
 {
        /* identifiers */
        ot->name= "Mouse Click on Channels";
-       ot->idname= "ANIM_OT_channels_mouseclick";
+       ot->idname= "ANIM_OT_channels_click";
        
        /* api callbacks */
        ot->invoke= animchannels_mouseclick_invoke;
@@ -1414,7 +1516,7 @@
 {
        WM_operatortype_append(ANIM_OT_channels_select_all_toggle);
        WM_operatortype_append(ANIM_OT_channels_select_border);
-       WM_operatortype_append(ANIM_OT_channels_mouseclick);
+       WM_operatortype_append(ANIM_OT_channels_click);
        
        WM_operatortype_append(ANIM_OT_channels_setting_enable);
        WM_operatortype_append(ANIM_OT_channels_setting_disable);
@@ -1429,6 +1531,9 @@
        //WM_operatortype_append(ANIM_OT_channels_move_top);
        //WM_operatortype_append(ANIM_OT_channels_move_bottom);
        
+       WM_operatortype_append(ANIM_OT_channels_expand);
+       WM_operatortype_append(ANIM_OT_channels_collapse);
+       
        WM_operatortype_append(ANIM_OT_channels_visibility_toggle);
 }
 
@@ -1439,9 +1544,9 @@
        /* selection */
                /* click-select */
                // XXX for now, only leftmouse.... 
-       WM_keymap_add_item(keymap, "ANIM_OT_channels_mouseclick", LEFTMOUSE, 
KM_PRESS, 0, 0);
-       RNA_boolean_set(WM_keymap_add_item(keymap, 
"ANIM_OT_channels_mouseclick", LEFTMOUSE, KM_PRESS, KM_SHIFT, 0)->ptr, 
"extend", 1);
-       RNA_boolean_set(WM_keymap_add_item(keymap, 
"ANIM_OT_channels_mouseclick", LEFTMOUSE, KM_PRESS, KM_CTRL|KM_SHIFT, 0)->ptr, 
"children_only", 1);
+       WM_keymap_add_item(keymap, "ANIM_OT_channels_click", LEFTMOUSE, 
KM_PRESS, 0, 0);
+       RNA_boolean_set(WM_keymap_add_item(keymap, "ANIM_OT_channels_click", 
LEFTMOUSE, KM_PRESS, KM_SHIFT, 0)->ptr, "extend", 1);
+       RNA_boolean_set(WM_keymap_add_item(keymap, "ANIM_OT_channels_click", 
LEFTMOUSE, KM_PRESS, KM_CTRL|KM_SHIFT, 0)->ptr, "children_only", 1);
        
                /* deselect all */
        WM_keymap_add_item(keymap, "ANIM_OT_channels_select_all_toggle", AKEY, 
KM_PRESS, 0, 0);
@@ -1458,6 +1563,13 @@
        /* settings - specialised hotkeys */
        WM_keymap_add_item(keymap, "ANIM_OT_channels_editable_toggle", TABKEY, 
KM_PRESS, 0, 0);
        
+       /* expand/collapse */
+       WM_keymap_add_item(keymap, "ANIM_OT_channels_expand", PADPLUSKEY, 
KM_PRESS, 0, 0);
+       WM_keymap_add_item(keymap, "ANIM_OT_channels_collapse", PADMINUS, 
KM_PRESS, 0, 0);
+       
+       RNA_boolean_set(WM_keymap_add_item(keymap, "ANIM_OT_channels_expand", 
PADPLUSKEY, KM_PRESS, KM_CTRL, 0)->ptr, "all", 1);
+       RNA_boolean_set(WM_keymap_add_item(keymap, "ANIM_OT_channels_collapse", 
PADMINUS, KM_PRESS, KM_CTRL, 0)->ptr, "all", 1);
+       
        /* rearranging - actions only */
        //WM_keymap_add_item(keymap, "ANIM_OT_channels_move_up", PAGEUPKEY, 
KM_PRESS, KM_SHIFT, 0);
        //WM_keymap_add_item(keymap, "ANIM_OT_channels_move_down", PAGEDOWNKEY, 
KM_PRESS, KM_SHIFT, 0);


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to