[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [19598] branches/blender2.5/blender/source /blender/editors/animation/anim_channels.c: Animation Editors: Restored operators to expand and collapse channels

Joshua Leung aligorith at gmail.com
Wed Apr 8 14:35:38 CEST 2009


Revision: 19598
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19598
Author:   aligorith
Date:     2009-04-08 14:35:38 +0200 (Wed, 08 Apr 2009)

Log Message:
-----------
Animation Editors: Restored operators to expand and collapse channels

There are two operators: one for expanding channels and one for collapsing them. These operators each have a property, "All", which specifies if they should expand/collapse all channels regardless of selection.

TODO:
* A few of the sub-object channel types still needs to be supported by this.

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/editors/animation/anim_channels.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-04-08 12:01:23 UTC (rev 19597)
+++ branches/blender2.5/blender/source/blender/editors/animation/anim_channels.c	2009-04-08 12:35:38 UTC (rev 19598)
@@ -695,6 +695,7 @@
 	ACHANNEL_SETTING_PROTECT = 1,
 	ACHANNEL_SETTING_MUTE,
 	ACHANNEL_SETTING_VISIBLE,
+	ACHANNEL_SETTING_EXPAND,
 } eAnimChannel_Settings;
 
 /* defines for setting animation-channel flags */
@@ -718,27 +719,46 @@
 /* Set/clear a particular flag (setting) for all selected + visible channels 
  *	setting: the setting to modify
  *	mode: eAnimChannels_SetFlag
+ *	onlysel: only selected channels get the flag set
  */
