Revision: 23502
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=23502
Author:   aligorith
Date:     2009-09-27 06:22:04 +0200 (Sun, 27 Sep 2009)

Log Message:
-----------
2.5 - Assorted Animation UI/Editing Tweaks

Main Feature:
* It is now possible to choose which AnimData block is the 'active' one for 
editing, and/or select them too. AnimData blocks are generally the dark blue 
and lighter-blue expanders (i.e. Scene, Object, Camera, Lamp, Curve, Armature, 
etc.)

* Objects are no longer selected/deselected when AKEY is used to toggle 
selection of channels. This was getting a bit annoying. 

* Following on from selection of AnimData blocks, it is now possible to 
select/make active an AnimData block in the animation editors, and change the 
active action for that block via the 'Animation Data' panel in NLA Editor's 
properties region.
--> Be aware that user-counts are not totally handled correctly there yet, so 
some funky behaviour might be seen...
--> It is possible to assign a new action, or to assign an existing one, 
allowing to switch between actions as in the past with Actions/IPO Editors...

Other tweaks:
* Some code tweaks towards making the 'Euler Filter' feature for Graph Editor 
working sometime soon
* Added some backend code for snapping the values of keyframes to a single 
value. Still need to work out some UI for it though.
* Shuffled the code for ACT_OT_new() around, and removed the poll() callback so 
that it worked in NLA too.
* Fixed some more notifier bugs with deleting bones and a few other editmode 
operations for Armatures.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/anim_sys.c
    trunk/blender/source/blender/editors/animation/anim_channels_defines.c
    trunk/blender/source/blender/editors/animation/anim_channels_edit.c
    trunk/blender/source/blender/editors/animation/anim_filter.c
    trunk/blender/source/blender/editors/animation/keyframes_edit.c
    trunk/blender/source/blender/editors/armature/editarmature.c
    trunk/blender/source/blender/editors/include/ED_keyframes_edit.h
    trunk/blender/source/blender/editors/space_action/action_edit.c
    trunk/blender/source/blender/editors/space_graph/graph_draw.c
    trunk/blender/source/blender/editors/space_graph/graph_edit.c
    trunk/blender/source/blender/editors/space_graph/graph_intern.h
    trunk/blender/source/blender/editors/space_graph/graph_utils.c
    trunk/blender/source/blender/editors/space_nla/nla_buttons.c
    trunk/blender/source/blender/editors/space_nla/nla_channels.c
    trunk/blender/source/blender/makesdna/DNA_anim_types.h
    trunk/blender/source/blender/makesrna/intern/rna_animation.c
    trunk/blender/source/blender/windowmanager/intern/wm_event_system.c

Modified: trunk/blender/source/blender/blenkernel/intern/anim_sys.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/anim_sys.c   2009-09-27 
00:58:38 UTC (rev 23501)
+++ trunk/blender/source/blender/blenkernel/intern/anim_sys.c   2009-09-27 
04:22:04 UTC (rev 23502)
@@ -244,6 +244,8 @@
 /* Check if some given RNA Path needs fixing - free the given path and set a 
new one as appropriate */
 static char *rna_path_rename_fix (ID *owner_id, PointerRNA *modPtr, char 
*newName, char *oldpath)
 {
+       
+       
        return oldpath; // FIXME!!!
 }
 
@@ -264,7 +266,7 @@
                        
                        /* driver targets */
                        for (dtar= driver->targets.first; dtar; 
dtar=dtar->next) {
-                               dtat->rna_path= rna_path_rename_fix(owner_id, 
modPtr, newName, dtar->rna_path);
+                               dtat->rna_path= rna_path_rename_fix(dtar->id, 
modPtr, newName, dtar->rna_path);
                        }
                }
        }

