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