Merge branch 'master' into blender2.8
[blender.git] / source / blender / makesrna / intern / rna_ui_api.c
1 /*
2  * ***** BEGIN GPL LICENSE BLOCK *****
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software Foundation,
16  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17  *
18  * The Original Code is Copyright (C) 2009 Blender Foundation.
19  * All rights reserved.
20  *
21  *
22  * Contributor(s): Blender Foundation
23  *
24  * ***** END GPL LICENSE BLOCK *****
25  */
26
27 /** \file blender/makesrna/intern/rna_ui_api.c
28  *  \ingroup RNA
29  */
30
31
32 #include <stdlib.h>
33 #include <stdio.h>
34
35 #include "BLI_utildefines.h"
36
37 #include "BLT_translation.h"
38
39 #include "RNA_define.h"
40 #include "RNA_enum_types.h"
41
42 #include "DNA_screen_types.h"
43
44 #include "UI_resources.h"
45 #include "UI_interface.h"
46 #include "UI_interface_icons.h"
47
48 #include "rna_internal.h"
49
50 #define DEF_ICON_BLANK_SKIP
51 #define DEF_ICON(name) {ICON_##name, (#name), 0, (#name), ""},
52 #define DEF_VICO(name) {VICO_##name, (#name), 0, (#name), ""},
53 const EnumPropertyItem rna_enum_icon_items[] = {
54 #include "UI_icons.h"
55         {0, NULL, 0, NULL, NULL}
56 };
57 #undef DEF_ICON_BLANK_SKIP
58 #undef DEF_ICON
59 #undef DEF_VICO
60
61 #ifdef RNA_RUNTIME
62
63 const char *rna_translate_ui_text(
64         const char *text, const char *text_ctxt, StructRNA *type, PropertyRNA *prop, int translate)
65 {
66         /* Also return text if UI labels translation is disabled. */
67         if (!text || !text[0] || !translate || !BLT_translate_iface()) {
68                 return text;
69         }
70
71         /* If a text_ctxt is specified, use it! */
72         if (text_ctxt && text_ctxt[0]) {
73                 return BLT_pgettext(text_ctxt, text);
74         }
75
76         /* Else, if an RNA type or property is specified, use its context. */
77 #if 0
78         /* XXX Disabled for now. Unfortunately, their is absolutely no way from py code to get the RNA struct corresponding
79          *     to the 'data' (in functions like prop() & co), as this is pure runtime data. Hence, messages extraction
80          *     script can't determine the correct context it should use for such 'text' messages...
81          *     So for now, one have to explicitly specify the 'text_ctxt' when using prop() etc. functions,
82          *     if default context is not suitable.
83          */
84         if (prop) {
85                 return BLT_pgettext(RNA_property_translation_context(prop), text);
86         }
87 #else
88         (void)prop;
89 #endif
90         if (type) {
91                 return BLT_pgettext(RNA_struct_translation_context(type), text);
92         }
93
94         /* Else, default context! */
95         return BLT_pgettext(BLT_I18NCONTEXT_DEFAULT, text);
96 }
97
98 static void rna_uiItemR(
99         uiLayout *layout, PointerRNA *ptr, const char *propname, const char *name, const char *text_ctxt,
100         int translate, int icon, int expand, int slider, int toggle, int icon_only, int event,
101         int full_event, int emboss, int index, int icon_value)
102 {
103         PropertyRNA *prop = RNA_struct_find_property(ptr, propname);
104         int flag = 0;
105
106         if (!prop) {
107                 RNA_warning("property not found: %s.%s", RNA_struct_identifier(ptr->type), propname);
108                 return;
109         }
110
111         if (icon_value && !icon) {
112                 icon = icon_value;
113         }
114
115         /* Get translated name (label). */
116         name = rna_translate_ui_text(name, text_ctxt, NULL, prop, translate);
117
118         flag |= (slider) ? UI_ITEM_R_SLIDER : 0;
119         flag |= (expand) ? UI_ITEM_R_EXPAND : 0;
120         flag |= (toggle) ? UI_ITEM_R_TOGGLE : 0;
121         flag |= (icon_only) ? UI_ITEM_R_ICON_ONLY : 0;
122         flag |= (event) ? UI_ITEM_R_EVENT : 0;
123         flag |= (full_event) ? UI_ITEM_R_FULL_EVENT : 0;
124         flag |= (emboss) ? 0 : UI_ITEM_R_NO_BG;
125
126         uiItemFullR(layout, ptr, prop, index, 0, flag, name, icon);
127 }
128
129 static void rna_uiItemMenuEnumR(
130         uiLayout *layout, struct PointerRNA *ptr, const char *propname, const char *name,
131         const char *text_ctxt, int translate, int icon)
132 {
133         PropertyRNA *prop = RNA_struct_find_property(ptr, propname);
134
135         if (!prop) {
136                 RNA_warning("property not found: %s.%s", RNA_struct_identifier(ptr->type), propname);
137                 return;
138         }
139
140         /* Get translated name (label). */
141         name = rna_translate_ui_text(name, text_ctxt, NULL, prop, translate);
142         uiItemMenuEnumR_prop(layout, ptr, prop, name, icon);
143 }
144
145 static void rna_uiItemEnumR_string(
146         uiLayout *layout, struct PointerRNA *ptr, const char *propname, const char *value,
147         const char *name, const char *text_ctxt, int translate, int icon)
148 {
149         PropertyRNA *prop = RNA_struct_find_property(ptr, propname);
150
151         if (!prop) {
152                 RNA_warning("property not found: %s.%s", RNA_struct_identifier(ptr->type), propname);
153                 return;
154         }
155
156         /* Get translated name (label). */
157         name = rna_translate_ui_text(name, text_ctxt, NULL, prop, translate);
158
159         /* XXX This will search property again :( */
160         uiItemEnumR_string(layout, ptr, propname, value, name, icon);
161 }
162
163 static void rna_uiItemPointerR(
164         uiLayout *layout, struct PointerRNA *ptr, const char *propname,
165         struct PointerRNA *searchptr, const char *searchpropname,
166         const char *name, const char *text_ctxt, int translate, int icon)
167 {
168         PropertyRNA *prop = RNA_struct_find_property(ptr, propname);
169
170         if (!prop) {
171                 RNA_warning("property not found: %s.%s", RNA_struct_identifier(ptr->type), propname);
172                 return;
173         }
174
175         /* Get translated name (label). */
176         name = rna_translate_ui_text(name, text_ctxt, NULL, prop, translate);
177
178         /* XXX This will search property again :( */
179         uiItemPointerR(layout, ptr, propname, searchptr, searchpropname, name, icon);
180 }
181
182 static PointerRNA rna_uiItemO(
183         uiLayout *layout, const char *opname, const char *name, const char *text_ctxt,
184         int translate, int icon, int emboss, int depress, int icon_value)
185 {
186         wmOperatorType *ot;
187
188         ot = WM_operatortype_find(opname, 0); /* print error next */
189         if (!ot || !ot->srna) {
190                 RNA_warning("%s '%s'", ot ? "unknown operator" : "operator missing srna", opname);
191                 return PointerRNA_NULL;
192         }
193
194         /* Get translated name (label). */
195         name = rna_translate_ui_text(name, text_ctxt, ot->srna, NULL, translate);
196
197         if (icon_value && !icon) {
198                 icon = icon_value;
199         }
200         int flag = (emboss) ? 0 : UI_ITEM_R_NO_BG;
201         flag |= (depress) ? UI_ITEM_O_DEPRESS : 0;
202
203         PointerRNA opptr;
204         uiItemFullO_ptr(layout, ot, name, icon, NULL, uiLayoutGetOperatorContext(layout), flag, &opptr);
205         return opptr;
206 }
207
208 static PointerRNA rna_uiItemOMenuHold(
209         uiLayout *layout, const char *opname, const char *name, const char *text_ctxt,
210         int translate, int icon, int emboss, int depress, int icon_value,
211         const char *menu)
212 {
213         wmOperatorType *ot = WM_operatortype_find(opname, 0); /* print error next */
214         if (!ot || !ot->srna) {
215                 RNA_warning("%s '%s'", ot ? "unknown operator" : "operator missing srna", opname);
216                 return PointerRNA_NULL;
217         }
218
219         /* Get translated name (label). */
220         name = rna_translate_ui_text(name, text_ctxt, ot->srna, NULL, translate);
221         if (icon_value && !icon) {
222                 icon = icon_value;
223         }
224         int flag = (emboss) ? 0 : UI_ITEM_R_NO_BG;
225         flag |= (depress) ? UI_ITEM_O_DEPRESS : 0;
226
227         PointerRNA opptr;
228         uiItemFullOMenuHold_ptr(layout, ot, name, icon, NULL, uiLayoutGetOperatorContext(layout), flag, menu, &opptr);
229         return opptr;
230 }
231
232
233 static void rna_uiItemMenuEnumO(
234         uiLayout *layout, bContext *C, const char *opname, const char *propname, const char *name,
235         const char *text_ctxt, int translate, int icon)
236 {
237         wmOperatorType *ot = WM_operatortype_find(opname, 0); /* print error next */
238
239         if (!ot || !ot->srna) {
240                 RNA_warning("%s '%s'", ot ? "unknown operator" : "operator missing srna", opname);
241                 return;
242         }
243
244         /* Get translated name (label). */
245         name = rna_translate_ui_text(name, text_ctxt, ot->srna, NULL, translate);
246
247         uiItemMenuEnumO_ptr(layout, C, ot, propname, name, icon);
248 }
249
250 static void rna_uiItemL(
251         uiLayout *layout, const char *name, const char *text_ctxt, int translate,
252         int icon, int icon_value)
253 {
254         /* Get translated name (label). */
255         name = rna_translate_ui_text(name, text_ctxt, NULL, NULL, translate);
256
257         if (icon_value && !icon) {
258                 icon = icon_value;
259         }
260
261         uiItemL(layout, name, icon);
262 }
263
264 static void rna_uiItemM(
265         uiLayout *layout, bContext *C, const char *menuname, const char *name, const char *text_ctxt,
266         int translate, int icon, int icon_value)
267 {
268         /* Get translated name (label). */
269         name = rna_translate_ui_text(name, text_ctxt, NULL, NULL, translate);
270
271         if (icon_value && !icon) {
272                 icon = icon_value;
273         }
274
275         uiItemM(layout, C, menuname, name, icon);
276 }
277
278 static void rna_uiItemPopoverPanel(
279         uiLayout *layout, bContext *C,
280         int space_type, int region_type, const char *panel_type,
281         const char *name, const char *text_ctxt,
282         int translate, int icon, int icon_value)
283 {
284         /* Get translated name (label). */
285         name = rna_translate_ui_text(name, text_ctxt, NULL, NULL, translate);
286
287         if (icon_value && !icon) {
288                 icon = icon_value;
289         }
290
291         uiItemPopoverPanel(layout, C, space_type, region_type, panel_type, name, icon);
292 }
293
294 static void rna_uiItemPopoverPanelFromGroup(
295         uiLayout *layout, bContext *C,
296         int space_id, int region_id, const char *context, const char *category)
297 {
298         uiItemPopoverPanelFromGroup(layout, C, space_id, region_id, context, category);
299 }
300
301 static void rna_uiTemplateAnyID(
302         uiLayout *layout, PointerRNA *ptr, const char *propname, const char *proptypename,
303         const char *name, const char *text_ctxt, int translate)
304 {
305         PropertyRNA *prop = RNA_struct_find_property(ptr, propname);
306
307         if (!prop) {
308                 RNA_warning("property not found: %s.%s", RNA_struct_identifier(ptr->type), propname);
309                 return;
310         }
311
312         /* Get translated name (label). */
313         name = rna_translate_ui_text(name, text_ctxt, NULL, prop, translate);
314
315         /* XXX This will search property again :( */
316         uiTemplateAnyID(layout, ptr, propname, proptypename, name);
317 }
318
319 static void rna_uiTemplatePathBuilder(
320         uiLayout *layout, PointerRNA *ptr, const char *propname, PointerRNA *root_ptr,
321         const char *name, const char *text_ctxt, int translate)
322 {
323         PropertyRNA *prop = RNA_struct_find_property(ptr, propname);
324
325         if (!prop) {
326                 RNA_warning("property not found: %s.%s", RNA_struct_identifier(ptr->type), propname);
327                 return;
328         }
329
330         /* Get translated name (label). */
331         name = rna_translate_ui_text(name, text_ctxt, NULL, prop, translate);
332
333         /* XXX This will search property again :( */
334         uiTemplatePathBuilder(layout, ptr, propname, root_ptr, name);
335 }
336
337 static int rna_ui_get_rnaptr_icon(bContext *C, PointerRNA *ptr_icon)
338 {
339         return UI_rnaptr_icon_get(C, ptr_icon, RNA_struct_ui_icon(ptr_icon->type), false);
340 }
341
342 static const char *rna_ui_get_enum_name(bContext *C, PointerRNA *ptr, const char *propname, const char *identifier)
343 {
344         PropertyRNA *prop = NULL;
345         const EnumPropertyItem *items = NULL, *item;
346         bool free;
347         const char *name = "";
348
349         prop = RNA_struct_find_property(ptr, propname);
350         if (!prop || (RNA_property_type(prop) != PROP_ENUM)) {
351                 RNA_warning("Property not found or not an enum: %s.%s", RNA_struct_identifier(ptr->type), propname);
352                 return name;
353         }
354
355         RNA_property_enum_items_gettexted(C, ptr, prop, &items, NULL, &free);
356
357         if (items) {
358                 for (item = items; item->identifier; item++) {
359                         if (item->identifier[0] && STREQ(item->identifier, identifier)) {
360                                 name = item->name;
361                                 break;
362                         }
363                 }
364                 if (free) {
365                         MEM_freeN((void *)items);
366                 }
367         }
368
369         return name;
370 }
371
372 static const char *rna_ui_get_enum_description(
373         bContext *C, PointerRNA *ptr, const char *propname,
374         const char *identifier)
375 {
376         PropertyRNA *prop = NULL;
377         const EnumPropertyItem *items = NULL, *item;
378         bool free;
379         const char *desc = "";
380
381         prop = RNA_struct_find_property(ptr, propname);
382         if (!prop || (RNA_property_type(prop) != PROP_ENUM)) {
383                 RNA_warning("Property not found or not an enum: %s.%s", RNA_struct_identifier(ptr->type), propname);
384                 return desc;
385         }
386
387         RNA_property_enum_items_gettexted(C, ptr, prop, &items, NULL, &free);
388
389         if (items) {
390                 for (item = items; item->identifier; item++) {
391                         if (item->identifier[0] && STREQ(item->identifier, identifier)) {
392                                 desc = item->description;
393                                 break;
394                         }
395                 }
396                 if (free) {
397                         MEM_freeN((void *)items);
398                 }
399         }
400
401         return desc;
402 }
403
404 static int rna_ui_get_enum_icon(bContext *C, PointerRNA *ptr, const char *propname, const char *identifier)
405 {
406         PropertyRNA *prop = NULL;
407         const EnumPropertyItem *items = NULL, *item;
408         bool free;
409         int icon = ICON_NONE;
410
411         prop = RNA_struct_find_property(ptr, propname);
412         if (!prop || (RNA_property_type(prop) != PROP_ENUM)) {
413                 RNA_warning("Property not found or not an enum: %s.%s", RNA_struct_identifier(ptr->type), propname);
414                 return icon;
415         }
416
417         RNA_property_enum_items(C, ptr, prop, &items, NULL, &free);
418
419         if (items) {
420                 for (item = items; item->identifier; item++) {
421                         if (item->identifier[0] && STREQ(item->identifier, identifier)) {
422                                 icon = item->icon;
423                                 break;
424                         }
425                 }
426                 if (free) {
427                         MEM_freeN((void *)items);
428                 }
429         }
430
431         return icon;
432 }
433
434 #else
435
436 static void api_ui_item_common_text(FunctionRNA *func)
437 {
438         RNA_def_string(func, "text", NULL, 0, "", "Override automatic text of the item");
439         RNA_def_string(func, "text_ctxt", NULL, 0, "", "Override automatic translation context of the given text");
440         RNA_def_boolean(func, "translate", true, "", "Translate the given text, when UI translation is enabled");
441 }
442
443 static void api_ui_item_common(FunctionRNA *func)
444 {
445         PropertyRNA *prop;
446
447         api_ui_item_common_text(func);
448
449         prop = RNA_def_property(func, "icon", PROP_ENUM, PROP_NONE);
450         RNA_def_property_enum_items(prop, rna_enum_icon_items);
451         RNA_def_property_ui_text(prop, "Icon", "Override automatic icon of the item");
452 }
453
454 static void api_ui_item_op(FunctionRNA *func)
455 {
456         PropertyRNA *parm;
457         parm = RNA_def_string(func, "operator", NULL, 0, "", "Identifier of the operator");
458         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
459 }
460
461 static void api_ui_item_op_common(FunctionRNA *func)
462 {
463         api_ui_item_op(func);
464         api_ui_item_common(func);
465 }
466
467 static void api_ui_item_rna_common(FunctionRNA *func)
468 {
469         PropertyRNA *parm;
470
471         parm = RNA_def_pointer(func, "data", "AnyType", "", "Data from which to take property");
472         RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR);
473         parm = RNA_def_string(func, "property", NULL, 0, "", "Identifier of property in data");
474         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
475 }
476
477 void RNA_api_ui_layout(StructRNA *srna)
478 {
479         FunctionRNA *func;
480         PropertyRNA *parm;
481
482         static const EnumPropertyItem curve_type_items[] = {
483                 {0, "NONE", 0, "None", ""},
484                 {'v', "VECTOR", 0, "Vector", ""},
485                 {'c', "COLOR", 0, "Color", ""},
486                 {'h', "HUE", 0, "Hue", ""},
487                 {0, NULL, 0, NULL, NULL}
488         };
489
490         static const EnumPropertyItem id_template_filter_items[] = {
491                 {UI_TEMPLATE_ID_FILTER_ALL, "ALL", 0, "All", ""},
492                 {UI_TEMPLATE_ID_FILTER_AVAILABLE, "AVAILABLE", 0, "Available", ""},
493                 {0, NULL, 0, NULL, NULL}
494         };
495
496         static float node_socket_color_default[] = { 0.0f, 0.0f, 0.0f, 1.0f };
497
498         /* simple layout specifiers */
499         func = RNA_def_function(srna, "row", "uiLayoutRow");
500         parm = RNA_def_pointer(func, "layout", "UILayout", "", "Sub-layout to put items in");
501         RNA_def_function_return(func, parm);
502         RNA_def_function_ui_description(func,
503                                         "Sub-layout. Items placed in this sublayout are placed next to each other "
504                                         "in a row");
505         RNA_def_boolean(func, "align", false, "", "Align buttons to each other");
506
507         func = RNA_def_function(srna, "column", "uiLayoutColumn");
508         parm = RNA_def_pointer(func, "layout", "UILayout", "", "Sub-layout to put items in");
509         RNA_def_function_return(func, parm);
510         RNA_def_function_ui_description(func,
511                                         "Sub-layout. Items placed in this sublayout are placed under each other "
512                                         "in a column");
513         RNA_def_boolean(func, "align", false, "", "Align buttons to each other");
514
515         func = RNA_def_function(srna, "column_flow", "uiLayoutColumnFlow");
516         RNA_def_int(func, "columns", 0, 0, INT_MAX, "", "Number of columns, 0 is automatic", 0, INT_MAX);
517         parm = RNA_def_pointer(func, "layout", "UILayout", "", "Sub-layout to put items in");
518         RNA_def_function_return(func, parm);
519         RNA_def_boolean(func, "align", false, "", "Align buttons to each other");
520
521         func = RNA_def_function(srna, "grid_flow", "uiLayoutGridFlow");
522         RNA_def_boolean(func, "row_major", false, "", "Fill row by row, instead of column by column");
523         RNA_def_int(func, "num_columns", 0, INT_MIN, INT_MAX, "",
524                     "Number of columns, positive are absolute fixed numbers, 0 is automatic, negative are "
525                     "automatic multiple numbers along major axis (e.g. -2 will only produce 2, 4, 6 etc. "
526                     "columns for row major layout, and 2, 4, 6 etc. rows for column major layout)",
527                     INT_MIN, INT_MAX);
528         RNA_def_boolean(func, "even_columns", false, "", "All columns will have the same width");
529         RNA_def_boolean(func, "even_rows", false, "", "All rows will have the same height");
530         RNA_def_boolean(func, "align", false, "", "Align buttons to each other");
531         parm = RNA_def_pointer(func, "layout", "UILayout", "", "Sub-layout to put items in");
532         RNA_def_function_return(func, parm);
533
534         /* box layout */
535         func = RNA_def_function(srna, "box", "uiLayoutBox");
536         parm = RNA_def_pointer(func, "layout", "UILayout", "", "Sub-layout to put items in");
537         RNA_def_function_return(func, parm);
538         RNA_def_function_ui_description(func, "Sublayout (items placed in this sublayout are placed "
539                                         "under each other in a column and are surrounded by a box)");
540
541         /* split layout */
542         func = RNA_def_function(srna, "split", "uiLayoutSplit");
543         parm = RNA_def_pointer(func, "layout", "UILayout", "", "Sub-layout to put items in");
544         RNA_def_function_return(func, parm);
545         RNA_def_float(func, "percentage", 0.0f, 0.0f, 1.0f, "Percentage", "Percentage of width to split at", 0.0f, 1.0f);
546         RNA_def_boolean(func, "align", false, "", "Align buttons to each other");
547
548         /* radial/pie layout */
549         func = RNA_def_function(srna, "menu_pie", "uiLayoutRadial");
550         parm = RNA_def_pointer(func, "layout", "UILayout", "", "Sub-layout to put items in");
551         RNA_def_function_return(func, parm);
552         RNA_def_function_ui_description(func, "Sublayout. Items placed in this sublayout are placed "
553                                         "in a radial fashion around the menu center)");
554
555         /* Icon of a rna pointer */
556         func = RNA_def_function(srna, "icon", "rna_ui_get_rnaptr_icon");
557         parm = RNA_def_int(func, "icon_value", ICON_NONE, 0, INT_MAX, "", "Icon identifier", 0, INT_MAX);
558         RNA_def_function_return(func, parm);
559         RNA_def_function_flag(func, FUNC_NO_SELF | FUNC_USE_CONTEXT);
560         parm = RNA_def_pointer(func, "data", "AnyType", "", "Data from which to take the icon");
561         RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR);
562         RNA_def_function_ui_description(func, "Return the custom icon for this data, "
563                                               "use it e.g. to get materials or texture icons");
564
565         /* UI name, description and icon of an enum item */
566         func = RNA_def_function(srna, "enum_item_name", "rna_ui_get_enum_name");
567         parm = RNA_def_string(func, "name", NULL, 0, "", "UI name of the enum item");
568         RNA_def_function_return(func, parm);
569         RNA_def_function_flag(func, FUNC_NO_SELF | FUNC_USE_CONTEXT);
570         api_ui_item_rna_common(func);
571         parm = RNA_def_string(func, "identifier", NULL, 0, "", "Identifier of the enum item");
572         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
573         RNA_def_function_ui_description(func, "Return the UI name for this enum item");
574
575         func = RNA_def_function(srna, "enum_item_description", "rna_ui_get_enum_description");
576         parm = RNA_def_string(func, "description", NULL, 0, "", "UI description of the enum item");
577         RNA_def_function_return(func, parm);
578         RNA_def_function_flag(func, FUNC_NO_SELF | FUNC_USE_CONTEXT);
579         api_ui_item_rna_common(func);
580         parm = RNA_def_string(func, "identifier", NULL, 0, "", "Identifier of the enum item");
581         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
582         RNA_def_function_ui_description(func, "Return the UI description for this enum item");
583
584         func = RNA_def_function(srna, "enum_item_icon", "rna_ui_get_enum_icon");
585         parm = RNA_def_int(func, "icon_value", ICON_NONE, 0, INT_MAX, "", "Icon identifier", 0, INT_MAX);
586         RNA_def_function_return(func, parm);
587         RNA_def_function_flag(func, FUNC_NO_SELF | FUNC_USE_CONTEXT);
588         api_ui_item_rna_common(func);
589         parm = RNA_def_string(func, "identifier", NULL, 0, "", "Identifier of the enum item");
590         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
591         RNA_def_function_ui_description(func, "Return the icon for this enum item");
592
593         /* items */
594         func = RNA_def_function(srna, "prop", "rna_uiItemR");
595         RNA_def_function_ui_description(func, "Item. Exposes an RNA item and places it into the layout");
596         api_ui_item_rna_common(func);
597         api_ui_item_common(func);
598         RNA_def_boolean(func, "expand", false, "", "Expand button to show more detail");
599         RNA_def_boolean(func, "slider", false, "", "Use slider widget for numeric values");
600         RNA_def_boolean(func, "toggle", false, "", "Use toggle widget for boolean values");
601         RNA_def_boolean(func, "icon_only", false, "", "Draw only icons in buttons, no text");
602         RNA_def_boolean(func, "event", false, "", "Use button to input key events");
603         RNA_def_boolean(func, "full_event", false, "", "Use button to input full events including modifiers");
604         RNA_def_boolean(func, "emboss", true, "", "Draw the button itself, not just the icon/text");
605         RNA_def_int(func, "index", -1, -2, INT_MAX, "",
606                     "The index of this button, when set a single member of an array can be accessed, "
607                     "when set to -1 all array members are used", -2, INT_MAX); /* RNA_NO_INDEX == -1 */
608         parm = RNA_def_property(func, "icon_value", PROP_INT, PROP_UNSIGNED);
609         RNA_def_property_ui_text(parm, "Icon Value", "Override automatic icon of the item");
610
611         func = RNA_def_function(srna, "props_enum", "uiItemsEnumR");
612         api_ui_item_rna_common(func);
613
614         func = RNA_def_function(srna, "prop_menu_enum", "rna_uiItemMenuEnumR");
615         api_ui_item_rna_common(func);
616         api_ui_item_common(func);
617
618         func = RNA_def_function(srna, "prop_enum", "rna_uiItemEnumR_string");
619         api_ui_item_rna_common(func);
620         parm = RNA_def_string(func, "value", NULL, 0, "", "Enum property value");
621         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
622         api_ui_item_common(func);
623
624         func = RNA_def_function(srna, "prop_search", "rna_uiItemPointerR");
625         api_ui_item_rna_common(func);
626         parm = RNA_def_pointer(func, "search_data", "AnyType", "", "Data from which to take collection to search in");
627         RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR);
628         parm = RNA_def_string(func, "search_property", NULL, 0, "", "Identifier of search collection property");
629         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
630         api_ui_item_common(func);
631
632         for (int is_menu_hold = 0; is_menu_hold < 2; is_menu_hold++) {
633                 func = (is_menu_hold) ?
634                         RNA_def_function(srna, "operator_menu_hold", "rna_uiItemOMenuHold") :
635                         RNA_def_function(srna, "operator", "rna_uiItemO");
636                 api_ui_item_op_common(func);
637                 RNA_def_boolean(func, "emboss", true, "", "Draw the button itself, not just the icon/text");
638                 RNA_def_boolean(func, "depress", false, "", "Draw pressed in");
639                 parm = RNA_def_property(func, "icon_value", PROP_INT, PROP_UNSIGNED);
640                 RNA_def_property_ui_text(parm, "Icon Value", "Override automatic icon of the item");
641                 if (is_menu_hold) {
642                         parm = RNA_def_string(func, "menu", NULL, 0, "", "Identifier of the menu");
643                         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
644                 }
645                 parm = RNA_def_pointer(func, "properties", "OperatorProperties", "", "Operator properties to fill in");
646                 RNA_def_parameter_flags(parm, 0, PARM_REQUIRED | PARM_RNAPTR);
647                 RNA_def_function_return(func, parm);
648                 RNA_def_function_ui_description(func, "Item. Places a button into the layout to call an Operator");
649         }
650
651         func = RNA_def_function(srna, "operator_enum", "uiItemsEnumO");
652         parm = RNA_def_string(func, "operator", NULL, 0, "", "Identifier of the operator");
653         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
654         parm = RNA_def_string(func, "property", NULL, 0, "", "Identifier of property in operator");
655         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
656
657         func = RNA_def_function(srna, "operator_menu_enum", "rna_uiItemMenuEnumO");
658         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
659         api_ui_item_op(func); /* cant use api_ui_item_op_common because property must come right after */
660         parm = RNA_def_string(func, "property", NULL, 0, "", "Identifier of property in operator");
661         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
662         api_ui_item_common(func);
663
664         /* useful in C but not in python */
665 #if 0
666
667         func = RNA_def_function(srna, "operator_enum_single", "uiItemEnumO_string");
668         api_ui_item_op_common(func);
669         parm = RNA_def_string(func, "property", NULL, 0, "", "Identifier of property in operator");
670         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
671         parm = RNA_def_string(func, "value", NULL, 0, "", "Enum property value");
672         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
673
674         func = RNA_def_function(srna, "operator_boolean", "uiItemBooleanO");
675         api_ui_item_op_common(func);
676         parm = RNA_def_string(func, "property", NULL, 0, "", "Identifier of property in operator");
677         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
678         parm = RNA_def_boolean(func, "value", false, "", "Value of the property to call the operator with");
679         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED); */
680
681         func = RNA_def_function(srna, "operator_int", "uiItemIntO");
682         api_ui_item_op_common(func);
683         parm = RNA_def_string(func, "property", NULL, 0, "", "Identifier of property in operator");
684         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
685         parm = RNA_def_int(func, "value", 0, INT_MIN, INT_MAX, "",
686                           "Value of the property to call the operator with", INT_MIN, INT_MAX);
687         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED); */
688
689         func = RNA_def_function(srna, "operator_float", "uiItemFloatO");
690         api_ui_item_op_common(func);
691         parm = RNA_def_string(func, "property", NULL, 0, "", "Identifier of property in operator");
692         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
693         parm = RNA_def_float(func, "value", 0, -FLT_MAX, FLT_MAX, "",
694                             "Value of the property to call the operator with", -FLT_MAX, FLT_MAX);
695         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED); */
696
697         func = RNA_def_function(srna, "operator_string", "uiItemStringO");
698         api_ui_item_op_common(func);
699         parm = RNA_def_string(func, "property", NULL, 0, "", "Identifier of property in operator");
700         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
701         parm = RNA_def_string(func, "value", NULL, 0, "", "Value of the property to call the operator with");
702         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
703 #endif
704
705         func = RNA_def_function(srna, "label", "rna_uiItemL");
706         RNA_def_function_ui_description(func, "Item. Displays text and/or icon in the layout");
707         api_ui_item_common(func);
708         parm = RNA_def_property(func, "icon_value", PROP_INT, PROP_UNSIGNED);
709         RNA_def_property_ui_text(parm, "Icon Value", "Override automatic icon of the item");
710
711         func = RNA_def_function(srna, "menu", "rna_uiItemM");
712         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
713         parm = RNA_def_string(func, "menu", NULL, 0, "", "Identifier of the menu");
714         api_ui_item_common(func);
715         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
716         parm = RNA_def_property(func, "icon_value", PROP_INT, PROP_UNSIGNED);
717         RNA_def_property_ui_text(parm, "Icon Value", "Override automatic icon of the item");
718
719         func = RNA_def_function(srna, "popover", "rna_uiItemPopoverPanel");
720         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
721         parm = RNA_def_enum(func, "space_type", rna_enum_space_type_items, 0, "Space Type", "");
722         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
723         parm = RNA_def_enum(func, "region_type", rna_enum_region_type_items, RGN_TYPE_WINDOW, "Region Type", "");
724         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
725         parm = RNA_def_string(func, "panel_type", NULL, 0, "", "Identifier of the panel");
726         api_ui_item_common(func);
727         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
728         parm = RNA_def_property(func, "icon_value", PROP_INT, PROP_UNSIGNED);
729         RNA_def_property_ui_text(parm, "Icon Value", "Override automatic icon of the item");
730
731         func = RNA_def_function(srna, "popover_group", "rna_uiItemPopoverPanelFromGroup");
732         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
733         parm = RNA_def_enum(func, "space_type", rna_enum_space_type_items, 0, "Space Type", "");
734         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
735         parm = RNA_def_enum(func, "region_type", rna_enum_region_type_items, RGN_TYPE_WINDOW, "Region Type", "");
736         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
737         parm = RNA_def_string(func, "context", NULL, 0, "", "panel type context");
738         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
739         parm = RNA_def_string(func, "category", NULL, 0, "", "panel type category");
740         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
741
742         func = RNA_def_function(srna, "separator", "uiItemS");
743         RNA_def_function_ui_description(func, "Item. Inserts empty space into the layout between items");
744
745         /* context */
746         func = RNA_def_function(srna, "context_pointer_set", "uiLayoutSetContextPointer");
747         parm = RNA_def_string(func, "name", NULL, 0, "Name", "Name of entry in the context");
748         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
749         parm = RNA_def_pointer(func, "data", "AnyType", "", "Pointer to put in context");
750         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED | PARM_RNAPTR);
751
752         /* templates */
753         func = RNA_def_function(srna, "template_header", "uiTemplateHeader");
754         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
755         RNA_def_function_ui_description(func, "Inserts common Space header UI (editor type selector)");
756
757         func = RNA_def_function(srna, "template_ID", "uiTemplateID");
758         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
759         api_ui_item_rna_common(func);
760         RNA_def_string(func, "new", NULL, 0, "", "Operator identifier to create a new ID block");
761         RNA_def_string(func, "open", NULL, 0, "", "Operator identifier to open a file for creating a new ID block");
762         RNA_def_string(func, "unlink", NULL, 0, "", "Operator identifier to unlink the ID block");
763         RNA_def_enum(func, "filter", id_template_filter_items, UI_TEMPLATE_ID_FILTER_ALL,
764                      "", "Optionally limit the items which can be selected");
765
766         func = RNA_def_function(srna, "template_ID_preview", "uiTemplateIDPreview");
767         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
768         api_ui_item_rna_common(func);
769         RNA_def_string(func, "new", NULL, 0, "", "Operator identifier to create a new ID block");
770         RNA_def_string(func, "open", NULL, 0, "", "Operator identifier to open a file for creating a new ID block");
771         RNA_def_string(func, "unlink", NULL, 0, "", "Operator identifier to unlink the ID block");
772         RNA_def_int(func, "rows", 0, 0, INT_MAX, "Number of thumbnail preview rows to display", "", 0, INT_MAX);
773         RNA_def_int(func, "cols", 0, 0, INT_MAX, "Number of thumbnail preview columns to display", "", 0, INT_MAX);
774         RNA_def_enum(func, "filter", id_template_filter_items, UI_TEMPLATE_ID_FILTER_ALL,
775                      "", "Optionally limit the items which can be selected");
776
777         func = RNA_def_function(srna, "template_any_ID", "rna_uiTemplateAnyID");
778         parm = RNA_def_pointer(func, "data", "AnyType", "", "Data from which to take property");
779         RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR);
780         parm = RNA_def_string(func, "property", NULL, 0, "", "Identifier of property in data");
781         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
782         parm = RNA_def_string(func, "type_property", NULL, 0, "",
783                               "Identifier of property in data giving the type of the ID-blocks to use");
784         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
785         api_ui_item_common_text(func);
786
787         func = RNA_def_function(srna, "template_ID_tabs", "uiTemplateIDTabs");
788         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
789         api_ui_item_rna_common(func);
790         RNA_def_string(func, "new", NULL, 0, "", "Operator identifier to create a new ID block");
791         RNA_def_string(func, "open", NULL, 0, "", "Operator identifier to open a file for creating a new ID block");
792         RNA_def_string(func, "unlink", NULL, 0, "", "Operator identifier to unlink the ID block");
793         RNA_def_enum(func, "filter", id_template_filter_items, UI_TEMPLATE_ID_FILTER_ALL,
794                      "", "Optionally limit the items which can be selected");
795
796         func = RNA_def_function(srna, "template_search", "uiTemplateSearch");
797         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
798         api_ui_item_rna_common(func);
799         parm = RNA_def_pointer(func, "search_data", "AnyType", "", "Data from which to take collection to search in");
800         RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR);
801         parm = RNA_def_string(func, "search_property", NULL, 0, "", "Identifier of search collection property");
802         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
803         RNA_def_string(func, "new", NULL, 0, "", "Operator identifier to create a new item for the collection");
804         RNA_def_string(func, "unlink", NULL, 0, "", "Operator identifier to unlink or delete the active "
805                        "item from the collection");
806
807         func = RNA_def_function(srna, "template_search_preview", "uiTemplateSearchPreview");
808         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
809         api_ui_item_rna_common(func);
810         parm = RNA_def_pointer(func, "search_data", "AnyType", "", "Data from which to take collection to search in");
811         RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR);
812         parm = RNA_def_string(func, "search_property", NULL, 0, "", "Identifier of search collection property");
813         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
814         RNA_def_string(func, "new", NULL, 0, "", "Operator identifier to create a new item for the collection");
815         RNA_def_string(func, "unlink", NULL, 0, "", "Operator identifier to unlink or delete the active "
816                        "item from the collection");
817         RNA_def_int(func, "rows", 0, 0, INT_MAX, "Number of thumbnail preview rows to display", "", 0, INT_MAX);
818         RNA_def_int(func, "cols", 0, 0, INT_MAX, "Number of thumbnail preview columns to display", "", 0, INT_MAX);
819
820         func = RNA_def_function(srna, "template_path_builder", "rna_uiTemplatePathBuilder");
821         parm = RNA_def_pointer(func, "data", "AnyType", "", "Data from which to take property");
822         RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR);
823         parm = RNA_def_string(func, "property", NULL, 0, "", "Identifier of property in data");
824         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
825         parm = RNA_def_pointer(func, "root", "ID", "", "ID-block from which path is evaluated from");
826         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED | PARM_RNAPTR);
827         api_ui_item_common_text(func);
828
829         func = RNA_def_function(srna, "template_modifier", "uiTemplateModifier");
830         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
831         RNA_def_function_ui_description(func, "Generates the UI layout for modifiers");
832         parm = RNA_def_pointer(func, "data", "Modifier", "", "Modifier data");
833         RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR);
834         parm = RNA_def_pointer(func, "layout", "UILayout", "", "Sub-layout to put items in");
835         RNA_def_function_return(func, parm);
836
837         func = RNA_def_function(srna, "template_constraint", "uiTemplateConstraint");
838         RNA_def_function_ui_description(func, "Generates the UI layout for constraints");
839         parm = RNA_def_pointer(func, "data", "Constraint", "", "Constraint data");
840         RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR);
841         parm = RNA_def_pointer(func, "layout", "UILayout", "", "Sub-layout to put items in");
842         RNA_def_function_return(func, parm);
843
844         func = RNA_def_function(srna, "template_preview", "uiTemplatePreview");
845         RNA_def_function_ui_description(func, "Item. A preview window for materials, textures, lamps or worlds");
846         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
847         parm = RNA_def_pointer(func, "id", "ID", "", "ID data-block");
848         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
849         RNA_def_boolean(func, "show_buttons", true, "", "Show preview buttons?");
850         RNA_def_pointer(func, "parent", "ID", "", "ID data-block");
851         RNA_def_pointer(func, "slot", "TextureSlot", "", "Texture slot");
852         RNA_def_string(func, "preview_id", NULL, 0, "",
853                        "Identifier of this preview widget, if not set the ID type will be used "
854                        "(i.e. all previews of materials without explicit ID will have the same size...)");
855
856         func = RNA_def_function(srna, "template_curve_mapping", "uiTemplateCurveMapping");
857         RNA_def_function_ui_description(func, "Item. A curve mapping widget used for e.g falloff curves for lamps");
858         api_ui_item_rna_common(func);
859         RNA_def_enum(func, "type", curve_type_items, 0, "Type", "Type of curves to display");
860         RNA_def_boolean(func, "levels", false, "", "Show black/white levels");
861         RNA_def_boolean(func, "brush", false, "", "Show brush options");
862         RNA_def_boolean(func, "use_negative_slope", false, "", "Use a negative slope by default");
863
864         func = RNA_def_function(srna, "template_color_ramp", "uiTemplateColorRamp");
865         RNA_def_function_ui_description(func, "Item. A color ramp widget");
866         api_ui_item_rna_common(func);
867         RNA_def_boolean(func, "expand", false, "", "Expand button to show more detail");
868
869         func = RNA_def_function(srna, "template_icon_view", "uiTemplateIconView");
870         RNA_def_function_ui_description(func, "Enum. Large widget showing Icon previews");
871         api_ui_item_rna_common(func);
872         RNA_def_boolean(func, "show_labels", false, "", "Show enum label in preview buttons");
873         RNA_def_float(func, "scale", 5.0f, 1.0f, 100.0f, "Scale", "Scale the icon size (by the button size)", 1.0f, 100.0f);
874
875         func = RNA_def_function(srna, "template_histogram", "uiTemplateHistogram");
876         RNA_def_function_ui_description(func, "Item. A histogramm widget to analyze imaga data");
877         api_ui_item_rna_common(func);
878
879         func = RNA_def_function(srna, "template_waveform", "uiTemplateWaveform");
880         RNA_def_function_ui_description(func, "Item. A waveform widget to analyze imaga data");
881         api_ui_item_rna_common(func);
882
883         func = RNA_def_function(srna, "template_vectorscope", "uiTemplateVectorscope");
884         RNA_def_function_ui_description(func, "Item. A vectorscope widget to analyze imaga data");
885         api_ui_item_rna_common(func);
886
887         func = RNA_def_function(srna, "template_layers", "uiTemplateLayers");
888         api_ui_item_rna_common(func);
889         parm = RNA_def_pointer(func, "used_layers_data", "AnyType", "", "Data from which to take property");
890         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED | PARM_RNAPTR);
891         parm = RNA_def_string(func, "used_layers_property", NULL, 0, "", "Identifier of property in data");
892         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
893         parm = RNA_def_int(func, "active_layer", 0, 0, INT_MAX, "Active Layer", "", 0, INT_MAX);
894         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
895
896         func = RNA_def_function(srna, "template_color_picker", "uiTemplateColorPicker");
897         RNA_def_function_ui_description(func, "Item. A color wheel widget to pick colors");
898         api_ui_item_rna_common(func);
899         RNA_def_boolean(func, "value_slider", false, "", "Display the value slider to the right of the color wheel");
900         RNA_def_boolean(func, "lock", false, "", "Lock the color wheel display to value 1.0 regardless of actual color");
901         RNA_def_boolean(func, "lock_luminosity", false, "", "Keep the color at its original vector length");
902         RNA_def_boolean(func, "cubic", false, "", "Cubic saturation for picking values close to white");
903
904         func = RNA_def_function(srna, "template_palette", "uiTemplatePalette");
905         RNA_def_function_ui_description(func, "Item. A palette used to pick colors");
906         api_ui_item_rna_common(func);
907         RNA_def_boolean(func, "color", 0, "", "Display the colors as colors or values");
908
909         func = RNA_def_function(srna, "template_image_layers", "uiTemplateImageLayers");
910         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
911         parm = RNA_def_pointer(func, "image", "Image", "", "");
912         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
913         parm = RNA_def_pointer(func, "image_user", "ImageUser", "", "");
914         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
915
916         func = RNA_def_function(srna, "template_image", "uiTemplateImage");
917         RNA_def_function_ui_description(func, "Item(s). User interface for selecting images and their source paths");
918         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
919         api_ui_item_rna_common(func);
920         parm = RNA_def_pointer(func, "image_user", "ImageUser", "", "");
921         RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR);
922         RNA_def_boolean(func, "compact", false, "", "Use more compact layout");
923         RNA_def_boolean(func, "multiview", false, "", "Expose Multi-View options");
924
925         func = RNA_def_function(srna, "template_image_settings", "uiTemplateImageSettings");
926         RNA_def_function_ui_description(func, "User interface for setting image format options");
927         parm = RNA_def_pointer(func, "image_settings", "ImageFormatSettings", "", "");
928         RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR);
929         RNA_def_boolean(func, "color_management", false, "", "Show color management settings");
930
931         func = RNA_def_function(srna, "template_image_stereo_3d", "uiTemplateImageStereo3d");
932         RNA_def_function_ui_description(func, "User interface for setting image stereo 3d options");
933         parm = RNA_def_pointer(func, "stereo_3d_format", "Stereo3dFormat", "", "");
934         RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR);
935
936         func = RNA_def_function(srna, "template_image_views", "uiTemplateImageViews");
937         RNA_def_function_ui_description(func, "User interface for setting image views output options");
938         parm = RNA_def_pointer(func, "image_settings", "ImageFormatSettings", "", "");
939         RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR);
940
941         func = RNA_def_function(srna, "template_movieclip", "uiTemplateMovieClip");
942         RNA_def_function_ui_description(func, "Item(s). User interface for selecting movie clips and their source paths");
943         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
944         api_ui_item_rna_common(func);
945         RNA_def_boolean(func, "compact", false, "", "Use more compact layout");
946
947         func = RNA_def_function(srna, "template_track", "uiTemplateTrack");
948         RNA_def_function_ui_description(func, "Item. A movie-track widget to preview tracking image.");
949         api_ui_item_rna_common(func);
950
951         func = RNA_def_function(srna, "template_marker", "uiTemplateMarker");
952         RNA_def_function_ui_description(func, "Item. A widget to control single marker settings.");
953         api_ui_item_rna_common(func);
954         parm = RNA_def_pointer(func, "clip_user", "MovieClipUser", "", "");
955         RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR);
956         parm = RNA_def_pointer(func, "track", "MovieTrackingTrack", "", "");
957         RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR);
958         RNA_def_boolean(func, "compact", false, "", "Use more compact layout");
959
960         func = RNA_def_function(srna, "template_movieclip_information", "uiTemplateMovieclipInformation");
961         RNA_def_function_ui_description(func, "Item. Movie clip information data.");
962         api_ui_item_rna_common(func);
963         parm = RNA_def_pointer(func, "clip_user", "MovieClipUser", "", "");
964         RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR);
965
966         func = RNA_def_function(srna, "template_list", "uiTemplateList");
967         RNA_def_function_ui_description(func, "Item. A list widget to display data, e.g. vertexgroups.");
968         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
969         parm = RNA_def_string(func, "listtype_name", NULL, 0, "", "Identifier of the list type to use");
970         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
971         parm = RNA_def_string(func, "list_id", NULL, 0, "",
972                               "Identifier of this list widget (mandatory when using default \"" UI_UL_DEFAULT_CLASS_NAME
973                               "\" class). "
974                               "If this is set, the uilist gets a custom ID, otherwise it takes the "
975                               "name of the class used to define the uilist (for example, if the "
976                               "class name is \"OBJECT_UL_vgroups\", and list_id is not set by the "
977                               "script, then bl_idname = \"OBJECT_UL_vgroups\")");
978         parm = RNA_def_pointer(func, "dataptr", "AnyType", "", "Data from which to take the Collection property");
979         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED | PARM_RNAPTR);
980         parm = RNA_def_string(func, "propname", NULL, 0, "", "Identifier of the Collection property in data");
981         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
982         parm = RNA_def_pointer(func, "active_dataptr", "AnyType", "",
983                                "Data from which to take the integer property, index of the active item");
984         RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR);
985         parm = RNA_def_string(func, "active_propname", NULL, 0, "",
986                               "Identifier of the integer property in active_data, index of the active item");
987         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
988         RNA_def_string(func, "item_dyntip_propname", NULL, 0, "",
989                        "Identifier of a string property in items, to use as tooltip content");
990         RNA_def_int(func, "rows", 5, 0, INT_MAX, "", "Default and minimum number of rows to display", 0, INT_MAX);
991         RNA_def_int(func, "maxrows", 5, 0, INT_MAX, "", "Default maximum number of rows to display", 0, INT_MAX);
992         RNA_def_enum(func, "type", rna_enum_uilist_layout_type_items, UILST_LAYOUT_DEFAULT, "Type", "Type of layout to use");
993         RNA_def_int(func, "columns", 9, 0, INT_MAX, "", "Number of items to display per row, for GRID layout", 0, INT_MAX);
994
995         func = RNA_def_function(srna, "template_running_jobs", "uiTemplateRunningJobs");
996         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
997
998         RNA_def_function(srna, "template_operator_search", "uiTemplateOperatorSearch");
999
1000         func = RNA_def_function(srna, "template_header_3D", "uiTemplateHeader3D");
1001         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
1002         RNA_def_function_ui_description(func, "Inserts common 3DView header UI (selectors for context mode, shading, etc.)");
1003
1004         func = RNA_def_function(srna, "template_header_3D_mode", "uiTemplateHeader3D_mode");
1005         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
1006         RNA_def_function_ui_description(func, "");
1007
1008         func = RNA_def_function(srna, "template_edit_mode_selection", "uiTemplateEditModeSelection");
1009         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
1010         RNA_def_function_ui_description(func, "Inserts common 3DView Edit modes header UI (selector for selection mode)");
1011
1012         func = RNA_def_function(srna, "template_reports_banner", "uiTemplateReportsBanner");
1013         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
1014
1015         func = RNA_def_function(srna, "template_node_link", "uiTemplateNodeLink");
1016         parm = RNA_def_pointer(func, "ntree", "NodeTree", "", "");
1017         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
1018         parm = RNA_def_pointer(func, "node", "Node", "", "");
1019         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
1020         parm = RNA_def_pointer(func, "socket", "NodeSocket", "", "");
1021         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
1022
1023         func = RNA_def_function(srna, "template_node_view", "uiTemplateNodeView");
1024         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
1025         parm = RNA_def_pointer(func, "ntree", "NodeTree", "", "");
1026         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
1027         parm = RNA_def_pointer(func, "node", "Node", "", "");
1028         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
1029         parm = RNA_def_pointer(func, "socket", "NodeSocket", "", "");
1030         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
1031
1032         func = RNA_def_function(srna, "template_texture_user", "uiTemplateTextureUser");
1033         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
1034
1035         func = RNA_def_function(srna, "template_keymap_item_properties", "uiTemplateKeymapItemProperties");
1036         parm = RNA_def_pointer(func, "item", "KeyMapItem", "", "");
1037         RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR);
1038
1039         func = RNA_def_function(srna, "template_component_menu", "uiTemplateComponentMenu");
1040         RNA_def_function_ui_description(func, "Item. Display expanded property in a popup menu");
1041         parm = RNA_def_pointer(func, "data", "AnyType", "", "Data from which to take property");
1042         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED | PARM_RNAPTR);
1043         parm = RNA_def_string(func, "property", NULL, 0, "", "Identifier of property in data");
1044         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
1045         RNA_def_string(func, "name", NULL, 0, "", "");
1046
1047         /* color management templates */
1048         func = RNA_def_function(srna, "template_colorspace_settings", "uiTemplateColorspaceSettings");
1049         RNA_def_function_ui_description(func, "Item. A widget to control input color space settings.");
1050         api_ui_item_rna_common(func);
1051
1052         func = RNA_def_function(srna, "template_colormanaged_view_settings", "uiTemplateColormanagedViewSettings");
1053         RNA_def_function_ui_description(func, "Item. A widget to control color managed view settings settings.");
1054         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
1055         api_ui_item_rna_common(func);
1056         /* RNA_def_boolean(func, "show_global_settings", false, "", "Show widgets to control global color management settings"); */
1057
1058         /* node socket icon */
1059         func = RNA_def_function(srna, "template_node_socket", "uiTemplateNodeSocket");
1060         RNA_def_function_ui_description(func, "Node Socket Icon");
1061         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
1062         RNA_def_float_array(func, "color", 4, node_socket_color_default, 0.0f, 1.0f, "Color", "", 0.0f, 1.0f);
1063
1064         func = RNA_def_function(srna, "template_cache_file", "uiTemplateCacheFile");
1065         RNA_def_function_ui_description(func, "Item(s). User interface for selecting cache files and their source paths");
1066         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
1067         api_ui_item_rna_common(func);
1068 }
1069
1070 #endif