make keying set path functions members of the paths collection

This commit is contained in:
Campbell Barton
2010-04-04 17:42:40 +00:00
parent 670d499c8b
commit 415a6f6015
2 changed files with 118 additions and 93 deletions

View File

@@ -47,6 +47,8 @@ EnumPropertyItem keyingset_path_grouping_items[] = {
#ifdef RNA_RUNTIME
#include "BKE_animsys.h"
static int rna_AnimData_action_editable(PointerRNA *ptr)
{
AnimData *adt= (AnimData *)ptr->data;
@@ -322,6 +324,70 @@ static PointerRNA rna_KeyingSet_typeinfo_get(PointerRNA *ptr)
return rna_pointer_inherit_refine(ptr, &RNA_KeyingSetInfo, ksi);
}
static KS_Path *rna_KeyingSet_paths_add(KeyingSet *keyingset, ReportList *reports,
ID *id, char rna_path[], int index, int grouping_method, char group_name[])
{
KS_Path *ksp = NULL;
short flag = 0;
/* special case when index = -1, we key the whole array (as with other places where index is used) */
if (index == -1) {
flag |= KSP_FLAG_WHOLE_ARRAY;
index = 0;
}
/* if data is valid, call the API function for this */
if (keyingset) {
ksp= BKE_keyingset_add_path(keyingset, id, group_name, rna_path, index, flag, grouping_method);
keyingset->active_path= BLI_countlist(&keyingset->paths);
}
else {
BKE_report(reports, RPT_ERROR, "Keying Set Path could not be added.");
}
/* return added path */
return ksp;
}
static void rna_KeyingSet_paths_remove(KeyingSet *keyingset, ReportList *reports, KS_Path *ksp)
{
/* if data is valid, call the API function for this */
if (keyingset && ksp) {
/* remove the active path from the KeyingSet */
BKE_keyingset_free_path(keyingset, ksp);
/* the active path number will most likely have changed */
// TODO: we should get more fancy and actually check if it was removed, but this will do for now
keyingset->active_path = 0;
}
else {
BKE_report(reports, RPT_ERROR, "Keying Set Path could not be removed.");
}
}
static void rna_KeyingSet_paths_clear(KeyingSet *keyingset, ReportList *reports)
{
/* if data is valid, call the API function for this */
if (keyingset) {
KS_Path *ksp, *kspn;
/* free each path as we go to avoid looping twice */
for (ksp= keyingset->paths.first; ksp; ksp= kspn) {
kspn= ksp->next;
BKE_keyingset_free_path(keyingset, ksp);
}
/* reset the active path, since there aren't any left */
keyingset->active_path = 0;
}
else {
BKE_report(reports, RPT_ERROR, "Keying Set Paths could not be removed.");
}
}
#else
/* helper function for Keying Set -> keying settings */
@@ -461,6 +527,57 @@ static void rna_def_keyingset_path(BlenderRNA *brna)
rna_def_common_keying_flags(srna, 0);
}
/* keyingset.paths */
static void rna_def_keyingset_paths(BlenderRNA *brna, PropertyRNA *cprop)
{
StructRNA *srna;
FunctionRNA *func;
PropertyRNA *parm;
RNA_def_property_srna(cprop, "KeyingSetPaths");
srna= RNA_def_struct(brna, "KeyingSetPaths", NULL);
RNA_def_struct_sdna(srna, "KeyingSet");
RNA_def_struct_ui_text(srna, "Keying set paths", "Collection of keying set paths");
/* Add Path */
func= RNA_def_function(srna, "add", "rna_KeyingSet_paths_add");
RNA_def_function_ui_description(func, "Add a new path for the Keying Set.");
RNA_def_function_flag(func, FUNC_USE_REPORTS);
/* return arg */
parm= RNA_def_pointer(func, "ksp", "KeyingSetPath", "New Path", "Path created and added to the Keying Set");
RNA_def_function_return(func, parm);
/* ID-block for target */
parm= RNA_def_pointer(func, "target_id", "ID", "Target ID", "ID-Datablock for the destination.");
RNA_def_property_flag(parm, PROP_REQUIRED);
/* rna-path */
parm= RNA_def_string(func, "data_path", "", 256, "Data-Path", "RNA-Path to destination property."); // xxx hopefully this is long enough
RNA_def_property_flag(parm, PROP_REQUIRED);
/* index (defaults to -1 for entire array) */
parm=RNA_def_int(func, "index", -1, 0, INT_MAX, "Index", "The index of the destination property (i.e. axis of Location/Rotation/etc.), or -1 for the entire array.", 0, INT_MAX);
/* grouping */
parm=RNA_def_enum(func, "grouping_method", keyingset_path_grouping_items, KSP_GROUP_KSNAME, "Grouping Method", "Method used to define which Group-name to use.");
parm=RNA_def_string(func, "group_name", "", 64, "Group Name", "Name of Action Group to assign destination to (only if grouping mode is to use this name).");
/* Remove Path */
func= RNA_def_function(srna, "remove", "rna_KeyingSet_paths_remove");
RNA_def_function_ui_description(func, "Remove the given path from the Keying Set.");
RNA_def_function_flag(func, FUNC_USE_REPORTS);
/* path to remove */
parm= RNA_def_pointer(func, "path", "KeyingSetPath", "Path", "");
RNA_def_property_flag(parm, PROP_REQUIRED);
/* Remove All Paths */
func= RNA_def_function(srna, "clear", "rna_KeyingSet_paths_clear");
RNA_def_function_ui_description(func, "Remove all the paths from the Keying Set.");
RNA_def_function_flag(func, FUNC_USE_REPORTS);
}
static void rna_def_keyingset(BlenderRNA *brna)
{
StructRNA *srna;
@@ -486,6 +603,7 @@ static void rna_def_keyingset(BlenderRNA *brna)
RNA_def_property_collection_sdna(prop, NULL, "paths", NULL);
RNA_def_property_struct_type(prop, "KeyingSetPath");
RNA_def_property_ui_text(prop, "Paths", "Keying Set Paths to define settings that get keyframed together");
rna_def_keyingset_paths(brna, prop);
prop= RNA_def_property(srna, "active_path", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "KeyingSetPath");

View File

@@ -40,105 +40,12 @@
#include "BKE_animsys.h"
static KS_Path *rna_KeyingSet_add_path(KeyingSet *keyingset, ReportList *reports,
ID *id, char rna_path[], int index, int grouping_method, char group_name[])
{
KS_Path *ksp = NULL;
short flag = 0;
/* special case when index = -1, we key the whole array (as with other places where index is used) */
if (index == -1) {
flag |= KSP_FLAG_WHOLE_ARRAY;
index = 0;
}
/* if data is valid, call the API function for this */
if (keyingset) {
ksp= BKE_keyingset_add_path(keyingset, id, group_name, rna_path, index, flag, grouping_method);
keyingset->active_path= BLI_countlist(&keyingset->paths);
}
else {
BKE_report(reports, RPT_ERROR, "Keying Set Path could not be added.");
}
/* return added path */
return ksp;
}
static void rna_KeyingSet_remove_path(KeyingSet *keyingset, ReportList *reports, KS_Path *ksp)
{
/* if data is valid, call the API function for this */
if (keyingset && ksp) {
/* remove the active path from the KeyingSet */
BKE_keyingset_free_path(keyingset, ksp);
/* the active path number will most likely have changed */
// TODO: we should get more fancy and actually check if it was removed, but this will do for now
keyingset->active_path = 0;
}
else {
BKE_report(reports, RPT_ERROR, "Keying Set Path could not be removed.");
}
}
static void rna_KeyingSet_remove_all_paths(KeyingSet *keyingset, ReportList *reports)
{
/* if data is valid, call the API function for this */
if (keyingset) {
KS_Path *ksp, *kspn;
/* free each path as we go to avoid looping twice */
for (ksp= keyingset->paths.first; ksp; ksp= kspn) {
kspn= ksp->next;
BKE_keyingset_free_path(keyingset, ksp);
}
/* reset the active path, since there aren't any left */
keyingset->active_path = 0;
}
else {
BKE_report(reports, RPT_ERROR, "Keying Set Paths could not be removed.");
}
}
#else
void RNA_api_keyingset(StructRNA *srna)
{
FunctionRNA *func;
PropertyRNA *parm;
/* Add Path */
func= RNA_def_function(srna, "add_path", "rna_KeyingSet_add_path");
RNA_def_function_ui_description(func, "Add a new path for the Keying Set.");
RNA_def_function_flag(func, FUNC_USE_REPORTS);
/* return arg */
parm= RNA_def_pointer(func, "ksp", "KeyingSetPath", "New Path", "Path created and added to the Keying Set");
RNA_def_function_return(func, parm);
/* ID-block for target */
parm= RNA_def_pointer(func, "target_id", "ID", "Target ID", "ID-Datablock for the destination.");
RNA_def_property_flag(parm, PROP_REQUIRED);
/* rna-path */
parm= RNA_def_string(func, "data_path", "", 256, "Data-Path", "RNA-Path to destination property."); // xxx hopefully this is long enough
RNA_def_property_flag(parm, PROP_REQUIRED);
/* index (defaults to -1 for entire array) */
parm=RNA_def_int(func, "index", -1, 0, INT_MAX, "Index", "The index of the destination property (i.e. axis of Location/Rotation/etc.), or -1 for the entire array.", 0, INT_MAX);
/* grouping */
parm=RNA_def_enum(func, "grouping_method", keyingset_path_grouping_items, KSP_GROUP_KSNAME, "Grouping Method", "Method used to define which Group-name to use.");
parm=RNA_def_string(func, "group_name", "", 64, "Group Name", "Name of Action Group to assign destination to (only if grouping mode is to use this name).");
/* Remove Path */
func= RNA_def_function(srna, "remove_path", "rna_KeyingSet_remove_path");
RNA_def_function_ui_description(func, "Remove the given path from the Keying Set.");
RNA_def_function_flag(func, FUNC_USE_REPORTS);
/* path to remove */
parm= RNA_def_pointer(func, "path", "KeyingSetPath", "Path", "");
RNA_def_property_flag(parm, PROP_REQUIRED);
/* Remove All Paths */
func= RNA_def_function(srna, "remove_all_paths", "rna_KeyingSet_remove_all_paths");
RNA_def_function_ui_description(func, "Remove all the paths from the Keying Set.");
RNA_def_function_flag(func, FUNC_USE_REPORTS);
}
#endif