Revision: 21964
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=21964
Author:   aligorith
Date:     2009-07-28 09:24:25 +0200 (Tue, 28 Jul 2009)

Log Message:
-----------
NLA: Mute/Disable NLA Playback 

Exposed toggles (defined on AnimData) that will mute the evaluation of that 
AnimData block's NLA stack. It's active action will then be the only thing that 
gets evaluated.

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/editors/animation/anim_filter.c
    branches/blender2.5/blender/source/blender/editors/space_nla/nla_channels.c
    branches/blender2.5/blender/source/blender/editors/space_nla/nla_draw.c

Modified: 
branches/blender2.5/blender/source/blender/editors/animation/anim_filter.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/animation/anim_filter.c  
2009-07-28 06:50:30 UTC (rev 21963)
+++ branches/blender2.5/blender/source/blender/editors/animation/anim_filter.c  
2009-07-28 07:24:25 UTC (rev 21964)
@@ -459,6 +459,8 @@
                                
                                ale->key_data= sce;
                                ale->datatype= ALE_SCE;
+                               
+                               ale->adt= BKE_animdata_from_id(data);
                        }
                                break;
                        case ANIMTYPE_OBJECT:
@@ -470,6 +472,8 @@
                                
                                ale->key_data= ob;
                                ale->datatype= ALE_OB;
+                               
+                               ale->adt= BKE_animdata_from_id(&ob->id);
                        }
                                break;
                        case ANIMTYPE_FILLACTD:
@@ -523,6 +527,8 @@
                                
                                ale->key_data= (adt) ? adt->action : NULL;
                                ale->datatype= ALE_ACT;
+                               
+                               ale->adt= BKE_animdata_from_id(data);
                        }
                                break;
                        case ANIMTYPE_DSLAM:
@@ -534,6 +540,8 @@
                                
                                ale->key_data= (adt) ? adt->action : NULL;
                                ale->datatype= ALE_ACT;
+                               
+                               ale->adt= BKE_animdata_from_id(data);
                        }
                                break;
                        case ANIMTYPE_DSCAM:
@@ -545,6 +553,8 @@
                                
                                ale->key_data= (adt) ? adt->action : NULL;
                                ale->datatype= ALE_ACT;
+                               
+                               ale->adt= BKE_animdata_from_id(data);
                        }
                                break;
                        case ANIMTYPE_DSCUR:
@@ -556,6 +566,8 @@
                                
                                ale->key_data= (adt) ? adt->action : NULL;
                                ale->datatype= ALE_ACT;
+                               
+                               ale->adt= BKE_animdata_from_id(data);
                        }
                                break;
                        case ANIMTYPE_DSSKEY:
@@ -567,6 +579,8 @@
                                
                                ale->key_data= (adt) ? adt->action : NULL;
                                ale->datatype= ALE_ACT;
+                               
+                               ale->adt= BKE_animdata_from_id(data);
                        }
                                break;
                        case ANIMTYPE_DSWOR:
@@ -578,6 +592,8 @@
                                
                                ale->key_data= (adt) ? adt->action : NULL;
                                ale->datatype= ALE_ACT;
+                               
+                               ale->adt= BKE_animdata_from_id(data);
                        }
                                break;
                        case ANIMTYPE_DSPART:
@@ -589,6 +605,8 @@
                                
                                ale->key_data= (adt) ? adt->action : NULL;
                                ale->datatype= ALE_ACT;
+                               
+                               ale->adt= BKE_animdata_from_id(data);
                        }
                                break;
                                

