[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [23502] trunk/blender/source/blender: 2. 5 - Assorted Animation UI/Editing Tweaks

Joshua Leung aligorith at gmail.com
Sun Sep 27 06:22:07 CEST 2009


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




More information about the Bf-blender-cvs mailing list