diff options
author | Joshua Leung <aligorith@gmail.com> | 2014-05-05 06:15:28 +0400 |
---|---|---|
committer | Joshua Leung <aligorith@gmail.com> | 2014-05-05 06:16:41 +0400 |
commit | 6d2c23bf70c550ead52a5e518d9e4846c5d3f23f (patch) | |
tree | 4febc7ff4d51d79c83c02e946e98d7ac936fbe7f /source/blender/editors/space_nla/nla_channels.c | |
parent | 4e0aa0e7f23fae72c469262d4aab751fc6d642de (diff) |
NLA Pushdown Operator: Active animdata option + More error handling
* If channel_index = -1, the pushdown operator will try to use the active AnimData
block. To see which one this will be, check the properties (NKEY) region in NLA Editor.
* Added more detailed error handling for the various cases where things are not
in a valid state for pushing down an action. This is notably to stop scripters
from putting the NLA into an inconsistent state.
Diffstat (limited to 'source/blender/editors/space_nla/nla_channels.c')
-rw-r--r-- | source/blender/editors/space_nla/nla_channels.c | 27 |
1 files changed, 23 insertions, 4 deletions
diff --git a/source/blender/editors/space_nla/nla_channels.c b/source/blender/editors/space_nla/nla_channels.c index 06bf755fa2a..be4d197c1a6 100644 --- a/source/blender/editors/space_nla/nla_channels.c +++ b/source/blender/editors/space_nla/nla_channels.c @@ -412,10 +412,17 @@ static int nlachannels_pushdown_exec(bContext *C, wmOperator *op) /* get anim-channel to use (or more specifically, the animdata block behind it) */ if (channel_index == -1) { + PointerRNA adt_ptr = {{NULL}}; + /* active animdata block */ - // FIXME - BKE_report(op->reports, RPT_WARNING, "Pushdown for active AnimData block is currently not yet implemented"); - return OPERATOR_CANCELLED; + 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 datablock expander first or set the appropriate flags on an AnimData block"); + return OPERATOR_CANCELLED; + } + else { + adt = adt_ptr.data; + } } else { /* indexed channel */ @@ -448,7 +455,19 @@ static int nlachannels_pushdown_exec(bContext *C, wmOperator *op) } /* double-check that we are free to push down here... */ - if (adt && nlaedit_is_tweakmode_on(&ac) == 0) { + 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 tweakmode 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); } |