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, bool 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         bool translate, int icon, bool expand, bool slider, bool toggle, bool icon_only, bool event,
101         bool full_event, bool 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, bool 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, bool 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         uiItemEnumR_string_prop(layout, ptr, prop, value, name, icon);
160 }
161
162 static void rna_uiItemPointerR(
163         uiLayout *layout, struct PointerRNA *ptr, const char *propname,
164         struct PointerRNA *searchptr, const char *searchpropname,
165         const char *name, const char *text_ctxt, bool translate, int icon)
166 {
167         PropertyRNA *prop = RNA_struct_find_property(ptr, propname);
168         if (!prop) {
169                 RNA_warning("property not found: %s.%s", RNA_struct_identifier(ptr->type), propname);
170                 return;
171         }
172         PropertyRNA *searchprop = RNA_struct_find_property(searchptr, searchpropname);
173         if (!searchprop) {
174                 RNA_warning("property not found: %s.%s", RNA_struct_identifier(searchptr->type), searchpropname);
175                 return;
176         }
177
178         /* Get translated name (label). */
179         name = rna_translate_ui_text(name, text_ctxt, NULL, prop, translate);
180
181         uiItemPointerR_prop(layout, ptr, prop, searchptr, searchprop, name, icon);
182 }
183
184 static PointerRNA rna_uiItemO(
185         uiLayout *layout, const char *opname, const char *name, const char *text_ctxt,
186         bool translate, int icon, bool emboss, bool depress, int icon_value)
187 {
188         wmOperatorType *ot;
189
190         ot = WM_operatortype_find(opname, 0); /* print error next */
191         if (!ot || !ot->srna) {
192                 RNA_warning("%s '%s'", ot ? "unknown operator" : "operator missing srna", opname);
193                 return PointerRNA_NULL;
194         }
195
196         /* Get translated name (label). */
197         name = rna_translate_ui_text(name, text_ctxt, ot->srna, NULL, translate);
198
199         if (icon_value && !icon) {
200                 icon = icon_value;
201         }
202         int flag = (emboss) ? 0 : UI_ITEM_R_NO_BG;
203         flag |= (depress) ? UI_ITEM_O_DEPRESS : 0;
204
205         PointerRNA opptr;
206         uiItemFullO_ptr(layout, ot, name, icon, NULL, uiLayoutGetOperatorContext(layout), flag, &opptr);
207         return opptr;
208 }
209
210 static PointerRNA rna_uiItemOMenuHold(
211         uiLayout *layout, const char *opname, const char *name, const char *text_ctxt,
212         bool translate, int icon, bool emboss, bool depress, int icon_value,
213         const char *menu)
214 {
215         wmOperatorType *ot = WM_operatortype_find(opname, 0); /* print error next */
216         if (!ot || !ot->srna) {
217                 RNA_warning("%s '%s'", ot ? "unknown operator" : "operator missing srna", opname);
218                 return PointerRNA_NULL;
219         }
220
221         /* Get translated name (label). */
222         name = rna_translate_ui_text(name, text_ctxt, ot->srna, NULL, translate);
223         if (icon_value && !icon) {
224                 icon = icon_value;
225         }
226         int flag = (emboss) ? 0 : UI_ITEM_R_NO_BG;
227         flag |= (depress) ? UI_ITEM_O_DEPRESS : 0;
228
229         PointerRNA opptr;
230         uiItemFullOMenuHold_ptr(layout, ot, name, icon, NULL, uiLayoutGetOperatorContext(layout), flag, menu, &opptr);
231         return opptr;
232 }
233
234
235 static void rna_uiItemMenuEnumO(
236         uiLayout *layout, bContext *C, const char *opname, const char *propname, const char *name,
237         const char *text_ctxt, bool translate, int icon)
238 {
239         wmOperatorType *ot = WM_operatortype_find(opname, 0); /* print error next */
240
241         if (!ot || !ot->srna) {
242                 RNA_warning("%s '%s'", ot ? "unknown operator" : "operator missing srna", opname);
243                 return;
244         }
245
246         /* Get translated name (label). */
247         name = rna_translate_ui_text(name, text_ctxt, ot->srna, NULL, translate);
248
249         uiItemMenuEnumO_ptr(layout, C, ot, propname, name, icon);
250 }
251
252 static void rna_uiItemL(
253         uiLayout *layout, const char *name, const char *text_ctxt, bool translate,
254         int icon, int icon_value)
255 {
256         /* Get translated name (label). */
257         name = rna_translate_ui_text(name, text_ctxt, NULL, NULL, translate);
258
259         if (icon_value && !icon) {
260                 icon = icon_value;
261         }
262
263         uiItemL(layout, name, icon);
264 }
265
266 static void rna_uiItemM(
267         uiLayout *layout, const char *menuname, const char *name, const char *text_ctxt,
268         bool translate, int icon, int icon_value)
269 {
270         /* Get translated name (label). */
271         name = rna_translate_ui_text(name, text_ctxt, NULL, NULL, translate);
272
273         if (icon_value && !icon) {
274                 icon = icon_value;
275         }
276
277         uiItemM(layout, menuname, name, icon);
278 }
279
280 static void rna_uiItemPopoverPanel(
281         uiLayout *layout, bContext *C,
282         const char *panel_type, const char *name, const char *text_ctxt,
283         bool translate, int icon, int icon_value)
284 {
285         /* Get translated name (label). */
286         name = rna_translate_ui_text(name, text_ctxt, NULL, NULL, translate);
287
288         if (icon_value && !icon) {
289                 icon = icon_value;
290         }
291
292         uiItemPopoverPanel(layout, C, panel_type, name, icon);
293 }
294
295 static void rna_uiItemPopoverPanelFromGroup(
296         uiLayout *layout, bContext *C,
297         int space_id, int region_id, const char *context, const char *category)
298 {
299         uiItemPopoverPanelFromGroup(layout, C, space_id, region_id, context, category);
300 }
301
302 static void rna_uiTemplateAnyID(
303         uiLayout *layout, PointerRNA *ptr, const char *propname, const char *proptypename,
304         const char *name, const char *text_ctxt, bool translate)
305 {
306         PropertyRNA *prop = RNA_struct_find_property(ptr, propname);
307
308         if (!prop) {
309                 RNA_warning("property not found: %s.%s", RNA_struct_identifier(ptr->type), propname);
310                 return;
311         }
312
313         /* Get translated name (label). */
314         name = rna_translate_ui_text(name, text_ctxt, NULL, prop, translate);
315
316         /* XXX This will search property again :( */
317         uiTemplateAnyID(layout, ptr, propname, proptypename, name);
318 }
319
320 static void rna_uiTemplatePathBuilder(
321         uiLayout *layout, PointerRNA *ptr, const char *propname, PointerRNA *root_ptr,
322         const char *name, const char *text_ctxt, bool translate)
323 {
324         PropertyRNA *prop = RNA_struct_find_property(ptr, propname);
325
326         if (!prop) {
327                 RNA_warning("property not found: %s.%s", RNA_struct_identifier(ptr->type), propname);
328                 return;
329         }
330
331         /* Get translated name (label). */
332         name = rna_translate_ui_text(name, text_ctxt, NULL, prop, translate);
333
334         /* XXX This will search property again :( */
335         uiTemplatePathBuilder(layout, ptr, propname, root_ptr, name);
336 }
337
338 static int rna_ui_get_rnaptr_icon(bContext *C, PointerRNA *ptr_icon)
339 {
340         return UI_rnaptr_icon_get(C, ptr_icon, RNA_struct_ui_icon(ptr_icon->type), false);
341 }
342
343 static const char *rna_ui_get_enum_name(bContext *C, PointerRNA *ptr, const char *propname, const char *identifier)
344 {
345         PropertyRNA *prop = NULL;
346         const EnumPropertyItem *items = NULL, *item;
347         bool free;
348         const char *name = "";
349
350         prop = RNA_struct_find_property(ptr, propname);
351         if (!prop || (RNA_property_type(prop) != PROP_ENUM)) {
352                 RNA_warning("Property not found or not an enum: %s.%s", RNA_struct_identifier(ptr->type), propname);
353                 return name;
354         }
355
356         RNA_property_enum_items_gettexted(C, ptr, prop, &items, NULL, &free);
357
358         if (items) {
359                 for (item = items; item->identifier; item++) {
360                         if (item->identifier[0] && STREQ(item->identifier, identifier)) {
361                                 name = item->name;
362                                 break;
363                         }
364                 }
365                 if (free) {
366                         MEM_freeN((void *)items);
367                 }
368         }
369
370         return name;
371 }
372
373 static const char *rna_ui_get_enum_description(
374         bContext *C, PointerRNA *ptr, const char *propname,
375         const char *identifier)
376 {
377         PropertyRNA *prop = NULL;
378         const EnumPropertyItem *items = NULL, *item;
379         bool free;
380         const char *desc = "";
381
382         prop = RNA_struct_find_property(ptr, propname);
383         if (!prop || (RNA_property_type(prop) != PROP_ENUM)) {
384                 RNA_warning("Property not found or not an enum: %s.%s", RNA_struct_identifier(ptr->type), propname);
385                 return desc;
386         }
387
388         RNA_property_enum_items_gettexted(C, ptr, prop, &items, NULL, &free);
389
390         if (items) {
391                 for (item = items; item->identifier; item++) {
392                         if (item->identifier[0] && STREQ(item->identifier, identifier)) {
393                                 desc = item->description;
394                                 break;
395                         }
396                 }
397                 if (free) {
398                         MEM_freeN((void *)items);
399                 }
400         }
401
402         return desc;
403 }
404
405 static int rna_ui_get_enum_icon(bContext *C, PointerRNA *ptr, const char *propname, const char *identifier)
406 {
407         PropertyRNA *prop = NULL;
408         const EnumPropertyItem *items = NULL, *item;
409         bool free;
410         int icon = ICON_NONE;
411
412         prop = RNA_struct_find_property(ptr, propname);
413         if (!prop || (RNA_property_type(prop) != PROP_ENUM)) {
414                 RNA_warning("Property not found or not an enum: %s.%s", RNA_struct_identifier(ptr->type), propname);
415                 return icon;
416         }
417
418         RNA_property_enum_items(C, ptr, prop, &items, NULL, &free);
419
420         if (items) {
421                 for (item = items; item->identifier; item++) {
422                         if (item->identifier[0] && STREQ(item->identifier, identifier)) {
423                                 icon = item->icon;
424                                 break;
425                         }
426                 }
427                 if (free) {
428                         MEM_freeN((void *)items);
429                 }
430         }
431
432         return icon;
433 }
434
435 #else
436
437 static void api_ui_item_common_text(FunctionRNA *func)
438 {
439         RNA_def_string(func, "text", NULL, 0, "", "Override automatic text of the item");
440         RNA_def_string(func, "text_ctxt", NULL, 0, "", "Override automatic translation context of the given text");
441         RNA_def_boolean(func, "translate", true, "", "Translate the given text, when UI translation is enabled");
442 }
443
444 static void api_ui_item_common(FunctionRNA *func)
445 {
446         PropertyRNA *prop;
447
448         api_ui_item_common_text(func);
449
450         prop = RNA_def_property(func, "icon", PROP_ENUM, PROP_NONE);
451         RNA_def_property_enum_items(prop, rna_enum_icon_items);
452         RNA_def_property_ui_text(prop, "Icon", "Override automatic icon of the item");
453 }
454
455 static void api_ui_item_op(FunctionRNA *func)
456 {
457         PropertyRNA *parm;
458         parm = RNA_def_string(func, "operator", NULL, 0, "", "Identifier of the operator");
459         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
460 }
461
462 static void api_ui_item_op_common(FunctionRNA *func)
463 {
464         api_ui_item_op(func);
465         api_ui_item_common(func);
466 }
467
468 static void api_ui_item_rna_common(FunctionRNA *func)
469 {
470         PropertyRNA *parm;
471
472         parm = RNA_def_pointer(func, "data", "AnyType", "", "Data from which to take property");
473         RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR);
474         parm = RNA_def_string(func, "property", NULL, 0, "", "Identifier of property in data");
475         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
476 }
477
478 void RNA_api_ui_layout(StructRNA *srna)
479 {
480         FunctionRNA *func;
481         PropertyRNA *parm;
482
483         static const EnumPropertyItem curve_type_items[] = {
484                 {0, "NONE", 0, "None", ""},
485                 {'v', "VECTOR", 0, "Vector", ""},
486                 {'c', "COLOR", 0, "Color", ""},
487                 {'h', "HUE", 0, "Hue", ""},
488                 {0, NULL, 0, NULL, NULL}
489         };
490
491         static const EnumPropertyItem id_template_filter_items[] = {
492                 {UI_TEMPLATE_ID_FILTER_ALL, "ALL", 0, "All", ""},
493                 {UI_TEMPLATE_ID_FILTER_AVAILABLE, "AVAILABLE", 0, "Available", ""},
494                 {0, NULL, 0, NULL, NULL}
495         };
496
497         static float node_socket_color_default[] = { 0.0f, 0.0f, 0.0f, 1.0f };
498
499         /* simple layout specifiers */
500         func = RNA_def_function(srna, "row", "uiLayoutRow");
501         parm = RNA_def_pointer(func, "layout", "UILayout", "", "Sub-layout to put items in");
502         RNA_def_function_return(func, parm);
503         RNA_def_function_ui_description(func,
504                                         "Sub-layout. Items placed in this sublayout are placed next to each other "
505                                         "in a row");
506         RNA_def_boolean(func, "align", false, "", "Align buttons to each other");
507
508         func = RNA_def_function(srna, "column", "uiLayoutColumn");
509         parm = RNA_def_pointer(func, "layout", "UILayout", "", "Sub-layout to put items in");
510         RNA_def_function_return(func, parm);
511         RNA_def_function_ui_description(func,
512                                         "Sub-layout. Items placed in this sublayout are placed under each other "
513                                         "in a column");
514         RNA_def_boolean(func, "align", false, "", "Align buttons to each other");
515
516         func = RNA_def_function(srna, "column_flow", "uiLayoutColumnFlow");
517         RNA_def_int(func, "columns", 0, 0, INT_MAX, "", "Number of columns, 0 is automatic", 0, INT_MAX);
518         parm = RNA_def_pointer(func, "layout", "UILayout", "", "Sub-layout to put items in");
519         RNA_def_function_return(func, parm);
520         RNA_def_boolean(func, "align", false, "", "Align buttons to each other");
521
522         func = RNA_def_function(srna, "grid_flow", "uiLayoutGridFlow");
523         RNA_def_boolean(func, "row_major", false, "", "Fill row by row, instead of column by column");
524         RNA_def_int(func, "columns", 0, INT_MIN, INT_MAX, "",
525                     "Number of columns, positive are absolute fixed numbers, 0 is automatic, negative are "
526                     "automatic multiple numbers along major axis (e.g. -2 will only produce 2, 4, 6 etc. "
527                     "columns for row major layout, and 2, 4, 6 etc. rows for column major layout)",
528                     INT_MIN, INT_MAX);
529         RNA_def_boolean(func, "even_columns", false, "", "All columns will have the same width");
530         RNA_def_boolean(func, "even_rows", false, "", "All rows will have the same height");
531         RNA_def_boolean(func, "align", false, "", "Align buttons to each other");
532         parm = RNA_def_pointer(func, "layout", "UILayout", "", "Sub-layout to put items in");
533         RNA_def_function_return(func, parm);
534
535         /* box layout */
536         func = RNA_def_function(srna, "box", "uiLayoutBox");
537         parm = RNA_def_pointer(func, "layout", "UILayout", "", "Sub-layout to put items in");
538         RNA_def_function_return(func, parm);
539         RNA_def_function_ui_description(func, "Sublayout (items placed in this sublayout are placed "
540                                         "under each other in a column and are surrounded by a box)");
541
542         /* split layout */
543         func = RNA_def_function(srna, "split", "uiLayoutSplit");
544         parm = RNA_def_pointer(func, "layout", "UILayout", "", "Sub-layout to put items in");
545         RNA_def_function_return(func, parm);
546         RNA_def_float(func, "percentage", 0.0f, 0.0f, 1.0f, "Percentage", "Percentage of width to split at", 0.0f, 1.0f);
547         RNA_def_boolean(func, "align", false, "", "Align buttons to each other");
548
549         /* radial/pie layout */
550         func = RNA_def_function(srna, "menu_pie", "uiLayoutRadial");
551         parm = RNA_def_pointer(func, "layout", "UILayout", "", "Sub-layout to put items in");
552         RNA_def_function_return(func, parm);
553         RNA_def_function_ui_description(func, "Sublayout. Items placed in this sublayout are placed "
554                                         "in a radial fashion around the menu center)");
555
556         /* Icon of a rna pointer */
557         func = RNA_def_function(srna, "icon", "rna_ui_get_rnaptr_icon");
558         parm = RNA_def_int(func, "icon_value", ICON_NONE, 0, INT_MAX, "", "Icon identifier", 0, INT_MAX);
559         RNA_def_function_return(func, parm);
560         RNA_def_function_flag(func, FUNC_NO_SELF | FUNC_USE_CONTEXT);
561         parm = RNA_def_pointer(func, "data", "AnyType", "", "Data from which to take the icon");
562         RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR);
563         RNA_def_function_ui_description(func, "Return the custom icon for this data, "
564                                               "use it e.g. to get materials or texture icons");
565
566         /* UI name, description and icon of an enum item */
567         func = RNA_def_function(srna, "enum_item_name", "rna_ui_get_enum_name");
568         parm = RNA_def_string(func, "name", NULL, 0, "", "UI name of the enum item");
569         RNA_def_function_return(func, parm);
570         RNA_def_function_flag(func, FUNC_NO_SELF | FUNC_USE_CONTEXT);
571         api_ui_item_rna_common(func);
572         parm = RNA_def_string(func, "identifier", NULL, 0, "", "Identifier of the enum item");
573         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
574         RNA_def_function_ui_description(func, "Return the UI name for this enum item");
575
576         func = RNA_def_function(srna, "enum_item_description", "rna_ui_get_enum_description");
577         parm = RNA_def_string(func, "description", NULL, 0, "", "UI description of the enum item");
578         RNA_def_function_return(func, parm);
579         RNA_def_function_flag(func, FUNC_NO_SELF | FUNC_USE_CONTEXT);
580         api_ui_item_rna_common(func);
581         parm = RNA_def_string(func, "identifier", NULL, 0, "", "Identifier of the enum item");
582         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
583         RNA_def_function_ui_description(func, "Return the UI description for this enum item");
584
585         func = RNA_def_function(srna, "enum_item_icon", "rna_ui_get_enum_icon");
586         parm = RNA_def_int(func, "icon_value", ICON_NONE, 0, INT_MAX, "", "Icon identifier", 0, INT_MAX);
587         RNA_def_function_return(func, parm);
588         RNA_def_function_flag(func, FUNC_NO_SELF | FUNC_USE_CONTEXT);
589         api_ui_item_rna_common(func);
590         parm = RNA_def_string(func, "identifier", NULL, 0, "", "Identifier of the enum item");
591         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
592         RNA_def_function_ui_description(func, "Return the icon for this enum item");
593
594         /* items */
595         func = RNA_def_function(srna, "prop", "rna_uiItemR");
596         RNA_def_function_ui_description(func, "Item. Exposes an RNA item and places it into the layout");
597         api_ui_item_rna_common(func);
598         api_ui_item_common(func);
599         RNA_def_boolean(func, "expand", false, "", "Expand button to show more detail");
600         RNA_def_boolean(func, "slider", false, "", "Use slider widget for numeric values");
601         RNA_def_boolean(func, "toggle", false, "", "Use toggle widget for boolean values");
602         RNA_def_boolean(func, "icon_only", false, "", "Draw only icons in buttons, no text");
603         RNA_def_boolean(func, "event", false, "", "Use button to input key events");
604         RNA_def_boolean(func, "full_event", false, "", "Use button to input full events including modifiers");
605         RNA_def_boolean(func, "emboss", true, "", "Draw the button itself, not just the icon/text");
606         RNA_def_int(func, "index", -1, -2, INT_MAX, "",
607                     "The index of this button, when set a single member of an array can be accessed, "
608                     "when set to -1 all array members are used", -2, INT_MAX); /* RNA_NO_INDEX == -1 */
609         parm = RNA_def_property(func, "icon_value", PROP_INT, PROP_UNSIGNED);
610         RNA_def_property_ui_text(parm, "Icon Value", "Override automatic icon of the item");
611
612         func = RNA_def_function(srna, "props_enum", "uiItemsEnumR");
613         api_ui_item_rna_common(func);
614
615         func = RNA_def_function(srna, "prop_menu_enum", "rna_uiItemMenuEnumR");
616         api_ui_item_rna_common(func);
617         api_ui_item_common(func);
618
619         func = RNA_def_function(srna, "prop_enum", "rna_uiItemEnumR_string");
620         api_ui_item_rna_common(func);
621         parm = RNA_def_string(func, "value", NULL, 0, "", "Enum property value");
622         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
623         api_ui_item_common(func);
624
625         func = RNA_def_function(srna, "prop_search", "rna_uiItemPointerR");
626         api_ui_item_rna_common(func);
627         parm = RNA_def_pointer(func, "search_data", "AnyType", "", "Data from which to take collection to search in");
628         RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR);
629         parm = RNA_def_string(func, "search_property", NULL, 0, "", "Identifier of search collection property");
630         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
631         api_ui_item_common(func);
632
633         for (int is_menu_hold = 0; is_menu_hold < 2; is_menu_hold++) {
634                 func = (is_menu_hold) ?
635                         RNA_def_function(srna, "operator_menu_hold", "rna_uiItemOMenuHold") :
636                         RNA_def_function(srna, "operator", "rna_uiItemO");
637                 api_ui_item_op_common(func);
638                 RNA_def_boolean(func, "emboss", true, "", "Draw the button itself, not just the icon/text");
639                 RNA_def_boolean(func, "depress", false, "", "Draw pressed in");
640                 parm = RNA_def_property(func, "icon_value", PROP_INT, PROP_UNSIGNED);
641                 RNA_def_property_ui_text(parm, "Icon Value", "Override automatic icon of the item");
642                 if (is_menu_hold) {
643                         parm = RNA_def_string(func, "menu", NULL, 0, "", "Identifier of the menu");
644                         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
645                 }
646                 parm = RNA_def_pointer(func, "properties", "OperatorProperties", "", "Operator properties to fill in");
647                 RNA_def_parameter_flags(parm, 0, PARM_REQUIRED | PARM_RNAPTR);
648                 RNA_def_function_return(func, parm);
649                 RNA_def_function_ui_description(func, "Item. Places a button into the layout to call an Operator");
650         }
651
652         func = RNA_def_function(srna, "operator_enum", "uiItemsEnumO");
653         parm = RNA_def_string(func, "operator", NULL, 0, "", "Identifier of the operator");
654         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
655         parm = RNA_def_string(func, "property", NULL, 0, "", "Identifier of property in operator");
656         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
657
658         func = RNA_def_function(srna, "operator_menu_enum", "rna_uiItemMenuEnumO");
659         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
660         api_ui_item_op(func); /* cant use api_ui_item_op_common because property must come right after */
661         parm = RNA_def_string(func, "property", NULL, 0, "", "Identifier of property in operator");
662         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
663         api_ui_item_common(func);
664
665         /* useful in C but not in python */
666 #if 0
667
668         func = RNA_def_function(srna, "operator_enum_single", "uiItemEnumO_string");
669         api_ui_item_op_common(func);
670         parm = RNA_def_string(func, "property", NULL, 0, "", "Identifier of property in operator");
671         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
672         parm = RNA_def_string(func, "value", NULL, 0, "", "Enum property value");
673         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
674
675         func = RNA_def_function(srna, "operator_boolean", "uiItemBooleanO");
676         api_ui_item_op_common(func);
677         parm = RNA_def_string(func, "property", NULL, 0, "", "Identifier of property in operator");
678         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
679         parm = RNA_def_boolean(func, "value", false, "", "Value of the property to call the operator with");
680         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED); */
681
682         func = RNA_def_function(srna, "operator_int", "uiItemIntO");
683         api_ui_item_op_common(func);
684         parm = RNA_def_string(func, "property", NULL, 0, "", "Identifier of property in operator");
685         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
686         parm = RNA_def_int(func, "value", 0, INT_MIN, INT_MAX, "",
687                           "Value of the property to call the operator with", INT_MIN, INT_MAX);
688         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED); */
689
690         func = RNA_def_function(srna, "operator_float", "uiItemFloatO");
691         api_ui_item_op_common(func);
692         parm = RNA_def_string(func, "property", NULL, 0, "", "Identifier of property in operator");
693         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
694         parm = RNA_def_float(func, "value", 0, -FLT_MAX, FLT_MAX, "",
695                             "Value of the property to call the operator with", -FLT_MAX, FLT_MAX);
696         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED); */
697
698         func = RNA_def_function(srna, "operator_string", "uiItemStringO");
699         api_ui_item_op_common(func);
700         parm = RNA_def_string(func, "property", NULL, 0, "", "Identifier of property in operator");
701         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
702         parm = RNA_def_string(func, "value", NULL, 0, "", "Value of the property to call the operator with");
703         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
704 #endif
705
706         func = RNA_def_function(srna, "label", "rna_uiItemL");
707         RNA_def_function_ui_description(func, "Item. Displays text and/or icon in the layout");
708         api_ui_item_common(func);
709         parm = RNA_def_property(func, "icon_value", PROP_INT, PROP_UNSIGNED);
710         RNA_def_property_ui_text(parm, "Icon Value", "Override automatic icon of the item");
711
712         func = RNA_def_function(srna, "menu", "rna_uiItemM");
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_string(func, "panel", NULL, 0, "", "Identifier of the panel");
722         api_ui_item_common(func);
723         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
724         parm = RNA_def_property(func, "icon_value", PROP_INT, PROP_UNSIGNED);
725         RNA_def_property_ui_text(parm, "Icon Value", "Override automatic icon of the item");
726
727         func = RNA_def_function(srna, "popover_group", "rna_uiItemPopoverPanelFromGroup");
728         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
729         parm = RNA_def_enum(func, "space_type", rna_enum_space_type_items, 0, "Space Type", "");
730         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
731         parm = RNA_def_enum(func, "region_type", rna_enum_region_type_items, RGN_TYPE_WINDOW, "Region Type", "");
732         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
733         parm = RNA_def_string(func, "context", NULL, 0, "", "panel type context");
734         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
735         parm = RNA_def_string(func, "category", NULL, 0, "", "panel type category");
736         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
737
738         func = RNA_def_function(srna, "separator", "uiItemS");
739         RNA_def_function_ui_description(func, "Item. Inserts empty space into the layout between items");
740
741         func = RNA_def_function(srna, "separator_spacer", "uiItemSpacer");
742         RNA_def_function_ui_description(func, "Item. Inserts horizontal spacing empty space into the layout between items");
743
744         /* context */
745         func = RNA_def_function(srna, "context_pointer_set", "uiLayoutSetContextPointer");
746         parm = RNA_def_string(func, "name", NULL, 0, "Name", "Name of entry in the context");
747         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
748         parm = RNA_def_pointer(func, "data", "AnyType", "", "Pointer to put in context");
749         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED | PARM_RNAPTR);
750
751         /* templates */
752         func = RNA_def_function(srna, "template_header", "uiTemplateHeader");
753         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
754         RNA_def_function_ui_description(func, "Inserts common Space header UI (editor type selector)");
755
756         func = RNA_def_function(srna, "template_ID", "uiTemplateID");
757         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
758         api_ui_item_rna_common(func);
759         RNA_def_string(func, "new", NULL, 0, "", "Operator identifier to create a new ID block");
760         RNA_def_string(func, "open", NULL, 0, "", "Operator identifier to open a file for creating a new ID block");
761         RNA_def_string(func, "unlink", NULL, 0, "", "Operator identifier to unlink the ID block");
762         RNA_def_enum(func, "filter", id_template_filter_items, UI_TEMPLATE_ID_FILTER_ALL,
763                      "", "Optionally limit the items which can be selected");
764         RNA_def_boolean(func, "live_icon", false, "", "Show preview instead of fixed icon");
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, "menu", NULL, 0, "", "Context menu identifier");
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_greasepencil_modifier", "uiTemplateGpencilModifier");
838         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
839         RNA_def_function_ui_description(func, "Generates the UI layout for grease pencil modifiers");
840         parm = RNA_def_pointer(func, "data", "GpencilModifier", "", "Modifier data");
841         RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR);
842         parm = RNA_def_pointer(func, "layout", "UILayout", "", "Sub-layout to put items in");
843         RNA_def_function_return(func, parm);
844
845         func = RNA_def_function(srna, "template_shaderfx", "uiTemplateShaderFx");
846         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
847         RNA_def_function_ui_description(func, "Generates the UI layout for shader effect");
848         parm = RNA_def_pointer(func, "data", "ShaderFx", "", "Shader data");
849         RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR);
850         parm = RNA_def_pointer(func, "layout", "UILayout", "", "Sub-layout to put items in");
851         RNA_def_function_return(func, parm);
852
853         func = RNA_def_function(srna, "template_greasepencil_color", "uiTemplateGpencilColorPreview");
854         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
855         api_ui_item_rna_common(func);
856         RNA_def_int(func, "rows", 0, 0, INT_MAX, "Number of thumbnail preview rows to display", "", 0, INT_MAX);
857         RNA_def_int(func, "cols", 0, 0, INT_MAX, "Number of thumbnail preview columns to display", "", 0, INT_MAX);
858         RNA_def_float(func, "scale", 1.0f, 0.1f, 1.5f, "Scale of the image thumbnails", "", 0.5f, 1.0f);
859         RNA_def_enum(func, "filter", id_template_filter_items, UI_TEMPLATE_ID_FILTER_ALL,
860                 "", "Optionally limit the items which can be selected");
861
862         func = RNA_def_function(srna, "template_constraint", "uiTemplateConstraint");
863         RNA_def_function_ui_description(func, "Generates the UI layout for constraints");
864         parm = RNA_def_pointer(func, "data", "Constraint", "", "Constraint data");
865         RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR);
866         parm = RNA_def_pointer(func, "layout", "UILayout", "", "Sub-layout to put items in");
867         RNA_def_function_return(func, parm);
868
869         func = RNA_def_function(srna, "template_preview", "uiTemplatePreview");
870         RNA_def_function_ui_description(func, "Item. A preview window for materials, textures, lights or worlds");
871         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
872         parm = RNA_def_pointer(func, "id", "ID", "", "ID data-block");
873         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
874         RNA_def_boolean(func, "show_buttons", true, "", "Show preview buttons?");
875         RNA_def_pointer(func, "parent", "ID", "", "ID data-block");
876         RNA_def_pointer(func, "slot", "TextureSlot", "", "Texture slot");
877         RNA_def_string(func, "preview_id", NULL, 0, "",
878                        "Identifier of this preview widget, if not set the ID type will be used "
879                        "(i.e. all previews of materials without explicit ID will have the same size...)");
880
881         func = RNA_def_function(srna, "template_curve_mapping", "uiTemplateCurveMapping");
882         RNA_def_function_ui_description(func, "Item. A curve mapping widget used for e.g falloff curves for lights");
883         api_ui_item_rna_common(func);
884         RNA_def_enum(func, "type", curve_type_items, 0, "Type", "Type of curves to display");
885         RNA_def_boolean(func, "levels", false, "", "Show black/white levels");
886         RNA_def_boolean(func, "brush", false, "", "Show brush options");
887         RNA_def_boolean(func, "use_negative_slope", false, "", "Use a negative slope by default");
888         RNA_def_boolean(func, "show_tone", false, "", "Show tone options");
889
890         func = RNA_def_function(srna, "template_color_ramp", "uiTemplateColorRamp");
891         RNA_def_function_ui_description(func, "Item. A color ramp widget");
892         api_ui_item_rna_common(func);
893         RNA_def_boolean(func, "expand", false, "", "Expand button to show more detail");
894
895         func = RNA_def_function(srna, "template_icon", "uiTemplateIcon");
896         RNA_def_function_ui_description(func, "Display a large icon");
897         parm = RNA_def_int(func, "icon_value", 0, 0, INT_MAX, "Icon to display", "", 0, INT_MAX);
898         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
899         RNA_def_float(func, "scale", 1.0f, 1.0f, 100.0f, "Scale", "Scale the icon size (by the button size)", 1.0f, 100.0f);
900
901         func = RNA_def_function(srna, "template_icon_view", "uiTemplateIconView");
902         RNA_def_function_ui_description(func, "Enum. Large widget showing Icon previews");
903         api_ui_item_rna_common(func);
904         RNA_def_boolean(func, "show_labels", false, "", "Show enum label in preview buttons");
905         RNA_def_float(func, "scale", 5.0f, 1.0f, 100.0f, "Scale", "Scale the icon size (by the button size)", 1.0f, 100.0f);
906
907         func = RNA_def_function(srna, "template_histogram", "uiTemplateHistogram");
908         RNA_def_function_ui_description(func, "Item. A histogramm widget to analyze imaga data");
909         api_ui_item_rna_common(func);
910
911         func = RNA_def_function(srna, "template_waveform", "uiTemplateWaveform");
912         RNA_def_function_ui_description(func, "Item. A waveform widget to analyze imaga data");
913         api_ui_item_rna_common(func);
914
915         func = RNA_def_function(srna, "template_vectorscope", "uiTemplateVectorscope");
916         RNA_def_function_ui_description(func, "Item. A vectorscope widget to analyze imaga data");
917         api_ui_item_rna_common(func);
918
919         func = RNA_def_function(srna, "template_layers", "uiTemplateLayers");
920         api_ui_item_rna_common(func);
921         parm = RNA_def_pointer(func, "used_layers_data", "AnyType", "", "Data from which to take property");
922         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED | PARM_RNAPTR);
923         parm = RNA_def_string(func, "used_layers_property", NULL, 0, "", "Identifier of property in data");
924         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
925         parm = RNA_def_int(func, "active_layer", 0, 0, INT_MAX, "Active Layer", "", 0, INT_MAX);
926         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
927
928         func = RNA_def_function(srna, "template_color_picker", "uiTemplateColorPicker");
929         RNA_def_function_ui_description(func, "Item. A color wheel widget to pick colors");
930         api_ui_item_rna_common(func);
931         RNA_def_boolean(func, "value_slider", false, "", "Display the value slider to the right of the color wheel");
932         RNA_def_boolean(func, "lock", false, "", "Lock the color wheel display to value 1.0 regardless of actual color");
933         RNA_def_boolean(func, "lock_luminosity", false, "", "Keep the color at its original vector length");
934         RNA_def_boolean(func, "cubic", false, "", "Cubic saturation for picking values close to white");
935
936         func = RNA_def_function(srna, "template_palette", "uiTemplatePalette");
937         RNA_def_function_ui_description(func, "Item. A palette used to pick colors");
938         api_ui_item_rna_common(func);
939         RNA_def_boolean(func, "color", 0, "", "Display the colors as colors or values");
940
941         func = RNA_def_function(srna, "template_image_layers", "uiTemplateImageLayers");
942         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
943         parm = RNA_def_pointer(func, "image", "Image", "", "");
944         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
945         parm = RNA_def_pointer(func, "image_user", "ImageUser", "", "");
946         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
947
948         func = RNA_def_function(srna, "template_image", "uiTemplateImage");
949         RNA_def_function_ui_description(func, "Item(s). User interface for selecting images and their source paths");
950         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
951         api_ui_item_rna_common(func);
952         parm = RNA_def_pointer(func, "image_user", "ImageUser", "", "");
953         RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR);
954         RNA_def_boolean(func, "compact", false, "", "Use more compact layout");
955         RNA_def_boolean(func, "multiview", false, "", "Expose Multi-View options");
956
957         func = RNA_def_function(srna, "template_image_settings", "uiTemplateImageSettings");
958         RNA_def_function_ui_description(func, "User interface for setting image format options");
959         parm = RNA_def_pointer(func, "image_settings", "ImageFormatSettings", "", "");
960         RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR);
961         RNA_def_boolean(func, "color_management", false, "", "Show color management settings");
962
963         func = RNA_def_function(srna, "template_image_stereo_3d", "uiTemplateImageStereo3d");
964         RNA_def_function_ui_description(func, "User interface for setting image stereo 3d options");
965         parm = RNA_def_pointer(func, "stereo_3d_format", "Stereo3dFormat", "", "");
966         RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR);
967
968         func = RNA_def_function(srna, "template_image_views", "uiTemplateImageViews");
969         RNA_def_function_ui_description(func, "User interface for setting image views output options");
970         parm = RNA_def_pointer(func, "image_settings", "ImageFormatSettings", "", "");
971         RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR);
972
973         func = RNA_def_function(srna, "template_movieclip", "uiTemplateMovieClip");
974         RNA_def_function_ui_description(func, "Item(s). User interface for selecting movie clips and their source paths");
975         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
976         api_ui_item_rna_common(func);
977         RNA_def_boolean(func, "compact", false, "", "Use more compact layout");
978
979         func = RNA_def_function(srna, "template_track", "uiTemplateTrack");
980         RNA_def_function_ui_description(func, "Item. A movie-track widget to preview tracking image.");
981         api_ui_item_rna_common(func);
982
983         func = RNA_def_function(srna, "template_marker", "uiTemplateMarker");
984         RNA_def_function_ui_description(func, "Item. A widget to control single marker settings.");
985         api_ui_item_rna_common(func);
986         parm = RNA_def_pointer(func, "clip_user", "MovieClipUser", "", "");
987         RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR);
988         parm = RNA_def_pointer(func, "track", "MovieTrackingTrack", "", "");
989         RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR);
990         RNA_def_boolean(func, "compact", false, "", "Use more compact layout");
991
992         func = RNA_def_function(srna, "template_movieclip_information", "uiTemplateMovieclipInformation");
993         RNA_def_function_ui_description(func, "Item. Movie clip information data.");
994         api_ui_item_rna_common(func);
995         parm = RNA_def_pointer(func, "clip_user", "MovieClipUser", "", "");
996         RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR);
997
998         func = RNA_def_function(srna, "template_list", "uiTemplateList");
999         RNA_def_function_ui_description(func, "Item. A list widget to display data, e.g. vertexgroups.");
1000         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
1001         parm = RNA_def_string(func, "listtype_name", NULL, 0, "", "Identifier of the list type to use");
1002         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
1003         parm = RNA_def_string(func, "list_id", NULL, 0, "",
1004                               "Identifier of this list widget (mandatory when using default \"" UI_UL_DEFAULT_CLASS_NAME
1005                               "\" class). "
1006                               "If this is set, the uilist gets a custom ID, otherwise it takes the "
1007                               "name of the class used to define the uilist (for example, if the "
1008                               "class name is \"OBJECT_UL_vgroups\", and list_id is not set by the "
1009                               "script, then bl_idname = \"OBJECT_UL_vgroups\")");
1010         parm = RNA_def_pointer(func, "dataptr", "AnyType", "", "Data from which to take the Collection property");
1011         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED | PARM_RNAPTR);
1012         parm = RNA_def_string(func, "propname", NULL, 0, "", "Identifier of the Collection property in data");
1013         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
1014         parm = RNA_def_pointer(func, "active_dataptr", "AnyType", "",
1015                                "Data from which to take the integer property, index of the active item");
1016         RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR);
1017         parm = RNA_def_string(func, "active_propname", NULL, 0, "",
1018                               "Identifier of the integer property in active_data, index of the active item");
1019         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
1020         RNA_def_string(func, "item_dyntip_propname", NULL, 0, "",
1021                        "Identifier of a string property in items, to use as tooltip content");
1022         RNA_def_int(func, "rows", 5, 0, INT_MAX, "", "Default and minimum number of rows to display", 0, INT_MAX);
1023         RNA_def_int(func, "maxrows", 5, 0, INT_MAX, "", "Default maximum number of rows to display", 0, INT_MAX);
1024         RNA_def_enum(func, "type", rna_enum_uilist_layout_type_items, UILST_LAYOUT_DEFAULT, "Type", "Type of layout to use");
1025         RNA_def_int(func, "columns", 9, 0, INT_MAX, "", "Number of items to display per row, for GRID layout", 0, INT_MAX);
1026
1027         func = RNA_def_function(srna, "template_running_jobs", "uiTemplateRunningJobs");
1028         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
1029
1030         RNA_def_function(srna, "template_operator_search", "uiTemplateOperatorSearch");
1031
1032         func = RNA_def_function(srna, "template_header_3D", "uiTemplateHeader3D");
1033         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
1034         RNA_def_function_ui_description(func, "Inserts common 3DView header UI (selectors for context mode, shading, etc.)");
1035
1036         func = RNA_def_function(srna, "template_header_3D_mode", "uiTemplateHeader3D_mode");
1037         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
1038         RNA_def_function_ui_description(func, "");
1039
1040         func = RNA_def_function(srna, "template_edit_mode_selection", "uiTemplateEditModeSelection");
1041         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
1042         RNA_def_function_ui_description(func, "Inserts common 3DView Edit modes header UI (selector for selection mode)");
1043
1044         func = RNA_def_function(srna, "template_reports_banner", "uiTemplateReportsBanner");
1045         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
1046
1047         func = RNA_def_function(srna, "template_input_status", "uiTemplateInputStatus");
1048         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
1049
1050         func = RNA_def_function(srna, "template_node_link", "uiTemplateNodeLink");
1051         parm = RNA_def_pointer(func, "ntree", "NodeTree", "", "");
1052         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
1053         parm = RNA_def_pointer(func, "node", "Node", "", "");
1054         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
1055         parm = RNA_def_pointer(func, "socket", "NodeSocket", "", "");
1056         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
1057
1058         func = RNA_def_function(srna, "template_node_view", "uiTemplateNodeView");
1059         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
1060         parm = RNA_def_pointer(func, "ntree", "NodeTree", "", "");
1061         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
1062         parm = RNA_def_pointer(func, "node", "Node", "", "");
1063         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
1064         parm = RNA_def_pointer(func, "socket", "NodeSocket", "", "");
1065         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
1066
1067         func = RNA_def_function(srna, "template_texture_user", "uiTemplateTextureUser");
1068         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
1069
1070         func = RNA_def_function(srna, "template_keymap_item_properties", "uiTemplateKeymapItemProperties");
1071         parm = RNA_def_pointer(func, "item", "KeyMapItem", "", "");
1072         RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR);
1073
1074         func = RNA_def_function(srna, "template_component_menu", "uiTemplateComponentMenu");
1075         RNA_def_function_ui_description(func, "Item. Display expanded property in a popup menu");
1076         parm = RNA_def_pointer(func, "data", "AnyType", "", "Data from which to take property");
1077         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED | PARM_RNAPTR);
1078         parm = RNA_def_string(func, "property", NULL, 0, "", "Identifier of property in data");
1079         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
1080         RNA_def_string(func, "name", NULL, 0, "", "");
1081
1082         /* color management templates */
1083         func = RNA_def_function(srna, "template_colorspace_settings", "uiTemplateColorspaceSettings");
1084         RNA_def_function_ui_description(func, "Item. A widget to control input color space settings.");
1085         api_ui_item_rna_common(func);
1086
1087         func = RNA_def_function(srna, "template_colormanaged_view_settings", "uiTemplateColormanagedViewSettings");
1088         RNA_def_function_ui_description(func, "Item. A widget to control color managed view settings settings.");
1089         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
1090         api_ui_item_rna_common(func);
1091         /* RNA_def_boolean(func, "show_global_settings", false, "", "Show widgets to control global color management settings"); */
1092
1093         /* node socket icon */
1094         func = RNA_def_function(srna, "template_node_socket", "uiTemplateNodeSocket");
1095         RNA_def_function_ui_description(func, "Node Socket Icon");
1096         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
1097         RNA_def_float_array(func, "color", 4, node_socket_color_default, 0.0f, 1.0f, "Color", "", 0.0f, 1.0f);
1098
1099         func = RNA_def_function(srna, "template_cache_file", "uiTemplateCacheFile");
1100         RNA_def_function_ui_description(func, "Item(s). User interface for selecting cache files and their source paths");
1101         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
1102         api_ui_item_rna_common(func);
1103 }
1104
1105 #endif