Skeleton of type defines for NlaTrack animchannel

This commit is contained in:
Joshua Leung 2013-11-20 17:06:37 +13:00
parent c4bb2e9774
commit 2f88fc35de
1 changed files with 91 additions and 4 deletions

View File

@ -2764,6 +2764,94 @@ static bAnimChannelType ACF_MASKLAYER =
acf_masklay_setting_ptr /* pointer for setting */
};
/* NLA Track ----------------------------------------------- */
/* name for nla track entries */
static void acf_nlatrack_name(bAnimListElem *ale, char *name)
{
NlaTrack *nlt = (NlaTrack *)ale->data;
if (nlt && name)
BLI_strncpy(name, nlt->name, ANIM_CHAN_NAME_SIZE);
}
/* name property for nla track entries */
static short acf_nlatrack_name_prop(bAnimListElem *ale, PointerRNA *ptr, PropertyRNA **prop)
{
if (ale->data) {
RNA_pointer_create(ale->id, &RNA_NlaTrack, ale->data, ptr);
*prop = RNA_struct_name_property(ptr->type);
return (*prop != NULL);
}
return 0;
}
/* check if some setting exists for this channel */
static short acf_nlatrack_setting_valid(bAnimContext *UNUSED(ac), bAnimListElem *ale, int setting)
{
NlaTrack *nlt = (NlaTrack *)ale->data;
AnimData *adt = ale->adt;
/* visibility of settings depends on various states... */
// XXX:
return 0;
}
/* get the appropriate flag(s) for the setting when it is valid */
static int acf_nlatrack_setting_flag(bAnimContext *UNUSED(ac), int setting, short *neg)
{
/* clear extra return data first */
*neg = 0;
switch (setting) {
case ACHANNEL_SETTING_SELECT: /* selected */
return NLATRACK_SELECTED;
case ACHANNEL_SETTING_MUTE: /* muted */
return NLATRACK_MUTED;
case ACHANNEL_SETTING_PROTECT: /* protected */
return NLATRACK_PROTECTED;
case ACHANNEL_SETTING_SOLO: /* solo */
return NLATRACK_SOLO;
default: /* unsupported */
return 0;
}
}
/* get pointer to the setting */
static void *acf_nlatrack_setting_ptr(bAnimListElem *ale, int UNUSED(setting), short *type)
{
NlaTrack *nlt = (NlaTrack *)ale->data;
return GET_ACF_FLAG_PTR(nlt->flag, type);
}
/* nla track type define */
static bAnimChannelType ACF_NLATRACK =
{
"NLA Track", /* type name */
acf_generic_channel_color, /* backdrop color */ // XXX: color depends on whether track is solo or not!
acf_generic_channel_backdrop, /* backdrop */
acf_generic_indention_flexible, /* indent level */
acf_generic_group_offset, /* offset */ // XXX?
acf_nlatrack_name, /* name */
acf_nlatrack_name_prop, /* name prop */
NULL, /* icon */
acf_nlatrack_setting_valid, /* has setting */
acf_nlatrack_setting_flag, /* flag for setting */
acf_nlatrack_setting_ptr /* pointer for setting */
};
/* *********************************************** */
/* Type Registration and General Access */
@ -2822,10 +2910,8 @@ static void ANIM_init_channel_typeinfo_data(void)
animchannelTypeInfo[type++] = &ACF_MASKDATA; /* Mask Datablock */
animchannelTypeInfo[type++] = &ACF_MASKLAYER; /* Mask Layer */
// TODO: these types still need to be implemented!!!
// probably need a few extra flags for these special cases...
animchannelTypeInfo[type++] = NULL; /* NLA Track */
animchannelTypeInfo[type++] = NULL; /* NLA Action */
animchannelTypeInfo[type++] = &ACF_NLATRACK; /* NLA Track */
animchannelTypeInfo[type++] = &ACF_NLAACTION; /* NLA Action */
}
}
@ -3422,6 +3508,7 @@ static void draw_setting_widget(bAnimContext *ac, bAnimListElem *ale, bAnimChann
/* no flushing */
case ACHANNEL_SETTING_EXPAND: /* expanding - cannot flush, otherwise all would open/close at once */
case ACHANNEL_SETTING_SOLO: /* NLA Tracks - solo flag */
default:
uiButSetFunc(but, achannel_setting_widget_cb, NULL, NULL);
break;