Revision: 17437
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=17437
Author:   aligorith
Date:     2008-11-13 04:44:14 +0100 (Thu, 13 Nov 2008)

Log Message:
-----------
AnimSys2: Dopesheet - Filtering Options

Added a few basic options for filtering what gets displayed in the Dopesheet - 
Selected, Non-Armature Objects, Armatures, Shapekeys, IPO blocks, Action 
blocks, Constraint Channels.

There are still a few things that will need corrections before everything works 
with this; namely, the keyframe summary for Object channels.

Modified Paths:
--------------
    branches/animsys2/source/blender/makesdna/DNA_action_types.h
    branches/animsys2/source/blender/src/drawaction.c
    branches/animsys2/source/blender/src/editaction.c
    branches/animsys2/source/blender/src/header_action.c

Modified: branches/animsys2/source/blender/makesdna/DNA_action_types.h
===================================================================
--- branches/animsys2/source/blender/makesdna/DNA_action_types.h        
2008-11-13 02:18:35 UTC (rev 17436)
+++ branches/animsys2/source/blender/makesdna/DNA_action_types.h        
2008-11-13 03:44:14 UTC (rev 17437)
@@ -246,11 +246,15 @@
 /* DopeSheet filter-flag */
 typedef enum DOPESHEET_FILTERFLAG {
                /* general filtering */
-       ADS_FILTER_ONLYSEL      = (1<<0),
+       ADS_FILTER_ONLYSEL                      = (1<<0),
        
                /* datatype-based filtering */
-       ADS_FILTER_OBONLY       = (1<<10),
-       ADS_FILTER_ARMONLY      = (1<<11),
+       ADS_FILTER_NOOBJ                        = (1<<4),
+       ADS_FILTER_NOARM                        = (1<<5),
+       ADS_FILTER_NOSHAPEKEYS          = (1<<6),
+       ADS_FILTER_NOIPOS                       = (1<<7),
+       ADS_FILTER_NOACTS                       = (1<<8),
+       ADS_FILTER_NOCONSTRAINTS        = (1<<9),
 } DOPESHEET_FILTERFLAG;        
 
 /* DopeSheet general flags */

