svn merge ^/trunk/blender -r40720:40872
[blender.git] / source / blender / makesrna / intern / rna_animation_api.c
index 208e3b9ca4ccdc754e51483c33bdbab3bc2be9e5..714a74ec424aee821b1e87793360f21c8b169fc8 100644 (file)
@@ -1,6 +1,4 @@
-/**
- * $Id:
- *
+/*
  * ***** BEGIN GPL LICENSE BLOCK *****
  *
  * This program is free software; you can redistribute it and/or
  * ***** BEGIN GPL LICENSE BLOCK *****
  *
  * This program is free software; you can redistribute it and/or
  * ***** END GPL LICENSE BLOCK *****
  */
 
  * ***** END GPL LICENSE BLOCK *****
  */
 
+/** \file blender/makesrna/intern/rna_animation_api.c
+ *  \ingroup RNA
+ */
+
+
 #include <stdlib.h>
 #include <stdio.h>
 
 #include "RNA_define.h"
 #include "RNA_enum_types.h"
 #include <stdlib.h>
 #include <stdio.h>
 
 #include "RNA_define.h"
 #include "RNA_enum_types.h"
-#include "RNA_types.h"
 
 #include "DNA_anim_types.h"
 #include "DNA_object_types.h"
 #include "DNA_scene_types.h"
 
 
 #include "DNA_anim_types.h"
 #include "DNA_object_types.h"
 #include "DNA_scene_types.h"
 
+
 #ifdef RNA_RUNTIME
 
 #ifdef RNA_RUNTIME
 
-#include "BKE_animsys.h"
+#include "BKE_context.h"
+#include "BKE_report.h"
+
+#include "ED_keyframing.h"
 
 
-static void rna_KeyingSet_add_path(KeyingSet *keyingset, ReportList *reports, 
-               ID *id, char rna_path[], int array_index, int entire_array,
-               int grouping_method, char group_name[])
+static void rna_KeyingSet_context_refresh(KeyingSet *ks, bContext *C, ReportList *reports)
 {
 {
-       short flag = 0;
+       // TODO: enable access to providing a list of overrides (dsources)?
+       int success = ANIM_validate_keyingset(C, NULL, ks);
        
        
-       /* validate flags */
-       if (entire_array)
-               flag |= KSP_FLAG_WHOLE_ARRAY;
-       
-       /* if data is valid, call the API function for this */
-       if (keyingset) {
-               BKE_keyingset_add_path(keyingset, id, group_name, rna_path, array_index, flag, grouping_method);
-               keyingset->active_path= BLI_countlist(&keyingset->paths); 
-       }
-       else {
-               BKE_report(reports, RPT_ERROR, "Keying Set Path could not be added.");
+       if (success != 0) {
+               switch (success) {
+                       case MODIFYKEY_INVALID_CONTEXT:
+                               BKE_report(reports, RPT_ERROR, "Invalid context for Keying Set");
+                               break;
+                               
+                       case MODIFYKEY_MISSING_TYPEINFO:
+                               BKE_report(reports, RPT_ERROR, "Incomplete built-in Keying Set. Appears to be missing type info");
+                               break;
+               }
        }
 }
 
        }
 }
 
@@ -66,24 +70,12 @@ static void rna_KeyingSet_add_path(KeyingSet *keyingset, ReportList *reports,
 void RNA_api_keyingset(StructRNA *srna)
 {
        FunctionRNA *func;
 void RNA_api_keyingset(StructRNA *srna)
 {
        FunctionRNA *func;
-       PropertyRNA *parm;
+       //PropertyRNA *parm;
        
        
-       /* Add Destination */
-       func= RNA_def_function(srna, "add_destination", "rna_KeyingSet_add_path");
-       RNA_def_function_ui_description(func, "Add a new destination for the Keying Set.");
-       RNA_def_function_flag(func, FUNC_USE_REPORTS);
-               /* 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);
-       parm=RNA_def_int(func, "array_index", 0, 0, INT_MAX, "Array Index", "If applicable, the index ", 0, INT_MAX);
-               /* flags */
-       parm=RNA_def_boolean(func, "entire_array", 1, "Entire Array", "When an 'array/vector' type is chosen (Location, Rotation, Color, etc.), entire array is to be used.");
-               /* 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).");
+       /* validate relative Keying Set (used to ensure paths are ok for context) */
+       func= RNA_def_function(srna, "refresh", "rna_KeyingSet_context_refresh");
+       RNA_def_function_ui_description(func, "Refresh Keying Set to ensure that it is valid for the current context. Call before each use of one");
+       RNA_def_function_flag(func, FUNC_USE_CONTEXT|FUNC_USE_REPORTS);
 }
 
 #endif
 }
 
 #endif