[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [23827] trunk/blender/source/blender: DopeSheet/Action Editors - Summary Channel Tweaks:

Joshua Leung aligorith at gmail.com
Wed Oct 14 11:54:31 CEST 2009


Revision: 23827
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=23827
Author:   aligorith
Date:     2009-10-14 11:54:29 +0200 (Wed, 14 Oct 2009)

Log Message:
-----------
DopeSheet/Action Editors - Summary Channel Tweaks:

* Summary channel now works in DopeSheet AND Action Editors
* By clicking on the expand/collapse widget on the summary channel, you can now show/hide all the other channels in the editor. 

Modified Paths:
--------------
    trunk/blender/source/blender/editors/animation/anim_channels_defines.c
    trunk/blender/source/blender/editors/animation/anim_filter.c
    trunk/blender/source/blender/editors/space_action/action_header.c
    trunk/blender/source/blender/makesdna/DNA_action_types.h

Modified: trunk/blender/source/blender/editors/animation/anim_channels_defines.c
===================================================================
--- trunk/blender/source/blender/editors/animation/anim_channels_defines.c	2009-10-14 09:46:41 UTC (rev 23826)
+++ trunk/blender/source/blender/editors/animation/anim_channels_defines.c	2009-10-14 09:54:29 UTC (rev 23827)
@@ -280,11 +280,13 @@
 
 /* Settings ------------------------------------------- */
 
+#if 0
 /* channel type has no settings */
 static short acf_generic_none_setting_valid(bAnimContext *ac, bAnimListElem *ale, int setting)
 {
 	return 0;
 }
+#endif
 
 /* check if some setting exists for this object-based data-expander (category only) */
 static short acf_generic_dsexpand_setting_valid(bAnimContext *ac, bAnimListElem *ale, int setting)
@@ -372,6 +374,50 @@
 	return ICON_BORDERMOVE;
 }
 
+/* check if some setting exists for this channel */
+static short acf_summary_setting_valid(bAnimContext *ac, bAnimListElem *ale, int setting)
+{
+	/* only expanded is supported, as it is used for hiding all stuff which the summary covers */
+	return (setting == ACHANNEL_SETTING_EXPAND);
+}
+
+/* get the appropriate flag(s) for the setting when it is valid  */
+static int acf_summary_setting_flag(int setting, short *neg)
+{
+	if (setting == ACHANNEL_SETTING_EXPAND) {
+		/* expanded */
+		*neg= 1;
+		return ADS_FLAG_SUMMARY_COLLAPSED;
+	}
+	else {
+		/* unsupported */
+		*neg= 0;
+		return 0;
+	}
+}
+
+/* get pointer to the setting */
+static void *acf_summary_setting_ptr(bAnimListElem *ale, int setting, short *type)
+{
+	bAnimContext *ac= (bAnimContext *)ale->data;
+	
+	/* if data is valid, return pointer to active dopesheet's relevant flag 
+	 *	- this is restricted to DopeSheet/Action Editor only
+	 */
+	if ((ac->sa) && (ac->spacetype == SPACE_ACTION) && (setting == ACHANNEL_SETTING_EXPAND)) {
+		SpaceAction *saction= (SpaceAction *)ac->sa->spacedata.first;
+		bDopeSheet *ads= &saction->ads;
+		
+		/* return pointer to DopeSheet's flag */
+		GET_ACF_FLAG_PTR(ads->flag);
+	}
+	else {
+		/* can't return anything useful - unsupported */
+		*type= 0;
+		return 0;
+	}
+}
+
 /* all animation summary (DopeSheet only) type define */
 static bAnimChannelType ACF_SUMMARY = 
 {
@@ -382,9 +428,9 @@
 	acf_summary_name,					/* name */
 	acf_summary_icon,					/* icon */
 	
-	acf_generic_none_setting_valid,		/* has setting */
-	NULL,								/* flag for setting */
-	NULL								/* pointer for setting */
+	acf_summary_setting_valid,			/* has setting */
+	acf_summary_setting_flag,			/* flag for setting */
+	acf_summary_setting_ptr				/* pointer for setting */
 };
 
 /* Scene ------------------------------------------- */

Modified: trunk/blender/source/blender/editors/animation/anim_filter.c
===================================================================
--- trunk/blender/source/blender/editors/animation/anim_filter.c	2009-10-14 09:46:41 UTC (rev 23826)
+++ trunk/blender/source/blender/editors/animation/anim_filter.c	2009-10-14 09:54:29 UTC (rev 23827)
@@ -1520,21 +1520,6 @@
 		return 0;
 	}
 	