Modified: branches/animsys2/source/blender/src/drawaction.c
===================================================================
--- branches/animsys2/source/blender/src/drawaction.c   2008-11-13 02:18:35 UTC 
(rev 17436)
+++ branches/animsys2/source/blender/src/drawaction.c   2008-11-13 03:44:14 UTC 
(rev 17437)
@@ -1855,6 +1855,8 @@
 {
        static ActKeysInc aki;
        
+       // FIXME: include special checks for dopesheet channels here... 
(dopesheet filtering could be added here too)
+       
        /* init data of static struct here */
        if ((curarea->spacetype == SPACE_ACTION) && NLA_ACTION_SCALED &&
                (G.saction->mode == SACTCONT_ACTION))

Modified: branches/animsys2/source/blender/src/editaction.c
===================================================================
--- branches/animsys2/source/blender/src/editaction.c   2008-11-13 02:18:35 UTC 
(rev 17436)
+++ branches/animsys2/source/blender/src/editaction.c   2008-11-13 03:44:14 UTC 
(rev 17437)
@@ -682,7 +682,7 @@
                return;
        
        /* IPO? */
-       if (ob->ipo) {
+       if ((ob->ipo) && !(ads->filterflag & ADS_FILTER_NOIPOS)) {
                IpoCurve *icu;
                
                /* include ipo-expand widget? */
@@ -707,7 +707,7 @@
        }
        
        /* Action? */
-       if (ob->action) {
+       if ((ob->action) && !(ads->filterflag & ADS_FILTER_NOACTS)) {
                /* include action-expand widget? */
                if ((filter_mode & ACTFILTER_CHANNELS) && !(filter_mode & 
(ACTFILTER_IPOKEYS|ACTFILTER_ONLYICU))) {
                        ale= make_new_actlistelem(ob->action, ACTTYPE_FILLACTD, 
base, ACTTYPE_OBJECT);
@@ -722,7 +722,7 @@
        }
        
        /* ShapeKeys? */
-       if (key) {
+       if ((key) && !(ads->filterflag & ADS_FILTER_NOSHAPEKEYS)) {
                /* include shapekey-expand widget? */
                if ((filter_mode & ACTFILTER_CHANNELS) && !(filter_mode & 
(ACTFILTER_IPOKEYS|ACTFILTER_ONLYICU))) {
                        ale= make_new_actlistelem(key, ACTTYPE_FILLSKED, base, 
ACTTYPE_OBJECT);
@@ -736,7 +736,7 @@
        }
        
        /* Constraint Channels? */
-       if (ob->constraintChannels.first) {
+       if ((ob->constraintChannels.first) && !(ads->filterflag & 
ADS_FILTER_NOCONSTRAINTS)) {
                bConstraintChannel *conchan;
                
                /* include constraint-expand widget? */
@@ -807,6 +807,42 @@
                                continue;
                        }
                        
+                       /* additionally, dopesheet filtering also affects what 
objects to consider */
+                       if (ads->filterflag) {
+                               if ( (ads->filterflag & ADS_FILTER_ONLYSEL) && 
!((base->flag & SELECT) || (base == sce->basact)) )  {
+                                       /* only selected should be shown */
+                                       continue;
+                               }
+                               if ((ads->filterflag & ADS_FILTER_NOARM) && 
(ob->type == OB_ARMATURE)) {
+                                       /* not showing armatures  */
+                                       continue;
+                               }
+                               if ((ads->filterflag & ADS_FILTER_NOOBJ) && 
(ob->type != OB_ARMATURE)) {
+                                       /* not showing objects that aren't 
armatures */
+                                       continue;
+                               }
+                               if (!(ob->action) && 
!(ob->constraintChannels.first) && !(key)) {
+                                       /* this object is only included for 
it's ipo, but those aren't being shown */
+                                       if ((ob->ipo) && (ads->filterflag & 
ADS_FILTER_NOIPOS))
+                                               continue;
+                               }
+                               if (!(ob->ipo) && 
!(ob->constraintChannels.first) && !(key)) {
+                                       /* this object is only included for 
it's action, but those aren't being shown */
+                                       if ((ob->action) && (ads->filterflag & 
ADS_FILTER_NOACTS))
+                                               continue;
+                               }
+                               if (!(ob->ipo) && !(ob->action) && !(key)) {
+                                       /* this object is only included for 
it's action, but those aren't being shown */
+                                       if ((ob->constraintChannels.first) && 
(ads->filterflag & ADS_FILTER_NOCONSTRAINTS))
+                                               continue;
+                               }
+                               if (!(ob->ipo) && !(ob->action) && 
!(ob->constraintChannels.first)) {
+                                       /* this object is only included for 
it's shapekeys, but those aren't being shown */
+                                       if ((key) && (ads->filterflag & 
ADS_FILTER_NOSHAPEKEYS))
+                                               continue;
+                               }
+                       }
+                       
                        /* since we're still here, this object should be usable 
*/
                        actdata_filter_dopesheet_ob(act_data, ads, base, 
filter_mode);
                }

Modified: branches/animsys2/source/blender/src/header_action.c
===================================================================
--- branches/animsys2/source/blender/src/header_action.c        2008-11-13 
02:18:35 UTC (rev 17436)
+++ branches/animsys2/source/blender/src/header_action.c        2008-11-13 
03:44:14 UTC (rev 17437)
@@ -1744,7 +1744,27 @@
        
        /* MODE-DEPENDENT DRAWING */
        if (G.saction->mode == SACTCONT_DOPESHEET) {
-               // TODO: maybe we need pinning/refresh cache at some point, but 
not yet!
+               /* FILTERING OPTIONS */
+               xco -= 10;
+               
+               //uiBlockBeginAlign(block);
+                       uiDefIconButBitI(block, TOG, ADS_FILTER_ONLYSEL, 
B_REDR, ICON_RESTRICT_SELECT_OFF,      (short)(xco+=XIC),0,XIC,YIC, 
&(G.saction->ads.filterflag), 0, 0, 0, 0, "Only display selected Objects");
+               //uiBlockEndAlign(block);
+               xco += 5;
+               
+               uiBlockBeginAlign(block);
+                       uiDefIconButBitI(block, TOGN, ADS_FILTER_NOOBJ, B_REDR, 
ICON_OBJECT,    (short)(xco+=XIC),0,XIC,YIC, &(G.saction->ads.filterflag), 0, 
0, 0, 0, "Display Non-Armature Objects");
+                       uiDefIconButBitI(block, TOGN, ADS_FILTER_NOARM, B_REDR, 
ICON_ARMATURE,  (short)(xco+=XIC),0,XIC,YIC, &(G.saction->ads.filterflag), 0, 
0, 0, 0, "Display Armature Objects");
+                       uiDefIconButBitI(block, TOGN, ADS_FILTER_NOSHAPEKEYS, 
B_REDR, ICON_EDIT,        (short)(xco+=XIC),0,XIC,YIC, 
&(G.saction->ads.filterflag), 0, 0, 0, 0, "Display ShapeKeys");
+               uiBlockEndAlign(block);
+               xco += 5;
+               
+               uiBlockBeginAlign(block);               
+                       uiDefIconButBitI(block, TOGN, ADS_FILTER_NOIPOS, 
B_REDR, ICON_IPO,      (short)(xco+=XIC),0,XIC,YIC, 
&(G.saction->ads.filterflag), 0, 0, 0, 0, "Display IPO's");
+                       uiDefIconButBitI(block, TOGN, ADS_FILTER_NOACTS, 
B_REDR, ICON_ACTION,   (short)(xco+=XIC),0,XIC,YIC, 
&(G.saction->ads.filterflag), 0, 0, 0, 0, "Display Actions");
+                       uiDefIconButBitI(block, TOGN, ADS_FILTER_NOCONSTRAINTS, 
B_REDR, ICON_CONSTRAINT,        (short)(xco+=XIC),0,XIC,YIC, 
&(G.saction->ads.filterflag), 0, 0, 0, 0, "Display Constraints");
+               uiBlockEndAlign(block);
+               xco += 30;
        }
        else if (G.saction->mode == SACTCONT_ACTION) { // not too appropriate 
for shapekeys atm...
                /* NAME ETC */
@@ -1761,7 +1781,6 @@
                xco += 8;
        }
        
-       
        /* COPY PASTE */
        uiBlockBeginAlign(block);
        if (curarea->headertype==HEADERTOP) {
@@ -1775,9 +1794,8 @@
        uiBlockEndAlign(block);
        xco += (XIC + 8);
        
-       
+       /* draw AUTOSNAP */
        if (G.saction->mode != SACTCONT_GPENCIL) {
-               /* draw AUTOSNAP */
                if (G.saction->flag & SACTION_DRAWTIME) {
                        uiDefButC(block, MENU, B_REDR,
                                        "Auto-Snap Keyframes %t|No Snap 
%x0|Second Step %x1|Nearest Second %x2|Nearest Marker %x3", 


_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to