Expose multi-dimensional array data in properties' introspection data.
authorBastien Montagne <montagne29@wanadoo.fr>
Wed, 20 Sep 2017 14:37:01 +0000 (16:37 +0200)
committerBastien Montagne <montagne29@wanadoo.fr>
Wed, 20 Sep 2017 14:40:11 +0000 (16:40 +0200)
Required to generate valid doc for such arrays!

source/blender/makesrna/intern/rna_rna.c

index b50ac7a61ef2f8a236207086f23e267c735da04b..502a9c42363138a817c60e2557050917ac12be3b 100644 (file)
@@ -610,6 +610,22 @@ static int rna_Property_array_length_get(PointerRNA *ptr)
        return prop->totarraylength;
 }
 
        return prop->totarraylength;
 }
 
+static void rna_Property_array_dimensions_get(PointerRNA *ptr, int dimensions[RNA_MAX_ARRAY_DIMENSION])
+{
+       PropertyRNA *prop = (PropertyRNA *)ptr->data;
+       rna_idproperty_check(&prop, ptr);
+
+       if (prop->arraydimension > 1) {
+               for (int i = RNA_MAX_ARRAY_DIMENSION; i--; ) {
+                       dimensions[i] = (i >= prop->arraydimension) ? 0 : prop->arraylength[i];
+               }
+       }
+       else {
+               memset(dimensions, 0, sizeof(*dimensions) * RNA_MAX_ARRAY_DIMENSION);
+               dimensions[0] = prop->totarraylength;
+       }
+}
+
 static int rna_Property_is_registered_get(PointerRNA *ptr)
 {
        PropertyRNA *prop = (PropertyRNA *)ptr->data;
 static int rna_Property_is_registered_get(PointerRNA *ptr)
 {
        PropertyRNA *prop = (PropertyRNA *)ptr->data;
@@ -1354,6 +1370,12 @@ static void rna_def_number_property(StructRNA *srna, PropertyType type)
        RNA_def_property_int_funcs(prop, "rna_Property_array_length_get", NULL, NULL);
        RNA_def_property_ui_text(prop, "Array Length", "Maximum length of the array, 0 means unlimited");
 
        RNA_def_property_int_funcs(prop, "rna_Property_array_length_get", NULL, NULL);
        RNA_def_property_ui_text(prop, "Array Length", "Maximum length of the array, 0 means unlimited");
 
+       prop = RNA_def_property(srna, "array_dimensions", PROP_INT, PROP_UNSIGNED);
+       RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+       RNA_def_property_array(prop, RNA_MAX_ARRAY_DIMENSION);
+       RNA_def_property_int_funcs(prop, "rna_Property_array_dimensions_get", NULL, NULL);
+       RNA_def_property_ui_text(prop, "Array Dimensions", "Length of each dimension of the array");
+
        prop = RNA_def_property(srna, "is_array", PROP_BOOLEAN, PROP_NONE);
        RNA_def_property_clear_flag(prop, PROP_EDITABLE);
        RNA_def_property_boolean_funcs(prop, "rna_NumberProperty_is_array_get", NULL);
        prop = RNA_def_property(srna, "is_array", PROP_BOOLEAN, PROP_NONE);
        RNA_def_property_clear_flag(prop, PROP_EDITABLE);
        RNA_def_property_boolean_funcs(prop, "rna_NumberProperty_is_array_get", NULL);