Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoshua Leung <aligorith@gmail.com>2009-04-08 16:35:38 +0400
committerJoshua Leung <aligorith@gmail.com>2009-04-08 16:35:38 +0400
commit4b2072bec302c9e0b38337eebd0ba9ad9933841a (patch)
tree9e111858ee0b9c099cd2f7c2d730366878a1d893 /source/blender/editors
parent0f4a07afb9b97e3c929caf9812cc78108a9937fd (diff)
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.
Diffstat (limited to 'source/blender/editors')
-rw-r--r--source/blender/editors/animation/anim_channels.c170
1 files changed, 141 insertions, 29 deletions
diff --git a/source/blender/editors/animation/anim_channels.c b/source/blender/editors/animation/anim_channels.c
index ff9876bf715..dfe093641c1 100644
--- a/source/blender/editors/animation/anim_channels.c
+++ b/source/blender/editors/animation/anim_channels.c
@@ -695,6 +695,7 @@ enum {
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 @@ EnumPropertyItem prop_animchannel_settings_types[] = {
/* 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,15 +766,16 @@ static void setflag_anim_channels (bAnimContext *ac, short setting, short mode)
{
FCurve *fcu= (FCurve *)ale->data;
- /* mute */
- if (setting == ACHANNEL_SETTING_MUTE) {
- ACHANNEL_SET_FLAG(fcu, mode, FCURVE_MUTED);
- }
- 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);
+ 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;
}
}
break;
@@ -762,14 +783,13 @@ static void setflag_anim_channels (bAnimContext *ac, short setting, short mode)
{
bGPDlayer *gpl= (bGPDlayer *)ale->data;
- /* 'protect' and 'mute' */
- if (setting == ACHANNEL_SETTING_MUTE) {
- /* mute */
- ACHANNEL_SET_FLAG(gpl, mode, GP_LAYER_HIDE);
- }
- else if (setting == ACHANNEL_SETTING_PROTECT) {
- /* protected */
- ACHANNEL_SET_FLAG(gpl, mode, GP_LAYER_LOCKED);
+ 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;
}
}
break;
@@ -795,7 +815,7 @@ static int animchannels_setflag_exec(bContext *C, wmOperator *op)
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 @@ void ANIM_OT_channels_editable_toggle (wmOperatorType *ot)
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 @@ static int animchannels_mouseclick_invoke(bContext *C, wmOperator *op, wmEvent *
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 @@ void ED_operatortypes_animchannels(void)
{
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 @@ void ED_operatortypes_animchannels(void)
//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 @@ void ED_keymap_animchannels(wmWindowManager *wm)
/* 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 @@ void ED_keymap_animchannels(wmWindowManager *wm)
/* 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);