make keying set path functions members of the paths collection
authorCampbell Barton <ideasman42@gmail.com>
Sun, 4 Apr 2010 17:42:40 +0000 (17:42 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Sun, 4 Apr 2010 17:42:40 +0000 (17:42 +0000)
source/blender/makesrna/intern/rna_animation.c
source/blender/makesrna/intern/rna_animation_api.c

index 75cf06b5b2da6f50957b3adf2bd5097c28321dde..fedba105a69a1f22cbd0cc06c6e5f28441ec40a7 100644 (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");
index ba06697f9e9b4a0b1192735e3e825767e688b77e..5c745eac59fb5fb158b512cea078f55ef427d013 100644 (file)
 
 #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