-	/* dopesheet summary 
-	 *	- only for drawing and/or selecting keyframes in channels, but not for real editing 
-	 *	- only useful for DopeSheet Editor, where the summary is useful
-	 */
-	// TODO: we should really check if some other prohibited filters are also active, but that can be for later
-	if ((filter_mode & ANIMFILTER_CHANNELS) && (ads->filterflag & ADS_FILTER_SUMMARY)) {
-		ale= make_new_animlistelem(ac, ANIMTYPE_SUMMARY, NULL, ANIMTYPE_NONE, NULL);
-		if (ale) {
-			BLI_addtail(anim_data, ale);
-			items++;
-		}
-		
-		// TODO: if the summary gets a collapse widget, then we could make the other stuff not get shown... 
-	}
-	
 	/* scene-linked animation */
 	// TODO: sequencer, composite nodes - are we to include those here too?
 	{
@@ -1887,6 +1872,50 @@
 	return items;
 }
 
+/* Summary track for DopeSheet/Action Editor 
+ * 	- return code is whether the summary lets the other channels get drawn
+ */
+static short animdata_filter_dopesheet_summary (bAnimContext *ac, ListBase *anim_data, int filter_mode, int *items)
+{
+	bDopeSheet *ads = NULL;
+	
+	/* get the DopeSheet information to use 
+	 *	- we should only need to deal with the DopeSheet/Action Editor, 
+	 *	  since all the other Animation Editors won't have this concept
+	 *	  being applicable.
+	 */
+	if ((ac && ac->sa) && (ac->sa->spacetype == SPACE_ACTION)) {
+		SpaceAction *saction= (SpaceAction *)ac->sa->spacedata.first;
+		ads= &saction->ads;
+	}
+	else {
+		/* invalid space type - skip this summary channels */
+		return 1;
+	}
+	
+	/* dopesheet summary 
+	 *	- only for drawing and/or selecting keyframes in channels, but not for real editing 
+	 *	- only useful for DopeSheet Editor, where the summary is useful
+	 */
+	// TODO: we should really check if some other prohibited filters are also active, but that can be for later
+	if ((filter_mode & ANIMFILTER_CHANNELS) && (ads->filterflag & ADS_FILTER_SUMMARY)) {
+		bAnimListElem *ale= make_new_animlistelem(ac, ANIMTYPE_SUMMARY, NULL, ANIMTYPE_NONE, NULL);
+		if (ale) {
+			BLI_addtail(anim_data, ale);
+			(*items)++;
+		}
+		
+		/* if summary is collapsed, don't show other channels beneath this 
+		 *	- this check is put inside the summary check so that it doesn't interfere with normal operation
+		 */ 
+		if (ads->flag & ADS_FLAG_SUMMARY_COLLAPSED)
+			return 0;
+	}
+	
+	/* the other channels beneath this can be shown */
+	return 1;
+}  
+
 /* ----------- Public API --------------- */
 
 /* This function filters the active data source to leave only animation channels suitable for
@@ -1907,24 +1936,42 @@
 		
 		/* firstly filter the data */
 		switch (datatype) {
-			case ANIMCONT_ACTION:
-				items= animdata_filter_action(anim_data, NULL, data, filter_mode, NULL, ANIMTYPE_NONE, (ID *)obact);
+			case ANIMCONT_ACTION:	/* 'Action Editor' */
+			{
+				/* the check for the DopeSheet summary is included here since the summary works here too */
+				if (animdata_filter_dopesheet_summary(ac, anim_data, filter_mode, &items))
+					items += animdata_filter_action(anim_data, NULL, data, filter_mode, NULL, ANIMTYPE_NONE, (ID *)obact);
+			}
 				break;
 				
 			case ANIMCONT_SHAPEKEY:
+			{
 				//items= animdata_filter_shapekey(anim_data, data, filter_mode, NULL, ANIMTYPE_NONE, (ID *)obact);
+			}
 				break;
 				
 			case ANIMCONT_GPENCIL:
+			{
 				//items= animdata_filter_gpencil(anim_data, data, filter_mode);
+			}
 				break;
 				
-			case ANIMCONT_DOPESHEET:
-			case ANIMCONT_FCURVES:
-			case ANIMCONT_DRIVERS:
-			case ANIMCONT_NLA:
-				items= animdata_filter_dopesheet(anim_data, ac, data, filter_mode);
+			case ANIMCONT_DOPESHEET: /* 'DopeSheet Editor' */
+			{
+				/* the DopeSheet editor is the primary place where the DopeSheet summaries are useful */
+				if (animdata_filter_dopesheet_summary(ac, anim_data, filter_mode, &items))
+					items += animdata_filter_dopesheet(anim_data, ac, data, filter_mode);
+			}
 				break;
+				
+			case ANIMCONT_FCURVES: /* Graph Editor -> FCurves/Animation Editing */
+			case ANIMCONT_DRIVERS: /* Graph Editor -> Drivers Editing */
+			case ANIMCONT_NLA: /* NLA Editor */
+			{
+				/* all of these editors use the basic DopeSheet data for filtering options, but don't have all the same features */
+				items = animdata_filter_dopesheet(anim_data, ac, data, filter_mode);
+			}
+				break;
 		}
 			
 		/* remove any weedy entries */

