soc-2008-mxcurioni: merged changes to revision 23516
[blender.git] / source / blender / makesrna / intern / rna_nla.c
index 3b55da046b89ec526a55dd0d2ab4ed427f64fc8d..20d1a89830329d73088c5cbe029ae10e0f3b78e4 100644 (file)
@@ -47,7 +47,7 @@
 /* temp constant defined for these funcs only... */
 #define NLASTRIP_MIN_LEN_THRESH        0.1f
 
-void rna_NlaStrip_name_set(PointerRNA *ptr, const char *value)
+static void rna_NlaStrip_name_set(PointerRNA *ptr, const char *value)
 {
        NlaStrip *data= (NlaStrip *)ptr->data;
        
@@ -61,6 +61,30 @@ void rna_NlaStrip_name_set(PointerRNA *ptr, const char *value)
        }
 }
 
+static char *rna_NlaStrip_path(PointerRNA *ptr)
+{
+       NlaStrip *strip= (NlaStrip *)ptr->data;
+       AnimData *adt= BKE_animdata_from_id(ptr->id.data);
+       
+       /* if we're attached to AnimData, try to resolve path back to AnimData */
+       if (adt) {
+               NlaTrack *nlt;
+               NlaStrip *nls;
+               
+               for (nlt= adt->nla_tracks.first; nlt; nlt= nlt->next) {
+                       for (nls = nlt->strips.first; nls; nls = nls->next) {
+                               if (nls == strip) {
+                                       // XXX but if we animate like this, the control will never work...
+                                       return BLI_sprintfN("animation_data.nla_tracks[\"%s\"].strips[\"%s\"]", nlt->name, strip->name);
+                               }
+                       }
+               }
+       }
+       
+       /* no path */
+       return "";
+}
+
 
 static void rna_NlaStrip_start_frame_set(PointerRNA *ptr, float value)
 {
@@ -256,7 +280,7 @@ EnumPropertyItem nla_mode_extend_items[] = {
        {NLASTRIP_EXTEND_HOLD_FORWARD, "HOLD_FORWARD", 0, "Hold Forward", "Only hold last frame."},
        {0, NULL, 0, NULL, NULL}};
 
-void rna_def_nlastrip(BlenderRNA *brna)
+static void rna_def_nlastrip(BlenderRNA *brna)
 {
        StructRNA *srna;
        PropertyRNA *prop;
@@ -271,6 +295,7 @@ void rna_def_nlastrip(BlenderRNA *brna)
        /* struct definition */
        srna= RNA_def_struct(brna, "NlaStrip", NULL);
        RNA_def_struct_ui_text(srna, "NLA Strip", "A container referencing an existing Action.");
+       RNA_def_struct_path_func(srna, "rna_NlaStrip_path");
        RNA_def_struct_ui_icon(srna, ICON_NLA); // XXX
        
        /* name property */
@@ -297,12 +322,12 @@ void rna_def_nlastrip(BlenderRNA *brna)
        RNA_def_property_ui_text(prop, "Blending", "Method used for combining strip's result with accumulated result.");
        
        /* Strip extents */
-       prop= RNA_def_property(srna, "start_frame", PROP_FLOAT, PROP_NONE);
+       prop= RNA_def_property(srna, "start_frame", PROP_FLOAT, PROP_TIME);
        RNA_def_property_float_sdna(prop, NULL, "start");
        RNA_def_property_float_funcs(prop, NULL, "rna_NlaStrip_start_frame_set", NULL);
        RNA_def_property_ui_text(prop, "Start Frame", "");
        
-       prop= RNA_def_property(srna, "end_frame", PROP_FLOAT, PROP_NONE);
+       prop= RNA_def_property(srna, "end_frame", PROP_FLOAT, PROP_TIME);
        RNA_def_property_float_sdna(prop, NULL, "end");
        RNA_def_property_float_funcs(prop, NULL, "rna_NlaStrip_end_frame_set", NULL);
        RNA_def_property_ui_text(prop, "End Frame", "");
@@ -325,15 +350,16 @@ void rna_def_nlastrip(BlenderRNA *brna)
        /* Action */
        prop= RNA_def_property(srna, "action", PROP_POINTER, PROP_NONE);
        RNA_def_property_pointer_sdna(prop, NULL, "act");
+       RNA_def_property_flag(prop, PROP_EDITABLE); 
        RNA_def_property_ui_text(prop, "Action", "Action referenced by this strip.");
        
        /* Action extents */
-       prop= RNA_def_property(srna, "action_start_frame", PROP_FLOAT, PROP_NONE);
+       prop= RNA_def_property(srna, "action_start_frame", PROP_FLOAT, PROP_TIME);
        RNA_def_property_float_sdna(prop, NULL, "actstart");
        RNA_def_property_float_funcs(prop, NULL, "rna_NlaStrip_action_start_frame_set", NULL);
        RNA_def_property_ui_text(prop, "Action Start Frame", "");
        
-       prop= RNA_def_property(srna, "action_end_frame", PROP_FLOAT, PROP_NONE);
+       prop= RNA_def_property(srna, "action_end_frame", PROP_FLOAT, PROP_TIME);
        RNA_def_property_float_sdna(prop, NULL, "actend");
        RNA_def_property_float_funcs(prop, NULL, "rna_NlaStrip_action_end_frame_set", NULL);
        RNA_def_property_ui_text(prop, "Action End Frame", "");
@@ -371,7 +397,7 @@ void rna_def_nlastrip(BlenderRNA *brna)
        RNA_def_property_range(prop, 0.0f, 1.0f);
        RNA_def_property_ui_text(prop, "Influence", "Amount the strip contributes to the current result.");
        
-       prop= RNA_def_property(srna, "strip_time", PROP_FLOAT, PROP_NONE);
+       prop= RNA_def_property(srna, "strip_time", PROP_FLOAT, PROP_TIME);
        RNA_def_property_ui_text(prop, "Strip Time", "Frame of referenced Action to evaluate.");
        
                // TODO: should the animated_influence/time settings be animatable themselves?
@@ -407,7 +433,7 @@ void rna_def_nlastrip(BlenderRNA *brna)
        // - sync length
 }
 
-void rna_def_nlatrack(BlenderRNA *brna)
+static void rna_def_nlatrack(BlenderRNA *brna)
 {
        StructRNA *srna;
        PropertyRNA *prop;