doxygen: prevent GPL license block from being parsed as doxygen comment.
[blender.git] / source / blender / makesrna / intern / rna_wm_api.c
1 /*
2  * $Id$
3  *
4  * ***** BEGIN GPL LICENSE BLOCK *****
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version. 
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software Foundation,
18  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19  *
20  * The Original Code is Copyright (C) 2009 Blender Foundation.
21  * All rights reserved.
22  *
23  * 
24  * Contributor(s): Blender Foundation
25  *
26  * ***** END GPL LICENSE BLOCK *****
27  */
28
29 #include <stdlib.h>
30 #include <stdio.h>
31
32 #include "RNA_define.h"
33 #include "RNA_enum_types.h"
34
35 #include "DNA_screen_types.h"
36 #include "DNA_space_types.h"
37 #include "DNA_windowmanager_types.h"
38
39 #ifdef RNA_RUNTIME
40
41 #include "BKE_context.h"
42
43 static wmKeyMap *rna_keymap_active(wmKeyMap *km, bContext *C)
44 {
45         wmWindowManager *wm = CTX_wm_manager(C);
46         return WM_keymap_active(wm, km);
47 }
48
49 static void rna_keymap_restore_item_to_default(wmKeyMap *km, bContext *C, wmKeyMapItem *kmi)
50 {
51         WM_keymap_restore_item_to_default(C, km, kmi);
52 }
53
54 static void rna_Operator_report(wmOperator *op, int type, const char *msg)
55 {
56         BKE_report(op->reports, type, msg);
57 }
58
59 /* since event isnt needed... */
60 static void rna_Operator_enum_search_invoke(bContext *C, wmOperator *op)
61 {
62         WM_enum_search_invoke(C, op, NULL);
63         
64 }
65
66 static int rna_event_modal_handler_add(struct bContext *C, struct wmOperator *operator)
67 {
68         return WM_event_add_modal_handler(C, operator) != NULL;
69 }
70
71 #else
72
73 #define WM_GEN_INVOKE_EVENT (1<<0)
74 #define WM_GEN_INVOKE_SIZE (1<<1)
75 #define WM_GEN_INVOKE_RETURN (1<<2)
76
77 static void rna_generic_op_invoke(FunctionRNA *func, int flag)
78 {
79         PropertyRNA *parm;
80
81         RNA_def_function_flag(func, FUNC_NO_SELF|FUNC_USE_CONTEXT);
82         parm= RNA_def_pointer(func, "operator", "Operator", "", "Operator to call.");
83         RNA_def_property_flag(parm, PROP_REQUIRED);
84
85         if(flag & WM_GEN_INVOKE_EVENT) {
86                 parm= RNA_def_pointer(func, "event", "Event", "", "Event.");
87                 RNA_def_property_flag(parm, PROP_REQUIRED);
88         }
89
90         if(flag & WM_GEN_INVOKE_SIZE) {
91                 RNA_def_int(func, "width", 300, 0, INT_MAX, "", "Width of the popup.", 0, INT_MAX);
92                 RNA_def_int(func, "height", 20, 0, INT_MAX, "", "Height of the popup.", 0, INT_MAX);
93         }
94
95         if(flag & WM_GEN_INVOKE_RETURN) {
96                 parm= RNA_def_enum_flag(func, "result", operator_return_items, OPERATOR_CANCELLED, "result", "");
97                 RNA_def_function_return(func, parm);
98         }
99 }
100
101 void RNA_api_wm(StructRNA *srna)
102 {
103         FunctionRNA *func;
104         PropertyRNA *parm;
105
106         func= RNA_def_function(srna, "fileselect_add", "WM_event_add_fileselect");
107         RNA_def_function_ui_description(func, "Show up the file selector.");
108         rna_generic_op_invoke(func, 0);
109
110         func= RNA_def_function(srna, "modal_handler_add", "rna_event_modal_handler_add");
111         RNA_def_function_flag(func, FUNC_NO_SELF|FUNC_USE_CONTEXT);
112         parm= RNA_def_pointer(func, "operator", "Operator", "", "Operator to call.");
113         RNA_def_property_flag(parm, PROP_REQUIRED);
114         RNA_def_function_return(func, RNA_def_boolean(func, "handle", 1, "", ""));
115
116         /* invoke functions, for use with python */
117         func= RNA_def_function(srna, "invoke_props_popup", "WM_operator_props_popup");
118         RNA_def_function_ui_description(func, "Operator popup invoke.");
119         rna_generic_op_invoke(func, WM_GEN_INVOKE_EVENT|WM_GEN_INVOKE_RETURN);
120
121         /* invoked dialog opens popup with OK button, does not auto-exec operator. */
122         func= RNA_def_function(srna, "invoke_props_dialog", "WM_operator_props_dialog_popup");
123         RNA_def_function_ui_description(func, "Operator dialog (non-autoexec popup) invoke.");
124         rna_generic_op_invoke(func, WM_GEN_INVOKE_SIZE|WM_GEN_INVOKE_RETURN);
125
126         /* invoke enum */
127         func= RNA_def_function(srna, "invoke_search_popup", "rna_Operator_enum_search_invoke");
128         rna_generic_op_invoke(func, 0);
129
130         /* invoke functions, for use with python */
131         func= RNA_def_function(srna, "invoke_popup", "WM_operator_ui_popup");
132         RNA_def_function_ui_description(func, "Operator popup invoke.");
133         rna_generic_op_invoke(func, WM_GEN_INVOKE_SIZE|WM_GEN_INVOKE_RETURN);
134
135         func= RNA_def_function(srna, "invoke_confirm", "WM_operator_confirm");
136         RNA_def_function_ui_description(func, "Operator confirmation.");
137         rna_generic_op_invoke(func, WM_GEN_INVOKE_EVENT|WM_GEN_INVOKE_RETURN);
138         
139 }
140
141 void RNA_api_operator(StructRNA *srna)
142 {
143         FunctionRNA *func;
144         PropertyRNA *parm;
145
146         /* utility, not for registering */
147         func= RNA_def_function(srna, "report", "rna_Operator_report");
148         parm= RNA_def_enum_flag(func, "type", wm_report_items, 0, "Type", "");
149         RNA_def_property_flag(parm, PROP_REQUIRED);
150         parm= RNA_def_string(func, "message", "", 0, "Report Message", "");
151         RNA_def_property_flag(parm, PROP_REQUIRED);
152
153
154         /* Registration */
155
156         /* poll */
157         func= RNA_def_function(srna, "poll", NULL);
158         RNA_def_function_ui_description(func, "Test if the operator can be called or not.");
159         RNA_def_function_flag(func, FUNC_NO_SELF|FUNC_REGISTER_OPTIONAL);
160         RNA_def_function_return(func, RNA_def_boolean(func, "visible", 1, "", ""));
161         parm= RNA_def_pointer(func, "context", "Context", "", "");
162         RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
163
164         /* exec */
165         func= RNA_def_function(srna, "execute", NULL);
166         RNA_def_function_ui_description(func, "Execute the operator.");
167         RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL);
168         parm= RNA_def_pointer(func, "context", "Context", "", "");
169         RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
170
171         parm= RNA_def_enum_flag(func, "result", operator_return_items, OPERATOR_CANCELLED, "result", ""); // better name?
172         RNA_def_function_return(func, parm);
173
174         /* check */
175         func= RNA_def_function(srna, "check", NULL);
176         RNA_def_function_ui_description(func, "Check the operator settings.");
177         RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL);
178         parm= RNA_def_pointer(func, "context", "Context", "", "");
179         RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
180
181         parm= RNA_def_boolean(func, "result", 0, "result", ""); // better name?
182         RNA_def_function_return(func, parm);
183         
184         /* invoke */
185         func= RNA_def_function(srna, "invoke", NULL);
186         RNA_def_function_ui_description(func, "Invoke the operator.");
187         RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL);
188         parm= RNA_def_pointer(func, "context", "Context", "", "");
189         RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
190         parm= RNA_def_pointer(func, "event", "Event", "", "");
191         RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
192
193         parm= RNA_def_enum_flag(func, "result", operator_return_items, OPERATOR_CANCELLED, "result", ""); // better name?
194         RNA_def_function_return(func, parm);
195
196         func= RNA_def_function(srna, "modal", NULL); /* same as invoke */
197         RNA_def_function_ui_description(func, "Modal operator function.");
198         RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL);
199         parm= RNA_def_pointer(func, "context", "Context", "", "");
200         RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
201         parm= RNA_def_pointer(func, "event", "Event", "", "");
202         RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
203
204         parm= RNA_def_enum_flag(func, "result", operator_return_items, OPERATOR_CANCELLED, "result", ""); // better name?
205         RNA_def_function_return(func, parm);
206
207         /* draw */
208         func= RNA_def_function(srna, "draw", NULL);
209         RNA_def_function_ui_description(func, "Draw function for the operator.");
210         RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL);
211         parm= RNA_def_pointer(func, "context", "Context", "", "");
212         RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
213 }
214
215 void RNA_api_macro(StructRNA *srna)
216 {
217         FunctionRNA *func;
218         PropertyRNA *parm;
219
220         /* utility, not for registering */
221         func= RNA_def_function(srna, "report", "rna_Operator_report");
222         parm= RNA_def_enum_flag(func, "type", wm_report_items, 0, "Type", "");
223         RNA_def_property_flag(parm, PROP_REQUIRED);
224         parm= RNA_def_string(func, "message", "", 0, "Report Message", "");
225         RNA_def_property_flag(parm, PROP_REQUIRED);
226
227
228         /* Registration */
229
230         /* poll */
231         func= RNA_def_function(srna, "poll", NULL);
232         RNA_def_function_ui_description(func, "Test if the operator can be called or not.");
233         RNA_def_function_flag(func, FUNC_NO_SELF|FUNC_REGISTER_OPTIONAL);
234         RNA_def_function_return(func, RNA_def_boolean(func, "visible", 1, "", ""));
235         parm= RNA_def_pointer(func, "context", "Context", "", "");
236         RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
237
238         /* draw */
239         func= RNA_def_function(srna, "draw", NULL);
240         RNA_def_function_ui_description(func, "Draw function for the operator.");
241         RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL);
242         parm= RNA_def_pointer(func, "context", "Context", "", "");
243         RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
244 }
245
246 void RNA_api_keyconfig(StructRNA *srna)
247 {
248         // FunctionRNA *func;
249         // PropertyRNA *parm;
250 }
251
252 void RNA_api_keymap(StructRNA *srna)
253 {
254         FunctionRNA *func;
255         PropertyRNA *parm;
256
257         func= RNA_def_function(srna, "active", "rna_keymap_active");
258         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
259         parm= RNA_def_pointer(func, "keymap", "KeyMap", "Key Map", "Active key map.");
260         RNA_def_function_return(func, parm);
261
262         func= RNA_def_function(srna, "copy_to_user", "WM_keymap_copy_to_user");
263         parm= RNA_def_pointer(func, "keymap", "KeyMap", "Key Map", "User editable key map.");
264         RNA_def_function_return(func, parm);
265
266         RNA_def_function(srna, "restore_to_default", "WM_keymap_restore_to_default");
267
268         func= RNA_def_function(srna, "restore_item_to_default", "rna_keymap_restore_item_to_default");
269         RNA_def_function_flag(func, FUNC_USE_CONTEXT);
270         parm= RNA_def_pointer(func, "item", "KeyMapItem", "Item", "");
271         RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
272 }
273
274 void RNA_api_keymapitem(StructRNA *srna)
275 {
276         FunctionRNA *func;
277         PropertyRNA *parm;
278
279         func= RNA_def_function(srna, "compare", "WM_keymap_item_compare");
280         parm= RNA_def_pointer(func, "item", "KeyMapItem", "Item", "");
281         RNA_def_property_flag(parm, PROP_REQUIRED);
282         parm= RNA_def_boolean(func, "result", 0, "Comparison result", "");
283         RNA_def_function_return(func, parm);
284 }
285 #endif
286