Modified: trunk/blender/source/blender/editors/animation/anim_channels_defines.c
===================================================================
--- trunk/blender/source/blender/editors/animation/anim_channels_defines.c      
2009-09-27 00:58:38 UTC (rev 23501)
+++ trunk/blender/source/blender/editors/animation/anim_channels_defines.c      
2009-09-27 04:22:04 UTC (rev 23502)
@@ -762,7 +762,7 @@
        
        switch (setting) {
                case ACHANNEL_SETTING_SELECT: /* selected */
-                       return ACT_SELECTED;
+                       return ADT_UI_SELECTED;
                        
                case ACHANNEL_SETTING_EXPAND: /* expanded */
                        *neg= 1;
@@ -777,13 +777,18 @@
 static void *acf_fillactd_setting_ptr(bAnimListElem *ale, int setting, short 
*type)
 {
        bAction *act= (bAction *)ale->data;
+       AnimData *adt= ale->adt;
        
        /* clear extra return data first */
        *type= 0;
        
        switch (setting) {
                case ACHANNEL_SETTING_SELECT: /* selected */
-                       GET_ACF_FLAG_PTR(act->flag);
+                       if (adt) {
+                               GET_ACF_FLAG_PTR(adt->flag);
+                       }
+                       else
+                               return 0;
                        
                case ACHANNEL_SETTING_EXPAND: /* expanded */
                        GET_ACF_FLAG_PTR(act->flag);
@@ -1001,6 +1006,9 @@
                case ACHANNEL_SETTING_VISIBLE: /* visible (only in Graph 
Editor) */
                        *neg= 1;
                        return ADT_CURVES_NOT_VISIBLE;
+                       
+               case ACHANNEL_SETTING_SELECT: /* selected */
+                       return ADT_UI_SELECTED;
                
                default: /* unsupported */
                        return 0;
@@ -1019,6 +1027,7 @@
                case ACHANNEL_SETTING_EXPAND: /* expanded */
                        GET_ACF_FLAG_PTR(ma->flag);
                        
+               case ACHANNEL_SETTING_SELECT: /* selected */
                case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */
                case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor 
only) */
                        if (ma->adt)
@@ -1070,6 +1079,9 @@
                case ACHANNEL_SETTING_VISIBLE: /* visible (only in Graph 
Editor) */
                        *neg= 1;
                        return ADT_CURVES_NOT_VISIBLE;
+                       
+               case ACHANNEL_SETTING_SELECT: /* selected */
+                       return ADT_UI_SELECTED;
                
                default: /* unsupported */
                        return 0;
@@ -1088,6 +1100,7 @@
                case ACHANNEL_SETTING_EXPAND: /* expanded */
                        GET_ACF_FLAG_PTR(la->flag);
                        
+               case ACHANNEL_SETTING_SELECT: /* selected */
                case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */
                case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor 
only) */
                        if (la->adt)
@@ -1139,6 +1152,9 @@
                case ACHANNEL_SETTING_VISIBLE: /* visible (only in Graph 
Editor) */
                        *neg= 1;
                        return ADT_CURVES_NOT_VISIBLE;
+                       
+               case ACHANNEL_SETTING_SELECT: /* selected */
+                       return ADT_UI_SELECTED;
                
                default: /* unsupported */
                        return 0;
@@ -1157,6 +1173,7 @@
                case ACHANNEL_SETTING_EXPAND: /* expanded */
                        GET_ACF_FLAG_PTR(ca->flag);
                        
+               case ACHANNEL_SETTING_SELECT: /* selected */
                case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */
                case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor 
only) */
                        if (ca->adt)
@@ -1208,6 +1225,9 @@
                case ACHANNEL_SETTING_VISIBLE: /* visible (only in Graph 
Editor) */
                        *neg= 1;
                        return ADT_CURVES_NOT_VISIBLE;
+                       
+               case ACHANNEL_SETTING_SELECT: /* selected */
+                       return ADT_UI_SELECTED;
                
                default: /* unsupported */
                        return 0;
@@ -1226,6 +1246,7 @@
                case ACHANNEL_SETTING_EXPAND: /* expanded */
                        GET_ACF_FLAG_PTR(cu->flag);
                        
+               case ACHANNEL_SETTING_SELECT: /* selected */
                case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */
                case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor 
only) */
                        if (cu->adt)
@@ -1277,6 +1298,9 @@
                case ACHANNEL_SETTING_VISIBLE: /* visible (only in Graph 
Editor) */
                        *neg= 1;
                        return ADT_CURVES_NOT_VISIBLE;
+                       
+               case ACHANNEL_SETTING_SELECT: /* selected */
+                       return ADT_UI_SELECTED;
                
                default: /* unsupported */
                        return 0;
