Cleanup: correct variable name, doxy sections
[blender.git] / source / blender / blenkernel / BKE_screen.h
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) 2001-2002 by NaN Holding BV.
19  * All rights reserved.
20  *
21  * The Original Code is: all of this file.
22  *
23  * Contributor(s): none yet.
24  *
25  * ***** END GPL LICENSE BLOCK *****
26  */
27 #ifndef __BKE_SCREEN_H__
28 #define __BKE_SCREEN_H__
29
30 /** \file BKE_screen.h
31  *  \ingroup bke
32  *  \since March 2001
33  *  \author nzc
34  */
35
36 struct ARegion;
37 struct Header;
38 struct ID;
39 struct ListBase;
40 struct Menu;
41 struct Panel;
42 struct Scene;
43 struct ScrArea;
44 struct SpaceType;
45 struct View3D;
46 struct bContext;
47 struct bContextDataResult;
48 struct bScreen;
49 struct uiLayout;
50 struct uiList;
51 struct wmKeyConfig;
52 struct wmNotifier;
53 struct wmWindow;
54 struct wmWindowManager;
55 struct GPUFXSettings;
56
57 #include "BLI_compiler_attrs.h"
58
59 #include "RNA_types.h"
60
61 /* spacetype has everything stored to get an editor working, it gets initialized via
62  * ED_spacetypes_init() in editors/space_api/spacetypes.c   */
63 /* an editor in Blender is a combined ScrArea + SpaceType + SpaceData */
64
65 #define BKE_ST_MAXNAME  64
66
67 typedef struct SpaceType {
68         struct SpaceType *next, *prev;
69
70         char name[BKE_ST_MAXNAME];                  /* for menus */
71         int spaceid;                                /* unique space identifier */
72         int iconid;                                 /* icon lookup for menus */
73
74         /* initial allocation, after this WM will call init() too */
75         struct SpaceLink    *(*new)(const struct bContext *C);
76         /* not free spacelink itself */
77         void (*free)(struct SpaceLink *sl);
78
79         /* init is to cope with file load, screen (size) changes, check handlers */
80         void (*init)(struct wmWindowManager *wm, struct ScrArea *sa);
81         /* exit is called when the area is hidden or removed */
82         void (*exit)(struct wmWindowManager *wm, struct ScrArea *sa);
83         /* Listeners can react to bContext changes */
84         void (*listener)(struct bScreen *sc, struct ScrArea *sa, struct wmNotifier *wmn);
85
86         /* refresh context, called after filereads, ED_area_tag_refresh() */
87         void (*refresh)(const struct bContext *C, struct ScrArea *sa);
88
89         /* after a spacedata copy, an init should result in exact same situation */
90         struct SpaceLink *(*duplicate)(struct SpaceLink *sl);
91
92         /* register operator types on startup */
93         void (*operatortypes)(void);
94         /* add default items to WM keymap */
95         void (*keymap)(struct wmKeyConfig *keyconf);
96         /* on startup, define dropboxes for spacetype+regions */
97         void (*dropboxes)(void);
98
99         /* return context data */
100         int (*context)(const struct bContext *C, const char *member, struct bContextDataResult *result);
101
102         /* Used when we want to replace an ID by another (or NULL). */
103         void (*id_remap)(struct ScrArea *sa, struct SpaceLink *sl, struct ID *old_id, struct ID *new_id);
104
105         /* region type definitions */
106         ListBase regiontypes;
107
108         /* tool shelf definitions */
109         ListBase toolshelf;
110
111         /* read and write... */
112
113         /* default keymaps to add */
114         int keymapflag;
115
116 } SpaceType;
117
118 /* region types are also defined using spacetypes_init, via a callback */
119
120 typedef struct ARegionType {
121         struct ARegionType *next, *prev;
122
123         /* unique identifier within this space, defines RGN_TYPE_xxxx */
124         int regionid;
125
126         /* add handlers, stuff you only do once or on area/region type/size changes */
127         void (*init)(struct wmWindowManager *wm, struct ARegion *ar);
128         /* exit is called when the region is hidden or removed */
129         void (*exit)(struct wmWindowManager *wm, struct ARegion *ar);
130         /* draw entirely, view changes should be handled here */
131         void (*draw)(const struct bContext *C, struct ARegion *ar);
132         /* contextual changes should be handled here */
133         void (*listener)(struct bScreen *sc, struct ScrArea *sa, struct ARegion *ar, struct wmNotifier *wmn);
134
135         void (*free)(struct ARegion *ar);
136
137         /* split region, copy data optionally */
138         void *(*duplicate)(void *poin);
139
140
141         /* register operator types on startup */
142         void (*operatortypes)(void);
143         /* add own items to keymap */
144         void (*keymap)(struct wmKeyConfig *keyconf);
145         /* allows default cursor per region */
146         void (*cursor)(struct wmWindow *win, struct ScrArea *sa, struct ARegion *ar);
147
148         /* return context data */
149         int (*context)(const struct bContext *C, const char *member, struct bContextDataResult *result);
150
151         /* custom drawing callbacks */
152         ListBase drawcalls;
153
154         /* panels type definitions */
155         ListBase paneltypes;
156
157         /* header type definitions */
158         ListBase headertypes;
159
160         /* hardcoded constraints, smaller than these values region is not visible */
161         int minsizex, minsizey;
162         /* when new region opens (region prefsizex/y are zero then */
163         int prefsizex, prefsizey;
164         /* default keymaps to add */
165         int keymapflag;
166         /* return without drawing. lock is set by region definition, and copied to do_lock by render. can become flag */
167         short do_lock, lock;
168         /* call cursor function on each move event */
169         short event_cursor;
170 } ARegionType;
171
172 /* panel types */
173
174 typedef struct PanelType {
175         struct PanelType *next, *prev;
176
177         char idname[BKE_ST_MAXNAME];              /* unique name */
178         char label[BKE_ST_MAXNAME];               /* for panel header */
179         char translation_context[BKE_ST_MAXNAME];
180         char context[BKE_ST_MAXNAME];             /* for buttons window */
181         char category[BKE_ST_MAXNAME];            /* for category tabs */
182         int space_type;
183         int region_type;
184
185         int flag;
186
187         /* verify if the panel should draw or not */
188         int (*poll)(const struct bContext *C, struct PanelType *pt);
189         /* draw header (optional) */
190         void (*draw_header)(const struct bContext *C, struct Panel *pa);
191         /* draw entirely, view changes should be handled here */
192         void (*draw)(const struct bContext *C, struct Panel *pa);
193
194         /* RNA integration */
195         ExtensionRNA ext;
196 } PanelType;
197
198 /* uilist types */
199
200 /* Draw an item in the uiList */
201 typedef void (*uiListDrawItemFunc)(
202         struct uiList *ui_list, struct bContext *C, struct uiLayout *layout, struct PointerRNA *dataptr,
203         struct PointerRNA *itemptr, int icon, struct PointerRNA *active_dataptr, const char *active_propname,
204         int index, int flt_flag);
205
206 /* Draw the filtering part of an uiList */
207 typedef void (*uiListDrawFilterFunc)(
208         struct uiList *ui_list, struct bContext *C, struct uiLayout *layout);
209
210 /* Filter items of an uiList */
211 typedef void (*uiListFilterItemsFunc)(
212         struct uiList *ui_list, struct bContext *C, struct PointerRNA *, const char *propname);
213
214 typedef struct uiListType {
215         struct uiListType *next, *prev;
216
217         char idname[BKE_ST_MAXNAME];            /* unique name */
218
219         uiListDrawItemFunc draw_item;
220         uiListDrawFilterFunc draw_filter;
221         uiListFilterItemsFunc filter_items;
222
223         /* RNA integration */
224         ExtensionRNA ext;
225 } uiListType;
226
227 /* header types */
228
229 typedef struct HeaderType {
230         struct HeaderType *next, *prev;
231
232         char idname[BKE_ST_MAXNAME];        /* unique name */
233         int space_type;
234
235         /* draw entirely, view changes should be handled here */
236         void (*draw)(const struct bContext *C, struct Header *header);
237
238         /* RNA integration */
239         ExtensionRNA ext;
240 } HeaderType;
241
242 typedef struct Header {
243         struct HeaderType *type;    /* runtime */
244         struct uiLayout *layout;    /* runtime for drawing */
245 } Header;
246
247
248 /* menu types */
249
250 typedef struct MenuType {
251         struct MenuType *next, *prev;
252
253         char idname[BKE_ST_MAXNAME];        /* unique name */
254         char label[BKE_ST_MAXNAME];         /* for button text */
255         char translation_context[BKE_ST_MAXNAME];
256         const char *description;
257
258         /* verify if the menu should draw or not */
259         int (*poll)(const struct bContext *C, struct MenuType *mt);
260         /* draw entirely, view changes should be handled here */
261         void (*draw)(const struct bContext *C, struct Menu *menu);
262
263         /* RNA integration */
264         ExtensionRNA ext;
265 } MenuType;
266
267 typedef struct Menu {
268         struct MenuType *type;      /* runtime */
269         struct uiLayout *layout;    /* runtime for drawing */
270 } Menu;
271
272 /* spacetypes */
273 struct SpaceType *BKE_spacetype_from_id(int spaceid);
274 struct ARegionType *BKE_regiontype_from_id(struct SpaceType *st, int regionid);
275 const struct ListBase *BKE_spacetypes_list(void);
276 void BKE_spacetype_register(struct SpaceType *st);
277 bool BKE_spacetype_exists(int spaceid);
278 void BKE_spacetypes_free(void); /* only for quitting blender */
279
280 /* spacedata */
281 void BKE_spacedata_freelist(ListBase *lb);
282 void BKE_spacedata_copylist(ListBase *lb1, ListBase *lb2);
283 void BKE_spacedata_draw_locks(int set);
284
285 void BKE_spacedata_callback_id_remap_set(
286         void (*func)(struct ScrArea *sa, struct SpaceLink *sl, struct ID *old_id, struct ID *new_id));
287 void BKE_spacedata_id_unref(struct ScrArea *sa, struct SpaceLink *sl, struct ID *id);
288
289 /* area/regions */
290 struct ARegion *BKE_area_region_copy(struct SpaceType *st, struct ARegion *ar);
291 void            BKE_area_region_free(struct SpaceType *st, struct ARegion *ar);
292 void            BKE_screen_area_free(struct ScrArea *sa);
293
294 struct ARegion *BKE_area_find_region_type(struct ScrArea *sa, int type);
295 struct ARegion *BKE_area_find_region_active_win(struct ScrArea *sa);
296 struct ARegion *BKE_area_find_region_xy(struct ScrArea *sa, const int regiontype, int x, int y);
297 struct ScrArea *BKE_screen_find_area_from_space(struct bScreen *sc, struct SpaceLink *sl) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1, 2);
298 struct ScrArea *BKE_screen_find_big_area(struct bScreen *sc, const int spacetype, const short min);
299 struct ScrArea *BKE_screen_find_area_xy(struct bScreen *sc, const int spacetype, int x, int y);
300
301 unsigned int BKE_screen_view3d_layer_active_ex(
302         const struct View3D *v3d, const struct Scene *scene, bool use_localvd) ATTR_NONNULL(2);
303 unsigned int BKE_screen_view3d_layer_active(
304         const struct View3D *v3d, const struct Scene *scene) ATTR_NONNULL(2);
305
306 unsigned int BKE_screen_view3d_layer_all(const struct bScreen *sc) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1);
307
308 void BKE_screen_view3d_sync(struct View3D *v3d, struct Scene *scene);
309 void BKE_screen_view3d_scene_sync(struct bScreen *sc);
310 void BKE_screen_view3d_main_sync(ListBase *screen_lb, struct Scene *scene);
311 void BKE_screen_view3d_twmode_remove(struct View3D *v3d, const int i);
312 void BKE_screen_view3d_main_twmode_remove(ListBase *screen_lb, struct Scene *scene, const int i);
313 void BKE_screen_gpu_fx_validate(struct GPUFXSettings *fx_settings);
314
315 /* zoom factor conversion */
316 float BKE_screen_view3d_zoom_to_fac(float camzoom);
317 float BKE_screen_view3d_zoom_from_fac(float zoomfac);
318
319 /* screen */
320 void BKE_screen_free(struct bScreen *sc);
321 unsigned int BKE_screen_visible_layers(struct bScreen *screen, struct Scene *scene);
322
323 #endif  /* __BKE_SCREEN_H__ */