[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [18903] branches/blender2.5/blender/source /blender/editors: Graph Editor: Visibility toggles

Joshua Leung aligorith at gmail.com
Tue Feb 10 12:37:14 CET 2009


Revision: 18903
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18903
Author:   aligorith
Date:     2009-02-10 12:37:14 +0100 (Tue, 10 Feb 2009)

Log Message:
-----------
Graph Editor: Visibility toggles

F-Curves can now be hidden/shown in the Graph Editor in one of 3 ways:
* Specialised VKEY toggle hotkey, which alters the visibility of all selected F-Curves 
* The setting toggle operators (Shift-W, Alt-W, Ctrl-Shift-W)
* Checkmark (*1) boxes in front of names of F-Curves

This allows irrelevant curves to be hidden from the keyframes area only if you want them hidden. By default, all curves are visible. Also note that a separate hotkey is used now for toggling visibility (VKEY) instead of lumping it under select-all (AKEY) as in the past, which was a major cause of confusion.

Notes:
1) I've used the ICON_BLANK011 and ICON_BLANK012 icons, which in the current icon set are two states for a checkbox type thing. These defines should probably get renamed sometime, but I'll leave that up to Matt.

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/editors/animation/anim_channels.c
    branches/blender2.5/blender/source/blender/editors/animation/anim_filter.c
    branches/blender2.5/blender/source/blender/editors/space_graph/graph_draw.c

Modified: branches/blender2.5/blender/source/blender/editors/animation/anim_channels.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/animation/anim_channels.c	2009-02-10 10:42:04 UTC (rev 18902)
+++ branches/blender2.5/blender/source/blender/editors/animation/anim_channels.c	2009-02-10 11:37:14 UTC (rev 18903)
@@ -608,12 +608,70 @@
 
 #endif // XXX old animation system - needs to be updated for new system...
 
+
+/* ******************** Toggle Channel Visibility Operator *********************** */
+
+static int animchannels_visibility_toggle_exec(bContext *C, wmOperator *op)
+{
+	bAnimContext ac;
+	ListBase anim_data = {NULL, NULL};
+	bAnimListElem *ale;
+	int filter;
+	short vis= ACHANNEL_SETFLAG_ADD;
+	
+	/* get editor data */
+	if (ANIM_animdata_get_context(C, &ac) == 0)
+		return OPERATOR_CANCELLED;
+		
+	/* filter data */
+	filter= (ANIMFILTER_VISIBLE | ANIMFILTER_SEL | ANIMFILTER_CURVESONLY);
+	ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype);
+	
+	/* See if we should be making showing all selected or hiding */
+	for (ale= anim_data.first; ale; ale= ale->next) {
+		if (vis == ACHANNEL_SETFLAG_CLEAR) 
+			break;
+		
+		if (ale->flag & FCURVE_VISIBLE)
+			vis= ACHANNEL_SETFLAG_CLEAR;
+	}
+		
+	/* Now set the flags */
+	for (ale= anim_data.first; ale; ale= ale->next) {
+		FCurve *fcu= (FCurve *)ale->data;
+		ACHANNEL_SET_FLAG(fcu, vis, FCURVE_VISIBLE);
+	}
+	
+	/* cleanup */
+	BLI_freelistN(&anim_data);
+	
+	/* set notifier tha things have changed */
+	ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_CHANNELS);
+	
+	return OPERATOR_FINISHED;
+}
+ 
+void ANIM_OT_channels_visibility_toggle (wmOperatorType *ot)
+{
+	/* identifiers */
+	ot->name= "Toggle Visibility";
+	ot->idname= "ANIM_OT_channels_visibility_toggle";
+	
+	/* api callbacks */
+	ot->exec= animchannels_visibility_toggle_exec;
+	ot->poll= ED_operator_ipo_active;
+	
+	/* flags */
+	ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+}
+
 /* ********************** Set Flags Operator *********************** */
 
 enum {
 // 	ACHANNEL_SETTING_SELECT = 0,
 	ACHANNEL_SETTING_PROTECT = 1,
 	ACHANNEL_SETTING_MUTE,
+	ACHANNEL_SETTING_VISIBLE,
 } eAnimChannel_Settings;
 
 /* defines for setting animation-channel flags */
@@ -672,6 +730,9 @@
 				else if (setting == ACHANNEL_SETTING_PROTECT) {
 					ACHANNEL_SET_FLAG(fcu, mode, FCURVE_PROTECTED);
 				}
+				else if (setting == ACHANNEL_SETTING_VISIBLE) {
+					ACHANNEL_SET_FLAG(fcu, mode, FCURVE_VISIBLE);
+				}
 			}
 				break;
 			case ANIMTYPE_GPLAYER:
