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