Modified: trunk/blender/source/blender/editors/space_action/action_header.c
===================================================================
--- trunk/blender/source/blender/editors/space_action/action_header.c	2009-10-14 09:46:41 UTC (rev 23826)
+++ trunk/blender/source/blender/editors/space_action/action_header.c	2009-10-14 09:54:29 UTC (rev 23827)
@@ -326,23 +326,23 @@
 	
 	xco += (90 + 8);
 	
+	/* SUMMARY CHANNEL */
+	uiDefIconTextButBitI(block, TOG, ADS_FILTER_SUMMARY, B_REDR, ICON_BORDERMOVE, "Summary", xco,yco,XIC*4,YIC, &(saction->ads.filterflag), 0, 0, 0, 0, "Include DopeSheet summary row"); // TODO: needs a better icon
+	xco += (XIC*4.5);
+	
 	/*if (ac.data)*/ 
 	{
 		/* MODE-DEPENDENT DRAWING */
 		if (saction->mode == SACTCONT_DOPESHEET) {
 			/* FILTERING OPTIONS */
-				/* DopeSheet summary...  */
-			uiDefIconTextButBitI(block, TOG, ADS_FILTER_SUMMARY, B_REDR, ICON_BORDERMOVE, "Summary", xco,yco,XIC*4,YIC, &(saction->ads.filterflag), 0, 0, 0, 0, "Include DopeSheet summary row"); // TODO: needs a better icon
-			xco += (XIC*3.5);
-			
-				/* Standard filtering... */
+			xco -= XIC; // XXX first button incurs this offset...
 			xco= ANIM_headerUI_standard_buttons(C, &saction->ads, block, xco, yco);
 		}
 		else if (saction->mode == SACTCONT_ACTION) {
 			uiLayout *layout;
 			bScreen *sc= CTX_wm_screen(C);
 			PointerRNA ptr;
-
+			
 			RNA_pointer_create(&sc->id, &RNA_SpaceDopeSheetEditor, saction, &ptr);
 			
 			layout= uiBlockLayout(block, UI_LAYOUT_HORIZONTAL, UI_LAYOUT_HEADER, xco, 20+3, 20, 1, U.uistyles.first);
@@ -379,7 +379,7 @@
 		xco += (XIC + 8);
 	}
 
-	/* always as last  */
+	/* always as last */
 	UI_view2d_totRect_set(&ar->v2d, xco+XIC+80, (int)(ar->v2d.tot.ymax-ar->v2d.tot.ymin));
 	
 	uiEndBlock(C, block);

Modified: trunk/blender/source/blender/makesdna/DNA_action_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_action_types.h	2009-10-14 09:46:41 UTC (rev 23826)
+++ trunk/blender/source/blender/makesdna/DNA_action_types.h	2009-10-14 09:54:29 UTC (rev 23827)
@@ -444,9 +444,9 @@
 } DOPESHEET_FILTERFLAG;	
 
 /* DopeSheet general flags */
-//typedef enum DOPESHEET_FLAG {
-	
-//} DOPESHEET_FLAG;
+typedef enum DOPESHEET_FLAG {
+	ADS_FLAG_SUMMARY_COLLAPSED	= (1<<0),	/* when summary is shown, it is collapsed, so all other channels get hidden */
+} DOPESHEET_FLAG;
 
 
 





More information about the Bf-blender-cvs mailing list