From 5021dd3476012b1c64a5ffaa7986537d1e263245 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Wed, 22 Jun 2011 13:30:59 +0000 Subject: Bugfixes for recent commits: * Insert Key on Selected Channels in Action Editor was broken * Transform/Select All tools in Action Editor were broken as result of filtering changes. * Set Visibility operator, when used from Graph Editor now does similar things to the TabKey lock/unlock operator with regards to the flags it uses for filtering --- source/blender/editors/animation/anim_channels_edit.c | 15 +++++++++++++-- source/blender/editors/animation/anim_filter.c | 15 +++++++++------ source/blender/editors/space_action/action_edit.c | 2 +- 3 files changed, 23 insertions(+), 9 deletions(-) (limited to 'source') diff --git a/source/blender/editors/animation/anim_channels_edit.c b/source/blender/editors/animation/anim_channels_edit.c index e7edafdddf5..5b37c8071cd 100644 --- a/source/blender/editors/animation/anim_channels_edit.c +++ b/source/blender/editors/animation/anim_channels_edit.c @@ -1236,9 +1236,20 @@ static int animchannels_visibility_set_exec(bContext *C, wmOperator *UNUSED(op)) ANIM_animdata_filter(&ac, &all_data, filter, ac.data, ac.datatype); /* hide all channels not selected - * - restrict this to only applying on settings we can get to in the list + * - hierarchy matters if we're doing this from the channels region + * since we only want to apply this to channels we can "see", + * and have these affect their relatives + * - but for Graph Editor, this gets used also from main region + * where hierarchy doesn't apply, as for [#21276] */ - filter= (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_UNSEL | ANIMFILTER_NODUPLIS); + if ((ac.spacetype == SPACE_IPO) && (ac.regiontype != RGN_TYPE_CHANNELS)) { + /* graph editor (case 2) */ + filter= (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_UNSEL | ANIMFILTER_CURVE_VISIBLE | ANIMFILTER_NODUPLIS); + } + else { + /* standard case */ + filter= (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_UNSEL | ANIMFILTER_NODUPLIS); + } ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); for (ale= anim_data.first; ale; ale= ale->next) { diff --git a/source/blender/editors/animation/anim_filter.c b/source/blender/editors/animation/anim_filter.c index 1f96778c36e..cf47c6ac096 100644 --- a/source/blender/editors/animation/anim_filter.c +++ b/source/blender/editors/animation/anim_filter.c @@ -984,7 +984,7 @@ static size_t animdata_filter_action (bAnimContext *ac, ListBase *anim_data, bDo * - pasting keyframes * - creating ghost curves in Graph Editor */ - filter_gmode &= ~(ANIMFILTER_SEL|ANIMFILTER_UNSEL); + filter_gmode &= ~(ANIMFILTER_SEL|ANIMFILTER_UNSEL|ANIMFILTER_LIST_VISIBLE); } @@ -1007,7 +1007,7 @@ static size_t animdata_filter_action (bAnimContext *ac, ListBase *anim_data, bDo */ if (first_fcu) { /* add this group as a channel first */ - if (filter_mode & ANIMFILTER_LIST_CHANNELS) { + if (filter_gmode & ANIMFILTER_LIST_CHANNELS) { /* filter selection of channel specially here again, since may be open and not subject to previous test */ if ( ANIMCHANNEL_SELOK(SEL_AGRP(agrp)) ) { ale= make_new_animlistelem(agrp, ANIMTYPE_GROUP, owner_id); @@ -1019,7 +1019,7 @@ static size_t animdata_filter_action (bAnimContext *ac, ListBase *anim_data, bDo } /* there are some situations, where only the channels of the action group should get considered */ - if (!(filter_mode & ANIMFILTER_ACTGROUPED) || (agrp->flag & AGRP_ACTIVE)) { + if (!(filter_gmode & ANIMFILTER_ACTGROUPED) || (agrp->flag & AGRP_ACTIVE)) { /* filters here are a bit convoulted... * - groups show a "summary" of keyframes beside their name which must accessable for tools which handle keyframes * - groups can be collapsed (and those tools which are only interested in channels rely on knowing that group is closed) @@ -1027,16 +1027,19 @@ static size_t animdata_filter_action (bAnimContext *ac, ListBase *anim_data, bDo * cases when we should include F-Curves inside group: * - we don't care about hierarchy visibility (i.e. we just need the F-Curves present) * - group is expanded + * - we care about hierarchy visibility, but we also just need the F-Curves present + * within (i.e. transform/selectall). Fix relies on showing all channels option + * only ever getting used for drawing, when hierarchy shouldn't show these channels */ - if ( (!(filter_mode & ANIMFILTER_LIST_VISIBLE) || EXPANDED_AGRP(ac, agrp)) ) + if (!(filter_gmode & ANIMFILTER_LIST_VISIBLE) || EXPANDED_AGRP(ac, agrp) || !(filter_gmode & ANIMFILTER_LIST_CHANNELS)) { /* for the Graph Editor, curves may be set to not be visible in the view to lessen clutter, * but to do this, we need to check that the group doesn't have it's not-visible flag set preventing * all its sub-curves to be shown */ - if ( !(filter_mode & ANIMFILTER_CURVE_VISIBLE) || !(agrp->flag & AGRP_NOTVISIBLE) ) + if ( !(filter_gmode & ANIMFILTER_CURVE_VISIBLE) || !(agrp->flag & AGRP_NOTVISIBLE) ) { - if (!(filter_mode & ANIMFILTER_FOREDIT) || EDITABLE_AGRP(agrp)) { + if (!(filter_gmode & ANIMFILTER_FOREDIT) || EDITABLE_AGRP(agrp)) { /* NOTE: filter_gmode is used here, not standard filter_mode, since there may be some flags that shouldn't apply */ items += animdata_filter_fcurves(anim_data, ads, first_fcu, agrp, filter_gmode, owner_id); } diff --git a/source/blender/editors/space_action/action_edit.c b/source/blender/editors/space_action/action_edit.c index 07f448742bd..b0157befe23 100644 --- a/source/blender/editors/space_action/action_edit.c +++ b/source/blender/editors/space_action/action_edit.c @@ -575,7 +575,7 @@ static void insert_action_keys(bAnimContext *ac, short mode) AnimData *adt= ANIM_nla_mapping_get(ac, ale); FCurve *fcu= (FCurve *)ale->key_data; float cfra; - + /* adjust current frame for NLA-scaling */ if (adt) cfra= BKE_nla_tweakedit_remap(adt, (float)CFRA, NLATIME_CONVERT_UNMAP); -- cgit v1.2.3