Merge branch 'master' into blender2.8
[blender.git] / source / blender / makesrna / intern / rna_context.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  * Contributor(s): Blender Foundation (2009).
19  *
20  * ***** END GPL LICENSE BLOCK *****
21  */
22
23 /** \file blender/makesrna/intern/rna_context.c
24  *  \ingroup RNA
25  */
26
27 #include <stdlib.h>
28
29 #include "DNA_ID.h"
30 #include "DNA_userdef_types.h"
31
32 #include "BLI_utildefines.h"
33 #include "BKE_context.h"
34
35 #include "RNA_access.h"
36 #include "RNA_define.h"
37 #include "RNA_enum_types.h"
38
39 #include "rna_internal.h" /* own include */
40
41 const EnumPropertyItem rna_enum_context_mode_items[] = {
42         {CTX_MODE_EDIT_MESH, "EDIT_MESH", 0, "Mesh Edit", ""},
43         {CTX_MODE_EDIT_CURVE, "EDIT_CURVE", 0, "Curve Edit", ""},
44         {CTX_MODE_EDIT_SURFACE, "EDIT_SURFACE", 0, "Surface Edit", ""},
45         {CTX_MODE_EDIT_TEXT, "EDIT_TEXT", 0, "Edit Edit", ""},
46         {CTX_MODE_EDIT_ARMATURE, "EDIT_ARMATURE", 0, "Armature Edit", ""}, /* PARSKEL reuse will give issues */
47         {CTX_MODE_EDIT_METABALL, "EDIT_METABALL", 0, "Metaball Edit", ""},
48         {CTX_MODE_EDIT_LATTICE, "EDIT_LATTICE", 0, "Lattice Edit", ""},
49         {CTX_MODE_POSE, "POSE", 0, "Pose ", ""},
50         {CTX_MODE_SCULPT, "SCULPT", 0, "Sculpt", ""},
51         {CTX_MODE_PAINT_WEIGHT, "PAINT_WEIGHT", 0, "Weight Paint", ""},
52         {CTX_MODE_PAINT_VERTEX, "PAINT_VERTEX", 0, "Vertex Paint", ""},
53         {CTX_MODE_PAINT_TEXTURE, "PAINT_TEXTURE", 0, "Texture Paint", ""},
54         {CTX_MODE_PARTICLE, "PARTICLE", 0, "Particle", ""},
55         {CTX_MODE_OBJECT, "OBJECT", 0, "Object", ""},
56         {CTX_MODE_GPENCIL_PAINT, "GPENCIL_PAINT", 0, "Grease Pencil Paint", "" },
57         {CTX_MODE_GPENCIL_EDIT, "GPENCIL_EDIT", 0, "Grease Pencil Edit", "" },
58         {CTX_MODE_GPENCIL_SCULPT, "GPENCIL_SCULPT", 0, "Grease Pencil Sculpt", "" },
59         {CTX_MODE_GPENCIL_WEIGHT, "GPENCIL_WEIGHT", 0, "Grease Pencil Weight Paint", "" },
60         {0, NULL, 0, NULL, NULL}
61 };
62
63 #ifdef RNA_RUNTIME
64
65 #include "RE_engine.h"
66
67 static PointerRNA rna_Context_manager_get(PointerRNA *ptr)
68 {
69         bContext *C = (bContext *)ptr->data;
70         return rna_pointer_inherit_refine(ptr, &RNA_WindowManager, CTX_wm_manager(C));
71 }
72
73 static PointerRNA rna_Context_window_get(PointerRNA *ptr)
74 {
75         bContext *C = (bContext *)ptr->data;
76         return rna_pointer_inherit_refine(ptr, &RNA_Window, CTX_wm_window(C));
77 }
78
79 static PointerRNA rna_Context_workspace_get(PointerRNA *ptr)
80 {
81         bContext *C = (bContext *)ptr->data;
82         return rna_pointer_inherit_refine(ptr, &RNA_WorkSpace, CTX_wm_workspace(C));
83 }
84
85 static PointerRNA rna_Context_screen_get(PointerRNA *ptr)
86 {
87         bContext *C = (bContext *)ptr->data;
88         return rna_pointer_inherit_refine(ptr, &RNA_Screen, CTX_wm_screen(C));
89 }
90
91 static PointerRNA rna_Context_area_get(PointerRNA *ptr)
92 {
93         bContext *C = (bContext *)ptr->data;
94         PointerRNA newptr;
95         RNA_pointer_create((ID *)CTX_wm_screen(C), &RNA_Area, CTX_wm_area(C), &newptr);
96         return newptr;
97 }
98
99 static PointerRNA rna_Context_space_data_get(PointerRNA *ptr)
100 {
101         bContext *C = (bContext *)ptr->data;
102         PointerRNA newptr;
103         RNA_pointer_create((ID *)CTX_wm_screen(C), &RNA_Space, CTX_wm_space_data(C), &newptr);
104         return newptr;
105 }
106
107 static PointerRNA rna_Context_region_get(PointerRNA *ptr)
108 {
109         bContext *C = (bContext *)ptr->data;
110         PointerRNA newptr;
111         RNA_pointer_create((ID *)CTX_wm_screen(C), &RNA_Region, CTX_wm_region(C), &newptr);
112         return newptr;
113 }
114
115 static PointerRNA rna_Context_region_data_get(PointerRNA *ptr)
116 {
117         bContext *C = (bContext *)ptr->data;
118
119         /* only exists for one space still, no generic system yet */
120         if (CTX_wm_view3d(C)) {
121                 PointerRNA newptr;
122                 RNA_pointer_create((ID *)CTX_wm_screen(C), &RNA_RegionView3D, CTX_wm_region_data(C), &newptr);
123                 return newptr;
124         }
125
126         return PointerRNA_NULL;
127 }
128
129 static PointerRNA rna_Context_gizmo_group_get(PointerRNA *ptr)
130 {
131         bContext *C = (bContext *)ptr->data;
132         PointerRNA newptr;
133         RNA_pointer_create(NULL, &RNA_GizmoGroup, CTX_wm_gizmo_group(C), &newptr);
134         return newptr;
135 }
136
137 static PointerRNA rna_Context_main_get(PointerRNA *ptr)
138 {
139         bContext *C = (bContext *)ptr->data;
140         return rna_pointer_inherit_refine(ptr, &RNA_BlendData, CTX_data_main(C));
141 }
142
143 static PointerRNA rna_Context_depsgraph_get(PointerRNA *ptr)
144 {
145         bContext *C = (bContext *)ptr->data;
146         return rna_pointer_inherit_refine(ptr, &RNA_Depsgraph, CTX_data_depsgraph(C));
147 }
148
149 static PointerRNA rna_Context_scene_get(PointerRNA *ptr)
150 {
151         bContext *C = (bContext *)ptr->data;
152         return rna_pointer_inherit_refine(ptr, &RNA_Scene, CTX_data_scene(C));
153 }
154
155 static PointerRNA rna_Context_view_layer_get(PointerRNA *ptr)
156 {
157         bContext *C = (bContext *)ptr->data;
158         Scene *scene = CTX_data_scene(C);
159         PointerRNA scene_ptr;
160
161         RNA_id_pointer_create(&scene->id, &scene_ptr);
162         return rna_pointer_inherit_refine(&scene_ptr, &RNA_ViewLayer, CTX_data_view_layer(C));
163 }
164
165 static void rna_Context_engine_get(PointerRNA *ptr, char *value)
166  {
167         bContext *C = (bContext *)ptr->data;
168         RenderEngineType *engine_type = CTX_data_engine_type(C);
169         strcpy(value, engine_type->idname);
170 }
171
172 static int rna_Context_engine_length(PointerRNA *ptr)
173 {
174         bContext *C = (bContext *)ptr->data;
175         RenderEngineType *engine_type = CTX_data_engine_type(C);
176         return strlen(engine_type->idname);
177 }
178
179 static PointerRNA rna_Context_collection_get(PointerRNA *ptr)
180 {
181         bContext *C = (bContext *)ptr->data;
182         return rna_pointer_inherit_refine(ptr, &RNA_Collection, CTX_data_collection(C));
183 }
184
185 static PointerRNA rna_Context_layer_collection_get(PointerRNA *ptr)
186 {
187         bContext *C = (bContext *)ptr->data;
188         ptr->id.data = CTX_data_scene(C);
189         return rna_pointer_inherit_refine(ptr, &RNA_LayerCollection, CTX_data_layer_collection(C));
190 }
191
192 static PointerRNA rna_Context_tool_settings_get(PointerRNA *ptr)
193 {
194         bContext *C = (bContext *)ptr->data;
195         ptr->id.data = CTX_data_scene(C);
196         return rna_pointer_inherit_refine(ptr, &RNA_ToolSettings, CTX_data_tool_settings(C));
197 }
198
199 static PointerRNA rna_Context_user_preferences_get(PointerRNA *UNUSED(ptr))
200 {
201         PointerRNA newptr;
202         RNA_pointer_create(NULL, &RNA_UserPreferences, &U, &newptr);
203         return newptr;
204 }
205
206 static int rna_Context_mode_get(PointerRNA *ptr)
207 {
208         bContext *C = (bContext *)ptr->data;
209         return CTX_data_mode_enum(C);
210 }
211
212 #else
213
214 void RNA_def_context(BlenderRNA *brna)
215 {
216         StructRNA *srna;
217         PropertyRNA *prop;
218
219         srna = RNA_def_struct(brna, "Context", NULL);
220         RNA_def_struct_ui_text(srna, "Context", "Current windowmanager and data context");
221         RNA_def_struct_sdna(srna, "bContext");
222
223         /* WM */
224         prop = RNA_def_property(srna, "window_manager", PROP_POINTER, PROP_NONE);
225         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
226         RNA_def_property_struct_type(prop, "WindowManager");
227         RNA_def_property_pointer_funcs(prop, "rna_Context_manager_get", NULL, NULL, NULL);
228
229         prop = RNA_def_property(srna, "window", PROP_POINTER, PROP_NONE);
230         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
231         RNA_def_property_struct_type(prop, "Window");
232         RNA_def_property_pointer_funcs(prop, "rna_Context_window_get", NULL, NULL, NULL);
233
234         prop = RNA_def_property(srna, "workspace", PROP_POINTER, PROP_NONE);
235         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
236         RNA_def_property_struct_type(prop, "WorkSpace");
237         RNA_def_property_pointer_funcs(prop, "rna_Context_workspace_get", NULL, NULL, NULL);
238
239         prop = RNA_def_property(srna, "screen", PROP_POINTER, PROP_NONE);
240         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
241         RNA_def_property_struct_type(prop, "Screen");
242         RNA_def_property_pointer_funcs(prop, "rna_Context_screen_get", NULL, NULL, NULL);
243
244         prop = RNA_def_property(srna, "area", PROP_POINTER, PROP_NONE);
245         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
246         RNA_def_property_struct_type(prop, "Area");
247         RNA_def_property_pointer_funcs(prop, "rna_Context_area_get", NULL, NULL, NULL);
248
249         prop = RNA_def_property(srna, "space_data", PROP_POINTER, PROP_NONE);
250         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
251         RNA_def_property_struct_type(prop, "Space");
252         RNA_def_property_pointer_funcs(prop, "rna_Context_space_data_get", NULL, NULL, NULL);
253
254         prop = RNA_def_property(srna, "region", PROP_POINTER, PROP_NONE);
255         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
256         RNA_def_property_struct_type(prop, "Region");
257         RNA_def_property_pointer_funcs(prop, "rna_Context_region_get", NULL, NULL, NULL);
258
259         prop = RNA_def_property(srna, "region_data", PROP_POINTER, PROP_NONE);
260         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
261         RNA_def_property_struct_type(prop, "RegionView3D");
262         RNA_def_property_pointer_funcs(prop, "rna_Context_region_data_get", NULL, NULL, NULL);
263
264         prop = RNA_def_property(srna, "gizmo_group", PROP_POINTER, PROP_NONE);
265         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
266         RNA_def_property_struct_type(prop, "GizmoGroup");
267         RNA_def_property_pointer_funcs(prop, "rna_Context_gizmo_group_get", NULL, NULL, NULL);
268
269         /* Data */
270         prop = RNA_def_property(srna, "blend_data", PROP_POINTER, PROP_NONE);
271         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
272         RNA_def_property_struct_type(prop, "BlendData");
273         RNA_def_property_pointer_funcs(prop, "rna_Context_main_get", NULL, NULL, NULL);
274
275         prop = RNA_def_property(srna, "depsgraph", PROP_POINTER, PROP_NONE);
276         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
277         RNA_def_property_struct_type(prop, "Depsgraph");
278         RNA_def_property_pointer_funcs(prop, "rna_Context_depsgraph_get", NULL, NULL, NULL);
279
280         prop = RNA_def_property(srna, "scene", PROP_POINTER, PROP_NONE);
281         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
282         RNA_def_property_struct_type(prop, "Scene");
283         RNA_def_property_pointer_funcs(prop, "rna_Context_scene_get", NULL, NULL, NULL);
284
285         prop = RNA_def_property(srna, "view_layer", PROP_POINTER, PROP_NONE);
286         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
287         RNA_def_property_struct_type(prop, "ViewLayer");
288         RNA_def_property_pointer_funcs(prop, "rna_Context_view_layer_get", NULL, NULL, NULL);
289
290         prop = RNA_def_property(srna, "engine", PROP_STRING, PROP_NONE);
291         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
292         RNA_def_property_string_funcs(prop, "rna_Context_engine_get", "rna_Context_engine_length", NULL);
293
294         prop = RNA_def_property(srna, "collection", PROP_POINTER, PROP_NONE);
295         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
296         RNA_def_property_struct_type(prop, "Collection");
297         RNA_def_property_pointer_funcs(prop, "rna_Context_collection_get", NULL, NULL, NULL);
298
299         prop = RNA_def_property(srna, "layer_collection", PROP_POINTER, PROP_NONE);
300         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
301         RNA_def_property_struct_type(prop, "LayerCollection");
302         RNA_def_property_pointer_funcs(prop, "rna_Context_layer_collection_get", NULL, NULL, NULL);
303
304         prop = RNA_def_property(srna, "tool_settings", PROP_POINTER, PROP_NONE);
305         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
306         RNA_def_property_struct_type(prop, "ToolSettings");
307         RNA_def_property_pointer_funcs(prop, "rna_Context_tool_settings_get", NULL, NULL, NULL);
308
309         prop = RNA_def_property(srna, "user_preferences", PROP_POINTER, PROP_NONE);
310         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
311         RNA_def_property_struct_type(prop, "UserPreferences");
312         RNA_def_property_pointer_funcs(prop, "rna_Context_user_preferences_get", NULL, NULL, NULL);
313
314         prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
315         RNA_def_property_enum_items(prop, rna_enum_context_mode_items);
316         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
317         RNA_def_property_enum_funcs(prop, "rna_Context_mode_get", NULL, NULL);
318 }
319
320 #endif