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