@@ -1295,6 +1319,7 @@
                case ACHANNEL_SETTING_EXPAND: /* expanded */
                        GET_ACF_FLAG_PTR(key->flag);
                        
+               case ACHANNEL_SETTING_SELECT: /* selected */
                case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */
                case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor 
only) */
                        if (key->adt)
@@ -1346,6 +1371,9 @@
                case ACHANNEL_SETTING_VISIBLE: /* visible (only in Graph 
Editor) */
                        *neg= 1;
                        return ADT_CURVES_NOT_VISIBLE;
+                       
+               case ACHANNEL_SETTING_SELECT: /* selected */
+                       return ADT_UI_SELECTED;
                
                default: /* unsupported */
                        return 0;
@@ -1364,6 +1392,7 @@
                case ACHANNEL_SETTING_EXPAND: /* expanded */
                        GET_ACF_FLAG_PTR(wo->flag);
                        
+               case ACHANNEL_SETTING_SELECT: /* selected */
                case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */
                case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor 
only) */
                        if (wo->adt)
@@ -1415,6 +1444,9 @@
                case ACHANNEL_SETTING_VISIBLE: /* visible (only in Graph 
Editor) */
                        *neg= 1;
                        return ADT_CURVES_NOT_VISIBLE;
+                       
+               case ACHANNEL_SETTING_SELECT: /* selected */
+                       return ADT_UI_SELECTED;
                
                default: /* unsupported */
                        return 0;
@@ -1433,6 +1465,7 @@
                case ACHANNEL_SETTING_EXPAND: /* expanded */
                        GET_ACF_FLAG_PTR(part->flag);
                        
+               case ACHANNEL_SETTING_SELECT: /* selected */
                case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */
                case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor 
only) */
                        if (part->adt)
@@ -1485,6 +1518,9 @@
                        *neg= 1;
                        return ADT_CURVES_NOT_VISIBLE;
                
+               case ACHANNEL_SETTING_SELECT: /* selected */
+                       return ADT_UI_SELECTED;
+               
                default: /* unsupported */
                        return 0;
        }
@@ -1502,6 +1538,7 @@
                case ACHANNEL_SETTING_EXPAND: /* expanded */
                        GET_ACF_FLAG_PTR(mb->flag);
                        
+               case ACHANNEL_SETTING_SELECT: /* selected */
                case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */
                case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor 
only) */
                        if (mb->adt)
@@ -1553,6 +1590,9 @@
                case ACHANNEL_SETTING_VISIBLE: /* visible (only in Graph 
Editor) */
                        *neg= 1;
                        return ADT_CURVES_NOT_VISIBLE;
+                       
+               case ACHANNEL_SETTING_SELECT: /* selected */
+                       return ADT_UI_SELECTED;
                
                default: /* unsupported */
                        return 0;
@@ -1571,6 +1611,7 @@
                case ACHANNEL_SETTING_EXPAND: /* expanded */
                        GET_ACF_FLAG_PTR(arm->flag);
                        
+               case ACHANNEL_SETTING_SELECT: /* selected */
                case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */
                case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor 
only) */
                        if (arm->adt)

Modified: trunk/blender/source/blender/editors/animation/anim_channels_edit.c
===================================================================
--- trunk/blender/source/blender/editors/animation/anim_channels_edit.c 
2009-09-27 00:58:38 UTC (rev 23501)
+++ trunk/blender/source/blender/editors/animation/anim_channels_edit.c 
2009-09-27 04:22:04 UTC (rev 23502)
@@ -91,6 +91,7 @@
 /* -------------------------- Exposed API ----------------------------------- 
*/
 
 /* Set the given animation-channel as the active one for the active context */
+// TODO: extend for animdata types...
 void ANIM_set_active_channel (bAnimContext *ac, void *data, short datatype, 
int filter, void *channel_data, short channel_type)
 {
        ListBase anim_data = {NULL, NULL};
@@ -130,11 +131,29 @@
                                ACHANNEL_SET_FLAG(nlt, ACHANNEL_SETFLAG_CLEAR, 
NLATRACK_ACTIVE);
                        }
                                break;
