This commit frees list ui items from their dependencies to Panel, and hence from...
[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 "RNA_define.h"
36 #include "RNA_enum_types.h"
37
38 #include "DNA_screen_types.h"
39
40 #include "UI_resources.h"
41 #include "UI_interface_icons.h"
42
43 #include "rna_internal.h"
44
45 #ifdef RNA_RUNTIME
46
47 static void rna_uiItemR(uiLayout *layout, PointerRNA *ptr, const char *propname, const char *name, int icon,
48                         int expand, int slider, int toggle, int icon_only, int event, int full_event,
49                         int emboss, int index)
50 {
51         PropertyRNA *prop = RNA_struct_find_property(ptr, propname);
52         int flag = 0;
53
54         if (!prop) {
55                 RNA_warning("property not found: %s.%s", RNA_struct_identifier(ptr->type), propname);
56                 return;
57         }
58
59         flag |= (slider) ? UI_ITEM_R_SLIDER : 0;
60         flag |= (expand) ? UI_ITEM_R_EXPAND : 0;
61         flag |= (toggle) ? UI_ITEM_R_TOGGLE : 0;
62         flag |= (icon_only) ? UI_ITEM_R_ICON_ONLY : 0;
63         flag |= (event) ? UI_ITEM_R_EVENT : 0;
64         flag |= (full_event) ? UI_ITEM_R_FULL_EVENT : 0;
65         flag |= (emboss) ? 0 : UI_ITEM_R_NO_BG;
66
67         uiItemFullR(layout, ptr, prop, index, 0, flag, name, icon);
68 }
69
70 static PointerRNA rna_uiItemO(uiLayout *layout, const char *opname, const char *name, int icon, int emboss)
71 {
72         int flag = UI_ITEM_O_RETURN_PROPS;
73         flag |= (emboss) ? 0 : UI_ITEM_R_NO_BG;
74         return uiItemFullO(layout, opname, name, icon, NULL, uiLayoutGetOperatorContext(layout), flag);
75 }
76
77 static void rna_uiItemL(uiLayout *layout, const char *name, int icon, int icon_value)
78 {
79         if (icon_value && !icon) {
80                 icon = icon_value;
81         }
82
83         uiItemL(layout, name, icon);
84 }
85
86 static int rna_ui_get_rnaptr_icon(bContext *C, PointerRNA *ptr_icon)
87 {
88         return UI_rnaptr_icon_get(C, ptr_icon, RNA_struct_ui_icon(ptr_icon->type), FALSE);
89 }
90
91 static const char *rna_ui_get_enum_name(bContext *C, PointerRNA *ptr, const char *propname, const char *identifier)
92 {
93         PropertyRNA *prop = NULL;
94         EnumPropertyItem *items = NULL, *item;
95         int free;
96         const char *name = "";
97
98         prop = RNA_struct_find_property(ptr, propname);
99         if (!prop || (RNA_property_type(prop) != PROP_ENUM)) {
100                 RNA_warning("Property not found or not an enum: %s.%s", RNA_struct_identifier(ptr->type), propname);
101                 return name;
102         }
103
104         RNA_property_enum_items_gettexted(C, ptr, prop, &items, NULL, &free);
105
106         if (items) {
107                 for (item = items; item->identifier; item++) {
108                         if (item->identifier[0] && strcmp(item->identifier, identifier) == 0) {
109                                 name = item->name;
110                                 break;
111                         }
112                 }
113                 if (free) {
114                         MEM_freeN(items);
115                 }
116         }
117
118         return name;
119 }
120
121 static const char *rna_ui_get_enum_description(bContext *C, PointerRNA *ptr, const char *propname,
122                                                const char *identifier)
123 {
124         PropertyRNA *prop = NULL;
125         EnumPropertyItem *items = NULL, *item;
126         int free;
127         const char *desc = "";
128
129         prop = RNA_struct_find_property(ptr, propname);
130         if (!prop || (RNA_property_type(prop) != PROP_ENUM)) {
131                 RNA_warning("Property not found or not an enum: %s.%s", RNA_struct_identifier(ptr->type), propname);
132                 return desc;
133         }
134
135         RNA_property_enum_items_gettexted(C, ptr, prop, &items, NULL, &free);
136
137         if (items) {
138                 for (item = items; item->identifier; item++) {
139                         if (item->identifier[0] && strcmp(item->identifier, identifier) == 0) {
140                                 desc = item->description;
141                                 break;
142                         }
143                 }
144                 if (free) {
145                         MEM_freeN(items);
146                 }
147         }
148
149         return desc;
150 }
151
152 static int rna_ui_get_enum_icon(bContext *C, PointerRNA *ptr, const char *propname, const char *identifier)
153 {
154         PropertyRNA *prop = NULL;
155         EnumPropertyItem *items = NULL, *item;
156         int free;
157         int icon = ICON_NONE;
158
159         prop = RNA_struct_find_property(ptr, propname);
160         if (!prop || (RNA_property_type(prop) != PROP_ENUM)) {
161                 RNA_warning("Property not found or not an enum: %s.%s", RNA_struct_identifier(ptr->type), propname);
162                 return icon;
163         }
164
165         RNA_property_enum_items(C, ptr, prop, &items, NULL, &free);
166
167         if (items) {
168                 for (item = items; item->identifier; item++) {
169                         if (item->identifier[0] && strcmp(item->identifier, identifier) == 0) {
170                                 icon = item->icon;
171                                 break;
172                         }
173                 }
174                 if (free) {
175                         MEM_freeN(items);
176                 }
177         }
178
179         return icon;
180 }
181
182 #else
183
184 #define DEF_ICON_BLANK_SKIP
185 #define DEF_ICON(name) {ICON_##name, (#name), 0, (#name), ""},
186 #define DEF_VICO(name) {VICO_##name, (#name), 0, (#name), ""},
187 EnumPropertyItem icon_items[] = {
188 #include "UI_icons.h"
189         {0, NULL, 0, NULL, NULL}
190 };
191 #undef DEF_ICON_BLANK_SKIP
192 #undef DEF_ICON
193 #undef DEF_VICO
194
195 static void api_ui_item_common(FunctionRNA *func)
196 {
197         PropertyRNA *prop;
198
199         RNA_def_string_translate(func, "text", "", 0, "", "Override automatic text of the item");
200
201         prop = RNA_def_property(func, "icon", PROP_ENUM, PROP_NONE);
202         RNA_def_property_enum_items(prop, icon_items);
203         RNA_def_property_ui_text(prop, "Icon", "Override automatic icon of the item");
204 }
205
206 static void api_ui_item_op(FunctionRNA *func)
207 {
208         PropertyRNA *parm;
209         parm = RNA_def_string(func, "operator", "", 0, "", "Identifier of the operator");
210         RNA_def_property_flag(parm, PROP_REQUIRED);
211 }
212
213 static void api_ui_item_op_common(FunctionRNA *func)
214 {
215         api_ui_item_op(func);
216         api_ui_item_common(func);
217 }
218
219 static void api_ui_item_rna_common(FunctionRNA *func)
220 {
221         PropertyRNA *parm;
222
223         parm = RNA_def_pointer(func, "data", "AnyType", "", "Data from which to take property");
224         RNA_def_property_flag(parm, PROP_REQUIRED | PROP_RNAPTR | PROP_NEVER_NULL);
225         parm = RNA_def_string(func, "property", "", 0, "", "Identifier of property in data");
226         RNA_def_property_flag(parm, PROP_REQUIRED);
227 }
228
229 void RNA_api_ui_layout(StructRNA *srna)
230 {
231         FunctionRNA *func;
232         PropertyRNA *parm;
233
234         static EnumPropertyItem curve_type_items[] = {
235                 {0, "NONE", 0, "None", ""},
236                 {'v', "VECTOR", 0, "Vector", ""},
237                 {'c', "COLOR", 0, "Color", ""},
238                 {'h', "HUE", 0, "Hue", ""},
239                 {0, NULL, 0, NULL, NULL}
240         };
241
242         /* simple layout specifiers */
243         func = RNA_def_function(srna, "row", "uiLayoutRow");
244         parm = RNA_def_pointer(func, "layout", "UILayout", "", "Sub-layout to put items in");
245         RNA_def_function_return(func, parm);
246         RNA_def_function_ui_description(func,
247                                         "Sub-layout. Items placed in this sublayout are placed next to each other "
248                                         "in a row");
249         RNA_def_boolean(func, "align", 0, "", "Align buttons to each other");
250         
251         func = RNA_def_function(srna, "column", "uiLayoutColumn");
252         parm = RNA_def_pointer(func, "layout", "UILayout", "", "Sub-layout to put items in");
253         RNA_def_function_return(func, parm);
254         RNA_def_function_ui_description(func,
255                                         "Sub-layout. Items placed in this sublayout are placed under each other "
256                                         "in a column");
257         RNA_def_boolean(func, "align", 0, "", "Align buttons to each other");
258
259         func = RNA_def_function(srna, "column_flow", "uiLayoutColumnFlow");
260         RNA_def_int(func, "columns", 0, 0, INT_MAX, "", "Number of columns, 0 is automatic", 0, INT_MAX);
261         parm = RNA_def_pointer(func, "layout", "UILayout", "", "Sub-layout to put items in");
262         RNA_def_function_return(func, parm);
263         RNA_def_boolean(func, "align", 0, "", "Align buttons to each other");
264
265         /* box layout */
266         func = RNA_def_function(srna, "box", "uiLayoutBox");
267         parm = RNA_def_pointer(func, "layout", "UILayout", "", "Sub-layout to put items in");
268         RNA_def_function_return(func, parm);
269         RNA_def_function_ui_description(func, "Sublayout (items placed in this sublayout are placed "
270                                         "under each other in a column and are surrounded by a box)");
271         
272         /* split layout */
273         func = RNA_def_function(srna, "split", "uiLayoutSplit");
274         parm = RNA_def_pointer(func, "layout", "UILayout", "", "Sub-layout to put items in");
275         RNA_def_function_return(func, parm);
276         RNA_def_float(func, "percentage", 0.0f, 0.0f, 1.0f, "Percentage", "Percentage of width to split at", 0.0f, 1.0f);
277         RNA_def_boolean(func, "align", 0, "", "Align buttons to each other");
278
279         /* Icon of a rna pointer */
280         func = RNA_def_function(srna, "icon", "rna_ui_get_rnaptr_icon");
281         parm = RNA_def_int(func, "icon_value", ICON_NONE, 0, INT_MAX, "", "Icon identifier", 0, INT_MAX);
282         RNA_def_function_return(func, parm);
283         RNA_def_function_flag(func, FUNC_NO_SELF | FUNC_USE_CONTEXT);
284         parm = RNA_def_pointer(func, "data", "AnyType", "", "Data from which to take the icon");
285         RNA_def_property_flag(parm, PROP_REQUIRED | PROP_RNAPTR | PROP_NEVER_NULL);
286         RNA_def_function_ui_description(func, "Return the custom icon for this data, "
287                                               "use it e.g. to get materials or texture icons");
288
289         /* UI name, description and icon of an enum item */
290         func = RNA_def_function(srna, "enum_item_name", "rna_ui_get_enum_name");
291         parm = RNA_def_string(func, "name", "", 0, "", "UI name of the enum item");
292         RNA_def_function_return(func, parm);
293         RNA_def_function_flag(func, FUNC_NO_SELF | FUNC_USE_CONTEXT);
294         api_ui_item_rna_common(func);
295         parm = RNA_def_string(func, "identifier", "", 0, "", "Identifier of the enum item");
296         RNA_def_property_flag(parm, PROP_REQUIRED);
297         RNA_def_function_ui_description(func, "Return the UI name for this enum item");
298
299         func = RNA_def_function(srna, "enum_item_description", "rna_ui_get_enum_description");
300         parm = RNA_def_string(func, "description", "", 0, "", "UI description of the enum item");
301         RNA_def_function_return(func, parm);
302         RNA_def_function_flag(func, FUNC_NO_SELF | FUNC_USE_CONTEXT);
303         api_ui_item_rna_common(func);
304         parm = RNA_def_string(func, "identifier", "", 0, "", "Identifier of the enum item");
305         RNA_def_property_flag(parm, PROP_REQUIRED);
306         RNA_def_function_ui_description(func, "Return the UI description for this enum item");
307
308         func = RNA_def_function(srna, "enum_item_icon", "rna_ui_get_enum_icon");
309         parm = RNA_def_int(func, "icon_value", ICON_NONE, 0, INT_MAX, "", "Icon identifier", 0, INT_MAX);
310         RNA_def_function_return(func, parm);
311         RNA_def_function_flag(func, FUNC_NO_SELF | FUNC_USE_CONTEXT);
312         api_ui_item_rna_common(func);
313         parm = RNA_def_string(func, "identifier", "", 0, "", "Identifier of the enum item");
314         RNA_def_property_flag(parm, PROP_REQUIRED);
315         RNA_def_function_ui_description(func, "Return the icon for this enum item");
316
317         /* items */
318         func = RNA_def_function(srna, "prop", "rna_uiItemR");
319         RNA_def_function_ui_description(func, "Item. Exposes an RNA item and places it into the layout");
320         api_ui_item_rna_common(func);
321         api_ui_item_common(func);
322         RNA_def_boolean(func, "expand", 0, "", "Expand button to show more detail");
323         RNA_def_boolean(func, "slider", 0, "", "Use slider widget for numeric values");
324         RNA_def_boolean(func, "toggle", 0, "", "Use toggle widget for boolean values");
325         RNA_def_boolean(func, "icon_only", 0, "", "Draw only icons in buttons, no text");
326         RNA_def_boolean(func, "event", 0, "", "Use button to input key events");
327         RNA_def_boolean(func, "full_event", 0, "", "Use button to input full events including modifiers");
328         RNA_def_boolean(func, "emboss", 1, "", "Draw the button itself, just the icon/text");
329         RNA_def_int(func, "index", -1, -2, INT_MAX, "",
330                     "The index of this button, when set a single member of an array can be accessed, "
331                     "when set to -1 all array members are used", -2, INT_MAX); /* RNA_NO_INDEX == -1 */
332
333         func = RNA_def_function(srna, "props_enum", "uiItemsEnumR");
334         api_ui_item_rna_common(func);
335
336         func = RNA_def_function(srna, "prop_menu_enum", "uiItemMenuEnumR");
337         api_ui_item_rna_common(func);
338         api_ui_item_common(func);
339
340         func = RNA_def_function(srna, "prop_enum", "uiItemEnumR_string");
341         api_ui_item_rna_common(func);
342         parm = RNA_def_string(func, "value", "", 0, "", "Enum property value");
343         RNA_def_property_flag(parm, PROP_REQUIRED);
344         api_ui_item_common(func);
345
346         func = RNA_def_function(srna, "prop_search", "uiItemPointerR");
347         api_ui_item_rna_common(func);
348         parm = RNA_def_pointer(func, "search_data", "AnyType", "", "Data from which to take collection to search in");
349         RNA_def_property_flag(parm, PROP_REQUIRED | PROP_RNAPTR | PROP_NEVER_NULL);
350         parm = RNA_def_string(func, "search_property", "", 0, "", "Identifier of search collection property");
351         RNA_def_property_flag(parm, PROP_REQUIRED);
352         api_ui_item_common(func);
353
354         func = RNA_def_function(srna, "operator", "rna_uiItemO");
355         api_ui_item_op_common(func);
356         RNA_def_boolean(func, "emboss", 1, "", "Draw the button itself, just the icon/text");
357         parm = RNA_def_pointer(func, "properties", "OperatorProperties", "",
358                                "Operator properties to fill in, return when 'properties' is set to true");
359         RNA_def_property_flag(parm, PROP_REQUIRED | PROP_RNAPTR);
360         RNA_def_function_return(func, parm);
361         RNA_def_function_ui_description(func, "Item. Places a button into the layout to call an Operator");
362
363         func = RNA_def_function(srna, "operator_enum", "uiItemsEnumO");
364         parm = RNA_def_string(func, "operator", "", 0, "", "Identifier of the operator");
365         RNA_def_property_flag(parm, PROP_REQUIRED);
366         parm = RNA_def_string(func, "property", "", 0, "", "Identifier of property in operator");
367         RNA_def_property_flag(parm, PROP_REQUIRED);
368
369         func = RNA_def_function(srna, "operator_menu_enum", "uiItemMenuEnumO");
370         api_ui_item_op(func); /* cant use api_ui_item_op_common because property must come right after */
371         parm = RNA_def_string(func, "property", "", 0, "", "Identifier of property in operator");
372         RNA_def_property_flag(parm, PROP_REQUIRED);
373         api_ui_item_common(func);
374
375         /* useful in C but not in python */
376 #if 0
377
378         func = RNA_def_function(srna, "operator_enum_single", "uiItemEnumO_string");
379         api_ui_item_op_common(func);
380         parm = RNA_def_string(func, "property", "", 0, "", "Identifier of property in operator");
381         RNA_def_property_flag(parm, PROP_REQUIRED);
382         parm = RNA_def_string(func, "value", "", 0, "", "Enum property value");
383         RNA_def_property_flag(parm, PROP_REQUIRED);
384
385         func = RNA_def_function(srna, "operator_boolean", "uiItemBooleanO");
386         api_ui_item_op_common(func);
387         parm = RNA_def_string(func, "property", "", 0, "", "Identifier of property in operator");
388         RNA_def_property_flag(parm, PROP_REQUIRED);
389         parm = RNA_def_boolean(func, "value", 0, "", "Value of the property to call the operator with");
390         RNA_def_property_flag(parm, PROP_REQUIRED); */
391
392         func = RNA_def_function(srna, "operator_int", "uiItemIntO");
393         api_ui_item_op_common(func);
394         parm = RNA_def_string(func, "property", "", 0, "", "Identifier of property in operator");
395         RNA_def_property_flag(parm, PROP_REQUIRED);
396         parm = RNA_def_int(func, "value", 0, INT_MIN, INT_MAX, "",
397                           "Value of the property to call the operator with", INT_MIN, INT_MAX);
398         RNA_def_property_flag(parm, PROP_REQUIRED); */
399
400         func = RNA_def_function(srna, "operator_float", "uiItemFloatO");
401         api_ui_item_op_common(func);
402         parm = RNA_def_string(func, "property", "", 0, "", "Identifier of property in operator");
403         RNA_def_property_flag(parm, PROP_REQUIRED);
404         parm = RNA_def_float(func, "value", 0, -FLT_MAX, FLT_MAX, "",
405                             "Value of the property to call the operator with", -FLT_MAX, FLT_MAX);
406         RNA_def_property_flag(parm, PROP_REQUIRED); */
407
408         func = RNA_def_function(srna, "operator_string", "uiItemStringO");
409         api_ui_item_op_common(func);
410         parm = RNA_def_string(func, "property", "", 0, "", "Identifier of property in operator");
411         RNA_def_property_flag(parm, PROP_REQUIRED);
412         parm = RNA_def_string(func, "value", "", 0, "", "Value of the property to call the operator with");
413         RNA_def_property_flag(parm, PROP_REQUIRED);
414 #endif
415
416         func = RNA_def_function(srna, "label", "rna_uiItemL");
417         RNA_def_function_ui_description(func, "Item. Display text and/or icon in the layout");
418         api_ui_item_common(func);
419         parm = RNA_def_property(func, "icon_value", PROP_INT, PROP_UNSIGNED);
420         RNA_def_property_ui_text(parm, "Icon Value",
421                                  "Override automatic icon of the item "
422                                  "(use it e.g. with custom material icons returned by icon()...)");
423
424         func = RNA_def_function(srna, "menu", "uiItemM");
425         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
426         parm = RNA_def_string(func, "menu", "", 0, "", "Identifier of the menu");
427         api_ui_item_common(func);
428         RNA_def_property_flag(parm, PROP_REQUIRED);
429
430         func = RNA_def_function(srna, "separator", "uiItemS");
431         RNA_def_function_ui_description(func, "Item. Inserts empty space into the layout between items");
432
433         /* context */
434         func = RNA_def_function(srna, "context_pointer_set", "uiLayoutSetContextPointer");
435         parm = RNA_def_string(func, "name", "", 0, "Name", "Name of entry in the context");
436         RNA_def_property_flag(parm, PROP_REQUIRED);
437         parm = RNA_def_pointer(func, "data", "AnyType", "", "Pointer to put in context");
438         RNA_def_property_flag(parm, PROP_REQUIRED | PROP_RNAPTR);
439         
440         /* templates */
441         func = RNA_def_function(srna, "template_header", "uiTemplateHeader");
442         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
443         RNA_def_boolean(func, "menus", 1, "", "The header has menus, and should show menu expander");
444
445         func = RNA_def_function(srna, "template_ID", "uiTemplateID");
446         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
447         api_ui_item_rna_common(func);
448         RNA_def_string(func, "new", "", 0, "", "Operator identifier to create a new ID block");
449         RNA_def_string(func, "open", "", 0, "", "Operator identifier to open a file for creating a new ID block");
450         RNA_def_string(func, "unlink", "", 0, "", "Operator identifier to unlink the ID block");
451         
452         func = RNA_def_function(srna, "template_ID_preview", "uiTemplateIDPreview");
453         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
454         api_ui_item_rna_common(func);
455         RNA_def_string(func, "new", "", 0, "", "Operator identifier to create a new ID block");
456         RNA_def_string(func, "open", "", 0, "", "Operator identifier to open a file for creating a new ID block");
457         RNA_def_string(func, "unlink", "", 0, "", "Operator identifier to unlink the ID block");
458         RNA_def_int(func, "rows", 0, 0, INT_MAX, "Number of thumbnail preview rows to display", "", 0, INT_MAX);
459         RNA_def_int(func, "cols", 0, 0, INT_MAX, "Number of thumbnail preview columns to display", "", 0, INT_MAX);
460         
461         func = RNA_def_function(srna, "template_any_ID", "uiTemplateAnyID");
462         parm = RNA_def_pointer(func, "data", "AnyType", "", "Data from which to take property");
463         RNA_def_property_flag(parm, PROP_REQUIRED | PROP_RNAPTR | PROP_NEVER_NULL);
464         parm = RNA_def_string(func, "property", "", 0, "", "Identifier of property in data");
465         RNA_def_property_flag(parm, PROP_REQUIRED);
466         parm = RNA_def_string(func, "type_property", "", 0, "",
467                               "Identifier of property in data giving the type of the ID-blocks to use");
468         RNA_def_property_flag(parm, PROP_REQUIRED);
469         RNA_def_string_translate(func, "text", "", 0, "", "Custom label to display in UI");
470         
471         func = RNA_def_function(srna, "template_path_builder", "uiTemplatePathBuilder");
472         parm = RNA_def_pointer(func, "data", "AnyType", "", "Data from which to take property");
473         RNA_def_property_flag(parm, PROP_REQUIRED | PROP_RNAPTR | PROP_NEVER_NULL);
474         parm = RNA_def_string(func, "property", "", 0, "", "Identifier of property in data");
475         RNA_def_property_flag(parm, PROP_REQUIRED);
476         parm = RNA_def_pointer(func, "root", "ID", "", "ID-block from which path is evaluated from");
477         RNA_def_property_flag(parm, PROP_REQUIRED | PROP_RNAPTR);
478         RNA_def_string_translate(func, "text", "", 0, "", "Custom label to display in UI");
479         
480         func = RNA_def_function(srna, "template_modifier", "uiTemplateModifier");
481         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
482         RNA_def_function_ui_description(func, "Layout . Generates the UI layout for modifiers");
483         parm = RNA_def_pointer(func, "data", "Modifier", "", "Modifier data");
484         RNA_def_property_flag(parm, PROP_REQUIRED | PROP_RNAPTR | PROP_NEVER_NULL);
485         parm = RNA_def_pointer(func, "layout", "UILayout", "", "Sub-layout to put items in");
486         RNA_def_function_return(func, parm);
487
488         func = RNA_def_function(srna, "template_constraint", "uiTemplateConstraint");
489         RNA_def_function_ui_description(func, "Layout . Generates the UI layout for constraints");
490         parm = RNA_def_pointer(func, "data", "Constraint", "", "Constraint data");
491         RNA_def_property_flag(parm, PROP_REQUIRED | PROP_RNAPTR | PROP_NEVER_NULL);
492         parm = RNA_def_pointer(func, "layout", "UILayout", "", "Sub-layout to put items in");
493         RNA_def_function_return(func, parm);
494
495         func = RNA_def_function(srna, "template_preview", "uiTemplatePreview");
496         RNA_def_function_ui_description(func, "Item. A preview window for materials, textures, lamps, etc");
497         parm = RNA_def_pointer(func, "id", "ID", "", "ID datablock");
498         RNA_def_property_flag(parm, PROP_REQUIRED);
499         RNA_def_boolean(func, "show_buttons", 1, "", "Show preview buttons?");
500         RNA_def_pointer(func, "parent", "ID", "", "ID datablock");
501         RNA_def_pointer(func, "slot", "TextureSlot", "", "Texture slot");
502
503         func = RNA_def_function(srna, "template_curve_mapping", "uiTemplateCurveMapping");
504         RNA_def_function_ui_description(func, "Item. A curve mapping widget used for e.g falloff curves for lamps");
505         api_ui_item_rna_common(func);
506         RNA_def_enum(func, "type", curve_type_items, 0, "Type", "Type of curves to display");
507         RNA_def_boolean(func, "levels", 0, "", "Show black/white levels");
508         RNA_def_boolean(func, "brush", 0, "", "Show brush options");
509
510         func = RNA_def_function(srna, "template_color_ramp", "uiTemplateColorRamp");
511         RNA_def_function_ui_description(func, "Item. A color ramp widget");
512         api_ui_item_rna_common(func);
513         RNA_def_boolean(func, "expand", 0, "", "Expand button to show more detail");
514         
515         func = RNA_def_function(srna, "template_histogram", "uiTemplateHistogram");
516         RNA_def_function_ui_description(func, "Item. A histogramm widget to analyze imaga data");
517         api_ui_item_rna_common(func);
518         
519         func = RNA_def_function(srna, "template_waveform", "uiTemplateWaveform");
520         RNA_def_function_ui_description(func, "Item. A waveform widget to analyze imaga data");
521         api_ui_item_rna_common(func);
522         
523         func = RNA_def_function(srna, "template_vectorscope", "uiTemplateVectorscope");
524         RNA_def_function_ui_description(func, "Item. A vectorscope widget to analyze imaga data");
525         api_ui_item_rna_common(func);
526         
527         func = RNA_def_function(srna, "template_layers", "uiTemplateLayers");
528         api_ui_item_rna_common(func);
529         parm = RNA_def_pointer(func, "used_layers_data", "AnyType", "", "Data from which to take property");
530         RNA_def_property_flag(parm, PROP_REQUIRED | PROP_RNAPTR);
531         parm = RNA_def_string(func, "used_layers_property", "", 0, "", "Identifier of property in data");
532         RNA_def_property_flag(parm, PROP_REQUIRED);
533         parm = RNA_def_int(func, "active_layer", 0, 0, INT_MAX, "Active Layer", "", 0, INT_MAX);
534         RNA_def_property_flag(parm, PROP_REQUIRED);
535         
536         func = RNA_def_function(srna, "template_color_picker", "uiTemplateColorPicker");
537         RNA_def_function_ui_description(func, "Item. A color wheel widget to pick colors");
538         api_ui_item_rna_common(func);
539         RNA_def_boolean(func, "value_slider", 0, "", "Display the value slider to the right of the color wheel");
540         RNA_def_boolean(func, "lock", 0, "", "Lock the color wheel display to value 1.0 regardless of actual color");
541         RNA_def_boolean(func, "lock_luminosity", 0, "", "Keep the color at its original vector length");
542         RNA_def_boolean(func, "cubic", 1, "", "Cubic saturation for picking values close to white");
543
544         func = RNA_def_function(srna, "template_image_layers", "uiTemplateImageLayers");
545         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
546         parm = RNA_def_pointer(func, "image", "Image", "", "");
547         RNA_def_property_flag(parm, PROP_REQUIRED);
548         parm = RNA_def_pointer(func, "image_user", "ImageUser", "", "");
549         RNA_def_property_flag(parm, PROP_REQUIRED);
550
551         func = RNA_def_function(srna, "template_image", "uiTemplateImage");
552         RNA_def_function_ui_description(func, "Item(s). User interface for selecting images and their source paths");
553         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
554         api_ui_item_rna_common(func);
555         parm = RNA_def_pointer(func, "image_user", "ImageUser", "", "");
556         RNA_def_property_flag(parm, PROP_REQUIRED | PROP_RNAPTR | PROP_NEVER_NULL);
557         RNA_def_boolean(func, "compact", 0, "", "Use more compact layout");
558
559         func = RNA_def_function(srna, "template_image_settings", "uiTemplateImageSettings");
560         RNA_def_function_ui_description(func, "User interface for setting image format options");
561         parm = RNA_def_pointer(func, "image_settings", "ImageFormatSettings", "", "");
562         RNA_def_property_flag(parm, PROP_REQUIRED | PROP_RNAPTR | PROP_NEVER_NULL);
563         RNA_def_boolean(func, "color_management", 0, "", "Show color management settings");
564
565         func = RNA_def_function(srna, "template_movieclip", "uiTemplateMovieClip");
566         RNA_def_function_ui_description(func, "Item(s). User interface for selecting movie clips and their source paths");
567         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
568         api_ui_item_rna_common(func);
569         RNA_def_boolean(func, "compact", 0, "", "Use more compact layout");
570
571         func = RNA_def_function(srna, "template_track", "uiTemplateTrack");
572         RNA_def_function_ui_description(func, "Item. A movie-track widget to preview tracking image.");
573         api_ui_item_rna_common(func);
574
575         func = RNA_def_function(srna, "template_marker", "uiTemplateMarker");
576         RNA_def_function_ui_description(func, "Item. A widget to control single marker settings.");
577         api_ui_item_rna_common(func);
578         parm = RNA_def_pointer(func, "clip_user", "MovieClipUser", "", "");
579         RNA_def_property_flag(parm, PROP_REQUIRED | PROP_RNAPTR | PROP_NEVER_NULL);
580         parm = RNA_def_pointer(func, "track", "MovieTrackingTrack", "", "");
581         RNA_def_property_flag(parm, PROP_REQUIRED | PROP_RNAPTR | PROP_NEVER_NULL);
582         RNA_def_boolean(func, "compact", 0, "", "Use more compact layout");
583
584         func = RNA_def_function(srna, "template_list", "uiTemplateList");
585         RNA_def_function_ui_description(func, "Item. A list widget to display data, e.g. vertexgroups.");
586         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
587         parm = RNA_def_string(func, "listtype_name", "", 0, "", "Identifier of the list type to use");
588         RNA_def_property_flag(parm, PROP_REQUIRED);
589         parm = RNA_def_string(func, "list_id", "", 0, "",
590                               "Identifier of this list widget. "
591                               "If this is set, the uilist gets a custom ID, otherwise it takes the "
592                               "name of the class used to define the uilist (for example, if the "
593                               "class name is \"OBJECT_UL_vgroups\", and list_id is not set by the "
594                               "script, then bl_idname = \"OBJECT_UL_vgroups\")");
595         parm = RNA_def_pointer(func, "dataptr", "AnyType", "", "Data from which to take the Collection property");
596         RNA_def_property_flag(parm, PROP_REQUIRED | PROP_RNAPTR);
597         parm = RNA_def_string(func, "propname", "", 0, "", "Identifier of the Collection property in data");
598         RNA_def_property_flag(parm, PROP_REQUIRED);
599         parm = RNA_def_pointer(func, "active_dataptr", "AnyType", "",
600                                "Data from which to take the integer property, index of the active item");
601         RNA_def_property_flag(parm, PROP_REQUIRED | PROP_RNAPTR | PROP_NEVER_NULL);
602         parm = RNA_def_string(func, "active_propname", "", 0, "",
603                               "Identifier of the integer property in active_data, index of the active item");
604         RNA_def_property_flag(parm, PROP_REQUIRED);
605         RNA_def_int(func, "rows", 5, 0, INT_MAX, "", "Number of rows to display", 0, INT_MAX);
606         RNA_def_int(func, "maxrows", 5, 0, INT_MAX, "", "Maximum number of rows to display", 0, INT_MAX);
607         RNA_def_enum(func, "type", uilist_layout_type_items, UILST_LAYOUT_DEFAULT, "Type", "Type of layout to use");
608
609         func = RNA_def_function(srna, "template_running_jobs", "uiTemplateRunningJobs");
610         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
611
612         RNA_def_function(srna, "template_operator_search", "uiTemplateOperatorSearch");
613
614         func = RNA_def_function(srna, "template_header_3D", "uiTemplateHeader3D");
615         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
616
617         func = RNA_def_function(srna, "template_edit_mode_selection", "uiTemplateEditModeSelection");
618         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
619         
620         func = RNA_def_function(srna, "template_reports_banner", "uiTemplateReportsBanner");
621         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
622
623         func = RNA_def_function(srna, "template_node_link", "uiTemplateNodeLink");
624         parm = RNA_def_pointer(func, "ntree", "NodeTree", "", "");
625         RNA_def_property_flag(parm, PROP_REQUIRED);
626         parm = RNA_def_pointer(func, "node", "Node", "", "");
627         RNA_def_property_flag(parm, PROP_REQUIRED);
628         parm = RNA_def_pointer(func, "socket", "NodeSocket", "", "");
629         RNA_def_property_flag(parm, PROP_REQUIRED);
630
631         func = RNA_def_function(srna, "template_node_view", "uiTemplateNodeView");
632         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
633         parm = RNA_def_pointer(func, "ntree", "NodeTree", "", "");
634         RNA_def_property_flag(parm, PROP_REQUIRED);
635         parm = RNA_def_pointer(func, "node", "Node", "", "");
636         RNA_def_property_flag(parm, PROP_REQUIRED);
637         parm = RNA_def_pointer(func, "socket", "NodeSocket", "", "");
638         RNA_def_property_flag(parm, PROP_REQUIRED);
639
640         func = RNA_def_function(srna, "template_texture_user", "uiTemplateTextureUser");
641         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
642
643         func = RNA_def_function(srna, "template_keymap_item_properties", "uiTemplateKeymapItemProperties");
644         parm = RNA_def_pointer(func, "item", "KeyMapItem", "", "");
645         RNA_def_property_flag(parm, PROP_REQUIRED | PROP_RNAPTR | PROP_NEVER_NULL);
646
647         func = RNA_def_function(srna, "introspect", "uiLayoutIntrospect");
648         parm = RNA_def_string(func, "string", "", 1024 * 1024, "Descr", "DESCR");
649         RNA_def_function_return(func, parm);
650
651         /* color management templates */
652         func = RNA_def_function(srna, "template_colorspace_settings", "uiTemplateColorspaceSettings");
653         RNA_def_function_ui_description(func, "Item. A widget to control input color space settings.");
654         api_ui_item_rna_common(func);
655
656         func = RNA_def_function(srna, "template_colormanaged_view_settings", "uiTemplateColormanagedViewSettings");
657         RNA_def_function_ui_description(func, "Item. A widget to control color managed view settings settings.");
658         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
659         api_ui_item_rna_common(func);
660         /* RNA_def_boolean(func, "show_global_settings", 0, "", "Show widgets to control global color management settings"); */
661 }
662
663 #endif