61 ListBase anim_data = {
nullptr,
nullptr};
63 int notifierFlags = 0;
76 printf(
"Error: animation track (index = %d) not found in mouse_nla_tracks()\n", track_index);
130 if (
b->object->adt) {
272 printf(
"Error: Invalid track type in mouse_nla_tracks()\n");
282 return notifierFlags;
296 int notifierFlags = 0;
343 ot->name =
"Mouse Click on NLA Tracks";
344 ot->idname =
"NLA_OT_channels_click";
345 ot->description =
"Handle clicks to select NLA tracks";
377 if (track_index == -1) {
384 "No active AnimData block to use "
385 "(select a data-block expander first or set the appropriate flags on an AnimData "
395 ListBase anim_data = {
nullptr,
nullptr};
404 if (ale ==
nullptr) {
412 "Animation track at index %d is not a NLA 'Active Action' track",
427 if (adt ==
nullptr) {
434 "Cannot push down actions while tweaking a strip's action, exit tweak mode first");
439 if (!action_to_push_down) {
462 ot->name =
"Push Down Action";
463 ot->idname =
"NLA_OT_action_pushdown";
464 ot->description =
"Push action down onto the top of the NLA stack as a new strip";
480 "Index of NLA action track to perform pushdown operation on",
510 if (adt ==
nullptr) {
536 ot->name =
"Unlink Action";
537 ot->idname =
"NLA_OT_action_unlink";
538 ot->description =
"Unlink this action from the active action slot (and/or exit Tweak Mode)";
550 "Clear Fake User and remove copy stashed in this data-block's NLA stack");
559 ListBase anim_data = {
nullptr,
nullptr};
587 else if ((lastAdt ==
nullptr) || (adt != lastAdt)) {
608 ListBase anim_data = {
nullptr,
nullptr};
649 bool op_done =
false;
673 op->
reports,
RPT_WARNING,
"Select an existing NLA Track or an empty action line first");
682 ot->name =
"Add Tracks";
683 ot->idname =
"NLA_OT_tracks_add";
684 ot->description =
"Add NLA-Tracks above/after the selected tracks";
698 "Add a new NLA Track above every existing selected one");
708 ListBase anim_data = {
nullptr,
nullptr};
760 ot->name =
"Delete Tracks";
761 ot->idname =
"NLA_OT_tracks_delete";
762 ot->description =
"Delete selected NLA-Tracks and the strips they contain";
794 if (snla && snla->
ads) {
815 ot->name =
"Include Selected Objects";
816 ot->idname =
"NLA_OT_selected_objects_add";
817 ot->description =
"Make selected objects appear in NLA Editor by adding Animation Data";
Functions and classes to work with Actions.
AnimData * BKE_animdata_ensure_id(ID *id)
AnimData * BKE_animdata_from_id(const ID *id)
#define CTX_DATA_BEGIN(C, Type, instance, member)
Main * CTX_data_main(const bContext *C)
void BKE_view_layer_synced_ensure(const Scene *scene, ViewLayer *view_layer)
ListBase * BKE_view_layer_object_bases_get(ViewLayer *view_layer)
void BKE_nla_action_pushdown(OwnedAnimData owned_adt, bool is_liboverride)
void BKE_nlatrack_set_active(ListBase *tracks, NlaTrack *nlt)
NlaTrack * BKE_nlatrack_new_after(ListBase *nla_tracks, NlaTrack *prev, bool is_liboverride)
NlaTrack * BKE_nlatrack_new_tail(ListBase *nla_tracks, const bool is_liboverride)
bool BKE_nlatrack_is_nonlocal_in_liboverride(const ID *id, const NlaTrack *nlt)
void BKE_nlatrack_remove_and_free(ListBase *tracks, NlaTrack *nlt, bool do_id_user)
void BKE_reportf(ReportList *reports, eReportType type, const char *format,...) ATTR_PRINTF_FORMAT(3
void BKE_report(ReportList *reports, eReportType type, const char *message)
void * BLI_findlink(const ListBase *listbase, int number) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
#define LISTBASE_FOREACH(type, var, list)
BLI_INLINE bool BLI_listbase_is_empty(const ListBase *lb)
void DEG_relations_tag_update(Main *bmain)
#define ID_IS_OVERRIDE_LIBRARY(_id)
Object is a sort of wrapper for general info.
#define BASE_SELECTABLE(v3d, base)
@ ANIMTYPE_FILLACT_LAYERED
#define NLATRACK_FIRST_TOP(ac)
#define NLATRACK_STEP(snla)
void ED_animedit_unlink_action(bContext *C, ID *id, AnimData *adt, bAction *act, ReportList *reports, bool force_delete)
#define NLATRACK_NAMEWIDTH
@ ANIMFILTER_DATA_VISIBLE
@ ANIMFILTER_LIST_VISIBLE
@ ANIMFILTER_LIST_CHANNELS
bool ED_operator_nla_active(bContext *C)
void UI_view2d_listview_view_to_cell(float columnwidth, float rowheight, float startx, float starty, float viewx, float viewy, int *r_column, int *r_row)
void UI_view2d_region_to_view(const View2D *v2d, float x, float y, float *r_view_x, float *r_view_y) ATTR_NONNULL()
void ANIM_anim_channels_select_set(bAnimContext *ac, eAnimChannels_SetFlag sel)
void ANIM_set_active_channel(bAnimContext *ac, void *data, eAnimCont_Types datatype, eAnimFilter_Flags filter, void *channel_data, eAnim_ChannelType channel_type)
void ANIM_animdata_freelist(ListBase *anim_data)
void ANIM_animdata_update(bAnimContext *ac, ListBase *anim_data)
bool ANIM_animdata_get_context(const bContext *C, bAnimContext *ac)
size_t ANIM_animdata_filter(bAnimContext *ac, ListBase *anim_data, const eAnimFilter_Flags filter_mode, void *data, const eAnimCont_Types datatype)
DEG_id_tag_update_ex(cb_data->bmain, cb_data->owner_id, ID_RECALC_TAG_FOR_UNDO|ID_RECALC_SYNC_TO_EVAL)
void base_select(Base *base, eObjectSelect_Mode mode)
void base_activate_with_mode_exit_if_needed(bContext *C, Base *base)
bool nlaedit_disable_tweakmode(bAnimContext *ac, bool do_solo)
bool nlaedit_is_tweakmode_on(bAnimContext *ac)
bool nlaop_poll_tweakmode_off(bContext *C)
static int mouse_nla_tracks(bContext *C, bAnimContext *ac, int track_index, short selectmode)
static wmOperatorStatus nla_action_unlink_invoke(bContext *C, wmOperator *op, const wmEvent *event)
void NLA_OT_selected_objects_add(wmOperatorType *ot)
void NLA_OT_tracks_delete(wmOperatorType *ot)
void NLA_OT_tracks_add(wmOperatorType *ot)
static bool nla_action_unlink_poll(bContext *C)
void NLA_OT_action_unlink(wmOperatorType *ot)
void NLA_OT_channels_click(wmOperatorType *ot)
static wmOperatorStatus nlaedit_delete_tracks_exec(bContext *C, wmOperator *)
static wmOperatorStatus nlaedit_objects_add_exec(bContext *C, wmOperator *)
static wmOperatorStatus nlatracks_mouseclick_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static wmOperatorStatus nlatracks_pushdown_exec(bContext *C, wmOperator *op)
static wmOperatorStatus nla_action_unlink_exec(bContext *C, wmOperator *op)
void NLA_OT_action_pushdown(wmOperatorType *ot)
bool nlaedit_add_tracks_existing(bAnimContext *ac, bool above_sel)
bool nlaedit_add_tracks_empty(bAnimContext *ac)
static wmOperatorStatus nlaedit_add_tracks_exec(bContext *C, wmOperator *op)
void RNA_boolean_set(PointerRNA *ptr, const char *name, bool value)
int RNA_int_get(PointerRNA *ptr, const char *name)
bool RNA_boolean_get(PointerRNA *ptr, const char *name)
PropertyRNA * RNA_def_boolean(StructOrFunctionRNA *cont_, const char *identifier, const bool default_value, const char *ui_name, const char *ui_description)
void RNA_def_property_flag(PropertyRNA *prop, PropertyFlag flag)
PropertyRNA * RNA_def_int(StructOrFunctionRNA *cont_, const char *identifier, const int default_value, const int hardmin, const int hardmax, const char *ui_name, const char *ui_description, const int softmin, const int softmax)
eAnim_Update_Flags update
wmEventModifierFlag modifier
struct ReportList * reports
void WM_event_add_notifier(const bContext *C, uint type, void *reference)