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:
authorCampbell Barton <ideasman42@gmail.com>2018-06-04 10:31:30 +0300
committerCampbell Barton <ideasman42@gmail.com>2018-06-04 10:31:30 +0300
commit44505b38df557a5711703613685a1dec9fc2c3d9 (patch)
tree3f05bebcc7bfadf56569f2dcca7f95fc56b1b0d0 /source/blender/editors/space_nla/nla_edit.c
parent6654e109df952be3a3128fae2508a02c196ae593 (diff)
Cleanup: strip trailing space in editors
Diffstat (limited to 'source/blender/editors/space_nla/nla_edit.c')
-rw-r--r--source/blender/editors/space_nla/nla_edit.c900
1 files changed, 450 insertions, 450 deletions
diff --git a/source/blender/editors/space_nla/nla_edit.c b/source/blender/editors/space_nla/nla_edit.c
index 4fabd1ded46..26ac06446c4 100644
--- a/source/blender/editors/space_nla/nla_edit.c
+++ b/source/blender/editors/space_nla/nla_edit.c
@@ -83,15 +83,15 @@ void ED_nla_postop_refresh(bAnimContext *ac)
ListBase anim_data = {NULL, NULL};
bAnimListElem *ale;
short filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_ANIMDATA | ANIMFILTER_FOREDIT);
-
+
/* get blocks to work on */
ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype);
-
+
for (ale = anim_data.first; ale; ale = ale->next) {
/* performing auto-blending, extend-mode validation, etc. */
BKE_nla_validate_state(ale->data);
}
-
+
/* free temp memory */
ANIM_animdata_freelist(&anim_data);
}
@@ -100,62 +100,62 @@ void ED_nla_postop_refresh(bAnimContext *ac)
/* 'Special' Editing */
/* ******************** Tweak-Mode Operators ***************************** */
-/* 'Tweak mode' allows the action referenced by the active NLA-strip to be edited
+/* 'Tweak mode' allows the action referenced by the active NLA-strip to be edited
* as if it were the normal Active-Action of its AnimData block.
*/
static int nlaedit_enable_tweakmode_exec(bContext *C, wmOperator *op)
{
bAnimContext ac;
-
+
ListBase anim_data = {NULL, NULL};
bAnimListElem *ale;
int filter;
-
+
const bool do_solo = RNA_boolean_get(op->ptr, "isolate_action");
bool ok = false;
-
+
/* 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_ANIMDATA);
ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype);
-
+
/* if no blocks, popup error? */
if (BLI_listbase_is_empty(&anim_data)) {
BKE_report(op->reports, RPT_ERROR, "No AnimData blocks to enter tweak mode for");
return OPERATOR_CANCELLED;
}
-
+
/* for each AnimData block with NLA-data, try setting it in tweak-mode */
for (ale = anim_data.first; ale; ale = ale->next) {
AnimData *adt = ale->data;
-
+
/* try entering tweakmode if valid */
ok |= BKE_nla_tweakmode_enter(adt);
-
+
/* mark the active track as being "solo"? */
if (do_solo && adt->actstrip) {
NlaTrack *nlt = BKE_nlatrack_find_tweaked(adt);
-
+
if (nlt && !(nlt->flag & NLATRACK_SOLO)) {
BKE_nlatrack_solo_toggle(adt, nlt);
}
}
}
-
+
/* free temp data */
ANIM_animdata_freelist(&anim_data);
-
- /* if we managed to enter tweakmode on at least one AnimData block,
+
+ /* if we managed to enter tweakmode on at least one AnimData block,
* set the flag for this in the active scene and send notifiers
*/
if (ac.scene && ok) {
/* set editing flag */
ac.scene->flag |= SCE_NLA_EDIT_ON;
-
+
/* set notifier that things have changed */
WM_event_add_notifier(C, NC_ANIMATION | ND_NLA_ACTCHANGE, NULL);
}
@@ -163,27 +163,27 @@ static int nlaedit_enable_tweakmode_exec(bContext *C, wmOperator *op)
BKE_report(op->reports, RPT_ERROR, "No active strip(s) to enter tweak mode on");
return OPERATOR_CANCELLED;
}
-
+
/* done */
return OPERATOR_FINISHED;
}
-
+
void NLA_OT_tweakmode_enter(wmOperatorType *ot)
{
PropertyRNA *prop;
-
+
/* identifiers */
ot->name = "Enter Tweak Mode";
ot->idname = "NLA_OT_tweakmode_enter";
ot->description = "Enter tweaking mode for the action referenced by the active strip to edit its keyframes";
-
+
/* api callbacks */
ot->exec = nlaedit_enable_tweakmode_exec;
ot->poll = nlaop_poll_tweakmode_off;
-
+
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
-
+
/* properties */
prop = RNA_def_boolean(ot->srna, "isolate_action", 0, "Isolate Action",
"Enable 'solo' on the NLA Track containing the active strip, "
@@ -198,47 +198,47 @@ bool nlaedit_disable_tweakmode(bAnimContext *ac, bool do_solo)
{
ListBase anim_data = {NULL, NULL};
bAnimListElem *ale;
- int filter;
-
+ int filter;
+
/* get a list of the AnimData blocks being shown in the NLA */
filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_ANIMDATA);
ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype);
-
+
/* if no blocks, popup error? */
if (BLI_listbase_is_empty(&anim_data)) {
BKE_report(ac->reports, RPT_ERROR, "No AnimData blocks in tweak mode to exit from");
return false;
}
-
+
/* for each AnimData block with NLA-data, try exitting tweak-mode */
for (ale = anim_data.first; ale; ale = ale->next) {
AnimData *adt = ale->data;
-
+
/* clear solo flags */
if ((do_solo) & (adt->flag & ADT_NLA_SOLO_TRACK) &&
- (adt->flag & ADT_NLA_EDIT_ON))
+ (adt->flag & ADT_NLA_EDIT_ON))
{
BKE_nlatrack_solo_toggle(adt, NULL);
}
-
+
/* to be sure that we're doing everything right, just exit tweakmode... */
BKE_nla_tweakmode_exit(adt);
}
-
+
/* free temp data */
ANIM_animdata_freelist(&anim_data);
-
- /* if we managed to enter tweakmode on at least one AnimData block,
+
+ /* if we managed to enter tweakmode on at least one AnimData block,
* set the flag for this in the active scene and send notifiers
*/
if (ac->scene) {
/* clear editing flag */
ac->scene->flag &= ~SCE_NLA_EDIT_ON;
-
+
/* set notifier that things have changed */
WM_main_add_notifier(NC_ANIMATION | ND_NLA_ACTCHANGE, NULL);
}
-
+
/* done */
return true;
}
@@ -247,40 +247,40 @@ bool nlaedit_disable_tweakmode(bAnimContext *ac, bool do_solo)
static int nlaedit_disable_tweakmode_exec(bContext *C, wmOperator *op)
{
bAnimContext ac;
-
+
const bool do_solo = RNA_boolean_get(op->ptr, "isolate_action");
bool ok = false;
-
+
/* get editor data */
if (ANIM_animdata_get_context(C, &ac) == 0)
return OPERATOR_CANCELLED;
-
+
/* perform operation */
ok = nlaedit_disable_tweakmode(&ac, do_solo);
-
+
/* success? */
if (ok)
return OPERATOR_FINISHED;
else
return OPERATOR_CANCELLED;
}
-
+
void NLA_OT_tweakmode_exit(wmOperatorType *ot)
{
PropertyRNA *prop;
-
+
/* identifiers */
ot->name = "Exit Tweak Mode";
ot->idname = "NLA_OT_tweakmode_exit";
ot->description = "Exit tweaking mode for the action referenced by the active strip";
-
+
/* api callbacks */
ot->exec = nlaedit_disable_tweakmode_exec;
ot->poll = nlaop_poll_tweakmode_on;
-
+
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
-
+
/* properties */
prop = RNA_def_boolean(ot->srna, "isolate_action", 0, "Isolate Action",
"Disable 'solo' on any of the NLA Tracks after exiting tweak mode "
@@ -300,38 +300,38 @@ static void get_nlastrip_extents(bAnimContext *ac, float *min, float *max, const
bAnimListElem *ale;
int filter;
bool found_bounds = false;
-
+
/* get data to filter */
filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_NODUPLIS);
ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype);
-
+
/* set large values to try to override */
*min = 999999999.0f;
*max = -999999999.0f;
-
+
/* check if any channels to set range with */
if (anim_data.first) {
/* go through channels, finding max extents */
for (ale = anim_data.first; ale; ale = ale->next) {
NlaTrack *nlt = (NlaTrack *)ale->data;
NlaStrip *strip;
-
+
for (strip = nlt->strips.first; strip; strip = strip->next) {
/* only consider selected strips? */
if ((only_sel == false) || (strip->flag & NLASTRIP_FLAG_SELECT)) {
/* extend range if appropriate */
*min = min_ff(*min, strip->start);
*max = max_ff(*max, strip->end);
-
+
found_bounds = true;
}
}
}
-
+
/* free memory */
ANIM_animdata_freelist(&anim_data);
}
-
+
/* set default range if nothing happened */
if (found_bounds == false) {
if (ac->scene) {
@@ -352,40 +352,40 @@ static int nlaedit_previewrange_exec(bContext *C, wmOperator *UNUSED(op))
bAnimContext ac;
Scene *scene;
float min, max;
-
+
/* get editor data */
if (ANIM_animdata_get_context(C, &ac) == 0)
return OPERATOR_CANCELLED;
-
+
if (ac.scene == NULL)
return OPERATOR_CANCELLED;
else
scene = ac.scene;
-
+
/* set the range directly */
get_nlastrip_extents(&ac, &min, &max, true);
scene->r.flag |= SCER_PRV_RANGE;
scene->r.psfra = round_fl_to_int(min);
scene->r.pefra = round_fl_to_int(max);
-
+
/* set notifier that things have changed */
// XXX err... there's nothing for frame ranges yet, but this should do fine too
WM_event_add_notifier(C, NC_SCENE | ND_FRAME, ac.scene);
-
+
return OPERATOR_FINISHED;
}
-
+
void NLA_OT_previewrange_set(wmOperatorType *ot)
{
/* identifiers */
ot->name = "Auto-Set Preview Range";
ot->idname = "NLA_OT_previewrange_set";
ot->description = "Automatically set Preview Range based on range of keyframes";
-
+
/* api callbacks */
ot->exec = nlaedit_previewrange_exec;
ot->poll = ED_operator_nla_active;
-
+
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
}
@@ -404,33 +404,33 @@ static bool nla_channels_get_selected_extents(bAnimContext *ac, float *min, floa
ListBase anim_data = {NULL, NULL};
bAnimListElem *ale;
int filter;
-
+
SpaceNla *snla = (SpaceNla *)ac->sl;
const float half_height = NLACHANNEL_HEIGHT_HALF(snla);
short found = 0; /* NOTE: not bool, since we want prioritise individual channels over expanders */
float y;
-
+
/* get all items - we need to do it this way */
filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_LIST_CHANNELS);
ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype);
-
+
/* loop through all channels, finding the first one that's selected */
y = (float)NLACHANNEL_FIRST;
-
+
for (ale = anim_data.first; ale; ale = ale->next) {
const bAnimChannelType *acf = ANIM_channel_get_typeinfo(ale);
-
+
/* must be selected... */
- if (acf && acf->has_setting(ac, ale, ACHANNEL_SETTING_SELECT) &&
+ if (acf && acf->has_setting(ac, ale, ACHANNEL_SETTING_SELECT) &&
ANIM_channel_setting_get(ac, ale, ACHANNEL_SETTING_SELECT))
{
/* update best estimate */
*min = (float)(y - half_height);
*max = (float)(y + half_height);
-
+
/* is this high enough priority yet? */
found = acf->channel_role;
-
+
/* only stop our search when we've found an actual channel
* - datablock expanders get less priority so that we don't abort prematurely
*/
@@ -438,14 +438,14 @@ static bool nla_channels_get_selected_extents(bAnimContext *ac, float *min, floa
break;
}
}
-
+
/* adjust y-position for next one */
y -= NLACHANNEL_STEP(snla);
}
-
+
/* free all temp data */
ANIM_animdata_freelist(&anim_data);
-
+
return (found != 0);
}
@@ -454,19 +454,19 @@ static int nlaedit_viewall(bContext *C, const bool only_sel)
bAnimContext ac;
View2D *v2d;
float extra;
-
+
/* get editor data */
if (ANIM_animdata_get_context(C, &ac) == 0)
return OPERATOR_CANCELLED;
v2d = &ac.ar->v2d;
-
+
/* set the horizontal range, with an extra offset so that the extreme keys will be in view */
get_nlastrip_extents(&ac, &v2d->cur.xmin, &v2d->cur.xmax, only_sel);
-
+
extra = 0.1f * BLI_rctf_size_x(&v2d->cur);
v2d->cur.xmin -= extra;
v2d->cur.xmax += extra;
-
+
/* set vertical range */
if (only_sel == false) {
/* view all -> the summary channel is usually the shows everything, and resides right at the top... */
@@ -477,30 +477,30 @@ static int nlaedit_viewall(bContext *C, const bool only_sel)
/* locate first selected channel (or the active one), and frame those */
float ymin = v2d->cur.ymin;
float ymax = v2d->cur.ymax;
-
+
if (nla_channels_get_selected_extents(&ac, &ymin, &ymax)) {
/* recenter the view so that this range is in the middle */
float ymid = (ymax - ymin) / 2.0f + ymin;
float x_center;
-
+
UI_view2d_center_get(v2d, &x_center, NULL);
UI_view2d_center_set(v2d, x_center, ymid);
}
}
-
+
/* do View2D syncing */
UI_view2d_sync(CTX_wm_screen(C), CTX_wm_area(C), v2d, V2D_LOCK_COPY);
-
+
/* just redraw this view */
ED_area_tag_redraw(CTX_wm_area(C));
-
+
return OPERATOR_FINISHED;
}
/* ......... */
static int nlaedit_viewall_exec(bContext *C, wmOperator *UNUSED(op))
-{
+{
/* whole range */
return nlaedit_viewall(C, false);
}
@@ -510,18 +510,18 @@ static int nlaedit_viewsel_exec(bContext *C, wmOperator *UNUSED(op))
/* only selected */
return nlaedit_viewall(C, true);
}
-
+
void NLA_OT_view_all(wmOperatorType *ot)
{
/* identifiers */
ot->name = "View All";
ot->idname = "NLA_OT_view_all";
ot->description = "Reset viewable area to show full strips range";
-
+
/* api callbacks */
ot->exec = nlaedit_viewall_exec;
ot->poll = ED_operator_nla_active;
-
+
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
}
@@ -532,11 +532,11 @@ void NLA_OT_view_selected(wmOperatorType *ot)
ot->name = "View Selected";
ot->idname = "NLA_OT_view_selected";
ot->description = "Reset viewable area to show selected strips range";
-
+
/* api callbacks */
ot->exec = nlaedit_viewsel_exec;
ot->poll = ED_operator_nla_active;
-
+
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
}
@@ -556,11 +556,11 @@ void NLA_OT_view_frame(wmOperatorType *ot)
ot->name = "View Frame";
ot->idname = "NLA_OT_view_frame";
ot->description = "Reset viewable area to show range around current frame";
-
+
/* api callbacks */
ot->exec = nlaedit_viewframe_exec;
ot->poll = ED_operator_nla_active;
-
+
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
}
@@ -577,7 +577,7 @@ static int nlaedit_add_actionclip_exec(bContext *C, wmOperator *op)
{
bAnimContext ac;
Scene *scene;
-
+
ListBase anim_data = {NULL, NULL};
bAnimListElem *ale;
size_t items;
@@ -586,17 +586,17 @@ static int nlaedit_add_actionclip_exec(bContext *C, wmOperator *op)
bAction *act;
float cfra;
-
+
/* get editor data */
if (ANIM_animdata_get_context(C, &ac) == 0)
return OPERATOR_CANCELLED;
-
+
scene = ac.scene;
cfra = (float)CFRA;
-
+
/* get action to use */
act = BLI_findlink(&CTX_data_main(C)->action, RNA_enum_get(op->ptr, "action"));
-
+
if (act == NULL) {
BKE_report(op->reports, RPT_ERROR, "No valid action to add");
//printf("Add strip - actname = '%s'\n", actname);
@@ -610,68 +610,68 @@ static int nlaedit_add_actionclip_exec(bContext *C, wmOperator *op)
"for this action to avoid future problems)",
act->id.name + 2);
}
-
+
/* add tracks to empty but selected animdata blocks so that strips can be added to those directly
* without having to manually add tracks first
*/
nlaedit_add_tracks_empty(&ac);
-
+
/* get a list of the editable tracks being shown in the NLA
- * - this is limited to active ones for now, but could be expanded to
+ * - this is limited to active ones for now, but could be expanded to
*/
filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_ACTIVE | ANIMFILTER_FOREDIT);
items = ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype);
-
+
if (items == 0) {
- BKE_report(op->reports, RPT_ERROR,
+ BKE_report(op->reports, RPT_ERROR,
"No active track(s) to add strip to, select an existing track or add one before trying again");
return OPERATOR_CANCELLED;
}
-
+
/* for every active track, try to add strip to free space in track or to the top of the stack if no space */
for (ale = anim_data.first; ale; ale = ale->next) {
NlaTrack *nlt = (NlaTrack *)ale->data;
AnimData *adt = ale->adt;
NlaStrip *strip = NULL;
-
- /* sanity check: only apply actions of the right type for this ID
+
+ /* sanity check: only apply actions of the right type for this ID
* NOTE: in the case that this hasn't been set, we've already warned the user about this already
*/
if ((act->idroot) && (act->idroot != GS(ale->id->name))) {
- BKE_reportf(op->reports, RPT_ERROR,
+ BKE_reportf(op->reports, RPT_ERROR,
"Could not add action '%s' as it cannot be used relative to ID-blocks of type '%s'",
act->id.name + 2, ale->id->name);
continue;
}
-
+
/* create a new strip, and offset it to start on the current frame */
strip = BKE_nlastrip_new(act);
-
+
strip->end += (cfra - strip->start);
strip->start = cfra;
-
+
/* firstly try adding strip to our current track, but if that fails, add to a new track */
if (BKE_nlatrack_add_strip(nlt, strip) == 0) {
- /* trying to add to the current failed (no space),
+ /* trying to add to the current failed (no space),
* so add a new track to the stack, and add to that...
*/
nlt = BKE_nlatrack_add(adt, NULL);
BKE_nlatrack_add_strip(nlt, strip);
}
-
+
/* auto-name it */
BKE_nlastrip_validate_name(adt, strip);
}
-
+
/* free temp data */
ANIM_animdata_freelist(&anim_data);
-
+
/* refresh auto strip properties */
ED_nla_postop_refresh(&ac);
-
+
/* set notifier that things have changed */
WM_event_add_notifier(C, NC_ANIMATION | ND_NLA | NA_EDITED, NULL);
-
+
/* done */
return OPERATOR_FINISHED;
}
@@ -684,15 +684,15 @@ void NLA_OT_actionclip_add(wmOperatorType *ot)
ot->name = "Add Action Strip";
ot->idname = "NLA_OT_actionclip_add";
ot->description = "Add an Action-Clip strip (i.e. an NLA Strip referencing an Action) to the active track";
-
+
/* api callbacks */
ot->invoke = WM_enum_search_invoke;
ot->exec = nlaedit_add_actionclip_exec;
ot->poll = nlaop_poll_tweakmode_off;
-
+
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
-
+
/* props */
// TODO: this would be nicer as an ID-pointer...
prop = RNA_def_enum(ot->srna, "action", DummyRNA_NULL_items, 0, "Action", "");
@@ -707,45 +707,45 @@ void NLA_OT_actionclip_add(wmOperatorType *ot)
static int nlaedit_add_transition_exec(bContext *C, wmOperator *op)
{
bAnimContext ac;
-
+
ListBase anim_data = {NULL, NULL};
bAnimListElem *ale;
int filter;
-
+
bool done = false;
-
+
/* get editor data */
if (ANIM_animdata_get_context(C, &ac) == 0)
return OPERATOR_CANCELLED;
-
+
/* get a list of the editable tracks being shown in the NLA */
filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_FOREDIT);
ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype);
-
+
/* for each track, find pairs of strips to add transitions to */
for (ale = anim_data.first; ale; ale = ale->next) {
NlaTrack *nlt = (NlaTrack *)ale->data;
AnimData *adt = ale->adt;
NlaStrip *s1, *s2;
-
+
/* get initial pair of strips */
if (ELEM(nlt->strips.first, NULL, nlt->strips.last))
continue;
s1 = nlt->strips.first;
s2 = s1->next;
-
+
/* loop over strips */
for (; s1 && s2; s1 = s2, s2 = s2->next) {
NlaStrip *strip;
-
+
/* check if both are selected */
if (ELEM(0, (s1->flag & NLASTRIP_FLAG_SELECT), (s2->flag & NLASTRIP_FLAG_SELECT)))
continue;
/* check if there's space between the two */
if (IS_EQF(s1->end, s2->start))
continue;
- /* make sure neither one is a transition
- * - although this is impossible to create with the standard tools,
+ /* make sure neither one is a transition
+ * - although this is impossible to create with the standard tools,
* the user may have altered the settings
*/
if (ELEM(NLASTRIP_TYPE_TRANSITION, s1->type, s2->type))
@@ -753,48 +753,48 @@ static int nlaedit_add_transition_exec(bContext *C, wmOperator *op)
/* also make sure neither one is a soundclip */
if (ELEM(NLASTRIP_TYPE_SOUND, s1->type, s2->type))
continue;
-
+
/* allocate new strip */
strip = MEM_callocN(sizeof(NlaStrip), "NlaStrip");
BLI_insertlinkafter(&nlt->strips, s1, strip);
-
+
/* set the type */
strip->type = NLASTRIP_TYPE_TRANSITION;
-
- /* generic settings
+
+ /* generic settings
* - selected flag to highlight this to the user
- * - auto-blends to ensure that blend in/out values are automatically
+ * - auto-blends to ensure that blend in/out values are automatically
* determined by overlaps of strips
*/
strip->flag = NLASTRIP_FLAG_SELECT | NLASTRIP_FLAG_AUTO_BLENDS;
-
+
/* range is simply defined as the endpoints of the adjacent strips */
strip->start = s1->end;
strip->end = s2->start;
-
+
/* scale and repeat aren't of any use, but shouldn't ever be 0 */
strip->scale = 1.0f;
strip->repeat = 1.0f;
-
+
/* auto-name it */
BKE_nlastrip_validate_name(adt, strip);
-
+
/* make note of this */
done = true;
}
}
-
+
/* free temp data */
ANIM_animdata_freelist(&anim_data);
-
+
/* was anything added? */
if (done) {
/* refresh auto strip properties */
ED_nla_postop_refresh(&ac);
-
+
/* set notifier that things have changed */
WM_event_add_notifier(C, NC_ANIMATION | ND_NLA | NA_EDITED, NULL);
-
+
/* done */
return OPERATOR_FINISHED;
}
@@ -810,11 +810,11 @@ void NLA_OT_transition_add(wmOperatorType *ot)
ot->name = "Add Transition";
ot->idname = "NLA_OT_transition_add";
ot->description = "Add a transition strip between two adjacent selected strips";
-
+
/* api callbacks */
ot->exec = nlaedit_add_transition_exec;
ot->poll = nlaop_poll_tweakmode_off;
-
+
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
}
@@ -825,66 +825,66 @@ void NLA_OT_transition_add(wmOperatorType *ot)
static int nlaedit_add_sound_exec(bContext *C, wmOperator *UNUSED(op))
{
bAnimContext ac;
-
+
ListBase anim_data = {NULL, NULL};
bAnimListElem *ale;
int filter;
-
+
Scene *scene;
int cfra;
-
+
/* get editor data */
if (ANIM_animdata_get_context(C, &ac) == 0)
return OPERATOR_CANCELLED;
-
+
scene = ac.scene;
cfra = CFRA;
-
+
/* get a list of the editable tracks being shown in the NLA */
filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_SEL | ANIMFILTER_FOREDIT);
ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype);
-
+
/* for each track, add sound clips if it belongs to a speaker */
// TODO: what happens if there aren't any tracks... well that's a more general problem for later
for (ale = anim_data.first; ale; ale = ale->next) {
Object *ob = (Object *)ale->id; /* may not be object until we actually check! */
-
+
AnimData *adt = ale->adt;
NlaTrack *nlt = (NlaTrack *)ale->data;
NlaStrip *strip;
-
+
/* does this belong to speaker - assumed to live on Object level only */
if ((GS(ale->id->name) != ID_OB) || (ob->type != OB_SPEAKER))
continue;
-
+
/* create a new strip, and offset it to start on the current frame */
strip = BKE_nla_add_soundstrip(ac.scene, ob->data);
-
+
strip->start += cfra;
strip->end += cfra;
-
+
/* firstly try adding strip to our current track, but if that fails, add to a new track */
if (BKE_nlatrack_add_strip(nlt, strip) == 0) {
- /* trying to add to the current failed (no space),
+ /* trying to add to the current failed (no space),
* so add a new track to the stack, and add to that...
*/
nlt = BKE_nlatrack_add(adt, NULL);
BKE_nlatrack_add_strip(nlt, strip);
}
-
+
/* auto-name it */
BKE_nlastrip_validate_name(adt, strip);
}
-
+
/* free temp data */
ANIM_animdata_freelist(&anim_data);
-
+
/* refresh auto strip properties */
ED_nla_postop_refresh(&ac);
-
+
/* set notifier that things have changed */
WM_event_add_notifier(C, NC_ANIMATION | ND_NLA | NA_EDITED, NULL);
-
+
/* done */
return OPERATOR_FINISHED;
}
@@ -895,11 +895,11 @@ void NLA_OT_soundclip_add(wmOperatorType *ot)
ot->name = "Add Sound Clip";
ot->idname = "NLA_OT_soundclip_add";
ot->description = "Add a strip for controlling when speaker plays its sound clip";
-
+
/* api callbacks */
ot->exec = nlaedit_add_sound_exec;
ot->poll = nlaop_poll_tweakmode_off;
-
+
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
}
@@ -911,28 +911,28 @@ void NLA_OT_soundclip_add(wmOperatorType *ot)
static int nlaedit_add_meta_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 editable tracks being shown in the NLA */
filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_FOREDIT);
ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype);
-
+
/* for each track, find pairs of strips to add transitions to */
for (ale = anim_data.first; ale; ale = ale->next) {
NlaTrack *nlt = (NlaTrack *)ale->data;
AnimData *adt = ale->adt;
NlaStrip *strip;
-
+
/* create meta-strips from the continuous chains of selected strips */
BKE_nlastrips_make_metas(&nlt->strips, 0);
-
+
/* name the metas */
for (strip = nlt->strips.first; strip; strip = strip->next) {
/* auto-name this strip if selected (that means it is a meta) */
@@ -940,13 +940,13 @@ static int nlaedit_add_meta_exec(bContext *C, wmOperator *UNUSED(op))
BKE_nlastrip_validate_name(adt, strip);
}
}
-
+
/* free temp data */
ANIM_animdata_freelist(&anim_data);
-
+
/* set notifier that things have changed */
WM_event_add_notifier(C, NC_ANIMATION | ND_NLA | NA_EDITED, NULL);
-
+
/* done */
return OPERATOR_FINISHED;
}
@@ -957,11 +957,11 @@ void NLA_OT_meta_add(wmOperatorType *ot)
ot->name = "Add Meta-Strips";
ot->idname = "NLA_OT_meta_add";
ot->description = "Add new meta-strips incorporating the selected strips";
-
+
/* api callbacks */
ot->exec = nlaedit_add_meta_exec;
ot->poll = nlaop_poll_tweakmode_off;
-
+
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
}
@@ -972,33 +972,33 @@ void NLA_OT_meta_add(wmOperatorType *ot)
static int nlaedit_remove_meta_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 editable tracks being shown in the NLA */
filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_FOREDIT);
ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype);
-
+
/* for each track, find pairs of strips to add transitions to */
for (ale = anim_data.first; ale; ale = ale->next) {
NlaTrack *nlt = (NlaTrack *)ale->data;
-
+
/* clear all selected meta-strips, regardless of whether they are temporary or not */
BKE_nlastrips_clear_metas(&nlt->strips, 1, 0);
}
-
+
/* free temp data */
ANIM_animdata_freelist(&anim_data);
-
+
/* set notifier that things have changed */
WM_event_add_notifier(C, NC_ANIMATION | ND_NLA | NA_EDITED, NULL);
-
+
/* done */
return OPERATOR_FINISHED;
}
@@ -1009,11 +1009,11 @@ void NLA_OT_meta_remove(wmOperatorType *ot)
ot->name = "Remove Meta-Strips";
ot->idname = "NLA_OT_meta_remove";
ot->description = "Separate out the strips held by the selected meta-strips";
-
+
/* api callbacks */
ot->exec = nlaedit_remove_meta_exec;
ot->poll = nlaop_poll_tweakmode_off;
-
+
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
}
@@ -1022,27 +1022,27 @@ void NLA_OT_meta_remove(wmOperatorType *ot)
/* Duplicates the selected NLA-Strips, putting them on new tracks above the one
* the originals were housed in.
*/
-
+
static int nlaedit_duplicate_exec(bContext *C, wmOperator *op)
{
bAnimContext ac;
-
+
ListBase anim_data = {NULL, NULL};
bAnimListElem *ale;
int filter;
-
+
bool linked = RNA_boolean_get(op->ptr, "linked");
bool done = false;
-
+
/* get editor data */
if (ANIM_animdata_get_context(C, &ac) == 0)
return OPERATOR_CANCELLED;
-
+
/* get a list of editable tracks being shown in the NLA */
filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_FOREDIT);
ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype);
-
- /* duplicate strips in tracks starting from the last one so that we're
+
+ /* duplicate strips in tracks starting from the last one so that we're
* less likely to duplicate strips we just duplicated...
*/
for (ale = anim_data.last; ale; ale = ale->prev) {
@@ -1050,46 +1050,46 @@ static int nlaedit_duplicate_exec(bContext *C, wmOperator *op)
AnimData *adt = ale->adt;
NlaStrip *strip, *nstrip, *next;
NlaTrack *track;
-
+
for (strip = nlt->strips.first; strip; strip = next) {
next = strip->next;
-
+
/* if selected, split the strip at its midpoint */
if (strip->flag & NLASTRIP_FLAG_SELECT) {
/* make a copy (assume that this is possible) */
nstrip = BKE_nlastrip_copy(strip, linked);
-
+
/* in case there's no space in the track above, or we haven't got a reference to it yet, try adding */
if (BKE_nlatrack_add_strip(nlt->next, nstrip) == 0) {
/* need to add a new track above the one above the current one
- * - if the current one is the last one, nlt->next will be NULL, which defaults to adding
+ * - if the current one is the last one, nlt->next will be NULL, which defaults to adding
* at the top of the stack anyway...
*/
track = BKE_nlatrack_add(adt, nlt->next);
BKE_nlatrack_add_strip(track, nstrip);
}
-
+
/* deselect the original and the active flag */
strip->flag &= ~(NLASTRIP_FLAG_SELECT | NLASTRIP_FLAG_ACTIVE);
-
+
/* auto-name newly created strip */
BKE_nlastrip_validate_name(adt, nstrip);
-
+
done = true;
}
}
}
-
+
/* free temp data */
ANIM_animdata_freelist(&anim_data);
-
+
if (done) {
/* refresh auto strip properties */
ED_nla_postop_refresh(&ac);
-
+
/* set notifier that things have changed */
WM_event_add_notifier(C, NC_ANIMATION | ND_NLA | NA_EDITED, NULL);
-
+
/* done */
return OPERATOR_FINISHED;
}
@@ -1100,7 +1100,7 @@ static int nlaedit_duplicate_exec(bContext *C, wmOperator *op)
static int nlaedit_duplicate_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
{
nlaedit_duplicate_exec(C, op);
-
+
RNA_enum_set(op->ptr, "mode", TFM_TRANSLATION);
WM_operator_name_call(C, "TRANSFORM_OT_transform", WM_OP_INVOKE_REGION_WIN, op->ptr);
@@ -1113,18 +1113,18 @@ void NLA_OT_duplicate(wmOperatorType *ot)
ot->name = "Duplicate Strips";
ot->idname = "NLA_OT_duplicate";
ot->description = "Duplicate selected NLA-Strips, adding the new strips in new tracks above the originals";
-
+
/* api callbacks */
ot->invoke = nlaedit_duplicate_invoke;
ot->exec = nlaedit_duplicate_exec;
ot->poll = nlaop_poll_tweakmode_off;
-
+
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
-
+
/* own properties */
ot->prop = RNA_def_boolean(ot->srna, "linked", false, "Linked", "When duplicating strips, assign new copies of the actions they use");
-
+
/* to give to transform */
RNA_def_enum(ot->srna, "mode", rna_enum_transform_mode_types, TFM_TRANSLATION, "Mode", "");
}
@@ -1135,52 +1135,52 @@ void NLA_OT_duplicate(wmOperatorType *ot)
static int nlaedit_delete_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 editable tracks being shown in the NLA */
filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_FOREDIT);
ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype);
-
+
/* for each NLA-Track, delete all selected strips */
for (ale = anim_data.first; ale; ale = ale->next) {
NlaTrack *nlt = (NlaTrack *)ale->data;
NlaStrip *strip, *nstrip;
-
+
for (strip = nlt->strips.first; strip; strip = nstrip) {
nstrip = strip->next;
-
+
/* if selected, delete */
if (strip->flag & NLASTRIP_FLAG_SELECT) {
/* if a strip either side of this was a transition, delete those too */
- if ((strip->prev) && (strip->prev->type == NLASTRIP_TYPE_TRANSITION))
+ if ((strip->prev) && (strip->prev->type == NLASTRIP_TYPE_TRANSITION))
BKE_nlastrip_free(&nlt->strips, strip->prev);
if ((nstrip) && (nstrip->type == NLASTRIP_TYPE_TRANSITION)) {
nstrip = nstrip->next;
BKE_nlastrip_free(&nlt->strips, strip->next);
}
-
+
/* finally, delete this strip */
BKE_nlastrip_free(&nlt->strips, strip);
}
}
}
-
+
/* free temp data */
ANIM_animdata_freelist(&anim_data);
-
+
/* refresh auto strip properties */
ED_nla_postop_refresh(&ac);
-
+
/* set notifier that things have changed */
WM_event_add_notifier(C, NC_ANIMATION | ND_NLA | NA_EDITED, NULL);
-
+
/* done */
return OPERATOR_FINISHED;
}
@@ -1191,18 +1191,18 @@ void NLA_OT_delete(wmOperatorType *ot)
ot->name = "Delete Strips";
ot->idname = "NLA_OT_delete";
ot->description = "Delete selected strips";
-
+
/* api callbacks */
ot->exec = nlaedit_delete_exec;
ot->poll = nlaop_poll_tweakmode_off;
-
+
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
}
/* ******************** Split Strips Operator ***************************** */
/* Splits the selected NLA-Strips into two strips at the midpoint of the strip */
-// TODO's?
+// TODO's?
// - multiple splits
// - variable-length splits?
@@ -1211,9 +1211,9 @@ static void nlaedit_split_strip_actclip(AnimData *adt, NlaTrack *nlt, NlaStrip *
{
NlaStrip *nstrip;
float splitframe, splitaframe;
-
- /* calculate the frames to do the splitting at
- * - use current frame if within extents of strip
+
+ /* calculate the frames to do the splitting at
+ * - use current frame if within extents of strip
*/
if ((cfra > strip->start) && (cfra < strip->end)) {
/* use the current frame */
@@ -1223,14 +1223,14 @@ static void nlaedit_split_strip_actclip(AnimData *adt, NlaTrack *nlt, NlaStrip *
else {
/* split in the middle */
float len;
-
+
/* strip extents */
len = strip->end - strip->start;
if (IS_EQF(len, 0.0f))
return;
else
splitframe = strip->start + (len / 2.0f);
-
+
/* action range */
len = strip->actend - strip->actstart;
if (IS_EQF(len, 0.0f))
@@ -1238,28 +1238,28 @@ static void nlaedit_split_strip_actclip(AnimData *adt, NlaTrack *nlt, NlaStrip *
else
splitaframe = strip->actstart + (len / 2.0f);
}
-
+
/* make a copy (assume that this is possible) and append
* it immediately after the current strip
*/
nstrip = BKE_nlastrip_copy(strip, true);
BLI_insertlinkafter(&nlt->strips, strip, nstrip);
-
- /* set the endpoint of the first strip and the start of the new strip
+
+ /* set the endpoint of the first strip and the start of the new strip
* to the splitframe values calculated above
*/
strip->end = splitframe;
nstrip->start = splitframe;
-
+
if ((splitaframe > strip->actstart) && (splitaframe < strip->actend)) {
/* only do this if we're splitting down the middle... */
strip->actend = splitaframe;
nstrip->actstart = splitaframe;
}
-
+
/* clear the active flag from the copy */
nstrip->flag &= ~NLASTRIP_FLAG_ACTIVE;
-
+
/* auto-name the new strip */
BKE_nlastrip_validate_name(adt, nstrip);
}
@@ -1276,28 +1276,28 @@ static void nlaedit_split_strip_meta(NlaTrack *nlt, NlaStrip *strip)
static int nlaedit_split_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 editable tracks being shown in the NLA */
filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_FOREDIT);
ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype);
-
+
/* for each NLA-Track, split all selected strips into two strips */
for (ale = anim_data.first; ale; ale = ale->next) {
NlaTrack *nlt = (NlaTrack *)ale->data;
AnimData *adt = ale->adt;
NlaStrip *strip, *next;
-
+
for (strip = nlt->strips.first; strip; strip = next) {
next = strip->next;
-
+
/* if selected, split the strip at its midpoint */
if (strip->flag & NLASTRIP_FLAG_SELECT) {
/* splitting method depends on the type of strip */
@@ -1305,27 +1305,27 @@ static int nlaedit_split_exec(bContext *C, wmOperator *UNUSED(op))
case NLASTRIP_TYPE_CLIP: /* action-clip */
nlaedit_split_strip_actclip(adt, nlt, strip, (float)ac.scene->r.cfra);
break;
-
+
case NLASTRIP_TYPE_META: /* meta-strips need special handling */
nlaedit_split_strip_meta(nlt, strip);
break;
-
+
default: /* for things like Transitions, do not split! */
break;
}
}
}
}
-
+
/* free temp data */
ANIM_animdata_freelist(&anim_data);
-
+
/* refresh auto strip properties */
ED_nla_postop_refresh(&ac);
-
+
/* set notifier that things have changed */
WM_event_add_notifier(C, NC_ANIMATION | ND_NLA | NA_EDITED, NULL);
-
+
/* done */
return OPERATOR_FINISHED;
}
@@ -1336,11 +1336,11 @@ void NLA_OT_split(wmOperatorType *ot)
ot->name = "Split Strips";
ot->idname = "NLA_OT_split";
ot->description = "Split selected strips at their midpoints";
-
+
/* api callbacks */
ot->exec = nlaedit_split_exec;
ot->poll = nlaop_poll_tweakmode_off;
-
+
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
}
@@ -1351,34 +1351,34 @@ void NLA_OT_split(wmOperatorType *ot)
static int nlaedit_bake_exec(bContext *C, wmOperator *UNUSED(op))
{
bAnimContext ac;
-
+
ListBase anim_data = {NULL, NULL};
bAnimListElem *ale;
int filter;
// int flag = 0;
-
+
/* get editor data */
if (ANIM_animdata_get_context(C, &ac) == 0)
return OPERATOR_CANCELLED;
-
+
/* get a list of the editable tracks being shown in the NLA */
filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_ANIMDATA | ANIMFILTER_FOREDIT);
ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype);
-
+
/* for each AnimData block, bake strips to animdata... */
for (ale = anim_data.first; ale; ale = ale->next) {
//BKE_nla_bake(ac.scene, ale->id, ale->data, flag);
}
-
+
/* free temp data */
ANIM_animdata_freelist(&anim_data);
-
+
/* refresh auto strip properties */
ED_nla_postop_refresh(&ac);
-
+
/* set notifier that things have changed */
WM_event_add_notifier(C, NC_ANIMATION | ND_NLA | NA_EDITED, NULL);
-
+
/* done */
return OPERATOR_FINISHED;
}
@@ -1390,11 +1390,11 @@ static void UNUSED_FUNCTION(NLA_OT_bake)(wmOperatorType *ot)
ot->name = "Bake Strips";
ot->idname = "NLA_OT_bake";
ot->description = "Bake all strips of selected AnimData blocks";
-
+
/* api callbacks */
ot->exec = nlaedit_bake_exec;
ot->poll = nlaop_poll_tweakmode_off;
-
+
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
}
@@ -1408,44 +1408,44 @@ static void UNUSED_FUNCTION(NLA_OT_bake)(wmOperatorType *ot)
static int nlaedit_toggle_mute_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 editable tracks being shown in the NLA */
filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_FOREDIT);
ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype);
-
+
/* go over all selected strips */
for (ale = anim_data.first; ale; ale = ale->next) {
NlaTrack *nlt = (NlaTrack *)ale->data;
NlaStrip *strip;
-
+
/* for every selected strip, toggle muting */
for (strip = nlt->strips.first; strip; strip = strip->next) {
if (strip->flag & NLASTRIP_FLAG_SELECT) {
/* just flip the mute flag for now */
// TODO: have a pre-pass to check if mute all or unmute all?
strip->flag ^= NLASTRIP_FLAG_MUTED;
-
+
/* tag AnimData to get recalculated */
ale->update |= ANIM_UPDATE_DEPS;
}
}
}
-
+
/* cleanup */
ANIM_animdata_update(&ac, &anim_data);
ANIM_animdata_freelist(&anim_data);
-
+
/* set notifier that things have changed */
WM_event_add_notifier(C, NC_ANIMATION | ND_NLA | NA_EDITED, NULL);
-
+
/* done */
return OPERATOR_FINISHED;
}
@@ -1456,11 +1456,11 @@ void NLA_OT_mute_toggle(wmOperatorType *ot)
ot->name = "Toggle Muting";
ot->idname = "NLA_OT_mute_toggle";
ot->description = "Mute or un-mute selected strips";
-
+
/* api callbacks */
ot->exec = nlaedit_toggle_mute_exec;
ot->poll = nlaop_poll_tweakmode_off;
-
+
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
}
@@ -1471,35 +1471,35 @@ void NLA_OT_mute_toggle(wmOperatorType *ot)
static int nlaedit_swap_exec(bContext *C, wmOperator *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 editable tracks being shown in the NLA */
filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_FOREDIT);
ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype);
-
+
/* consider each track in turn */
for (ale = anim_data.first; ale; ale = ale->next) {
NlaTrack *nlt = (NlaTrack *)ale->data;
-
+
NlaStrip *strip, *stripN = NULL;
NlaStrip *sa = NULL, *sb = NULL;
-
+
/* make temporary metastrips so that entire islands of selections can be moved around */
BKE_nlastrips_make_metas(&nlt->strips, 1);
-
- /* special case: if there is only 1 island (i.e. temp meta BUT NOT unselected/normal/normal-meta strips) left after this,
+
+ /* special case: if there is only 1 island (i.e. temp meta BUT NOT unselected/normal/normal-meta strips) left after this,
* and this island has two strips inside it, then we should be able to just swap these still...
*/
if (BLI_listbase_is_empty(&nlt->strips) == false) {
NlaStrip *mstrip = (NlaStrip *)nlt->strips.first;
-
+
if ((mstrip->flag & NLASTRIP_FLAG_TEMP_META) &&
(BLI_listbase_count_at_most(&mstrip->strips, 3) == 2))
{
@@ -1507,13 +1507,13 @@ static int nlaedit_swap_exec(bContext *C, wmOperator *op)
BKE_nlastrips_clear_metas(&nlt->strips, 0, 1);
}
}
-
+
/* get two selected strips only (these will be metas due to prev step) to operate on
* - only allow swapping 2, as with more the context becomes unclear
*/
for (strip = nlt->strips.first; strip; strip = stripN) {
stripN = strip->next;
-
+
if (strip->flag & NLASTRIP_FLAG_SELECT) {
/* first or second strip? */
if (sa == NULL) {
@@ -1530,10 +1530,10 @@ static int nlaedit_swap_exec(bContext *C, wmOperator *op)
}
}
}
-
+
if (strip) {
/* too many selected warning */
- BKE_reportf(op->reports, RPT_WARNING,
+ BKE_reportf(op->reports, RPT_WARNING,
"Too many clusters of strips selected in NLA Track (%s): needs exactly 2 to be selected",
nlt->name);
}
@@ -1548,11 +1548,11 @@ static int nlaedit_swap_exec(bContext *C, wmOperator *op)
}
else {
float nsa[2], nsb[2];
-
+
/* remove these strips from the track, so that we can test if they can fit in the proposed places */
BLI_remlink(&nlt->strips, sa);
BLI_remlink(&nlt->strips, sb);
-
+
/* calculate new extents for strips */
/* a --> b */
nsa[0] = sb->start;
@@ -1560,16 +1560,16 @@ static int nlaedit_swap_exec(bContext *C, wmOperator *op)
/* b --> a */
nsb[0] = sa->start;
nsb[1] = sa->start + (sb->end - sb->start);
-
+
/* check if the track has room for the strips to be swapped */
- if (BKE_nlastrips_has_space(&nlt->strips, nsa[0], nsa[1]) &&
+ if (BKE_nlastrips_has_space(&nlt->strips, nsa[0], nsa[1]) &&
BKE_nlastrips_has_space(&nlt->strips, nsb[0], nsb[1]))
{
/* set new extents for strips then */
sa->start = nsa[0];
sa->end = nsa[1];
BKE_nlameta_flush_transforms(sa);
-
+
sb->start = nsb[0];
sb->end = nsb[1];
BKE_nlameta_flush_transforms(sb);
@@ -1586,25 +1586,25 @@ static int nlaedit_swap_exec(bContext *C, wmOperator *op)
sa->name, sb->name);
}
}
-
+
/* add strips back to track now */
BKE_nlatrack_add_strip(nlt, sa);
BKE_nlatrack_add_strip(nlt, sb);
}
-
+
/* clear (temp) metastrips */
BKE_nlastrips_clear_metas(&nlt->strips, 0, 1);
}
-
+
/* free temp data */
ANIM_animdata_freelist(&anim_data);
-
+
/* refresh auto strip properties */
ED_nla_postop_refresh(&ac);
-
+
/* set notifier that things have changed */
WM_event_add_notifier(C, NC_ANIMATION | ND_NLA | NA_EDITED, NULL);
-
+
/* done */
return OPERATOR_FINISHED;
}
@@ -1615,11 +1615,11 @@ void NLA_OT_swap(wmOperatorType *ot)
ot->name = "Swap Strips";
ot->idname = "NLA_OT_swap";
ot->description = "Swap order of selected strips within tracks";
-
+
/* api callbacks */
ot->exec = nlaedit_swap_exec;
ot->poll = nlaop_poll_tweakmode_off;
-
+
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
}
@@ -1630,19 +1630,19 @@ void NLA_OT_swap(wmOperatorType *ot)
static int nlaedit_move_up_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 editable tracks being shown in the NLA */
filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_FOREDIT);
ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype);
-
+
/* since we're potentially moving strips from lower tracks to higher tracks, we should
* loop over the tracks in reverse order to avoid moving earlier strips up multiple tracks
*/
@@ -1650,15 +1650,15 @@ static int nlaedit_move_up_exec(bContext *C, wmOperator *UNUSED(op))
NlaTrack *nlt = (NlaTrack *)ale->data;
NlaTrack *nltn = nlt->next;
NlaStrip *strip, *stripn;
-
+
/* if this track has no tracks after it, skip for now... */
if (nltn == NULL)
continue;
-
+
/* for every selected strip, try to move */
for (strip = nlt->strips.first; strip; strip = stripn) {
stripn = strip->next;
-
+
if (strip->flag & NLASTRIP_FLAG_SELECT) {
/* check if the track above has room for this strip */
if (BKE_nlatrack_has_space(nltn, strip->start, strip->end)) {
@@ -1669,16 +1669,16 @@ static int nlaedit_move_up_exec(bContext *C, wmOperator *UNUSED(op))
}
}
}
-
+
/* free temp data */
ANIM_animdata_freelist(&anim_data);
-
+
/* refresh auto strip properties */
ED_nla_postop_refresh(&ac);
-
+
/* set notifier that things have changed */
WM_event_add_notifier(C, NC_ANIMATION | ND_NLA | NA_EDITED, NULL);
-
+
/* done */
return OPERATOR_FINISHED;
}
@@ -1689,11 +1689,11 @@ void NLA_OT_move_up(wmOperatorType *ot)
ot->name = "Move Strips Up";
ot->idname = "NLA_OT_move_up";
ot->description = "Move selected strips up a track if there's room";
-
+
/* api callbacks */
ot->exec = nlaedit_move_up_exec;
ot->poll = nlaop_poll_tweakmode_off;
-
+
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
}
@@ -1704,19 +1704,19 @@ void NLA_OT_move_up(wmOperatorType *ot)
static int nlaedit_move_down_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 editable tracks being shown in the NLA */
filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_FOREDIT);
ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype);
-
+
/* loop through the tracks in normal order, since we're pushing strips down,
* strips won't get operated on twice
*/
@@ -1724,15 +1724,15 @@ static int nlaedit_move_down_exec(bContext *C, wmOperator *UNUSED(op))
NlaTrack *nlt = (NlaTrack *)ale->data;
NlaTrack *nltp = nlt->prev;
NlaStrip *strip, *stripn;
-
+
/* if this track has no tracks before it, skip for now... */
if (nltp == NULL)
continue;
-
+
/* for every selected strip, try to move */
for (strip = nlt->strips.first; strip; strip = stripn) {
stripn = strip->next;
-
+
if (strip->flag & NLASTRIP_FLAG_SELECT) {
/* check if the track below has room for this strip */
if (BKE_nlatrack_has_space(nltp, strip->start, strip->end)) {
@@ -1743,16 +1743,16 @@ static int nlaedit_move_down_exec(bContext *C, wmOperator *UNUSED(op))
}
}
}
-
+
/* free temp data */
ANIM_animdata_freelist(&anim_data);
-
+
/* refresh auto strip properties */
ED_nla_postop_refresh(&ac);
-
+
/* set notifier that things have changed */
WM_event_add_notifier(C, NC_ANIMATION | ND_NLA | NA_EDITED, NULL);
-
+
/* done */
return OPERATOR_FINISHED;
}
@@ -1763,11 +1763,11 @@ void NLA_OT_move_down(wmOperatorType *ot)
ot->name = "Move Strips Down";
ot->idname = "NLA_OT_move_down";
ot->description = "Move selected strips down a track if there's room";
-
+
/* api callbacks */
ot->exec = nlaedit_move_down_exec;
ot->poll = nlaop_poll_tweakmode_off;
-
+
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
}
@@ -1778,26 +1778,26 @@ void NLA_OT_move_down(wmOperatorType *ot)
static int nlaedit_sync_actlen_exec(bContext *C, wmOperator *op)
{
bAnimContext ac;
-
+
ListBase anim_data = {NULL, NULL};
bAnimListElem *ale;
int filter;
const bool active_only = RNA_boolean_get(op->ptr, "active");
-
+
/* get editor data */
if (ANIM_animdata_get_context(C, &ac) == 0)
return OPERATOR_CANCELLED;
-
+
/* get a list of the editable tracks being shown in the NLA */
filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_FOREDIT);
if (active_only) filter |= ANIMFILTER_ACTIVE;
ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype);
-
+
/* for each NLA-Track, apply scale of all selected strips */
for (ale = anim_data.first; ale; ale = ale->next) {
NlaTrack *nlt = (NlaTrack *)ale->data;
NlaStrip *strip;
-
+
for (strip = nlt->strips.first; strip; strip = strip->next) {
/* strip selection/active status check */
if (active_only) {
@@ -1808,27 +1808,27 @@ static int nlaedit_sync_actlen_exec(bContext *C, wmOperator *op)
if ((strip->flag & NLASTRIP_FLAG_SELECT) == 0)
continue;
}
-
+
/* must be action-clip only (transitions don't have scale) */
if (strip->type == NLASTRIP_TYPE_CLIP) {
- if (strip->act == NULL)
+ if (strip->act == NULL)
continue;
-
+
/* recalculate the length of the action */
calc_action_range(strip->act, &strip->actstart, &strip->actend, 0);
-
+
/* adjust the strip extents in response to this */
BKE_nlastrip_recalculate_bounds(strip);
}
}
}
-
+
/* free temp data */
ANIM_animdata_freelist(&anim_data);
-
+
/* set notifier that things have changed */
WM_event_add_notifier(C, NC_ANIMATION | ND_NLA | NA_EDITED, NULL);
-
+
/* done */
return OPERATOR_FINISHED;
}
@@ -1839,14 +1839,14 @@ void NLA_OT_action_sync_length(wmOperatorType *ot)
ot->name = "Sync Action Length";
ot->idname = "NLA_OT_action_sync_length";
ot->description = "Synchronize the length of the referenced Action with the length used in the strip";
-
+
/* api callbacks */
ot->exec = nlaedit_sync_actlen_exec;
ot->poll = nlaop_poll_tweakmode_off;
-
+
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
-
+
/* properties */
ot->prop = RNA_def_boolean(ot->srna, "active", 1, "Active Strip Only", "Only sync the active length for the active strip");
}
@@ -1858,19 +1858,19 @@ static int nlaedit_make_single_user_exec(bContext *C, wmOperator *UNUSED(op))
{
Main *bmain = CTX_data_main(C);
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 editable tracks being shown in the NLA */
filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_FOREDIT);
ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype);
-
+
/* Ensure that each action used only has a single user
* - This is done in reverse order so that the original strips are
* likely to still get to keep their action
@@ -1878,34 +1878,34 @@ static int nlaedit_make_single_user_exec(bContext *C, wmOperator *UNUSED(op))
for (ale = anim_data.last; ale; ale = ale->prev) {
NlaTrack *nlt = (NlaTrack *)ale->data;
NlaStrip *strip;
-
+
for (strip = nlt->strips.last; strip; strip = strip->prev) {
/* must be action-clip only (as only these have actions) */
if ((strip->flag & NLASTRIP_FLAG_SELECT) && (strip->type == NLASTRIP_TYPE_CLIP)) {
- if (strip->act == NULL)
+ if (strip->act == NULL)
continue;
-
+
/* multi-user? */
if (ID_REAL_USERS(strip->act) > 1) {
/* make a new copy of the action for us to use (it will have 1 user already) */
bAction *new_action = BKE_action_copy(bmain, strip->act);
-
+
/* decrement user count of our existing action */
id_us_min(&strip->act->id);
-
+
/* switch to the new copy */
strip->act = new_action;
}
}
}
}
-
+
/* free temp data */
ANIM_animdata_freelist(&anim_data);
-
+
/* set notifier that things have changed */
WM_event_add_notifier(C, NC_ANIMATION | ND_NLA | NA_EDITED, NULL);
-
+
/* done */
return OPERATOR_FINISHED;
}
@@ -1916,12 +1916,12 @@ void NLA_OT_make_single_user(wmOperatorType *ot)
ot->name = "Make Single User";
ot->idname = "NLA_OT_make_single_user";
ot->description = "Ensure that each action is only used once in the set of strips selected";
-
+
/* api callbacks */
ot->invoke = WM_operator_confirm;
ot->exec = nlaedit_make_single_user_exec;
ot->poll = nlaop_poll_tweakmode_off;
-
+
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
}
@@ -1934,12 +1934,12 @@ static short bezt_apply_nlamapping(KeyframeEditData *ked, BezTriple *bezt)
{
/* NLA-strip which has this scaling is stored in ked->data */
NlaStrip *strip = (NlaStrip *)ked->data;
-
+
/* adjust all the times */
bezt->vec[0][0] = nlastrip_get_frame(strip, bezt->vec[0][0], NLATIME_CONVERT_MAP);
bezt->vec[1][0] = nlastrip_get_frame(strip, bezt->vec[1][0], NLATIME_CONVERT_MAP);
bezt->vec[2][0] = nlastrip_get_frame(strip, bezt->vec[2][0], NLATIME_CONVERT_MAP);
-
+
/* nothing to return or else we exit */
return 0;
}
@@ -1948,61 +1948,61 @@ static int nlaedit_apply_scale_exec(bContext *C, wmOperator *UNUSED(op))
{
Main *bmain = CTX_data_main(C);
bAnimContext ac;
-
+
ListBase anim_data = {NULL, NULL};
bAnimListElem *ale;
int filter;
-
+
KeyframeEditData ked = {{NULL}};
-
+
/* get editor data */
if (ANIM_animdata_get_context(C, &ac) == 0)
return OPERATOR_CANCELLED;
-
+
/* get a list of the editable tracks being shown in the NLA */
filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_FOREDIT);
ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype);
-
+
/* for each NLA-Track, apply scale of all selected strips */
for (ale = anim_data.first; ale; ale = ale->next) {
NlaTrack *nlt = (NlaTrack *)ale->data;
NlaStrip *strip;
-
+
for (strip = nlt->strips.first; strip; strip = strip->next) {
/* strip must be selected, and must be action-clip only (transitions don't have scale) */
if ((strip->flag & NLASTRIP_FLAG_SELECT) && (strip->type == NLASTRIP_TYPE_CLIP)) {
/* if the referenced action is used by other strips, make this strip use its own copy */
- if (strip->act == NULL)
+ if (strip->act == NULL)
continue;
if (strip->act->id.us > 1) {
/* make a copy of the Action to work on */
bAction *act = BKE_action_copy(bmain, strip->act);
-
+
/* set this as the new referenced action, decrementing the users of the old one */
id_us_min(&strip->act->id);
strip->act = act;
}
-
+
/* setup iterator, and iterate over all the keyframes in the action, applying this scaling */
ked.data = strip;
ANIM_animchanneldata_keyframes_loop(&ked, ac.ads, strip->act, ALE_ACT, NULL, bezt_apply_nlamapping, calchandles_fcurve);
-
+
/* clear scale of strip now that it has been applied,
* and recalculate the extents of the action now that it has been scaled
- * but leave everything else alone
+ * but leave everything else alone
*/
strip->scale = 1.0f;
calc_action_range(strip->act, &strip->actstart, &strip->actend, 0);
}
}
}
-
+
/* free temp data */
ANIM_animdata_freelist(&anim_data);
-
+
/* set notifier that things have changed */
WM_event_add_notifier(C, NC_ANIMATION | ND_NLA | NA_EDITED, NULL);
-
+
/* done */
return OPERATOR_FINISHED;
}
@@ -2013,11 +2013,11 @@ void NLA_OT_apply_scale(wmOperatorType *ot)
ot->name = "Apply Scale";
ot->idname = "NLA_OT_apply_scale";
ot->description = "Apply scaling of selected strips to their referenced Actions";
-
+
/* api callbacks */
ot->exec = nlaedit_apply_scale_exec;
ot->poll = nlaop_poll_tweakmode_off;
-
+
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
}
@@ -2028,44 +2028,44 @@ void NLA_OT_apply_scale(wmOperatorType *ot)
static int nlaedit_clear_scale_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 editable tracks being shown in the NLA */
filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_FOREDIT);
ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype);
-
+
/* for each NLA-Track, reset scale of all selected strips */
for (ale = anim_data.first; ale; ale = ale->next) {
NlaTrack *nlt = (NlaTrack *)ale->data;
NlaStrip *strip;
-
+
for (strip = nlt->strips.first; strip; strip = strip->next) {
/* strip must be selected, and must be action-clip only (transitions don't have scale) */
if ((strip->flag & NLASTRIP_FLAG_SELECT) && (strip->type == NLASTRIP_TYPE_CLIP)) {
PointerRNA strip_ptr;
-
+
RNA_pointer_create(NULL, &RNA_NlaStrip, strip, &strip_ptr);
RNA_float_set(&strip_ptr, "scale", 1.0f);
}
}
}
-
+
/* free temp data */
ANIM_animdata_freelist(&anim_data);
-
+
/* refresh auto strip properties */
ED_nla_postop_refresh(&ac);
-
+
/* set notifier that things have changed */
WM_event_add_notifier(C, NC_ANIMATION | ND_NLA | NA_EDITED, NULL);
-
+
/* done */
return OPERATOR_FINISHED;
}
@@ -2076,11 +2076,11 @@ void NLA_OT_clear_scale(wmOperatorType *ot)
ot->name = "Clear Scale";
ot->idname = "NLA_OT_clear_scale";
ot->description = "Reset scaling of selected strips";
-
+
/* api callbacks */
ot->exec = nlaedit_clear_scale_exec;
ot->poll = nlaop_poll_tweakmode_off;
-
+
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
}
@@ -2100,27 +2100,27 @@ static const EnumPropertyItem prop_nlaedit_snap_types[] = {
static int nlaedit_snap_exec(bContext *C, wmOperator *op)
{
bAnimContext ac;
-
+
ListBase anim_data = {NULL, NULL};
bAnimListElem *ale;
int filter;
-
+
Scene *scene;
int mode = RNA_enum_get(op->ptr, "type");
float secf;
-
+
/* get editor data */
if (ANIM_animdata_get_context(C, &ac) == 0)
return OPERATOR_CANCELLED;
-
+
/* get a list of the editable tracks being shown in the NLA */
filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_FOREDIT);
ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype);
-
+
/* get some necessary vars */
scene = ac.scene;
secf = (float)FPS;
-
+
/* since we may add tracks, perform this in reverse order */
for (ale = anim_data.last; ale; ale = ale->prev) {
ListBase tmp_strips = {NULL, NULL};
@@ -2128,23 +2128,23 @@ static int nlaedit_snap_exec(bContext *C, wmOperator *op)
NlaTrack *nlt = (NlaTrack *)ale->data;
NlaStrip *strip, *stripn;
NlaTrack *track;
-
+
/* create meta-strips from the continuous chains of selected strips */
BKE_nlastrips_make_metas(&nlt->strips, 1);
-
+
/* apply the snapping to all the temp meta-strips, then put them in a separate list to be added
* back to the original only if they still fit
*/
for (strip = nlt->strips.first; strip; strip = stripn) {
stripn = strip->next;
-
+
if (strip->flag & NLASTRIP_FLAG_TEMP_META) {
float start, end;
-
+
/* get the existing end-points */
start = strip->start;
end = strip->end;
-
+
/* calculate new start position based on snapping mode */
switch (mode) {
case NLAEDIT_SNAP_CFRA: /* to current frame */
@@ -2163,54 +2163,54 @@ static int nlaedit_snap_exec(bContext *C, wmOperator *op)
strip->start = start;
break;
}
-
+
/* get new endpoint based on start-point (and old length) */
strip->end = strip->start + (end - start);
-
+
/* apply transforms to meta-strip to its children */
BKE_nlameta_flush_transforms(strip);
-
+
/* remove strip from track, and add to the temp buffer */
BLI_remlink(&nlt->strips, strip);
BLI_addtail(&tmp_strips, strip);
}
}
-
+
/* try adding each meta-strip back to the track one at a time, to make sure they'll fit */
for (strip = tmp_strips.first; strip; strip = stripn) {
stripn = strip->next;
-
+
/* remove from temp-strips list */
BLI_remlink(&tmp_strips, strip);
-
+
/* in case there's no space in the current track, try adding */
if (BKE_nlatrack_add_strip(nlt, strip) == 0) {
/* need to add a new track above the current one */
track = BKE_nlatrack_add(adt, nlt);
BKE_nlatrack_add_strip(track, strip);
-
+
/* clear temp meta-strips on this new track, as we may not be able to get back to it */
BKE_nlastrips_clear_metas(&track->strips, 0, 1);
}
}
-
+
/* remove the meta-strips now that we're done */
BKE_nlastrips_clear_metas(&nlt->strips, 0, 1);
-
+
/* tag for recalculating the animation */
ale->update |= ANIM_UPDATE_DEPS;
}
-
+
/* cleanup */
ANIM_animdata_update(&ac, &anim_data);
ANIM_animdata_freelist(&anim_data);
-
+
/* refresh auto strip properties */
ED_nla_postop_refresh(&ac);
-
+
/* set notifier that things have changed */
WM_event_add_notifier(C, NC_ANIMATION | ND_NLA | NA_EDITED, NULL);
-
+
/* done */
return OPERATOR_FINISHED;
}
@@ -2221,15 +2221,15 @@ void NLA_OT_snap(wmOperatorType *ot)
ot->name = "Snap Strips";
ot->idname = "NLA_OT_snap";
ot->description = "Move start of strips to specified time";
-
+
/* api callbacks */
ot->invoke = WM_menu_invoke;
ot->exec = nlaedit_snap_exec;
ot->poll = nlaop_poll_tweakmode_off;
-
+
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
-
+
/* properties */
ot->prop = RNA_def_enum(ot->srna, "type", prop_nlaedit_snap_types, 0, "Type", "");
}
@@ -2244,31 +2244,31 @@ static const EnumPropertyItem *nla_fmodifier_itemf(bContext *C, PointerRNA *UNUS
EnumPropertyItem *item = NULL;
int totitem = 0;
int i = 0;
-
+
if (C == NULL) {
return rna_enum_fmodifier_type_items;
}
-
+
/* start from 1 to skip the 'Invalid' modifier type */
for (i = 1; i < FMODIFIER_NUM_TYPES; i++) {
const FModifierTypeInfo *fmi = get_fmodifier_typeinfo(i);
int index;
-
+
/* check if modifier is valid for this context */
if (fmi == NULL)
continue;
if (i == FMODIFIER_TYPE_CYCLES) /* we already have repeat... */
continue;
-
+
index = RNA_enum_from_value(rna_enum_fmodifier_type_items, fmi->type);
if (index != -1) { /* Not all types are implemented yet... */
RNA_enum_item_add(&item, &totitem, &rna_enum_fmodifier_type_items[index]);
}
}
-
+
RNA_enum_item_end(&item, &totitem);
*r_free = true;
-
+
return item;
}
@@ -2276,28 +2276,28 @@ static const EnumPropertyItem *nla_fmodifier_itemf(bContext *C, PointerRNA *UNUS
static int nla_fmodifier_add_exec(bContext *C, wmOperator *op)
{
bAnimContext ac;
-
+
ListBase anim_data = {NULL, NULL};
bAnimListElem *ale;
int filter;
-
+
FModifier *fcm;
int type = RNA_enum_get(op->ptr, "type");
const bool active_only = RNA_boolean_get(op->ptr, "only_active");
-
+
/* get editor data */
if (ANIM_animdata_get_context(C, &ac) == 0)
return OPERATOR_CANCELLED;
-
+
/* get a list of the editable tracks being shown in the NLA */
filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_FOREDIT);
ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype);
-
+
/* for each NLA-Track, add the specified modifier to all selected strips */
for (ale = anim_data.first; ale; ale = ale->next) {
NlaTrack *nlt = (NlaTrack *)ale->data;
NlaStrip *strip;
-
+
for (strip = nlt->strips.first; strip; strip = strip->next) {
/* can F-Modifier be added to the current strip? */
if (active_only) {
@@ -2310,14 +2310,14 @@ static int nla_fmodifier_add_exec(bContext *C, wmOperator *op)
if ((strip->flag & NLASTRIP_FLAG_SELECT) == 0)
continue;
}
-
+
/* sound clips are not affected by FModifiers */
if (strip->type == NLASTRIP_TYPE_SOUND)
continue;
-
+
/* add F-Modifier of specified type to selected, and make it the active one */
fcm = add_fmodifier(&strip->modifiers, type, NULL);
-
+
if (fcm) {
set_active_fmodifier(&strip->modifiers, fcm);
ale->update |= ANIM_UPDATE_DEPS;
@@ -2329,37 +2329,37 @@ static int nla_fmodifier_add_exec(bContext *C, wmOperator *op)
}
}
}
-
+
/* free temp data */
ANIM_animdata_update(&ac, &anim_data);
ANIM_animdata_freelist(&anim_data);
-
+
/* 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_fmodifier_add(wmOperatorType *ot)
{
/* identifiers */
ot->name = "Add F-Modifier";
ot->idname = "NLA_OT_fmodifier_add";
ot->description = "Add F-Modifier to the active/selected NLA-Strips";
-
+
/* api callbacks */
ot->invoke = WM_menu_invoke;
ot->exec = nla_fmodifier_add_exec;
- ot->poll = nlaop_poll_tweakmode_off;
-
+ ot->poll = nlaop_poll_tweakmode_off;
+
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
-
+
/* id-props */
ot->prop = RNA_def_enum(ot->srna, "type", rna_enum_fmodifier_type_items, 0, "Type", "");
RNA_def_enum_funcs(ot->prop, nla_fmodifier_itemf);
-
+
RNA_def_boolean(ot->srna, "only_active", true, "Only Active", "Only add a F-Modifier of the specified type to the active strip");
}
@@ -2372,36 +2372,36 @@ static int nla_fmodifier_copy_exec(bContext *C, wmOperator *op)
bAnimListElem *ale;
int filter;
bool ok = false;
-
+
/* get editor data */
if (ANIM_animdata_get_context(C, &ac) == 0)
return OPERATOR_CANCELLED;
-
+
/* clear buffer first */
ANIM_fmodifiers_copybuf_free();
-
+
/* get a list of the editable tracks being shown in the NLA */
filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_FOREDIT);
ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype);
-
+
/* for each NLA-Track, add the specified modifier to all selected strips */
for (ale = anim_data.first; ale; ale = ale->next) {
NlaTrack *nlt = (NlaTrack *)ale->data;
NlaStrip *strip;
-
+
for (strip = nlt->strips.first; strip; strip = strip->next) {
/* only add F-Modifier if on active strip? */
if ((strip->flag & NLASTRIP_FLAG_ACTIVE) == 0)
continue;
-
+
// TODO: when 'active' vs 'all' boolean is added, change last param!
ok |= ANIM_fmodifiers_copy_to_buf(&strip->modifiers, 0);
}
}
-
+
/* free temp data */
ANIM_animdata_freelist(&anim_data);
-
+
/* successful or not? */
if (ok == 0) {
BKE_report(op->reports, RPT_ERROR, "No F-Modifiers available to be copied");
@@ -2412,21 +2412,21 @@ static int nla_fmodifier_copy_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
}
-
+
void NLA_OT_fmodifier_copy(wmOperatorType *ot)
{
/* identifiers */
ot->name = "Copy F-Modifiers";
ot->idname = "NLA_OT_fmodifier_copy";
ot->description = "Copy the F-Modifier(s) of the active NLA-Strip";
-
+
/* api callbacks */
ot->exec = nla_fmodifier_copy_exec;
- ot->poll = nlaop_poll_tweakmode_off;
-
+ ot->poll = nlaop_poll_tweakmode_off;
+
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
-
+
/* id-props */
//ot->prop = RNA_def_boolean(ot->srna, "all", 1, "All F-Modifiers", "Copy all the F-Modifiers, instead of just the active one");
}
@@ -2439,23 +2439,23 @@ static int nla_fmodifier_paste_exec(bContext *C, wmOperator *op)
ListBase anim_data = {NULL, NULL};
bAnimListElem *ale;
int filter, ok = 0;
-
+
const bool active_only = RNA_boolean_get(op->ptr, "only_active");
const bool replace = RNA_boolean_get(op->ptr, "replace");
-
+
/* get editor data */
if (ANIM_animdata_get_context(C, &ac) == 0)
return OPERATOR_CANCELLED;
-
+
/* get a list of the editable tracks being shown in the NLA */
filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_FOREDIT | ANIMFILTER_NODUPLIS);
ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype);
-
+
/* for each NLA-Track, add the specified modifier to all selected strips */
for (ale = anim_data.first; ale; ale = ale->next) {
NlaTrack *nlt = (NlaTrack *)ale->data;
NlaStrip *strip;
-
+
for (strip = nlt->strips.first; strip; strip = strip->next) {
/* can F-Modifier be added to the current strip? */
if (active_only) {
@@ -2468,17 +2468,17 @@ static int nla_fmodifier_paste_exec(bContext *C, wmOperator *op)
if ((strip->flag & NLASTRIP_FLAG_SELECT) == 0)
continue;
}
-
+
/* paste FModifiers from buffer */
ok += ANIM_fmodifiers_paste_from_buf(&strip->modifiers, replace, NULL);
ale->update |= ANIM_UPDATE_DEPS;
}
}
-
+
/* clean up */
ANIM_animdata_update(&ac, &anim_data);
ANIM_animdata_freelist(&anim_data);
-
+
/* successful or not? */
if (ok) {
WM_event_add_notifier(C, NC_ANIMATION | ND_NLA | NA_EDITED, NULL);
@@ -2489,24 +2489,24 @@ static int nla_fmodifier_paste_exec(bContext *C, wmOperator *op)
return OPERATOR_CANCELLED;
}
}
-
+
void NLA_OT_fmodifier_paste(wmOperatorType *ot)
{
/* identifiers */
ot->name = "Paste F-Modifiers";
ot->idname = "NLA_OT_fmodifier_paste";
ot->description = "Add copied F-Modifiers to the selected NLA-Strips";
-
+
/* api callbacks */
ot->exec = nla_fmodifier_paste_exec;
ot->poll = nlaop_poll_tweakmode_off;
-
+
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
-
+
/* properties */
RNA_def_boolean(ot->srna, "only_active", true, "Only Active", "Only paste F-Modifiers on active strip");
- RNA_def_boolean(ot->srna, "replace", false, "Replace Existing",
+ RNA_def_boolean(ot->srna, "replace", false, "Replace Existing",
"Replace existing F-Modifiers, instead of just appending to the end of the existing list");
}