-static void setflag_anim_channels (bAnimContext *ac, short setting, short mode)
+static void setflag_anim_channels (bAnimContext *ac, short setting, short mode, short onlysel)
 {
 	ListBase anim_data = {NULL, NULL};
 	bAnimListElem *ale;
 	int filter;
 	
 	/* filter data */
-	filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CHANNELS | ANIMFILTER_SEL);
+	filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CHANNELS);
+	if (onlysel) filter |= ANIMFILTER_SEL;
 	ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype);
 	
 	/* affect selected channels */
 	for (ale= anim_data.first; ale; ale= ale->next) {
 		switch (ale->type) {
+			case ANIMTYPE_OBJECT:
+			{
+				Base *base= (Base *)ale->data;
+				Object *ob= base->object;
+				
+				if (setting == ACHANNEL_SETTING_EXPAND) {
+					// XXX - settings should really be moved out of ob->nlaflag
+					if (mode == ACHANNEL_SETFLAG_TOGGLE) 	ob->nlaflag ^= OB_ADS_COLLAPSED;
+					else if (mode == ACHANNEL_SETFLAG_ADD) 	ob->nlaflag &= ~OB_ADS_COLLAPSED;
+					else 									ob->nlaflag |= OB_ADS_COLLAPSED;
+				}
+			}
+				break;
 			case ANIMTYPE_GROUP:
 			{
 				bActionGroup *agrp= (bActionGroup *)ale->data;
 				
-				/* only 'protect' is available */
-				if (setting == ACHANNEL_SETTING_PROTECT) {
-					ACHANNEL_SET_FLAG(agrp, mode, AGRP_PROTECTED);
+				switch (setting) {
+					case ACHANNEL_SETTING_PROTECT:
+						ACHANNEL_SET_FLAG(agrp, mode, AGRP_PROTECTED);
+						break;
+					case ACHANNEL_SETTING_EXPAND:
+						ACHANNEL_SET_FLAG(agrp, mode, AGRP_EXPANDED);
+						break;
 				}
 			}
 				break;
@@ -746,31 +766,31 @@
 			{
 				FCurve *fcu= (FCurve *)ale->data;
 				
-				/* mute */
-				if (setting == ACHANNEL_SETTING_MUTE) {
-					ACHANNEL_SET_FLAG(fcu, mode, FCURVE_MUTED);
+				switch (setting) {
+					case ACHANNEL_SETTING_MUTE:
+						ACHANNEL_SET_FLAG(fcu, mode, FCURVE_MUTED);
+						break;
+					case ACHANNEL_SETTING_PROTECT:
+						ACHANNEL_SET_FLAG(fcu, mode, FCURVE_PROTECTED);
+						break;
+					case ACHANNEL_SETTING_VISIBLE:
+						ACHANNEL_SET_FLAG(fcu, mode, FCURVE_VISIBLE);
+						break;
 				}
-				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:
 			{
 				bGPDlayer *gpl= (bGPDlayer *)ale->data;
 				
-				/* 'protect' and 'mute' */
-				if (setting == ACHANNEL_SETTING_MUTE) {
-					/* mute */
-					ACHANNEL_SET_FLAG(gpl, mode, GP_LAYER_HIDE);
+				switch (setting) {
+					case ACHANNEL_SETTING_MUTE:
+						ACHANNEL_SET_FLAG(gpl, mode, GP_LAYER_HIDE);
+						break;
+					case ACHANNEL_SETTING_PROTECT:
+						ACHANNEL_SET_FLAG(gpl, mode, GP_LAYER_LOCKED);
+						break;
 				}
-				else if (setting == ACHANNEL_SETTING_PROTECT) {
-					/* protected */
-					ACHANNEL_SET_FLAG(gpl, mode, GP_LAYER_LOCKED);
-				}
 			}
 				break;
 		}
@@ -795,7 +815,7 @@
 	setting= RNA_enum_get(op->ptr, "type");
 	
 	/* modify setting */
-	setflag_anim_channels(&ac, setting, mode);
+	setflag_anim_channels(&ac, setting, mode, 1);
 	
 	/* set notifier tha things have changed */
 	ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_CHANNELS);
@@ -888,6 +908,88 @@
 	RNA_def_enum(ot->srna, "type", prop_animchannel_settings_types, ACHANNEL_SETTING_PROTECT, "Type", "");
 }
 
+/* ********************** Expand Channels Operator *********************** */
+
+static int animchannels_expand_exec (bContext *C, wmOperator *op)
+{
+	bAnimContext ac;
+	short onlysel= 1;
+	
+	/* get editor data */
+	if (ANIM_animdata_get_context(C, &ac) == 0)
+		return OPERATOR_CANCELLED;
+		
+	/* only affect selected channels? */
+	if (RNA_boolean_get(op->ptr, "all"))
+		onlysel= 0;
+	
+	/* modify setting */
+	setflag_anim_channels(&ac, ACHANNEL_SETTING_EXPAND, ACHANNEL_SETFLAG_ADD, onlysel);
+	
+	/* set notifier that things have changed */
+	ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_CHANNELS);
+	
+	return OPERATOR_FINISHED;
+}
+
+void ANIM_OT_channels_expand (wmOperatorType *ot)
+{
+	/* identifiers */
+	ot->name= "Expand Channels";
+	ot->idname= "ANIM_OT_channels_expand";
+	
+	/* api callbacks */
+	ot->exec= animchannels_expand_exec;
+	ot->poll= ED_operator_areaactive;
+	
+	/* flags */
+	ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+	
+	/* props */
+	RNA_def_boolean(ot->srna, "all", 0, "All", "Expand all channels (not just selected ones)");
+}
+
+/* ********************** Collapse Channels Operator *********************** */
+
+static int animchannels_collapse_exec (bContext *C, wmOperator *op)
+{
+	bAnimContext ac;
+	short onlysel= 1;
+	
+	/* get editor data */
+	if (ANIM_animdata_get_context(C, &ac) == 0)
+		return OPERATOR_CANCELLED;
+		
+	/* only affect selected channels? */
+	if (RNA_boolean_get(op->ptr, "all"))
+		onlysel= 0;
+	
+	/* modify setting */
+	setflag_anim_channels(&ac, ACHANNEL_SETTING_EXPAND, ACHANNEL_SETFLAG_CLEAR, onlysel);
+	
+	/* set notifier that things have changed */
+	ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_CHANNELS);
+	
+	return OPERATOR_FINISHED;
+}
+
+void ANIM_OT_channels_collapse (wmOperatorType *ot)
+{
+	/* identifiers */
+	ot->name= "Collapse Channels";
+	ot->idname= "ANIM_OT_channels_collapse";
+	
+	/* api callbacks */
+	ot->exec= animchannels_collapse_exec;
+	ot->poll= ED_operator_areaactive;
+	
+	/* flags */
+	ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+	
+	/* props */
+	RNA_def_boolean(ot->srna, "all", 0, "All", "Collapse all channels (not just selected ones)");
+}
+
 /* ********************** Select All Operator *********************** */
 
 static int animchannels_deselectall_exec(bContext *C, wmOperator *op)
@@ -1389,11 +1491,11 @@
 	return OPERATOR_FINISHED;
 }
  