@@ -1120,6 +1181,7 @@
 		case ANIMTYPE_FCURVE: 
 		{
 			FCurve *fcu= (FCurve *)ale->data;
+			short offset= (ac->datatype != ANIMCONT_ACTION)? 18 : 0;
 			
 			if (x >= (ACHANNEL_NAMEWIDTH-ACHANNEL_BUTTON_WIDTH)) {
 				/* toggle protection */
@@ -1129,6 +1191,11 @@
 				/* toggle mute */
 				fcu->flag ^= FCURVE_MUTED;
 			}
+			else if ((x < (offset+17)) && (ac->spacetype==SPACE_IPO)) {
+				/* toggle visibility */
+				// XXX this is supposed to be button before name, though this sometimes fails
+				fcu->flag ^= FCURVE_VISIBLE;
+			}
 			else {
 				/* select/deselect */
 				fcu->flag ^= FCURVE_SELECTED;
@@ -1274,6 +1341,8 @@
 	//WM_operatortype_append(ANIM_OT_channels_move_down);
 	//WM_operatortype_append(ANIM_OT_channels_move_top);
 	//WM_operatortype_append(ANIM_OT_channels_move_bottom);
+	
+	WM_operatortype_append(ANIM_OT_channels_visibility_toggle);
 }
 
 void ED_keymap_animchannels(wmWindowManager *wm)
@@ -1304,6 +1373,9 @@
 	//WM_keymap_add_item(keymap, "ANIM_OT_channels_move_down", PAGEDOWNKEY, KM_PRESS, KM_SHIFT, 0);
 	//WM_keymap_add_item(keymap, "ANIM_OT_channels_move_to_top", PAGEUPKEY, KM_PRESS, KM_CTRL|KM_SHIFT, 0);
 	//WM_keymap_add_item(keymap, "ANIM_OT_channels_move_to_bottom", PAGEDOWNKEY, KM_PRESS, KM_CTRL|KM_SHIFT, 0);
+	
+	/* Graph Editor only */
+	WM_keymap_add_item(keymap, "ANIM_OT_channels_visibility_toggle", VKEY, KM_PRESS, 0, 0);
 }
 
 /* ************************************************************************** */

Modified: branches/blender2.5/blender/source/blender/editors/animation/anim_filter.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/animation/anim_filter.c	2009-02-10 10:42:04 UTC (rev 18902)
+++ branches/blender2.5/blender/source/blender/editors/animation/anim_filter.c	2009-02-10 11:37:14 UTC (rev 18903)
@@ -484,7 +484,7 @@
 	 */
 	for (fcu= first; ((fcu) && (fcu->grp==grp)); fcu= fcu->next) {
 		/* only include if visible (Graph Editor check, not channels check) */
-		//if (!(filter_mode & ANIMFILTER_CURVEVISIBLE) || (fcu->flag & FCURVE_VISIBLE)) { // XXX don't do this till we have tools to set this
+		if (!(filter_mode & ANIMFILTER_CURVEVISIBLE) || (fcu->flag & FCURVE_VISIBLE)) {
 			/* only work with this channel and its subchannels if it is editable */
 			if (!(filter_mode & ANIMFILTER_FOREDIT) || EDITABLE_FCU(fcu)) {
 				/* only include this curve if selected */
@@ -498,7 +498,7 @@
 					}
 				}
 			}
-		//}
+		}
 	}
 	
 	/* return the number of items added to the list */

Modified: branches/blender2.5/blender/source/blender/editors/space_graph/graph_draw.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_graph/graph_draw.c	2009-02-10 10:42:04 UTC (rev 18902)
+++ branches/blender2.5/blender/source/blender/editors/space_graph/graph_draw.c	2009-02-10 11:37:14 UTC (rev 18903)
@@ -986,9 +986,7 @@
 					
 					group= (fcu->grp) ? 1 : 0;
 					grp= fcu->grp;
-					
-					// XXX include some UI element to allow toggling of visibility
-					
+										
 					switch (ale->ownertype) {
 						case ANIMTYPE_NONE:	/* no owner */
 						case ANIMTYPE_FCURVE: 
@@ -1005,6 +1003,13 @@
 							break;
 					}
 					
+					/* for now, 'special' (i.e. in front of name) is used to show visibility status */
+					// XXX these 'blank' icons are currently checkboxes
+					if (fcu->flag & FCURVE_VISIBLE)
+						special= ICON_BLANK012;
+					else
+						special= ICON_BLANK011;
+					
 					if (fcu->flag & FCURVE_MUTED)
 						mute = ICON_MUTE_IPO_ON;
 					else	
@@ -1017,9 +1022,7 @@
 					
 					sel = SEL_FCU(fcu);
 					
-					// for now, we just print the full path... this needs more work!
 					getname_anim_fcurve(name, ale->id, fcu);
-					//sprintf(name, "%s[%d]", fcu->rna_path, fcu->array_index);
 				}
 					break;
 					





More information about the Bf-blender-cvs mailing list