diff options
author | Campbell Barton <ideasman42@gmail.com> | 2010-04-04 21:42:40 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2010-04-04 21:42:40 +0400 |
commit | 415a6f6015e4ea48bd6a4e4a880cdaee2db26abe (patch) | |
tree | 752e559511e4b12f790bf48b7010e5c3dee90f52 /source/blender | |
parent | 670d499c8b5bd08c3e3e22d6f1712f0fb2040b4f (diff) |
make keying set path functions members of the paths collection
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/makesrna/intern/rna_animation.c | 118 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_animation_api.c | 93 |
2 files changed, 118 insertions, 93 deletions
diff --git a/source/blender/makesrna/intern/rna_animation.c b/source/blender/makesrna/intern/rna_animation.c index 75cf06b5b2d..fedba105a69 100644 --- a/source/blender/makesrna/intern/rna_animation.c +++ b/source/blender/makesrna/intern/rna_animation.c @@ -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"); diff --git a/source/blender/makesrna/intern/rna_animation_api.c b/source/blender/makesrna/intern/rna_animation_api.c index ba06697f9e9..5c745eac59f 100644 --- a/source/blender/makesrna/intern/rna_animation_api.c +++ b/source/blender/makesrna/intern/rna_animation_api.c @@ -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 |