Bugfix [#21276] The Tab key is not working in the Graph Editor when
authorJoshua Leung <aligorith@gmail.com>
Wed, 22 Jun 2011 12:54:26 +0000 (12:54 +0000)
committerJoshua Leung <aligorith@gmail.com>
Wed, 22 Jun 2011 12:54:26 +0000 (12:54 +0000)
the list of animated curves is closed

At long last, this old bludger can be put out to pasture. I figured it
would involve some of the visibility-filtering stuff I added, but this
required a bit extra effort than anticipated.

source/blender/editors/animation/anim_channels_edit.c
source/blender/editors/animation/anim_filter.c
source/blender/editors/include/ED_anim_api.h

index fa52bdcb8543a0b758658333ce98973fcb61d3eb..e7edafdddf530b6aacaf7985911db54a575f8949 100644 (file)
@@ -1428,9 +1428,14 @@ static void setflag_anim_channels (bAnimContext *ac, short setting, short mode,
         * - but for Graph Editor, this gets used also from main region
         *   where hierarchy doesn't apply [#21276]
         */
-       // FIXME: graph editor case
-       // XXX: noduplis enabled so that results don't cancel, but will be problematic for some channels where only type differs
-       filter= (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_LIST_CHANNELS | ANIMFILTER_NODUPLIS);
+       if ((ac->spacetype == SPACE_IPO) && (ac->regiontype != RGN_TYPE_CHANNELS)) {
+               /* graph editor (case 2) */
+               filter= (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_CHANNELS | ANIMFILTER_CURVE_VISIBLE | ANIMFILTER_NODUPLIS);
+       }
+       else {
+               /* standard case */
+               filter= (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_LIST_CHANNELS | ANIMFILTER_NODUPLIS);
+       }
        if (onlysel) filter |= ANIMFILTER_SEL;
        ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype);
        
index 04d8aa87e14f978c31f951f1fd75e747567844ba..1f96778c36ea4be16814607179a2d40871ece9c3 100644 (file)
@@ -964,10 +964,13 @@ static size_t animdata_filter_action (bAnimContext *ac, ListBase *anim_data, bDo
                filter_gmode= filter_mode;
                
                /* if we care about the selection status of the channels, 
-                * but the group isn't expanded...
+                * but the group isn't expanded (1)...
+                *      (1) this only matters if we actually care about the hierarchy though,
+                *      so if we're not filtering for that, then we shouldn't care, otherwise
+                *      cases like [#21276] won't work properly
                 */
-               if ( (filter_mode & (ANIMFILTER_SEL|ANIMFILTER_UNSEL)) &&       /* care about selection status */
-                        (EXPANDED_AGRP(ac, agrp)==0) )                                                         /* group isn't expanded */
+               if ( ((filter_mode & ANIMFILTER_LIST_VISIBLE) && EXPANDED_AGRP(ac, agrp)==0) &&         /* care about hierarchy but group isn't expanded */
+                         (filter_mode & (ANIMFILTER_SEL|ANIMFILTER_UNSEL)) )                                                   /* care about selection status */        
                {
                        /* if the group itself isn't selected appropriately, we shouldn't consider it's children either */
                        if (ANIMCHANNEL_SELOK(SEL_AGRP(agrp)) == 0)
index 36e52fa8b8fc7397f14833667c0d4b2851fe4929..e8e179e8c84ad85922b00c53a827680e45379aef 100644 (file)
@@ -183,25 +183,6 @@ typedef enum eAnim_KeyType {
 
 /* ----------------- Filtering -------------------- */
 
-#if 0 /// old
-/* filtering flags  - under what circumstances should a channel be added */
-typedef enum eAnimFilter_Flags {
-       ANIMFILTER_VISIBLE              = (1<<0),       /* should channels be visible (in terms of hierarchy only) */
-       //ANIMFILTER_SEL                        = (1<<1),       /* should channels be selected */
-       //ANIMFILTER_UNSEL              = (1<<2),       /* should channels be NOT selected */
-       //ANIMFILTER_FOREDIT            = (1<<3),       /* does editable status matter */
-       ANIMFILTER_CURVESONLY   = (1<<4),       /* don't include summary-channels, etc. */ // double-check on how this goes for actedit
-       ANIMFILTER_CHANNELS             = (1<<5),       /* make list for interface drawing */
-       //ANIMFILTER_ACTGROUPED = (1<<6),       /* belongs to the active actiongroup */
-       ANIMFILTER_CURVEVISIBLE = (1<<7),       /* F-Curve is visible for editing/viewing in Graph Editor */
-       //ANIMFILTER_ACTIVE             = (1<<8),       /* channel should be 'active' */
-       //ANIMFILTER_ANIMDATA           = (1<<9),       /* only return the underlying AnimData blocks (not the tracks, etc.) data comes from */
-       ANIMFILTER_NLATRACKS    = (1<<10),      /* only include NLA-tracks */
-       //ANIMFILTER_SELEDIT            = (1<<11),      /* link editability with selected status */
-       //ANIMFILTER_NODUPLIS           = (1<<12),      /* duplicate entries for animation data attached to multi-user blocks must not occur */
-} eAnimFilter_Flags;
-#endif
-
 /* filtering flags  - under what circumstances should a channel be returned */
 // TODO: flag to just test if there's any channel inside worthy of being added - return 1 as soon as this is encountered, but don't add
 typedef enum eAnimFilter_Flags {