diff options
author | Campbell Barton <ideasman42@gmail.com> | 2019-04-17 07:17:24 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2019-04-17 07:21:24 +0300 |
commit | e12c08e8d170b7ca40f204a5b0423c23a9fbc2c1 (patch) | |
tree | 8cf3453d12edb177a218ef8009357518ec6cab6a /source/blender/editors/space_nla/nla_channels.c | |
parent | b3dabc200a4b0399ec6b81f2ff2730d07b44fcaa (diff) |
ClangFormat: apply to source, most of intern
Apply clang format as proposed in T53211.
For details on usage and instructions for migrating branches
without conflicts, see:
https://wiki.blender.org/wiki/Tools/ClangFormat
Diffstat (limited to 'source/blender/editors/space_nla/nla_channels.c')
-rw-r--r-- | source/blender/editors/space_nla/nla_channels.c | 1343 |
1 files changed, 687 insertions, 656 deletions
diff --git a/source/blender/editors/space_nla/nla_channels.c b/source/blender/editors/space_nla/nla_channels.c index ae3888f6ae0..90e70b835f8 100644 --- a/source/blender/editors/space_nla/nla_channels.c +++ b/source/blender/editors/space_nla/nla_channels.c @@ -21,7 +21,6 @@ * \ingroup spnla */ - #include <string.h> #include <stdio.h> #include <stdlib.h> @@ -58,7 +57,7 @@ #include "UI_view2d.h" -#include "nla_intern.h" // own include +#include "nla_intern.h" // own include /* *********************************************** */ /* Operators for NLA channels-list which need to be different @@ -72,271 +71,273 @@ * --> Most channels are now selection only... */ -static int mouse_nla_channels(bContext *C, bAnimContext *ac, float x, int channel_index, short selectmode) +static int mouse_nla_channels( + bContext *C, bAnimContext *ac, float x, int channel_index, short selectmode) { - ListBase anim_data = {NULL, NULL}; - bAnimListElem *ale; - int filter; - - View2D *v2d = &ac->ar->v2d; - int notifierFlags = 0; - - /* get the channel that was clicked on */ - /* filter channels */ - filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_LIST_CHANNELS); - ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); - - /* get channel from index */ - ale = BLI_findlink(&anim_data, channel_index); - if (ale == NULL) { - /* channel not found */ - if (G.debug & G_DEBUG) - printf("Error: animation channel (index = %d) not found in mouse_anim_channels()\n", channel_index); - - ANIM_animdata_freelist(&anim_data); - return 0; - } - - /* action to take depends on what channel we've got */ - // WARNING: must keep this in sync with the equivalent function in anim_channels_edit.c - switch (ale->type) { - case ANIMTYPE_SCENE: - { - Scene *sce = (Scene *)ale->data; - AnimData *adt = sce->adt; - - /* set selection status */ - if (selectmode == SELECT_INVERT) { - /* swap select */ - sce->flag ^= SCE_DS_SELECTED; - if (adt) adt->flag ^= ADT_UI_SELECTED; - } - else { - sce->flag |= SCE_DS_SELECTED; - if (adt) adt->flag |= ADT_UI_SELECTED; - } - - notifierFlags |= (ND_ANIMCHAN | NA_SELECTED); - break; - } - case ANIMTYPE_OBJECT: - { - ViewLayer *view_layer = ac->view_layer; - Base *base = (Base *)ale->data; - Object *ob = base->object; - AnimData *adt = ob->adt; - - if (nlaedit_is_tweakmode_on(ac) == 0 && (base->flag & BASE_SELECTABLE)) { - /* set selection status */ - if (selectmode == SELECT_INVERT) { - /* swap select */ - ED_object_base_select(base, BA_INVERT); - BKE_scene_object_base_flag_sync_from_base(base); - - if (adt) adt->flag ^= ADT_UI_SELECTED; - } - else { - /* deselect all */ - /* TODO: should this deselect all other types of channels too? */ - for (Base *b = view_layer->object_bases.first; b; b = b->next) { - ED_object_base_select(b, BA_DESELECT); - BKE_scene_object_base_flag_sync_from_base(b); - if (b->object->adt) b->object->adt->flag &= ~(ADT_UI_SELECTED | ADT_UI_ACTIVE); - } - - /* select object now */ - ED_object_base_select(base, BA_SELECT); - BKE_scene_object_base_flag_sync_from_base(base); - if (adt) adt->flag |= ADT_UI_SELECTED; - } - - /* change active object - regardless of whether it is now selected [T37883] */ - ED_object_base_activate(C, base); /* adds notifier */ - - if ((adt) && (adt->flag & ADT_UI_SELECTED)) - adt->flag |= ADT_UI_ACTIVE; - - /* notifiers - channel was selected */ - notifierFlags |= (ND_ANIMCHAN | NA_SELECTED); - } - break; - } - case ANIMTYPE_FILLACTD: /* Action Expander */ - case ANIMTYPE_DSMAT: /* Datablock AnimData Expanders */ - case ANIMTYPE_DSLAM: - case ANIMTYPE_DSCAM: - case ANIMTYPE_DSCACHEFILE: - case ANIMTYPE_DSCUR: - case ANIMTYPE_DSSKEY: - case ANIMTYPE_DSWOR: - case ANIMTYPE_DSNTREE: - case ANIMTYPE_DSPART: - case ANIMTYPE_DSMBALL: - case ANIMTYPE_DSARM: - case ANIMTYPE_DSMESH: - case ANIMTYPE_DSTEX: - case ANIMTYPE_DSLAT: - case ANIMTYPE_DSLINESTYLE: - case ANIMTYPE_DSSPK: - case ANIMTYPE_DSGPENCIL: - case ANIMTYPE_PALETTE: - { - /* sanity checking... */ - if (ale->adt) { - /* select/deselect */ - if (selectmode == SELECT_INVERT) { - /* inverse selection status of this AnimData block only */ - ale->adt->flag ^= ADT_UI_SELECTED; - } - else { - /* select AnimData block by itself */ - ANIM_deselect_anim_channels(ac, ac->data, ac->datatype, 0, ACHANNEL_SETFLAG_CLEAR); - ale->adt->flag |= ADT_UI_SELECTED; - } - - /* set active? */ - if ((ale->adt) && (ale->adt->flag & ADT_UI_SELECTED)) - ale->adt->flag |= ADT_UI_ACTIVE; - } - - notifierFlags |= (ND_ANIMCHAN | NA_SELECTED); - break; - } - case ANIMTYPE_NLATRACK: - { - NlaTrack *nlt = (NlaTrack *)ale->data; - AnimData *adt = ale->adt; - short offset; - - /* offset for start of channel (on LHS of channel-list) */ - if (ale->id) { - /* special exception for materials and particles */ - if (ELEM(GS(ale->id->name), ID_MA, ID_PA)) - offset = 21 + NLACHANNEL_BUTTON_WIDTH; - else - offset = 14; - } - else - offset = 0; - - if (x >= (v2d->cur.xmax - NLACHANNEL_BUTTON_WIDTH)) { - /* toggle protection (only if there's a toggle there) */ - nlt->flag ^= NLATRACK_PROTECTED; - - /* notifier flags - channel was edited */ - notifierFlags |= (ND_ANIMCHAN | NA_EDITED); - } - else if (x >= (v2d->cur.xmax - 2 * NLACHANNEL_BUTTON_WIDTH)) { - /* toggle mute */ - nlt->flag ^= NLATRACK_MUTED; - - /* notifier flags - channel was edited */ - notifierFlags |= (ND_ANIMCHAN | NA_EDITED); - ale->update |= ANIM_UPDATE_DEPS; - } - else if (x <= ((NLACHANNEL_BUTTON_WIDTH * 2) + offset)) { - /* toggle 'solo' */ - BKE_nlatrack_solo_toggle(adt, nlt); - - /* notifier flags - channel was edited */ - notifierFlags |= (ND_ANIMCHAN | NA_EDITED); - ale->update |= ANIM_UPDATE_DEPS; - } - else if (nlaedit_is_tweakmode_on(ac) == 0) { - /* set selection */ - if (selectmode == SELECT_INVERT) { - /* inverse selection status of this F-Curve only */ - nlt->flag ^= NLATRACK_SELECTED; - } - else { - /* select F-Curve by itself */ - ANIM_deselect_anim_channels(ac, ac->data, ac->datatype, 0, ACHANNEL_SETFLAG_CLEAR); - nlt->flag |= NLATRACK_SELECTED; - } - - /* if NLA-Track is selected now, - * make NLA-Track the 'active' one in the visible list */ - if (nlt->flag & NLATRACK_SELECTED) - ANIM_set_active_channel(ac, ac->data, ac->datatype, filter, nlt, ANIMTYPE_NLATRACK); - - /* notifier flags - channel was selected */ - notifierFlags |= (ND_ANIMCHAN | NA_SELECTED); - } - break; - } - case ANIMTYPE_NLAACTION: - { - AnimData *adt = BKE_animdata_from_id(ale->id); - - /* button region... */ - if (x >= (v2d->cur.xmax - NLACHANNEL_BUTTON_WIDTH)) { - if (nlaedit_is_tweakmode_on(ac) == 0) { - /* 'push-down' action - only usable when not in TweakMode */ - /* TODO: make this use the operator instead of calling the function directly - * however, calling the operator requires that we supply the args, - * and that works with proper buttons only */ - BKE_nla_action_pushdown(adt); - } - else { - /* when in tweakmode, this button becomes the toggle for mapped editing */ - adt->flag ^= ADT_NLA_EDIT_NOMAP; - } - - /* changes to NLA-Action occurred */ - notifierFlags |= ND_NLA_ACTCHANGE; - ale->update |= ANIM_UPDATE_DEPS; - } - /* OR rest of name... */ - else { - /* NOTE: rest of NLA-Action name doubles for operating on the AnimData block - * - this is useful when there's no clear divider, and makes more sense in - * the case of users trying to use this to change actions - * - in tweakmode, clicking here gets us out of tweakmode, as changing selection - * while in tweakmode is really evil! - * - we disable "solo" flags too, to make it easier to work with stashed actions - * with less trouble - */ - if (nlaedit_is_tweakmode_on(ac)) { - /* exit tweakmode immediately */ - nlaedit_disable_tweakmode(ac, true); - - /* changes to NLA-Action occurred */ - notifierFlags |= ND_NLA_ACTCHANGE; - ale->update |= ANIM_UPDATE_DEPS; - } - else { - /* select/deselect */ - if (selectmode == SELECT_INVERT) { - /* inverse selection status of this AnimData block only */ - adt->flag ^= ADT_UI_SELECTED; - } - else { - /* select AnimData block by itself */ - ANIM_deselect_anim_channels(ac, ac->data, ac->datatype, 0, ACHANNEL_SETFLAG_CLEAR); - adt->flag |= ADT_UI_SELECTED; - } - - /* set active? */ - if (adt->flag & ADT_UI_SELECTED) - adt->flag |= ADT_UI_ACTIVE; - - notifierFlags |= (ND_ANIMCHAN | NA_SELECTED); - } - } - break; - } - default: - if (G.debug & G_DEBUG) - printf("Error: Invalid channel type in mouse_nla_channels()\n"); - break; - } - - /* free channels */ - ANIM_animdata_update(ac, &anim_data); - ANIM_animdata_freelist(&anim_data); - - /* return the notifier-flags set */ - return notifierFlags; + ListBase anim_data = {NULL, NULL}; + bAnimListElem *ale; + int filter; + + View2D *v2d = &ac->ar->v2d; + int notifierFlags = 0; + + /* get the channel that was clicked on */ + /* filter channels */ + filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_LIST_CHANNELS); + ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); + + /* get channel from index */ + ale = BLI_findlink(&anim_data, channel_index); + if (ale == NULL) { + /* channel not found */ + if (G.debug & G_DEBUG) + printf("Error: animation channel (index = %d) not found in mouse_anim_channels()\n", + channel_index); + + ANIM_animdata_freelist(&anim_data); + return 0; + } + + /* action to take depends on what channel we've got */ + // WARNING: must keep this in sync with the equivalent function in anim_channels_edit.c + switch (ale->type) { + case ANIMTYPE_SCENE: { + Scene *sce = (Scene *)ale->data; + AnimData *adt = sce->adt; + + /* set selection status */ + if (selectmode == SELECT_INVERT) { + /* swap select */ + sce->flag ^= SCE_DS_SELECTED; + if (adt) + adt->flag ^= ADT_UI_SELECTED; + } + else { + sce->flag |= SCE_DS_SELECTED; + if (adt) + adt->flag |= ADT_UI_SELECTED; + } + + notifierFlags |= (ND_ANIMCHAN | NA_SELECTED); + break; + } + case ANIMTYPE_OBJECT: { + ViewLayer *view_layer = ac->view_layer; + Base *base = (Base *)ale->data; + Object *ob = base->object; + AnimData *adt = ob->adt; + + if (nlaedit_is_tweakmode_on(ac) == 0 && (base->flag & BASE_SELECTABLE)) { + /* set selection status */ + if (selectmode == SELECT_INVERT) { + /* swap select */ + ED_object_base_select(base, BA_INVERT); + BKE_scene_object_base_flag_sync_from_base(base); + + if (adt) + adt->flag ^= ADT_UI_SELECTED; + } + else { + /* deselect all */ + /* TODO: should this deselect all other types of channels too? */ + for (Base *b = view_layer->object_bases.first; b; b = b->next) { + ED_object_base_select(b, BA_DESELECT); + BKE_scene_object_base_flag_sync_from_base(b); + if (b->object->adt) + b->object->adt->flag &= ~(ADT_UI_SELECTED | ADT_UI_ACTIVE); + } + + /* select object now */ + ED_object_base_select(base, BA_SELECT); + BKE_scene_object_base_flag_sync_from_base(base); + if (adt) + adt->flag |= ADT_UI_SELECTED; + } + + /* change active object - regardless of whether it is now selected [T37883] */ + ED_object_base_activate(C, base); /* adds notifier */ + + if ((adt) && (adt->flag & ADT_UI_SELECTED)) + adt->flag |= ADT_UI_ACTIVE; + + /* notifiers - channel was selected */ + notifierFlags |= (ND_ANIMCHAN | NA_SELECTED); + } + break; + } + case ANIMTYPE_FILLACTD: /* Action Expander */ + case ANIMTYPE_DSMAT: /* Datablock AnimData Expanders */ + case ANIMTYPE_DSLAM: + case ANIMTYPE_DSCAM: + case ANIMTYPE_DSCACHEFILE: + case ANIMTYPE_DSCUR: + case ANIMTYPE_DSSKEY: + case ANIMTYPE_DSWOR: + case ANIMTYPE_DSNTREE: + case ANIMTYPE_DSPART: + case ANIMTYPE_DSMBALL: + case ANIMTYPE_DSARM: + case ANIMTYPE_DSMESH: + case ANIMTYPE_DSTEX: + case ANIMTYPE_DSLAT: + case ANIMTYPE_DSLINESTYLE: + case ANIMTYPE_DSSPK: + case ANIMTYPE_DSGPENCIL: + case ANIMTYPE_PALETTE: { + /* sanity checking... */ + if (ale->adt) { + /* select/deselect */ + if (selectmode == SELECT_INVERT) { + /* inverse selection status of this AnimData block only */ + ale->adt->flag ^= ADT_UI_SELECTED; + } + else { + /* select AnimData block by itself */ + ANIM_deselect_anim_channels(ac, ac->data, ac->datatype, 0, ACHANNEL_SETFLAG_CLEAR); + ale->adt->flag |= ADT_UI_SELECTED; + } + + /* set active? */ + if ((ale->adt) && (ale->adt->flag & ADT_UI_SELECTED)) + ale->adt->flag |= ADT_UI_ACTIVE; + } + + notifierFlags |= (ND_ANIMCHAN | NA_SELECTED); + break; + } + case ANIMTYPE_NLATRACK: { + NlaTrack *nlt = (NlaTrack *)ale->data; + AnimData *adt = ale->adt; + short offset; + + /* offset for start of channel (on LHS of channel-list) */ + if (ale->id) { + /* special exception for materials and particles */ + if (ELEM(GS(ale->id->name), ID_MA, ID_PA)) + offset = 21 + NLACHANNEL_BUTTON_WIDTH; + else + offset = 14; + } + else + offset = 0; + + if (x >= (v2d->cur.xmax - NLACHANNEL_BUTTON_WIDTH)) { + /* toggle protection (only if there's a toggle there) */ + nlt->flag ^= NLATRACK_PROTECTED; + + /* notifier flags - channel was edited */ + notifierFlags |= (ND_ANIMCHAN | NA_EDITED); + } + else if (x >= (v2d->cur.xmax - 2 * NLACHANNEL_BUTTON_WIDTH)) { + /* toggle mute */ + nlt->flag ^= NLATRACK_MUTED; + + /* notifier flags - channel was edited */ + notifierFlags |= (ND_ANIMCHAN | NA_EDITED); + ale->update |= ANIM_UPDATE_DEPS; + } + else if (x <= ((NLACHANNEL_BUTTON_WIDTH * 2) + offset)) { + /* toggle 'solo' */ + BKE_nlatrack_solo_toggle(adt, nlt); + + /* notifier flags - channel was edited */ + notifierFlags |= (ND_ANIMCHAN | NA_EDITED); + ale->update |= ANIM_UPDATE_DEPS; + } + else if (nlaedit_is_tweakmode_on(ac) == 0) { + /* set selection */ + if (selectmode == SELECT_INVERT) { + /* inverse selection status of this F-Curve only */ + nlt->flag ^= NLATRACK_SELECTED; + } + else { + /* select F-Curve by itself */ + ANIM_deselect_anim_channels(ac, ac->data, ac->datatype, 0, ACHANNEL_SETFLAG_CLEAR); + nlt->flag |= NLATRACK_SELECTED; + } + + /* if NLA-Track is selected now, + * make NLA-Track the 'active' one in the visible list */ + if (nlt->flag & NLATRACK_SELECTED) + ANIM_set_active_channel(ac, ac->data, ac->datatype, filter, nlt, ANIMTYPE_NLATRACK); + + /* notifier flags - channel was selected */ + notifierFlags |= (ND_ANIMCHAN | NA_SELECTED); + } + break; + } + case ANIMTYPE_NLAACTION: { + AnimData *adt = BKE_animdata_from_id(ale->id); + + /* button region... */ + if (x >= (v2d->cur.xmax - NLACHANNEL_BUTTON_WIDTH)) { + if (nlaedit_is_tweakmode_on(ac) == 0) { + /* 'push-down' action - only usable when not in TweakMode */ + /* TODO: make this use the operator instead of calling the function directly + * however, calling the operator requires that we supply the args, + * and that works with proper buttons only */ + BKE_nla_action_pushdown(adt); + } + else { + /* when in tweakmode, this button becomes the toggle for mapped editing */ + adt->flag ^= ADT_NLA_EDIT_NOMAP; + } + + /* changes to NLA-Action occurred */ + notifierFlags |= ND_NLA_ACTCHANGE; + ale->update |= ANIM_UPDATE_DEPS; + } + /* OR rest of name... */ + else { + /* NOTE: rest of NLA-Action name doubles for operating on the AnimData block + * - this is useful when there's no clear divider, and makes more sense in + * the case of users trying to use this to change actions + * - in tweakmode, clicking here gets us out of tweakmode, as changing selection + * while in tweakmode is really evil! + * - we disable "solo" flags too, to make it easier to work with stashed actions + * with less trouble + */ + if (nlaedit_is_tweakmode_on(ac)) { + /* exit tweakmode immediately */ + nlaedit_disable_tweakmode(ac, true); + + /* changes to NLA-Action occurred */ + notifierFlags |= ND_NLA_ACTCHANGE; + ale->update |= ANIM_UPDATE_DEPS; + } + else { + /* select/deselect */ + if (selectmode == SELECT_INVERT) { + /* inverse selection status of this AnimData block only */ + adt->flag ^= ADT_UI_SELECTED; + } + else { + /* select AnimData block by itself */ + ANIM_deselect_anim_channels(ac, ac->data, ac->datatype, 0, ACHANNEL_SETFLAG_CLEAR); + adt->flag |= ADT_UI_SELECTED; + } + + /* set active? */ + if (adt->flag & ADT_UI_SELECTED) + adt->flag |= ADT_UI_ACTIVE; + + notifierFlags |= (ND_ANIMCHAN | NA_SELECTED); + } + } + break; + } + default: + if (G.debug & G_DEBUG) + printf("Error: Invalid channel type in mouse_nla_channels()\n"); + break; + } + + /* free channels */ + ANIM_animdata_update(ac, &anim_data); + ANIM_animdata_freelist(&anim_data); + + /* return the notifier-flags set */ + return notifierFlags; } /* ------------------- */ @@ -344,66 +345,74 @@ static int mouse_nla_channels(bContext *C, bAnimContext *ac, float x, int channe /* handle clicking */ static int nlachannels_mouseclick_invoke(bContext *C, wmOperator *op, const wmEvent *event) { - bAnimContext ac; - SpaceNla *snla; - ARegion *ar; - View2D *v2d; - int channel_index; - int notifierFlags = 0; - short selectmode; - float x, y; - - /* get editor data */ - if (ANIM_animdata_get_context(C, &ac) == 0) - return OPERATOR_CANCELLED; - - /* get useful pointers from animation context data */ - snla = (SpaceNla *)ac.sl; - ar = ac.ar; - v2d = &ar->v2d; - - /* select mode is either replace (deselect all, then add) or add/extend */ - if (RNA_boolean_get(op->ptr, "extend")) - selectmode = SELECT_INVERT; - else - selectmode = SELECT_REPLACE; - - /* figure out which channel user clicked in - * Note: although channels technically start at y= NLACHANNEL_FIRST, we need to adjust by half a channel's height - * so that the tops of channels get caught ok. Since NLACHANNEL_FIRST is really NLACHANNEL_HEIGHT, we simply use - * NLACHANNEL_HEIGHT_HALF. - */ - UI_view2d_region_to_view(v2d, event->mval[0], event->mval[1], &x, &y); - UI_view2d_listview_view_to_cell(v2d, NLACHANNEL_NAMEWIDTH, NLACHANNEL_STEP(snla), 0, (float)NLACHANNEL_HEIGHT_HALF(snla), x, y, NULL, &channel_index); - - /* handle mouse-click in the relevant channel then */ - notifierFlags = mouse_nla_channels(C, &ac, x, channel_index, selectmode); - - /* set notifier that things have changed */ - WM_event_add_notifier(C, NC_ANIMATION | notifierFlags, NULL); - - return OPERATOR_FINISHED; + bAnimContext ac; + SpaceNla *snla; + ARegion *ar; + View2D *v2d; + int channel_index; + int notifierFlags = 0; + short selectmode; + float x, y; + + /* get editor data */ + if (ANIM_animdata_get_context(C, &ac) == 0) + return OPERATOR_CANCELLED; + + /* get useful pointers from animation context data */ + snla = (SpaceNla *)ac.sl; + ar = ac.ar; + v2d = &ar->v2d; + + /* select mode is either replace (deselect all, then add) or add/extend */ + if (RNA_boolean_get(op->ptr, "extend")) + selectmode = SELECT_INVERT; + else + selectmode = SELECT_REPLACE; + + /* figure out which channel user clicked in + * Note: although channels technically start at y= NLACHANNEL_FIRST, we need to adjust by half a channel's height + * so that the tops of channels get caught ok. Since NLACHANNEL_FIRST is really NLACHANNEL_HEIGHT, we simply use + * NLACHANNEL_HEIGHT_HALF. + */ + UI_view2d_region_to_view(v2d, event->mval[0], event->mval[1], &x, &y); + UI_view2d_listview_view_to_cell(v2d, + NLACHANNEL_NAMEWIDTH, + NLACHANNEL_STEP(snla), + 0, + (float)NLACHANNEL_HEIGHT_HALF(snla), + x, + y, + NULL, + &channel_index); + + /* handle mouse-click in the relevant channel then */ + notifierFlags = mouse_nla_channels(C, &ac, x, channel_index, selectmode); + + /* set notifier that things have changed */ + WM_event_add_notifier(C, NC_ANIMATION | notifierFlags, NULL); + + return OPERATOR_FINISHED; } void NLA_OT_channels_click(wmOperatorType *ot) { - PropertyRNA *prop; + PropertyRNA *prop; - /* identifiers */ - ot->name = "Mouse Click on NLA Channels"; - ot->idname = "NLA_OT_channels_click"; - ot->description = "Handle clicks to select NLA channels"; + /* identifiers */ + ot->name = "Mouse Click on NLA Channels"; + ot->idname = "NLA_OT_channels_click"; + ot->description = "Handle clicks to select NLA channels"; - /* api callbacks */ - ot->invoke = nlachannels_mouseclick_invoke; - ot->poll = ED_operator_nla_active; + /* api callbacks */ + ot->invoke = nlachannels_mouseclick_invoke; + ot->poll = ED_operator_nla_active; - /* flags */ - ot->flag = OPTYPE_UNDO; + /* flags */ + ot->flag = OPTYPE_UNDO; - /* props */ - prop = RNA_def_boolean(ot->srna, "extend", 0, "Extend Select", ""); // SHIFTKEY - RNA_def_property_flag(prop, PROP_SKIP_SAVE); + /* props */ + prop = RNA_def_boolean(ot->srna, "extend", 0, "Extend Select", ""); // SHIFTKEY + RNA_def_property_flag(prop, PROP_SKIP_SAVE); } /* *********************************************** */ @@ -413,169 +422,185 @@ void NLA_OT_channels_click(wmOperatorType *ot) static int nlachannels_pushdown_exec(bContext *C, wmOperator *op) { - bAnimContext ac; - ID *id = NULL; - AnimData *adt = NULL; - int channel_index = RNA_int_get(op->ptr, "channel_index"); - - /* get editor data */ - if (ANIM_animdata_get_context(C, &ac) == 0) - return OPERATOR_CANCELLED; - - /* get anim-channel to use (or more specifically, the animdata block behind it) */ - if (channel_index == -1) { - PointerRNA adt_ptr = {{NULL}}; - - /* active animdata block */ - if (nla_panel_context(C, &adt_ptr, NULL, NULL) == 0 || (adt_ptr.data == NULL)) { - BKE_report(op->reports, RPT_ERROR, "No active AnimData block to use " - "(select a data-block expander first or set the appropriate flags on an AnimData block)"); - return OPERATOR_CANCELLED; - } - else { - id = adt_ptr.id.data; - adt = adt_ptr.data; - } - } - else { - /* indexed channel */ - ListBase anim_data = {NULL, NULL}; - bAnimListElem *ale; - int filter; - - /* filter channels */ - filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_LIST_CHANNELS); - ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); - - /* get channel from index */ - ale = BLI_findlink(&anim_data, channel_index); - if (ale == NULL) { - BKE_reportf(op->reports, RPT_ERROR, "No animation channel found at index %d", channel_index); - ANIM_animdata_freelist(&anim_data); - return OPERATOR_CANCELLED; - } - else if (ale->type != ANIMTYPE_NLAACTION) { - BKE_reportf(op->reports, RPT_ERROR, "Animation channel at index %d is not a NLA 'Active Action' channel", channel_index); - ANIM_animdata_freelist(&anim_data); - return OPERATOR_CANCELLED; - } - - /* grab AnimData from the channel */ - adt = ale->adt; - id = ale->id; - - /* we don't need anything here anymore, so free it all */ - ANIM_animdata_freelist(&anim_data); - } - - /* double-check that we are free to push down here... */ - if (adt == NULL) { - BKE_report(op->reports, RPT_WARNING, "Internal Error - AnimData block is not valid"); - return OPERATOR_CANCELLED; - } - else if (nlaedit_is_tweakmode_on(&ac)) { - BKE_report(op->reports, RPT_WARNING, - "Cannot push down actions while tweaking a strip's action, exit tweak mode first"); - return OPERATOR_CANCELLED; - } - else if (adt->action == NULL) { - BKE_report(op->reports, RPT_WARNING, "No active action to push down"); - return OPERATOR_CANCELLED; - } - else { - /* 'push-down' action - only usable when not in TweakMode */ - BKE_nla_action_pushdown(adt); - - DEG_id_tag_update_ex(CTX_data_main(C), id, ID_RECALC_ANIMATION | ID_RECALC_COPY_ON_WRITE); - } - - /* set notifier that things have changed */ - WM_event_add_notifier(C, NC_ANIMATION | ND_NLA_ACTCHANGE, NULL); - return OPERATOR_FINISHED; + bAnimContext ac; + ID *id = NULL; + AnimData *adt = NULL; + int channel_index = RNA_int_get(op->ptr, "channel_index"); + + /* get editor data */ + if (ANIM_animdata_get_context(C, &ac) == 0) + return OPERATOR_CANCELLED; + + /* get anim-channel to use (or more specifically, the animdata block behind it) */ + if (channel_index == -1) { + PointerRNA adt_ptr = {{NULL}}; + + /* active animdata block */ + if (nla_panel_context(C, &adt_ptr, NULL, NULL) == 0 || (adt_ptr.data == NULL)) { + BKE_report(op->reports, + RPT_ERROR, + "No active AnimData block to use " + "(select a data-block expander first or set the appropriate flags on an AnimData " + "block)"); + return OPERATOR_CANCELLED; + } + else { + id = adt_ptr.id.data; + adt = adt_ptr.data; + } + } + else { + /* indexed channel */ + ListBase anim_data = {NULL, NULL}; + bAnimListElem *ale; + int filter; + + /* filter channels */ + filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_LIST_CHANNELS); + ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); + + /* get channel from index */ + ale = BLI_findlink(&anim_data, channel_index); + if (ale == NULL) { + BKE_reportf(op->reports, RPT_ERROR, "No animation channel found at index %d", channel_index); + ANIM_animdata_freelist(&anim_data); + return OPERATOR_CANCELLED; + } + else if (ale->type != ANIMTYPE_NLAACTION) { + BKE_reportf(op->reports, + RPT_ERROR, + "Animation channel at index %d is not a NLA 'Active Action' channel", + channel_index); + ANIM_animdata_freelist(&anim_data); + return OPERATOR_CANCELLED; + } + + /* grab AnimData from the channel */ + adt = ale->adt; + id = ale->id; + + /* we don't need anything here anymore, so free it all */ + ANIM_animdata_freelist(&anim_data); + } + + /* double-check that we are free to push down here... */ + if (adt == NULL) { + BKE_report(op->reports, RPT_WARNING, "Internal Error - AnimData block is not valid"); + return OPERATOR_CANCELLED; + } + else if (nlaedit_is_tweakmode_on(&ac)) { + BKE_report(op->reports, + RPT_WARNING, + "Cannot push down actions while tweaking a strip's action, exit tweak mode first"); + return OPERATOR_CANCELLED; + } + else if (adt->action == NULL) { + BKE_report(op->reports, RPT_WARNING, "No active action to push down"); + return OPERATOR_CANCELLED; + } + else { + /* 'push-down' action - only usable when not in TweakMode */ + BKE_nla_action_pushdown(adt); + + DEG_id_tag_update_ex(CTX_data_main(C), id, ID_RECALC_ANIMATION | ID_RECALC_COPY_ON_WRITE); + } + + /* set notifier that things have changed */ + WM_event_add_notifier(C, NC_ANIMATION | ND_NLA_ACTCHANGE, NULL); + return OPERATOR_FINISHED; } void NLA_OT_action_pushdown(wmOperatorType *ot) { - /* identifiers */ - ot->name = "Push Down Action"; - ot->idname = "NLA_OT_action_pushdown"; - ot->description = "Push action down onto the top of the NLA stack as a new strip"; - - /* callbacks */ - ot->exec = nlachannels_pushdown_exec; - ot->poll = nlaop_poll_tweakmode_off; - - /* flags */ - ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; - - /* properties */ - ot->prop = RNA_def_int(ot->srna, "channel_index", -1, -1, INT_MAX, "Channel Index", - "Index of NLA action channel to perform pushdown operation on", - 0, INT_MAX); - RNA_def_property_flag(ot->prop, PROP_SKIP_SAVE); + /* identifiers */ + ot->name = "Push Down Action"; + ot->idname = "NLA_OT_action_pushdown"; + ot->description = "Push action down onto the top of the NLA stack as a new strip"; + + /* callbacks */ + ot->exec = nlachannels_pushdown_exec; + ot->poll = nlaop_poll_tweakmode_off; + + /* flags */ + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; + + /* properties */ + ot->prop = RNA_def_int(ot->srna, + "channel_index", + -1, + -1, + INT_MAX, + "Channel Index", + "Index of NLA action channel to perform pushdown operation on", + 0, + INT_MAX); + RNA_def_property_flag(ot->prop, PROP_SKIP_SAVE); } /* ******************** Action Unlink ******************************** */ static bool nla_action_unlink_poll(bContext *C) { - if (ED_operator_nla_active(C)) { - return nla_panel_context(C, NULL, NULL, NULL); - } + if (ED_operator_nla_active(C)) { + return nla_panel_context(C, NULL, NULL, NULL); + } - /* something failed... */ - return false; + /* something failed... */ + return false; } static int nla_action_unlink_exec(bContext *C, wmOperator *op) { - PointerRNA adt_ptr; - AnimData *adt; + PointerRNA adt_ptr; + AnimData *adt; - /* check context and also validity of pointer */ - if (!nla_panel_context(C, &adt_ptr, NULL, NULL)) - return OPERATOR_CANCELLED; + /* check context and also validity of pointer */ + if (!nla_panel_context(C, &adt_ptr, NULL, NULL)) + return OPERATOR_CANCELLED; - /* get animdata */ - adt = adt_ptr.data; - if (adt == NULL) - return OPERATOR_CANCELLED; + /* get animdata */ + adt = adt_ptr.data; + if (adt == NULL) + return OPERATOR_CANCELLED; - /* do unlinking */ - if (adt && adt->action) { - bool force_delete = RNA_boolean_get(op->ptr, "force_delete"); - ED_animedit_unlink_action(C, adt_ptr.id.data, adt, adt->action, op->reports, force_delete); - } + /* do unlinking */ + if (adt && adt->action) { + bool force_delete = RNA_boolean_get(op->ptr, "force_delete"); + ED_animedit_unlink_action(C, adt_ptr.id.data, adt, adt->action, op->reports, force_delete); + } - return OPERATOR_FINISHED; + return OPERATOR_FINISHED; } static int nla_action_unlink_invoke(bContext *C, wmOperator *op, const wmEvent *evt) { - /* NOTE: this is hardcoded to match the behavior for the unlink button - * (in interface_templates.c) */ - RNA_boolean_set(op->ptr, "force_delete", evt->shift != 0); - return nla_action_unlink_exec(C, op); + /* NOTE: this is hardcoded to match the behavior for the unlink button + * (in interface_templates.c) */ + RNA_boolean_set(op->ptr, "force_delete", evt->shift != 0); + return nla_action_unlink_exec(C, op); } void NLA_OT_action_unlink(wmOperatorType *ot) { - PropertyRNA *prop; - - /* identifiers */ - ot->name = "Unlink Action"; - ot->idname = "NLA_OT_action_unlink"; - ot->description = "Unlink this action from the active action slot (and/or exit Tweak Mode)"; - - /* callbacks */ - ot->invoke = nla_action_unlink_invoke; - ot->exec = nla_action_unlink_exec; - ot->poll = nla_action_unlink_poll; - - /* properties */ - prop = RNA_def_boolean(ot->srna, "force_delete", false, "Force Delete", - "Clear Fake User and remove copy stashed in this datablock's NLA stack"); - RNA_def_property_flag(prop, PROP_SKIP_SAVE); + PropertyRNA *prop; + + /* identifiers */ + ot->name = "Unlink Action"; + ot->idname = "NLA_OT_action_unlink"; + ot->description = "Unlink this action from the active action slot (and/or exit Tweak Mode)"; + + /* callbacks */ + ot->invoke = nla_action_unlink_invoke; + ot->exec = nla_action_unlink_exec; + ot->poll = nla_action_unlink_poll; + + /* properties */ + prop = RNA_def_boolean(ot->srna, + "force_delete", + false, + "Force Delete", + "Clear Fake User and remove copy stashed in this datablock's NLA stack"); + RNA_def_property_flag(prop, PROP_SKIP_SAVE); } /* ******************** Add Tracks Operator ***************************** */ @@ -584,136 +609,142 @@ void NLA_OT_action_unlink(wmOperatorType *ot) /* helper - add NLA Tracks alongside existing ones */ bool nlaedit_add_tracks_existing(bAnimContext *ac, bool above_sel) { - ListBase anim_data = {NULL, NULL}; - bAnimListElem *ale; - int filter; - AnimData *lastAdt = NULL; - bool added = false; - - /* get a list of the (selected) NLA Tracks being shown in the NLA */ - filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_SEL | ANIMFILTER_NODUPLIS); - ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); - - /* add tracks... */ - for (ale = anim_data.first; ale; ale = ale->next) { - if (ale->type == ANIMTYPE_NLATRACK) { - NlaTrack *nlt = (NlaTrack *)ale->data; - AnimData *adt = ale->adt; - - /* check if just adding a new track above this one, - * or whether we're adding a new one to the top of the stack that this one belongs to - */ - if (above_sel) { - /* just add a new one above this one */ - BKE_nlatrack_add(adt, nlt); - ale->update = ANIM_UPDATE_DEPS; - added = true; - } - else if ((lastAdt == NULL) || (adt != lastAdt)) { - /* add one track to the top of the owning AnimData's stack, - * then don't add anymore to this stack */ - BKE_nlatrack_add(adt, NULL); - lastAdt = adt; - ale->update = ANIM_UPDATE_DEPS; - added = true; - } - } - } - - /* free temp data */ - ANIM_animdata_update(ac, &anim_data); - ANIM_animdata_freelist(&anim_data); - - return added; + ListBase anim_data = {NULL, NULL}; + bAnimListElem *ale; + int filter; + AnimData *lastAdt = NULL; + bool added = false; + + /* get a list of the (selected) NLA Tracks being shown in the NLA */ + filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_SEL | + ANIMFILTER_NODUPLIS); + ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); + + /* add tracks... */ + for (ale = anim_data.first; ale; ale = ale->next) { + if (ale->type == ANIMTYPE_NLATRACK) { + NlaTrack *nlt = (NlaTrack *)ale->data; + AnimData *adt = ale->adt; + + /* check if just adding a new track above this one, + * or whether we're adding a new one to the top of the stack that this one belongs to + */ + if (above_sel) { + /* just add a new one above this one */ + BKE_nlatrack_add(adt, nlt); + ale->update = ANIM_UPDATE_DEPS; + added = true; + } + else if ((lastAdt == NULL) || (adt != lastAdt)) { + /* add one track to the top of the owning AnimData's stack, + * then don't add anymore to this stack */ + BKE_nlatrack_add(adt, NULL); + lastAdt = adt; + ale->update = ANIM_UPDATE_DEPS; + added = true; + } + } + } + + /* free temp data */ + ANIM_animdata_update(ac, &anim_data); + ANIM_animdata_freelist(&anim_data); + + return added; } /* helper - add NLA Tracks to empty (and selected) AnimData blocks */ bool nlaedit_add_tracks_empty(bAnimContext *ac) { - ListBase anim_data = {NULL, NULL}; - bAnimListElem *ale; - int filter; - bool added = false; - - /* get a list of the selected AnimData blocks in the NLA */ - filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_ANIMDATA | ANIMFILTER_SEL | ANIMFILTER_NODUPLIS); - ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); - - /* check if selected AnimData blocks are empty, and add tracks if so... */ - for (ale = anim_data.first; ale; ale = ale->next) { - AnimData *adt = ale->adt; - - /* sanity check */ - BLI_assert(adt->flag & ADT_UI_SELECTED); - - /* ensure it is empty */ - if (BLI_listbase_is_empty(&adt->nla_tracks)) { - /* add new track to this AnimData block then */ - BKE_nlatrack_add(adt, NULL); - ale->update = ANIM_UPDATE_DEPS; - added = true; - } - } - - /* cleanup */ - ANIM_animdata_update(ac, &anim_data); - ANIM_animdata_freelist(&anim_data); - - return added; + ListBase anim_data = {NULL, NULL}; + bAnimListElem *ale; + int filter; + bool added = false; + + /* get a list of the selected AnimData blocks in the NLA */ + filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_ANIMDATA | + ANIMFILTER_SEL | ANIMFILTER_NODUPLIS); + ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); + + /* check if selected AnimData blocks are empty, and add tracks if so... */ + for (ale = anim_data.first; ale; ale = ale->next) { + AnimData *adt = ale->adt; + + /* sanity check */ + BLI_assert(adt->flag & ADT_UI_SELECTED); + + /* ensure it is empty */ + if (BLI_listbase_is_empty(&adt->nla_tracks)) { + /* add new track to this AnimData block then */ + BKE_nlatrack_add(adt, NULL); + ale->update = ANIM_UPDATE_DEPS; + added = true; + } + } + + /* cleanup */ + ANIM_animdata_update(ac, &anim_data); + ANIM_animdata_freelist(&anim_data); + + return added; } /* ----- */ static int nlaedit_add_tracks_exec(bContext *C, wmOperator *op) { - bAnimContext ac; - bool above_sel = RNA_boolean_get(op->ptr, "above_selected"); - bool op_done = false; - - /* get editor data */ - if (ANIM_animdata_get_context(C, &ac) == 0) - return OPERATOR_CANCELLED; - - /* perform adding in two passes - existing first so that we don't double up for empty */ - op_done |= nlaedit_add_tracks_existing(&ac, above_sel); - op_done |= nlaedit_add_tracks_empty(&ac); - - /* done? */ - if (op_done) { - DEG_relations_tag_update(CTX_data_main(C)); - - /* set notifier that things have changed */ - WM_event_add_notifier(C, NC_ANIMATION | ND_NLA | NA_EDITED, NULL); - - /* done */ - return OPERATOR_FINISHED; - } - else { - /* failed to add any tracks */ - BKE_report(op->reports, RPT_WARNING, - "Select an existing NLA Track or an empty action line first"); - - /* not done */ - return OPERATOR_CANCELLED; - } + bAnimContext ac; + bool above_sel = RNA_boolean_get(op->ptr, "above_selected"); + bool op_done = false; + + /* get editor data */ + if (ANIM_animdata_get_context(C, &ac) == 0) + return OPERATOR_CANCELLED; + + /* perform adding in two passes - existing first so that we don't double up for empty */ + op_done |= nlaedit_add_tracks_existing(&ac, above_sel); + op_done |= nlaedit_add_tracks_empty(&ac); + + /* done? */ + if (op_done) { + DEG_relations_tag_update(CTX_data_main(C)); + + /* set notifier that things have changed */ + WM_event_add_notifier(C, NC_ANIMATION | ND_NLA | NA_EDITED, NULL); + + /* done */ + return OPERATOR_FINISHED; + } + else { + /* failed to add any tracks */ + BKE_report( + op->reports, RPT_WARNING, "Select an existing NLA Track or an empty action line first"); + + /* not done */ + return OPERATOR_CANCELLED; + } } void NLA_OT_tracks_add(wmOperatorType *ot) { - /* identifiers */ - ot->name = "Add Tracks"; - ot->idname = "NLA_OT_tracks_add"; - ot->description = "Add NLA-Tracks above/after the selected tracks"; - - /* api callbacks */ - ot->exec = nlaedit_add_tracks_exec; - ot->poll = nlaop_poll_tweakmode_off; - - /* flags */ - ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; - - /* properties */ - RNA_def_boolean(ot->srna, "above_selected", 0, "Above Selected", "Add a new NLA Track above every existing selected one"); + /* identifiers */ + ot->name = "Add Tracks"; + ot->idname = "NLA_OT_tracks_add"; + ot->description = "Add NLA-Tracks above/after the selected tracks"; + + /* api callbacks */ + ot->exec = nlaedit_add_tracks_exec; + ot->poll = nlaop_poll_tweakmode_off; + + /* flags */ + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; + + /* properties */ + RNA_def_boolean(ot->srna, + "above_selected", + 0, + "Above Selected", + "Add a new NLA Track above every existing selected one"); } /* ******************** Delete Tracks Operator ***************************** */ @@ -721,64 +752,65 @@ void NLA_OT_tracks_add(wmOperatorType *ot) static int nlaedit_delete_tracks_exec(bContext *C, wmOperator *UNUSED(op)) { - bAnimContext ac; - - ListBase anim_data = {NULL, NULL}; - bAnimListElem *ale; - int filter; - - /* get editor data */ - if (ANIM_animdata_get_context(C, &ac) == 0) - return OPERATOR_CANCELLED; - - /* get a list of the AnimData blocks being shown in the NLA */ - filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_SEL | ANIMFILTER_NODUPLIS); - ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); - - /* delete tracks */ - for (ale = anim_data.first; ale; ale = ale->next) { - if (ale->type == ANIMTYPE_NLATRACK) { - NlaTrack *nlt = (NlaTrack *)ale->data; - AnimData *adt = ale->adt; - - /* if track is currently 'solo', then AnimData should have its - * 'has solo' flag disabled - */ - if (nlt->flag & NLATRACK_SOLO) - adt->flag &= ~ADT_NLA_SOLO_TRACK; - - /* call delete on this track - deletes all strips too */ - BKE_nlatrack_free(&adt->nla_tracks, nlt, true); - ale->update = ANIM_UPDATE_DEPS; - } - } - - /* free temp data */ - ANIM_animdata_update(&ac, &anim_data); - ANIM_animdata_freelist(&anim_data); - - DEG_relations_tag_update(ac.bmain); - - /* set notifier that things have changed */ - WM_event_add_notifier(C, NC_ANIMATION | ND_NLA | NA_EDITED, NULL); - - /* done */ - return OPERATOR_FINISHED; + bAnimContext ac; + + ListBase anim_data = {NULL, NULL}; + bAnimListElem *ale; + int filter; + + /* get editor data */ + if (ANIM_animdata_get_context(C, &ac) == 0) + return OPERATOR_CANCELLED; + + /* get a list of the AnimData blocks being shown in the NLA */ + filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_SEL | + ANIMFILTER_NODUPLIS); + ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); + + /* delete tracks */ + for (ale = anim_data.first; ale; ale = ale->next) { + if (ale->type == ANIMTYPE_NLATRACK) { + NlaTrack *nlt = (NlaTrack *)ale->data; + AnimData *adt = ale->adt; + + /* if track is currently 'solo', then AnimData should have its + * 'has solo' flag disabled + */ + if (nlt->flag & NLATRACK_SOLO) + adt->flag &= ~ADT_NLA_SOLO_TRACK; + + /* call delete on this track - deletes all strips too */ + BKE_nlatrack_free(&adt->nla_tracks, nlt, true); + ale->update = ANIM_UPDATE_DEPS; + } + } + + /* free temp data */ + ANIM_animdata_update(&ac, &anim_data); + ANIM_animdata_freelist(&anim_data); + + DEG_relations_tag_update(ac.bmain); + + /* set notifier that things have changed */ + WM_event_add_notifier(C, NC_ANIMATION | ND_NLA | NA_EDITED, NULL); + + /* done */ + return OPERATOR_FINISHED; } void NLA_OT_tracks_delete(wmOperatorType *ot) { - /* identifiers */ - ot->name = "Delete Tracks"; - ot->idname = "NLA_OT_tracks_delete"; - ot->description = "Delete selected NLA-Tracks and the strips they contain"; + /* identifiers */ + ot->name = "Delete Tracks"; + ot->idname = "NLA_OT_tracks_delete"; + ot->description = "Delete selected NLA-Tracks and the strips they contain"; - /* api callbacks */ - ot->exec = nlaedit_delete_tracks_exec; - ot->poll = nlaop_poll_tweakmode_off; + /* api callbacks */ + ot->exec = nlaedit_delete_tracks_exec; + ot->poll = nlaop_poll_tweakmode_off; - /* flags */ - ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; + /* flags */ + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; } /* *********************************************** */ @@ -794,47 +826,46 @@ void NLA_OT_tracks_delete(wmOperatorType *ot) static int nlaedit_objects_add_exec(bContext *C, wmOperator *UNUSED(op)) { - bAnimContext ac; - SpaceNla *snla; - - /* get editor data */ - if (ANIM_animdata_get_context(C, &ac) == 0) - return OPERATOR_CANCELLED; - - /* ensure that filters are set so that the effect will be immediately visible */ - snla = (SpaceNla *)ac.sl; - if (snla && snla->ads) { - snla->ads->filterflag &= ~ADS_FILTER_NLA_NOACT; - } - - /* operate on selected objects... */ - CTX_DATA_BEGIN (C, Object *, ob, selected_objects) - { - /* ensure that object has AnimData... that's all */ - BKE_animdata_add_id(&ob->id); - } - CTX_DATA_END; - - /* set notifier that things have changed */ - WM_event_add_notifier(C, NC_ANIMATION | ND_NLA | NA_EDITED, NULL); - - /* done */ - return OPERATOR_FINISHED; + bAnimContext ac; + SpaceNla *snla; + + /* get editor data */ + if (ANIM_animdata_get_context(C, &ac) == 0) + return OPERATOR_CANCELLED; + + /* ensure that filters are set so that the effect will be immediately visible */ + snla = (SpaceNla *)ac.sl; + if (snla && snla->ads) { + snla->ads->filterflag &= ~ADS_FILTER_NLA_NOACT; + } + + /* operate on selected objects... */ + CTX_DATA_BEGIN (C, Object *, ob, selected_objects) { + /* ensure that object has AnimData... that's all */ + BKE_animdata_add_id(&ob->id); + } + CTX_DATA_END; + + /* set notifier that things have changed */ + WM_event_add_notifier(C, NC_ANIMATION | ND_NLA | NA_EDITED, NULL); + + /* done */ + return OPERATOR_FINISHED; } void NLA_OT_selected_objects_add(wmOperatorType *ot) { - /* identifiers */ - ot->name = "Include Selected Objects"; - ot->idname = "NLA_OT_selected_objects_add"; - ot->description = "Make selected objects appear in NLA Editor by adding Animation Data"; + /* identifiers */ + ot->name = "Include Selected Objects"; + ot->idname = "NLA_OT_selected_objects_add"; + ot->description = "Make selected objects appear in NLA Editor by adding Animation Data"; - /* api callbacks */ - ot->exec = nlaedit_objects_add_exec; - ot->poll = nlaop_poll_tweakmode_off; + /* api callbacks */ + ot->exec = nlaedit_objects_add_exec; + ot->poll = nlaop_poll_tweakmode_off; - /* flags */ - ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; + /* flags */ + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; } /* *********************************************** */ |