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