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