fix potential crasher: malloc->calloc
[blender.git] / source / blender / blenkernel / BKE_screen.h
1 /**
2  * blenlib/BKE_screen.h (mar-2001 nzc)
3  *      
4  * $Id$ 
5  *
6  * ***** BEGIN GPL LICENSE BLOCK *****
7  *
8  * This program is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU General Public License
10  * as published by the Free Software Foundation; either version 2
11  * of the License, or (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software Foundation,
20  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
21  *
22  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
23  * All rights reserved.
24  *
25  * The Original Code is: all of this file.
26  *
27  * Contributor(s): none yet.
28  *
29  * ***** END GPL LICENSE BLOCK *****
30  */
31 #ifndef BKE_SCREEN_H
32 #define BKE_SCREEN_H
33
34 struct ARegion;
35 struct bContext;
36 struct bContextDataResult;
37 struct bScreen;
38 struct ListBase;
39 struct Panel;
40 struct Header;
41 struct Menu;
42 struct ScrArea;
43 struct SpaceType;
44 struct Scene;
45 struct wmNotifier;
46 struct wmWindow;
47 struct wmWindowManager;
48 struct wmKeyConfig;
49 struct uiLayout;
50 struct uiMenuItem;
51
52 #include "RNA_types.h"
53
54 /* spacetype has everything stored to get an editor working, it gets initialized via 
55    ED_spacetypes_init() in editors/area/spacetypes.c   */
56 /* an editor in Blender is a combined ScrArea + SpaceType + SpaceData */
57
58 #define BKE_ST_MAXNAME  64
59
60 typedef struct SpaceType {
61         struct SpaceType *next, *prev;
62         
63         char                    name[BKE_ST_MAXNAME];           /* for menus */
64         int                             spaceid;                                        /* unique space identifier */
65         int                             iconid;                                         /* icon lookup for menus */
66         
67         /* initial allocation, after this WM will call init() too */
68         struct SpaceLink        *(*new)(const struct bContext *C);
69         /* not free spacelink itself */
70         void            (*free)(struct SpaceLink *);
71         
72         /* init is to cope with file load, screen (size) changes, check handlers */
73         void            (*init)(struct wmWindowManager *, struct ScrArea *);
74         /* Listeners can react to bContext changes */
75         void            (*listener)(struct ScrArea *, struct wmNotifier *);
76         
77         /* refresh context, called after filereads, ED_area_tag_refresh() */
78         void            (*refresh)(const struct bContext *, struct ScrArea *);
79         
80         /* after a spacedata copy, an init should result in exact same situation */
81         struct SpaceLink        *(*duplicate)(struct SpaceLink *);
82
83         /* register operator types on startup */
84         void            (*operatortypes)(void);
85         /* add default items to WM keymap */
86         void            (*keymap)(struct wmKeyConfig *);
87         /* on startup, define dropboxes for spacetype+regions */
88         void            (*dropboxes)(void);
89
90         /* return context data */
91         int                     (*context)(const struct bContext *, const char*, struct bContextDataResult *);
92
93         /* region type definitions */
94         ListBase        regiontypes;
95         
96         /* tool shelf definitions */
97         ListBase toolshelf;
98                 
99         /* read and write... */
100         
101         /* default keymaps to add */
102         int                     keymapflag;
103         
104 } SpaceType;
105
106 /* region types are also defined using spacetypes_init, via a callback */
107
108 typedef struct ARegionType {
109         struct ARegionType *next, *prev;
110         
111         int                     regionid;       /* unique identifier within this space */
112         
113         /* add handlers, stuff you only do once or on area/region type/size changes */
114         void            (*init)(struct wmWindowManager *, struct ARegion *);
115         /* draw entirely, view changes should be handled here */
116         void            (*draw)(const struct bContext *, struct ARegion *);     
117         /* contextual changes should be handled here */
118         void            (*listener)(struct ARegion *, struct wmNotifier *);
119         
120         void            (*free)(struct ARegion *);
121
122         /* split region, copy data optionally */
123         void            *(*duplicate)(void *);
124
125         
126         /* register operator types on startup */
127         void            (*operatortypes)(void);
128         /* add own items to keymap */
129         void            (*keymap)(struct wmKeyConfig *);
130         /* allows default cursor per region */
131         void            (*cursor)(struct wmWindow *, struct ScrArea *, struct ARegion *ar);
132
133         /* return context data */
134         int                     (*context)(const struct bContext *, const char *, struct bContextDataResult *);
135
136         /* custom drawing callbacks */
137         ListBase        drawcalls;
138
139         /* panels type definitions */
140         ListBase paneltypes;
141
142         /* header type definitions */
143         ListBase headertypes;
144         
145         /* hardcoded constraints, smaller than these values region is not visible */
146         int                     minsizex, minsizey;
147         /* when new region opens (region prefsizex/y are zero then */
148         int                     prefsizex, prefsizey;
149         /* default keymaps to add */
150         int                     keymapflag;
151 } ARegionType;
152
153 /* panel types */
154
155 typedef struct PanelType {
156         struct PanelType *next, *prev;
157         
158         char            idname[BKE_ST_MAXNAME];         /* unique name */
159         char            label[BKE_ST_MAXNAME];          /* for panel header */
160         char            context[BKE_ST_MAXNAME];        /* for buttons window */
161         int                     space_type;
162         int                     region_type;
163
164         int             flag;
165
166         /* verify if the panel should draw or not */
167         int                     (*poll)(const struct bContext *, struct PanelType *);
168         /* draw header (optional) */
169         void            (*draw_header)(const struct bContext *, struct Panel *);        
170         /* draw entirely, view changes should be handled here */
171         void            (*draw)(const struct bContext *, struct Panel *);       
172
173         /* RNA integration */
174         ExtensionRNA ext;
175 } PanelType;
176
177 /* header types */
178
179 typedef struct HeaderType {
180         struct HeaderType *next, *prev;
181
182         char            idname[BKE_ST_MAXNAME]; /* unique name */
183         int             space_type;
184
185         /* draw entirely, view changes should be handled here */
186         void            (*draw)(const struct bContext *, struct Header *);      
187
188         /* RNA integration */
189         ExtensionRNA ext;
190 } HeaderType;
191
192 typedef struct Header {
193         struct HeaderType *type;        /* runtime */
194         struct uiLayout *layout;        /* runtime for drawing */
195 } Header;
196
197
198 /* menu types */
199
200 typedef struct MenuType {
201         struct MenuType *next, *prev;
202
203         char            idname[BKE_ST_MAXNAME]; /* unique name */
204         char            label[BKE_ST_MAXNAME];  /* for button text */
205
206         /* verify if the menu should draw or not */
207         int                     (*poll)(const struct bContext *, struct MenuType *);
208         /* draw entirely, view changes should be handled here */
209         void            (*draw)(const struct bContext *, struct Menu *);        
210
211         /* RNA integration */
212         ExtensionRNA ext;
213 } MenuType;
214
215 typedef struct Menu {
216         struct MenuType *type;          /* runtime */
217         struct uiLayout *layout;        /* runtime for drawing */
218 } Menu;
219
220 /* spacetypes */
221 struct SpaceType *BKE_spacetype_from_id(int spaceid);
222 struct ARegionType *BKE_regiontype_from_id(struct SpaceType *st, int regionid);
223 const struct ListBase *BKE_spacetypes_list(void);
224 void BKE_spacetype_register(struct SpaceType *st);
225 void BKE_spacetypes_free(void); /* only for quitting blender */
226
227 /* spacedata */
228 void BKE_spacedata_freelist(ListBase *lb);
229 void BKE_spacedata_copylist(ListBase *lb1, ListBase *lb2);
230
231 /* area/regions */
232 struct ARegion *BKE_area_region_copy(struct SpaceType *st, struct ARegion *ar);
233 void    BKE_area_region_free(struct SpaceType *st, struct ARegion *ar);
234 void    BKE_screen_area_free(struct ScrArea *sa);
235
236 struct ARegion *BKE_area_find_region_type(struct ScrArea *sa, int type);
237
238 void BKE_screen_view3d_sync(struct View3D *v3d, struct Scene *scene);
239 void BKE_screen_view3d_scene_sync(struct bScreen *sc);
240 void BKE_screen_view3d_main_sync(ListBase *screen_lb, struct Scene *scene);
241
242
243 /* screen */
244 void free_screen(struct bScreen *sc); 
245 unsigned int BKE_screen_visible_layers(struct bScreen *screen, struct Scene *scene);
246
247 #endif
248