1 /* 2 * This program is free software; you can redistribute it and/or 3 * modify it under the terms of the GNU General Public License 4 * as published by the Free Software Foundation; either version 2 5 * of the License, or (at your option) any later version. 6 * 7 * This program is distributed in the hope that it will be useful, 8 * but WITHOUT ANY WARRANTY; without even the implied warranty of 9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10 * GNU General Public License for more details. 11 * 12 * You should have received a copy of the GNU General Public License 13 * along with this program; if not, write to the Free Software Foundation, 14 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 15 */ 16 17 #pragma once 18 19 /** \file 20 * \ingroup RNA 21 * 22 * Functions used during preprocess and runtime, for defining the RNA. 23 */ 24 25 #include <float.h> 26 #include <inttypes.h> 27 #include <limits.h> 28 29 #include "DNA_listBase.h" 30 #include "RNA_types.h" 31 32 #ifdef __cplusplus 33 extern "C" { 34 #endif 35 36 #ifdef UNIT_TEST 37 # define RNA_MAX_ARRAY_LENGTH 64 38 #else 39 # define RNA_MAX_ARRAY_LENGTH 32 40 #endif 41 42 #define RNA_MAX_ARRAY_DIMENSION 3 43 44 /* Blender RNA */ 45 46 BlenderRNA *RNA_create(void); 47 void RNA_define_free(BlenderRNA *brna); 48 void RNA_free(BlenderRNA *brna); 49 void RNA_define_verify_sdna(bool verify); 50 void RNA_define_animate_sdna(bool animate); 51 void RNA_define_fallback_property_update(int noteflag, const char *updatefunc); 52 void RNA_define_lib_overridable(const bool make_overridable); 53 54 void RNA_init(void); 55 void RNA_exit(void); 56 57 /* Struct */ 58 59 StructRNA *RNA_def_struct_ptr(BlenderRNA *brna, const char *identifier, StructRNA *srnafrom); 60 StructRNA *RNA_def_struct(BlenderRNA *brna, const char *identifier, const char *from); 61 void RNA_def_struct_sdna(StructRNA *srna, const char *structname); 62 void RNA_def_struct_sdna_from(StructRNA *srna, const char *structname, const char *propname); 63 void RNA_def_struct_name_property(StructRNA *srna, PropertyRNA *prop); 64 void RNA_def_struct_nested(BlenderRNA *brna, StructRNA *srna, const char *structname); 65 void RNA_def_struct_flag(StructRNA *srna, int flag); 66 void RNA_def_struct_clear_flag(StructRNA *srna, int flag); 67 void RNA_def_struct_property_tags(StructRNA *srna, const EnumPropertyItem *prop_tag_defines); 68 void RNA_def_struct_refine_func(StructRNA *srna, const char *refine); 69 void RNA_def_struct_idprops_func(StructRNA *srna, const char *idproperties); 70 void RNA_def_struct_register_funcs(StructRNA *srna, 71 const char *reg, 72 const char *unreg, 73 const char *instance); 74 void RNA_def_struct_path_func(StructRNA *srna, const char *path); 75 void RNA_def_struct_identifier_no_struct_map(StructRNA *srna, const char *identifier); 76 void RNA_def_struct_identifier(BlenderRNA *brna, StructRNA *srna, const char *identifier); 77 void RNA_def_struct_ui_text(StructRNA *srna, const char *name, const char *description); 78 void RNA_def_struct_ui_icon(StructRNA *srna, int icon); 79 void RNA_struct_free_extension(StructRNA *srna, ExtensionRNA *rna_ext); 80 void RNA_struct_free(BlenderRNA *brna, StructRNA *srna); 81 82 void RNA_def_struct_translation_context(StructRNA *srna, const char *context); 83 84 /* Compact Property Definitions */ 85 86 typedef void StructOrFunctionRNA; 87 88 PropertyRNA *RNA_def_boolean(StructOrFunctionRNA *cont, 89 const char *identifier, 90 bool default_value, 91 const char *ui_name, 92 const char *ui_description); 93 PropertyRNA *RNA_def_boolean_array(StructOrFunctionRNA *cont, 94 const char *identifier, 95 int len, 96 bool *default_value, 97 const char *ui_name, 98 const char *ui_description); 99 PropertyRNA *RNA_def_boolean_layer(StructOrFunctionRNA *cont, 100 const char *identifier, 101 int len, 102 bool *default_value, 103 const char *ui_name, 104 const char *ui_description); 105 PropertyRNA *RNA_def_boolean_layer_member(StructOrFunctionRNA *cont, 106 const char *identifier, 107 int len, 108 bool *default_value, 109 const char *ui_name, 110 const char *ui_description); 111 PropertyRNA *RNA_def_boolean_vector(StructOrFunctionRNA *cont, 112 const char *identifier, 113 int len, 114 bool *default_value, 115 const char *ui_name, 116 const char *ui_description); 117 118 PropertyRNA *RNA_def_int(StructOrFunctionRNA *cont, 119 const char *identifier, 120 int default_value, 121 int hardmin, 122 int hardmax, 123 const char *ui_name, 124 const char *ui_description, 125 int softmin, 126 int softmax); 127 PropertyRNA *RNA_def_int_vector(StructOrFunctionRNA *cont, 128 const char *identifier, 129 int len, 130 const int *default_value, 131 int hardmin, 132 int hardmax, 133 const char *ui_name, 134 const char *ui_description, 135 int softmin, 136 int softmax); 137 PropertyRNA *RNA_def_int_array(StructOrFunctionRNA *cont, 138 const char *identifier, 139 int len, 140 const int *default_value, 141 int hardmin, 142 int hardmax, 143 const char *ui_name, 144 const char *ui_description, 145 int softmin, 146 int softmax); 147 148 PropertyRNA *RNA_def_string(StructOrFunctionRNA *cont, 149 const char *identifier, 150 const char *default_value, 151 int maxlen, 152 const char *ui_name, 153 const char *ui_description); 154 PropertyRNA *RNA_def_string_file_path(StructOrFunctionRNA *cont, 155 const char *identifier, 156 const char *default_value, 157 int maxlen, 158 const char *ui_name, 159 const char *ui_description); 160 PropertyRNA *RNA_def_string_dir_path(StructOrFunctionRNA *cont, 161 const char *identifier, 162 const char *default_value, 163 int maxlen, 164 const char *ui_name, 165 const char *ui_description); 166 PropertyRNA *RNA_def_string_file_name(StructOrFunctionRNA *cont, 167 const char *identifier, 168 const char *default_value, 169 int maxlen, 170 const char *ui_name, 171 const char *ui_description); 172 173 PropertyRNA *RNA_def_enum(StructOrFunctionRNA *cont, 174 const char *identifier, 175 const EnumPropertyItem *items, 176 int default_value, 177 const char *ui_name, 178 const char *ui_description); 179 PropertyRNA *RNA_def_enum_flag(StructOrFunctionRNA *cont, 180 const char *identifier, 181 const EnumPropertyItem *items, 182 int default_value, 183 const char *ui_name, 184 const char *ui_description); 185 void RNA_def_enum_funcs(PropertyRNA *prop, EnumPropertyItemFunc itemfunc); 186 187 PropertyRNA *RNA_def_float(StructOrFunctionRNA *cont, 188 const char *identifier, 189 float default_value, 190 float hardmin, 191 float hardmax, 192 const char *ui_name, 193 const char *ui_description, 194 float softmin, 195 float softmax); 196 PropertyRNA *RNA_def_float_vector(StructOrFunctionRNA *cont, 197 const char *identifier, 198 int len, 199 const float *default_value, 200 float hardmin, 201 float hardmax, 202 const char *ui_name, 203 const char *ui_description, 204 float softmin, 205 float softmax); 206 PropertyRNA *RNA_def_float_vector_xyz(StructOrFunctionRNA *cont, 207 const char *identifier, 208 int len, 209 const float *default_value, 210 float hardmin, 211 float hardmax, 212 const char *ui_name, 213 const char *ui_description, 214 float softmin, 215 float softmax); 216 PropertyRNA *RNA_def_float_color(StructOrFunctionRNA *cont, 217 const char *identifier, 218 int len, 219 const float *default_value, 220 float hardmin, 221 float hardmax, 222 const char *ui_name, 223 const char *ui_description, 224 float softmin, 225 float softmax); 226 PropertyRNA *RNA_def_float_matrix(StructOrFunctionRNA *cont, 227 const char *identifier, 228 int rows, 229 int columns, 230 const float *default_value, 231 float hardmin, 232 float hardmax, 233 const char *ui_name, 234 const char *ui_description, 235 float softmin, 236 float softmax); 237 PropertyRNA *RNA_def_float_translation(StructOrFunctionRNA *cont, 238 const char *identifier, 239 int len, 240 const float *default_value, 241 float hardmin, 242 float hardmax, 243 const char *ui_name, 244 const char *ui_description, 245 float softmin, 246 float softmax); 247 PropertyRNA *RNA_def_float_rotation(StructOrFunctionRNA *cont, 248 const char *identifier, 249 int len, 250 const float *default_value, 251 float hardmin, 252 float hardmax, 253 const char *ui_name, 254 const char *ui_description, 255 float softmin, 256 float softmax); 257 PropertyRNA *RNA_def_float_distance(StructOrFunctionRNA *cont, 258 const char *identifier, 259 float default_value, 260 float hardmin, 261 float hardmax, 262 const char *ui_name, 263 const char *ui_description, 264 float softmin, 265 float softmax); 266 PropertyRNA *RNA_def_float_array(StructOrFunctionRNA *cont, 267 const char *identifier, 268 int len, 269 const float *default_value, 270 float hardmin, 271 float hardmax, 272 const char *ui_name, 273 const char *ui_description, 274 float softmin, 275 float softmax); 276 277 #if 0 278 PropertyRNA *RNA_def_float_dynamic_array(StructOrFunctionRNA *cont, 279 const char *identifier, 280 float hardmin, 281 float hardmax, 282 const char *ui_name, 283 const char *ui_description, 284 float softmin, 285 float softmax, 286 unsigned int dimension, 287 unsigned short dim_size[]); 288 #endif 289 290 PropertyRNA *RNA_def_float_percentage(StructOrFunctionRNA *cont, 291 const char *identifier, 292 float default_value, 293 float hardmin, 294 float hardmax, 295 const char *ui_name, 296 const char *ui_description, 297 float softmin, 298 float softmax); 299 PropertyRNA *RNA_def_float_factor(StructOrFunctionRNA *cont, 300 const char *identifier, 301 float default_value, 302 float hardmin, 303 float hardmax, 304 const char *ui_name, 305 const char *ui_description, 306 float softmin, 307 float softmax); 308 309 PropertyRNA *RNA_def_pointer(StructOrFunctionRNA *cont, 310 const char *identifier, 311 const char *type, 312 const char *ui_name, 313 const char *ui_description); 314 PropertyRNA *RNA_def_pointer_runtime(StructOrFunctionRNA *cont, 315 const char *identifier, 316 StructRNA *type, 317 const char *ui_name, 318 const char *ui_description); 319 320 PropertyRNA *RNA_def_collection(StructOrFunctionRNA *cont, 321 const char *identifier, 322 const char *type, 323 const char *ui_name, 324 const char *ui_description); 325 PropertyRNA *RNA_def_collection_runtime(StructOrFunctionRNA *cont, 326 const char *identifier, 327 StructRNA *type, 328 const char *ui_name, 329 const char *ui_description); 330 331 /* Extended Property Definitions */ 332 333 PropertyRNA *RNA_def_property(StructOrFunctionRNA *cont, 334 const char *identifier, 335 int type, 336 int subtype); 337 338 void RNA_def_property_boolean_sdna(PropertyRNA *prop, 339 const char *structname, 340 const char *propname, 341 int64_t bit); 342 void RNA_def_property_boolean_negative_sdna(PropertyRNA *prop, 343 const char *structname, 344 const char *propname, 345 int64_t bit); 346 void RNA_def_property_int_sdna(PropertyRNA *prop, const char *structname, const char *propname); 347 void RNA_def_property_float_sdna(PropertyRNA *prop, const char *structname, const char *propname); 348 void RNA_def_property_string_sdna(PropertyRNA *prop, const char *structname, const char *propname); 349 void RNA_def_property_enum_sdna(PropertyRNA *prop, const char *structname, const char *propname); 350 void RNA_def_property_enum_bitflag_sdna(PropertyRNA *prop, 351 const char *structname, 352 const char *propname); 353 void RNA_def_property_pointer_sdna(PropertyRNA *prop, 354 const char *structname, 355 const char *propname); 356 void RNA_def_property_collection_sdna(PropertyRNA *prop, 357 const char *structname, 358 const char *propname, 359 const char *lengthpropname); 360 361 void RNA_def_property_flag(PropertyRNA *prop, PropertyFlag flag); 362 void RNA_def_property_clear_flag(PropertyRNA *prop, PropertyFlag flag); 363 void RNA_def_property_override_flag(PropertyRNA *prop, PropertyOverrideFlag flag); 364 void RNA_def_property_override_clear_flag(PropertyRNA *prop, PropertyOverrideFlag flag); 365 void RNA_def_property_tags(PropertyRNA *prop, int tags); 366 void RNA_def_property_subtype(PropertyRNA *prop, PropertySubType subtype); 367 void RNA_def_property_array(PropertyRNA *prop, int length); 368 void RNA_def_property_multi_array(PropertyRNA *prop, int dimension, const int length[]); 369 void RNA_def_property_range(PropertyRNA *prop, double min, double max); 370 371 void RNA_def_property_enum_items(PropertyRNA *prop, const EnumPropertyItem *item); 372 void RNA_def_property_enum_native_type(PropertyRNA *prop, const char *native_enum_type); 373 void RNA_def_property_string_maxlength(PropertyRNA *prop, int maxlength); 374 void RNA_def_property_struct_type(PropertyRNA *prop, const char *type); 375 void RNA_def_property_struct_runtime(PropertyRNA *prop, StructRNA *type); 376 377 void RNA_def_property_boolean_default(PropertyRNA *prop, bool value); 378 void RNA_def_property_boolean_array_default(PropertyRNA *prop, const bool *array); 379 void RNA_def_property_int_default(PropertyRNA *prop, int value); 380 void RNA_def_property_int_array_default(PropertyRNA *prop, const int *array); 381 void RNA_def_property_float_default(PropertyRNA *prop, float value); 382 void RNA_def_property_float_array_default(PropertyRNA *prop, const float *array); 383 void RNA_def_property_enum_default(PropertyRNA *prop, int value); 384 void RNA_def_property_string_default(PropertyRNA *prop, const char *value); 385 386 void RNA_def_property_ui_text(PropertyRNA *prop, const char *name, const char *description); 387 void RNA_def_property_ui_range( 388 PropertyRNA *prop, double min, double max, double step, int precision); 389 void RNA_def_property_ui_icon(PropertyRNA *prop, int icon, int consecutive); 390 391 void RNA_def_property_update(PropertyRNA *prop, int noteflag, const char *updatefunc); 392 void RNA_def_property_editable_func(PropertyRNA *prop, const char *editable); 393 void RNA_def_property_editable_array_func(PropertyRNA *prop, const char *editable); 394 395 void RNA_def_property_override_funcs(PropertyRNA *prop, 396 const char *diff, 397 const char *store, 398 const char *apply); 399 400 void RNA_def_property_update_runtime(PropertyRNA *prop, const void *func); 401 void RNA_def_property_poll_runtime(PropertyRNA *prop, const void *func); 402 403 void RNA_def_property_dynamic_array_funcs(PropertyRNA *prop, const char *getlength); 404 void RNA_def_property_boolean_funcs(PropertyRNA *prop, const char *get, const char *set); 405 void RNA_def_property_int_funcs(PropertyRNA *prop, 406 const char *get, 407 const char *set, 408 const char *range); 409 void RNA_def_property_float_funcs(PropertyRNA *prop, 410 const char *get, 411 const char *set, 412 const char *range); 413 void RNA_def_property_enum_funcs(PropertyRNA *prop, 414 const char *get, 415 const char *set, 416 const char *item); 417 void RNA_def_property_string_funcs(PropertyRNA *prop, 418 const char *get, 419 const char *length, 420 const char *set); 421 void RNA_def_property_pointer_funcs( 422 PropertyRNA *prop, const char *get, const char *set, const char *typef, const char *poll); 423 void RNA_def_property_collection_funcs(PropertyRNA *prop, 424 const char *begin, 425 const char *next, 426 const char *end, 427 const char *get, 428 const char *length, 429 const char *lookupint, 430 const char *lookupstring, 431 const char *assignint); 432 void RNA_def_property_srna(PropertyRNA *prop, const char *type); 433 void RNA_def_py_data(PropertyRNA *prop, void *py_data); 434 435 void RNA_def_property_boolean_funcs_runtime(PropertyRNA *prop, 436 BooleanPropertyGetFunc getfunc, 437 BooleanPropertySetFunc setfunc); 438 void RNA_def_property_boolean_array_funcs_runtime(PropertyRNA *prop, 439 BooleanArrayPropertyGetFunc getfunc, 440 BooleanArrayPropertySetFunc setfunc); 441 void RNA_def_property_int_funcs_runtime(PropertyRNA *prop, 442 IntPropertyGetFunc getfunc, 443 IntPropertySetFunc setfunc, 444 IntPropertyRangeFunc rangefunc); 445 void RNA_def_property_int_array_funcs_runtime(PropertyRNA *prop, 446 IntArrayPropertyGetFunc getfunc, 447 IntArrayPropertySetFunc setfunc, 448 IntPropertyRangeFunc rangefunc); 449 void RNA_def_property_float_funcs_runtime(PropertyRNA *prop, 450 FloatPropertyGetFunc getfunc, 451 FloatPropertySetFunc setfunc, 452 FloatPropertyRangeFunc rangefunc); 453 void RNA_def_property_float_array_funcs_runtime(PropertyRNA *prop, 454 FloatArrayPropertyGetFunc getfunc, 455 FloatArrayPropertySetFunc setfunc, 456 FloatPropertyRangeFunc rangefunc); 457 void RNA_def_property_enum_funcs_runtime(PropertyRNA *prop, 458 EnumPropertyGetFunc getfunc, 459 EnumPropertySetFunc setfunc, 460 EnumPropertyItemFunc itemfunc); 461 void RNA_def_property_string_funcs_runtime(PropertyRNA *prop, 462 StringPropertyGetFunc getfunc, 463 StringPropertyLengthFunc lengthfunc, 464 StringPropertySetFunc setfunc); 465 466 void RNA_def_property_enum_py_data(PropertyRNA *prop, void *py_data); 467 468 void RNA_def_property_translation_context(PropertyRNA *prop, const char *context); 469 470 /* Function */ 471 472 FunctionRNA *RNA_def_function(StructRNA *srna, const char *identifier, const char *call); 473 FunctionRNA *RNA_def_function_runtime(StructRNA *srna, const char *identifier, CallFunc call); 474 void RNA_def_function_return(FunctionRNA *func, PropertyRNA *ret); 475 void RNA_def_function_output(FunctionRNA *func, PropertyRNA *ret); 476 void RNA_def_function_flag(FunctionRNA *func, int flag); 477 void RNA_def_function_ui_description(FunctionRNA *func, const char *description); 478 479 void RNA_def_parameter_flags(PropertyRNA *prop, 480 PropertyFlag flag_property, 481 ParameterFlag flag_parameter); 482 void RNA_def_parameter_clear_flags(PropertyRNA *prop, 483 PropertyFlag flag_property, 484 ParameterFlag flag_parameter); 485 486 /* Dynamic Enums 487 * strings are not freed, assumed pointing to static location. */ 488 489 void RNA_enum_item_add(EnumPropertyItem **items, int *totitem, const EnumPropertyItem *item); 490 void RNA_enum_item_add_separator(EnumPropertyItem **items, int *totitem); 491 void RNA_enum_items_add(EnumPropertyItem **items, int *totitem, const EnumPropertyItem *item); 492 void RNA_enum_items_add_value(EnumPropertyItem **items, 493 int *totitem, 494 const EnumPropertyItem *item, 495 int value); 496 void RNA_enum_item_end(EnumPropertyItem **items, int *totitem); 497 498 /* Memory management */ 499 500 void RNA_def_struct_duplicate_pointers(BlenderRNA *brna, StructRNA *srna); 501 void RNA_def_struct_free_pointers(BlenderRNA *brna, StructRNA *srna); 502 void RNA_def_func_duplicate_pointers(FunctionRNA *func); 503 void RNA_def_func_free_pointers(FunctionRNA *func); 504 void RNA_def_property_duplicate_pointers(StructOrFunctionRNA *cont_, PropertyRNA *prop); 505 void RNA_def_property_free_pointers(PropertyRNA *prop); 506 int RNA_def_property_free_identifier(StructOrFunctionRNA *cont_, const char *identifier); 507 508 /* utilities */ 509 const char *RNA_property_typename(PropertyType type); 510 #define IS_DNATYPE_FLOAT_COMPAT(_str) (strcmp(_str, "float") == 0 || strcmp(_str, "double") == 0) 511 #define IS_DNATYPE_INT_COMPAT(_str) \ 512 (strcmp(_str, "int") == 0 || strcmp(_str, "short") == 0 || strcmp(_str, "char") == 0 || \ 513 strcmp(_str, "uchar") == 0 || strcmp(_str, "ushort") == 0) 514 #define IS_DNATYPE_BOOLEAN_COMPAT(_str) \ 515 (IS_DNATYPE_INT_COMPAT(_str) || strcmp(_str, "int64_t") == 0 || strcmp(_str, "uint64_t") == 0) 516 517 void RNA_identifier_sanitize(char *identifier, int property); 518 519 extern const int rna_matrix_dimsize_3x3[]; 520 extern const int rna_matrix_dimsize_4x4[]; 521 extern const int rna_matrix_dimsize_4x2[]; 522 523 extern const float rna_default_axis_angle[4]; 524 extern const float rna_default_quaternion[4]; 525 extern const float rna_default_scale_3d[3]; 526 527 /* max size for dynamic defined type descriptors, 528 * this value is arbitrary */ 529 #define RNA_DYN_DESCR_MAX 240 530 531 #ifdef __cplusplus 532 } 533 #endif 534