Modified: 
branches/blender2.5/blender/source/blender/editors/space_nla/nla_channels.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_nla/nla_channels.c 
2009-07-28 06:50:30 UTC (rev 21963)
+++ branches/blender2.5/blender/source/blender/editors/space_nla/nla_channels.c 
2009-07-28 07:24:25 UTC (rev 21964)
@@ -117,6 +117,7 @@
                case ANIMTYPE_SCENE:
                {
                        Scene *sce= (Scene *)ale->data;
+                       AnimData *adt= ale->data;
                        
                        if (x < 16) {
                                /* toggle expand */
@@ -124,6 +125,12 @@
                                
                                notifierFlags |= ND_ANIMCHAN_EDIT;
                        }
+                       else if ( (adt) && (x >= 
(NLACHANNEL_NAMEWIDTH-NLACHANNEL_BUTTON_WIDTH)) ) {
+                               /* toggle mute */
+                               adt->flag ^= ADT_NLA_EVAL_OFF;
+                               
+                               notifierFlags |= ND_ANIMCHAN_EDIT;
+                       }
                        else {
                                /* set selection status */
                                if (selectmode == SELECT_INVERT) {
@@ -144,12 +151,19 @@
                        Scene *sce= (Scene *)ads->source;
                        Base *base= (Base *)ale->data;
                        Object *ob= base->object;
+                       AnimData *adt= ale->adt;
                        
                        if (x < 16) {
                                /* toggle expand */
                                ob->nlaflag ^= OB_ADS_COLLAPSED; // XXX
                                notifierFlags |= ND_ANIMCHAN_EDIT;              
                
                        }
+                       else if ( (adt) && (x >= 
(NLACHANNEL_NAMEWIDTH-NLACHANNEL_BUTTON_WIDTH)) ) {
+                               /* toggle mute */
+                               adt->flag ^= ADT_NLA_EVAL_OFF;
+                               
+                               notifierFlags |= ND_ANIMCHAN_EDIT;
+                       }
                        else if (nlaedit_is_tweakmode_on(ac) == 0) {
                                /* set selection status */
                                if (selectmode == SELECT_INVERT) {
@@ -197,49 +211,112 @@
                case ANIMTYPE_DSMAT:
                {
                        Material *ma= (Material *)ale->data;
-                       ma->flag ^= MA_DS_EXPAND;
+                       AnimData *adt= ale->adt;
+                       
+                       if ( (adt) && (x >= 
(NLACHANNEL_NAMEWIDTH-NLACHANNEL_BUTTON_WIDTH)) ) {
+                               /* toggle mute */
+                               adt->flag ^= ADT_NLA_EVAL_OFF;
+                       } 
+                       else {
+                               /* toggle expand */
+                               ma->flag ^= MA_DS_EXPAND;
+                       }
                        notifierFlags |= ND_ANIMCHAN_EDIT;
                }
                        break;
                case ANIMTYPE_DSLAM:
                {
                        Lamp *la= (Lamp *)ale->data;
-                       la->flag ^= LA_DS_EXPAND;
+                       AnimData *adt= ale->adt;
+                       
+                       if ( (adt) && (x >= 
(NLACHANNEL_NAMEWIDTH-NLACHANNEL_BUTTON_WIDTH)) ) {
+                               /* toggle mute */
+                               adt->flag ^= ADT_NLA_EVAL_OFF;
+                       } 
+                       else {
+                               /* toggle expand */
+                               la->flag ^= LA_DS_EXPAND;
+                       }
                        notifierFlags |= ND_ANIMCHAN_EDIT;
                }
                        break;
                case ANIMTYPE_DSCAM:
                {
                        Camera *ca= (Camera *)ale->data;
-                       ca->flag ^= CAM_DS_EXPAND;
+                       AnimData *adt= ale->adt;
+                       
+                       if ( (adt) && (x >= 
(NLACHANNEL_NAMEWIDTH-NLACHANNEL_BUTTON_WIDTH)) ) {
+                               /* toggle mute */
+                               adt->flag ^= ADT_NLA_EVAL_OFF;
+                       } 
+                       else {
+                               /* toggle expand */
+                               ca->flag ^= CAM_DS_EXPAND;
+                       }
                        notifierFlags |= ND_ANIMCHAN_EDIT;
                }
                        break;
                case ANIMTYPE_DSCUR:
                {
                        Curve *cu= (Curve *)ale->data;
-                       cu->flag ^= CU_DS_EXPAND;
+                       AnimData *adt= ale->adt;
+                       
+                       if ( (adt) && (x >= 
(NLACHANNEL_NAMEWIDTH-NLACHANNEL_BUTTON_WIDTH)) ) {
+                               /* toggle mute */
+                               adt->flag ^= ADT_NLA_EVAL_OFF;
+                       } 
+                       else {
+                               /* toggle expand */
+                               cu->flag ^= CU_DS_EXPAND;
+                       }
                        notifierFlags |= ND_ANIMCHAN_EDIT;
                }
                        break;
                case ANIMTYPE_DSSKEY:
                {
                        Key *key= (Key *)ale->data;
-                       key->flag ^= KEYBLOCK_DS_EXPAND;
+                       AnimData *adt= ale->adt;
+                       
+                       if ( (adt) && (x >= 
(NLACHANNEL_NAMEWIDTH-NLACHANNEL_BUTTON_WIDTH)) ) {
+                               /* toggle mute */
+                               adt->flag ^= ADT_NLA_EVAL_OFF;
+                       } 
+                       else {
+                               /* toggle expand */
+                               key->flag ^= KEYBLOCK_DS_EXPAND;
+                       }
                        notifierFlags |= ND_ANIMCHAN_EDIT;
                }
                        break;
                case ANIMTYPE_DSWOR:
                {
                        World *wo= (World *)ale->data;
-                       wo->flag ^= WO_DS_EXPAND;
+                       AnimData *adt= ale->adt;
+                       
+                       if ( (adt) && (x >= 
(NLACHANNEL_NAMEWIDTH-NLACHANNEL_BUTTON_WIDTH)) ) {
+                               /* toggle mute */
+                               adt->flag ^= ADT_NLA_EVAL_OFF;
+                       } 
+                       else {
+                               /* toggle expand */
+                               wo->flag ^= WO_DS_EXPAND;
+                       }
                        notifierFlags |= ND_ANIMCHAN_EDIT;
                }
                        break;
                case ANIMTYPE_DSPART:
                {
                        ParticleSettings *part= (ParticleSettings *)ale->data;
-                       part->flag ^= PART_DS_EXPAND;
+                       AnimData *adt= ale->adt;
+                       
+                       if ( (adt) && (x >= 
(NLACHANNEL_NAMEWIDTH-NLACHANNEL_BUTTON_WIDTH)) ) {
+                               /* toggle mute */
+                               adt->flag ^= ADT_NLA_EVAL_OFF;
+                       } 
+                       else {
+                               /* toggle expand */
+                               part->flag ^= PART_DS_EXPAND;
+                       }
                        notifierFlags |= ND_ANIMCHAN_EDIT;
                }
                        break;

Modified: 
branches/blender2.5/blender/source/blender/editors/space_nla/nla_draw.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_nla/nla_draw.c     
2009-07-28 06:50:30 UTC (rev 21963)
+++ branches/blender2.5/blender/source/blender/editors/space_nla/nla_draw.c     
2009-07-28 07:24:25 UTC (rev 21964)
@@ -638,6 +638,7 @@
                                case ANIMTYPE_SCENE: /* scene */
                                {
                                        Scene *sce= (Scene *)ale->data;
+                                       AnimData *adt= ale->adt;
                                        
                                        group= 4;
                                        indent= 0;
@@ -649,6 +650,14 @@
                                                expand= ICON_TRIA_DOWN;
                                        else
                                                expand= ICON_TRIA_RIGHT;
+                                               
+                                       /* NLA evaluation on/off button */
+                                       if (adt) {
+                                               if (adt->flag & 
ADT_NLA_EVAL_OFF)
+                                                       mute = ICON_MUTE_IPO_ON;
+                                               else    
+                                                       mute = 
ICON_MUTE_IPO_OFF;
+                                       }
                                        
                                        sel = SEL_SCEC(sce);
                                        strcpy(name, sce->id.name+2);
@@ -658,6 +667,7 @@
                                {
                                        Base *base= (Base *)ale->data;
                                        Object *ob= base->object;
+                                       AnimData *adt= ale->adt;
                                        
                                        group= 4;
                                        indent= 0;
@@ -674,6 +684,14 @@
                                        else
                                                expand= ICON_TRIA_RIGHT;
                                        
+                                       /* NLA evaluation on/off button */
+                                       if (adt) {
+                                               if (adt->flag & 
ADT_NLA_EVAL_OFF)
+                                                       mute = ICON_MUTE_IPO_ON;
+                                               else    
+                                                       mute = 
ICON_MUTE_IPO_OFF;
+                                       }
+                                       
                                        sel = SEL_OBJC(base);
                                        strcpy(name, ob->id.name+2);
                                }
@@ -706,7 +724,7 @@
                                                expand = ICON_TRIA_DOWN;
                                        else
                                                expand = ICON_TRIA_RIGHT;
-                                               
+                                       
                                        strcpy(name, "Particles");
                                }
                                        break;
@@ -715,6 +733,7 @@
                                case ANIMTYPE_DSMAT: /* single material 
(dopesheet) expand widget */
                                {
                                        Material *ma = (Material *)ale->data;
+                                       AnimData *adt= ale->adt;
                                        
                                        group = 0;
                                        indent = 0;
@@ -725,6 +744,14 @@
                                                expand = ICON_TRIA_DOWN;
                                        else
                                                expand = ICON_TRIA_RIGHT;
+                                               
+                                       /* NLA evaluation on/off button */
+                                       if (adt) {
+                                               if (adt->flag & 
ADT_NLA_EVAL_OFF)
+                                                       mute = ICON_MUTE_IPO_ON;
+                                               else    
+                                                       mute = 
ICON_MUTE_IPO_OFF;
+                                       }
                                        
                                        strcpy(name, ma->id.name+2);
                                }
@@ -732,6 +759,7 @@
                                case ANIMTYPE_DSLAM: /* lamp (dopesheet) expand 
widget */
                                {
                                        Lamp *la = (Lamp *)ale->data;
+                                       AnimData *adt= ale->adt;
                                        
                                        group = 4;
                                        indent = 1;
@@ -741,6 +769,14 @@
                                                expand = ICON_TRIA_DOWN;
                                        else
                                                expand = ICON_TRIA_RIGHT;
+                                               
+                                       /* NLA evaluation on/off button */
+                                       if (adt) {
+                                               if (adt->flag & 
ADT_NLA_EVAL_OFF)
+                                                       mute = ICON_MUTE_IPO_ON;
+                                               else    
+                                                       mute = 
ICON_MUTE_IPO_OFF;
+                                       }
                                        
                                        strcpy(name, la->id.name+2);
                                }
@@ -748,6 +784,7 @@
                                case ANIMTYPE_DSCAM: /* camera (dopesheet) 
expand widget */
                                {
                                        Camera *ca = (Camera *)ale->data;
+                                       AnimData *adt= ale->adt;
                                        
                                        group = 4;
                                        indent = 1;
@@ -757,6 +794,14 @@
                                                expand = ICON_TRIA_DOWN;
                                        else
                                                expand = ICON_TRIA_RIGHT;
+                                               
+                                       /* NLA evaluation on/off button */
+                                       if (adt) {
+                                               if (adt->flag & 
ADT_NLA_EVAL_OFF)
+                                                       mute = ICON_MUTE_IPO_ON;
+                                               else    
+                                                       mute = 
ICON_MUTE_IPO_OFF;
+                                       }
                                        
                                        strcpy(name, ca->id.name+2);
                                }
@@ -764,6 +809,7 @@
                                case ANIMTYPE_DSCUR: /* curve (dopesheet) 
expand widget */
                                {
                                        Curve *cu = (Curve *)ale->data;
+                                       AnimData *adt= ale->adt;
                                        
                                        group = 4;
                                        indent = 1;
@@ -773,6 +819,14 @@
                                                expand = ICON_TRIA_DOWN;
                                        else
                                                expand = ICON_TRIA_RIGHT;
+                                               
+                                       /* NLA evaluation on/off button */
+                                       if (adt) {
+                                               if (adt->flag & 
ADT_NLA_EVAL_OFF)
+                                                       mute = ICON_MUTE_IPO_ON;
+                                               else    
+                                                       mute = 
ICON_MUTE_IPO_OFF;
+                                       }
                                        
                                        strcpy(name, cu->id.name+2);
                                }
@@ -780,16 +834,25 @@
                                case ANIMTYPE_DSSKEY: /* shapekeys (dopesheet) 
expand widget */
                                {
                                        Key *key= (Key *)ale->data;
+                                       AnimData *adt= ale->adt;
                                        
                                        group = 4;
                                        indent = 1;
-                                       special = ICON_SHAPEKEY_DATA; // XXX 
+                                       special = ICON_SHAPEKEY_DATA; 
                                        
                                        if (FILTER_SKE_OBJD(key))       
                                                expand = ICON_TRIA_DOWN;
                                        else
                                                expand = ICON_TRIA_RIGHT;
                                                

@@ Diff output truncated at 10240 characters. @@

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

Reply via email to