svn merge ^/trunk/blender -r40720:40872
[blender.git] / source / blender / makesrna / intern / rna_context.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  * Contributor(s): Blender Foundation (2009).
21  *
22  * ***** END GPL LICENSE BLOCK *****
23  */
24
25 /** \file blender/makesrna/intern/rna_context.c
26  *  \ingroup RNA
27  */
28
29
30 #include <stdlib.h>
31
32 #include "DNA_ID.h"
33 #include "DNA_userdef_types.h"
34
35 #include "RNA_access.h"
36 #include "RNA_define.h"
37
38 #include "BKE_context.h"
39
40 #ifdef RNA_RUNTIME
41
42 static PointerRNA rna_Context_manager_get(PointerRNA *ptr)
43 {
44         bContext *C= (bContext*)ptr->data;
45         return rna_pointer_inherit_refine(ptr, &RNA_WindowManager, CTX_wm_manager(C));
46 }
47
48 static PointerRNA rna_Context_window_get(PointerRNA *ptr)
49 {
50         bContext *C= (bContext*)ptr->data;
51         return rna_pointer_inherit_refine(ptr, &RNA_Window, CTX_wm_window(C));
52 }
53
54 static PointerRNA rna_Context_screen_get(PointerRNA *ptr)
55 {
56         bContext *C= (bContext*)ptr->data;
57         return rna_pointer_inherit_refine(ptr, &RNA_Screen, CTX_wm_screen(C));
58 }
59
60 static PointerRNA rna_Context_area_get(PointerRNA *ptr)
61 {
62         bContext *C= (bContext*)ptr->data;
63         PointerRNA newptr;
64         RNA_pointer_create((ID*)CTX_wm_screen(C), &RNA_Area, CTX_wm_area(C), &newptr);
65         return newptr;
66 }
67
68 static PointerRNA rna_Context_space_data_get(PointerRNA *ptr)
69 {
70         bContext *C= (bContext*)ptr->data;
71         PointerRNA newptr;
72         RNA_pointer_create((ID*)CTX_wm_screen(C), &RNA_Space, CTX_wm_space_data(C), &newptr);
73         return newptr;
74 }
75
76 static PointerRNA rna_Context_region_get(PointerRNA *ptr)
77 {
78         bContext *C= (bContext*)ptr->data;
79         PointerRNA newptr;
80         RNA_pointer_create((ID*)CTX_wm_screen(C), &RNA_Region, CTX_wm_region(C), &newptr);
81         return newptr;
82 }
83
84 static PointerRNA rna_Context_region_data_get(PointerRNA *ptr)
85 {
86         bContext *C= (bContext*)ptr->data;
87
88         /* only exists for one space still, no generic system yet */
89         if(CTX_wm_view3d(C)) {
90                 PointerRNA newptr;
91                 RNA_pointer_create((ID*)CTX_wm_screen(C), &RNA_RegionView3D, CTX_wm_region_data(C), &newptr);
92                 return newptr;
93         }
94
95         return PointerRNA_NULL;
96 }
97
98 static PointerRNA rna_Context_main_get(PointerRNA *ptr)
99 {
100         bContext *C= (bContext*)ptr->data;
101         return rna_pointer_inherit_refine(ptr, &RNA_BlendData, CTX_data_main(C));
102 }
103
104 static PointerRNA rna_Context_scene_get(PointerRNA *ptr)
105 {
106         bContext *C= (bContext*)ptr->data;
107         return rna_pointer_inherit_refine(ptr, &RNA_Scene, CTX_data_scene(C));
108 }
109
110 static PointerRNA rna_Context_tool_settings_get(PointerRNA *ptr)
111 {
112         bContext *C= (bContext*)ptr->data;
113         ptr->id.data= CTX_data_scene(C);
114         return rna_pointer_inherit_refine(ptr, &RNA_ToolSettings, CTX_data_tool_settings(C));
115 }
116
117 static PointerRNA rna_Context_user_preferences_get(PointerRNA *ptr)
118 {
119         PointerRNA newptr;
120         RNA_pointer_create(NULL, &RNA_UserPreferences, &U, &newptr);
121         return newptr;
122 }
123
124 static int rna_Context_mode_get(PointerRNA *ptr)
125 {
126         bContext *C= (bContext*)ptr->data;
127         return CTX_data_mode_enum(C);
128 }
129
130 #else
131
132 void RNA_def_context(BlenderRNA *brna)
133 {
134         StructRNA *srna;
135         PropertyRNA *prop;
136
137         static EnumPropertyItem mode_items[] = {
138                 {CTX_MODE_EDIT_MESH, "EDIT_MESH", 0, "Mesh Edit", ""},
139                 {CTX_MODE_EDIT_CURVE, "EDIT_CURVE", 0, "Curve Edit", ""},
140                 {CTX_MODE_EDIT_SURFACE, "EDIT_SURFACE", 0, "Surface Edit", ""},
141                 {CTX_MODE_EDIT_TEXT, "EDIT_TEXT", 0, "Edit Edit", ""},
142                 {CTX_MODE_EDIT_ARMATURE, "EDIT_ARMATURE", 0, "Armature Edit", ""}, // PARSKEL reuse will give issues
143                 {CTX_MODE_EDIT_METABALL, "EDIT_METABALL", 0, "Metaball Edit", ""},
144                 {CTX_MODE_EDIT_LATTICE, "EDIT_LATTICE", 0, "Lattice Edit", ""},
145                 {CTX_MODE_POSE, "POSE", 0, "Pose ", ""},
146                 {CTX_MODE_SCULPT, "SCULPT", 0, "Sculpt", ""},
147                 {CTX_MODE_PAINT_WEIGHT, "PAINT_WEIGHT", 0, "Weight Paint", ""},
148                 {CTX_MODE_PAINT_VERTEX, "PAINT_VERTEX", 0, "Vertex Paint", ""},
149                 {CTX_MODE_PAINT_TEXTURE, "PAINT_TEXTURE", 0, "Texture Paint", ""},
150                 {CTX_MODE_PARTICLE, "PARTICLE", 0, "Particle", ""},
151                 {CTX_MODE_OBJECT, "OBJECT", 0, "Object", ""},
152                 {0, NULL, 0, NULL, NULL}};
153
154         srna= RNA_def_struct(brna, "Context", NULL);
155         RNA_def_struct_ui_text(srna, "Context", "Current windowmanager and data context");
156         RNA_def_struct_sdna(srna, "bContext");
157
158         /* WM */
159         prop= RNA_def_property(srna, "window_manager", PROP_POINTER, PROP_NONE);
160         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
161         RNA_def_property_struct_type(prop, "WindowManager");
162         RNA_def_property_pointer_funcs(prop, "rna_Context_manager_get", NULL, NULL, NULL);
163
164         prop= RNA_def_property(srna, "window", PROP_POINTER, PROP_NONE);
165         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
166         RNA_def_property_struct_type(prop, "Window");
167         RNA_def_property_pointer_funcs(prop, "rna_Context_window_get", NULL, NULL, NULL);
168
169         prop= RNA_def_property(srna, "screen", PROP_POINTER, PROP_NONE);
170         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
171         RNA_def_property_struct_type(prop, "Screen");
172         RNA_def_property_pointer_funcs(prop, "rna_Context_screen_get", NULL, NULL, NULL);
173
174         prop= RNA_def_property(srna, "area", PROP_POINTER, PROP_NONE);
175         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
176         RNA_def_property_struct_type(prop, "Area");
177         RNA_def_property_pointer_funcs(prop, "rna_Context_area_get", NULL, NULL, NULL);
178
179         prop= RNA_def_property(srna, "space_data", PROP_POINTER, PROP_NONE);
180         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
181         RNA_def_property_struct_type(prop, "Space");
182         RNA_def_property_pointer_funcs(prop, "rna_Context_space_data_get", NULL, NULL, NULL);
183
184         prop= RNA_def_property(srna, "region", PROP_POINTER, PROP_NONE);
185         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
186         RNA_def_property_struct_type(prop, "Region");
187         RNA_def_property_pointer_funcs(prop, "rna_Context_region_get", NULL, NULL, NULL);
188
189         prop= RNA_def_property(srna, "region_data", PROP_POINTER, PROP_NONE);
190         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
191         RNA_def_property_struct_type(prop, "RegionView3D");
192         RNA_def_property_pointer_funcs(prop, "rna_Context_region_data_get", NULL, NULL, NULL);
193
194         /* Data */
195         prop= RNA_def_property(srna, "blend_data", PROP_POINTER, PROP_NONE);
196         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
197         RNA_def_property_struct_type(prop, "BlendData");
198         RNA_def_property_pointer_funcs(prop, "rna_Context_main_get", NULL, NULL, NULL);
199
200         prop= RNA_def_property(srna, "scene", PROP_POINTER, PROP_NONE);
201         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
202         RNA_def_property_struct_type(prop, "Scene");
203         RNA_def_property_pointer_funcs(prop, "rna_Context_scene_get", NULL, NULL, NULL);
204
205         prop= RNA_def_property(srna, "tool_settings", PROP_POINTER, PROP_NONE);
206         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
207         RNA_def_property_struct_type(prop, "ToolSettings");
208         RNA_def_property_pointer_funcs(prop, "rna_Context_tool_settings_get", NULL, NULL, NULL);
209
210         prop= RNA_def_property(srna, "user_preferences", PROP_POINTER, PROP_NONE);
211         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
212         RNA_def_property_struct_type(prop, "UserPreferences");
213         RNA_def_property_pointer_funcs(prop, "rna_Context_user_preferences_get", NULL, NULL, NULL);
214
215         prop= RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
216         RNA_def_property_enum_items(prop, mode_items);
217         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
218         RNA_def_property_enum_funcs(prop, "rna_Context_mode_get", NULL, NULL);
219 }
220
221 #endif
222