-void ANIM_OT_channels_mouseclick (wmOperatorType *ot)
+void ANIM_OT_channels_click (wmOperatorType *ot)
 {
 	/* identifiers */
 	ot->name= "Mouse Click on Channels";
-	ot->idname= "ANIM_OT_channels_mouseclick";
+	ot->idname= "ANIM_OT_channels_click";
 	
 	/* api callbacks */
 	ot->invoke= animchannels_mouseclick_invoke;
@@ -1414,7 +1516,7 @@
 {
 	WM_operatortype_append(ANIM_OT_channels_select_all_toggle);
 	WM_operatortype_append(ANIM_OT_channels_select_border);
-	WM_operatortype_append(ANIM_OT_channels_mouseclick);
+	WM_operatortype_append(ANIM_OT_channels_click);
 	
 	WM_operatortype_append(ANIM_OT_channels_setting_enable);
 	WM_operatortype_append(ANIM_OT_channels_setting_disable);
@@ -1429,6 +1531,9 @@
 	//WM_operatortype_append(ANIM_OT_channels_move_top);
 	//WM_operatortype_append(ANIM_OT_channels_move_bottom);
 	
+	WM_operatortype_append(ANIM_OT_channels_expand);
+	WM_operatortype_append(ANIM_OT_channels_collapse);
+	
 	WM_operatortype_append(ANIM_OT_channels_visibility_toggle);
 }
 
@@ -1439,9 +1544,9 @@
 	/* selection */
 		/* click-select */
 		// XXX for now, only leftmouse.... 
-	WM_keymap_add_item(keymap, "ANIM_OT_channels_mouseclick", LEFTMOUSE, KM_PRESS, 0, 0);
-	RNA_boolean_set(WM_keymap_add_item(keymap, "ANIM_OT_channels_mouseclick", LEFTMOUSE, KM_PRESS, KM_SHIFT, 0)->ptr, "extend", 1);
-	RNA_boolean_set(WM_keymap_add_item(keymap, "ANIM_OT_channels_mouseclick", LEFTMOUSE, KM_PRESS, KM_CTRL|KM_SHIFT, 0)->ptr, "children_only", 1);
+	WM_keymap_add_item(keymap, "ANIM_OT_channels_click", LEFTMOUSE, KM_PRESS, 0, 0);
+	RNA_boolean_set(WM_keymap_add_item(keymap, "ANIM_OT_channels_click", LEFTMOUSE, KM_PRESS, KM_SHIFT, 0)->ptr, "extend", 1);
+	RNA_boolean_set(WM_keymap_add_item(keymap, "ANIM_OT_channels_click", LEFTMOUSE, KM_PRESS, KM_CTRL|KM_SHIFT, 0)->ptr, "children_only", 1);
 	
 		/* deselect all */
 	WM_keymap_add_item(keymap, "ANIM_OT_channels_select_all_toggle", AKEY, KM_PRESS, 0, 0);
@@ -1458,6 +1563,13 @@
 	/* settings - specialised hotkeys */
 	WM_keymap_add_item(keymap, "ANIM_OT_channels_editable_toggle", TABKEY, KM_PRESS, 0, 0);
 	
+	/* expand/collapse */
+	WM_keymap_add_item(keymap, "ANIM_OT_channels_expand", PADPLUSKEY, KM_PRESS, 0, 0);
+	WM_keymap_add_item(keymap, "ANIM_OT_channels_collapse", PADMINUS, KM_PRESS, 0, 0);
+	
+	RNA_boolean_set(WM_keymap_add_item(keymap, "ANIM_OT_channels_expand", PADPLUSKEY, KM_PRESS, KM_CTRL, 0)->ptr, "all", 1);
+	RNA_boolean_set(WM_keymap_add_item(keymap, "ANIM_OT_channels_collapse", PADMINUS, KM_PRESS, KM_CTRL, 0)->ptr, "all", 1);
+	
 	/* rearranging - actions only */
 	//WM_keymap_add_item(keymap, "ANIM_OT_channels_move_up", PAGEUPKEY, KM_PRESS, KM_SHIFT, 0);
 	//WM_keymap_add_item(keymap, "ANIM_OT_channels_move_down", PAGEDOWNKEY, KM_PRESS, KM_SHIFT, 0);





More information about the Bf-blender-cvs mailing list