+                       
+                       case ANIMTYPE_FILLACTD: /* Action Expander */
+                       case ANIMTYPE_DSMAT:    /* Datablock AnimData Expanders 
*/
+                       case ANIMTYPE_DSLAM:
+                       case ANIMTYPE_DSCAM:
+                       case ANIMTYPE_DSCUR:
+                       case ANIMTYPE_DSSKEY:
+                       case ANIMTYPE_DSWOR:
+                       case ANIMTYPE_DSPART:
+                       case ANIMTYPE_DSMBALL:
+                       case ANIMTYPE_DSARM:
+                       {
+                               /* need to verify that this data is valid for 
now */
+                               if (ale->adt) {
+                                       ACHANNEL_SET_FLAG(ale->adt, 
ACHANNEL_SETFLAG_CLEAR, ADT_UI_ACTIVE);
+                               }
+                       }
+                               break;
                }
        }
        
        /* set active flag */
-       if (channel_data != NULL) {
+       if (channel_data) {
                switch (channel_type) {
                        case ANIMTYPE_GROUP:
                        {
@@ -154,6 +173,23 @@
                                nlt->flag |= NLATRACK_ACTIVE;
                        }
                                break;
+                               
+                       case ANIMTYPE_FILLACTD: /* Action Expander */
+                       case ANIMTYPE_DSMAT:    /* Datablock AnimData Expanders 
*/
+                       case ANIMTYPE_DSLAM:
+                       case ANIMTYPE_DSCAM:
+                       case ANIMTYPE_DSCUR:
+                       case ANIMTYPE_DSSKEY:
+                       case ANIMTYPE_DSWOR:
+                       case ANIMTYPE_DSPART:
+                       case ANIMTYPE_DSMBALL:
+                       case ANIMTYPE_DSARM:
+                       {
+                               /* need to verify that this data is valid for 
now */
+                               if (ale->adt)
+                                       ale->adt->flag |= ADT_UI_ACTIVE;
+                       }
+                               break;
                }
        }
        
@@ -174,7 +210,7 @@
        int filter;
        
        /* filter data */
-       filter= ANIMFILTER_VISIBLE;
+       filter= ANIMFILTER_VISIBLE|ANIMFILTER_CHANNELS;
        ANIM_animdata_filter(NULL, &anim_data, filter, data, datatype);
        
        /* See if we should be selecting or deselecting */
@@ -189,13 +225,11 @@
                                                sel= ACHANNEL_SETFLAG_CLEAR;
                                        break;
                                case ANIMTYPE_OBJECT:
+                               #if 0   /* for now, do not take object 
selection into account, since it gets too annoying */
                                        if (ale->flag & SELECT)
                                                sel= ACHANNEL_SETFLAG_CLEAR;
+                               #endif
                                        break;
-                               case ANIMTYPE_FILLACTD:
-                                       if (ale->flag & ACT_SELECTED)
-                                               sel= ACHANNEL_SETFLAG_CLEAR;
-                                       break;
                                case ANIMTYPE_GROUP:
                                        if (ale->flag & AGRP_SELECTED)
                                                sel= ACHANNEL_SETFLAG_CLEAR;
@@ -208,6 +242,22 @@
                                        if (ale->flag & NLATRACK_SELECTED)
                                                sel= ACHANNEL_SETFLAG_CLEAR;
                                        break;
+                                       
+                               case ANIMTYPE_FILLACTD: /* Action Expander */
+                               case ANIMTYPE_DSMAT:    /* Datablock AnimData 
Expanders */
+                               case ANIMTYPE_DSLAM:
+                               case ANIMTYPE_DSCAM:
+                               case ANIMTYPE_DSCUR:
+                               case ANIMTYPE_DSSKEY:
+                               case ANIMTYPE_DSWOR:
+                               case ANIMTYPE_DSPART:
+                               case ANIMTYPE_DSMBALL:
+                               case ANIMTYPE_DSARM:
+                               {
+                                       if ((ale->adt) && (ale->adt->flag & 
ADT_UI_SELECTED))
+                                               sel= ACHANNEL_SETFLAG_CLEAR;
+                               }
+                                       break;
                        }
                }
        }
@@ -220,23 +270,26 @@
                                Scene *scene= (Scene *)ale->data;
                                

@@ 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