7c62c8c6dd459f6314e3ade59796095f71299591
[blender-staging.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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, 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 wmNotifier;
45 struct wmWindow;
46 struct wmWindowManager;
47 struct wmKeyConfig;
48 struct uiLayout;
49 struct uiMenuItem;
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/area/spacetypes.c   */
55 /* an editor in Blender is a combined ScrArea + SpaceType + SpaceData */
56
57 #define BKE_ST_MAXNAME  32
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 *);
70         
71         /* init is to cope with file load, screen (size) changes, check handlers */
72         void            (*init)(struct wmWindowManager *, struct ScrArea *);
73         /* Listeners can react to bContext changes */
74         void            (*listener)(struct ScrArea *, struct wmNotifier *);
75         
76         /* refresh context, called after filereads, ED_area_tag_refresh() */
77         void            (*refresh)(const struct bContext *, struct ScrArea *);
78         
79         /* after a spacedata copy, an init should result in exact same situation */
80         struct SpaceLink        *(*duplicate)(struct SpaceLink *);
81
82         /* register operator types on startup */
83         void            (*operatortypes)(void);
84         /* add default items to WM keymap */
85         void            (*keymap)(struct wmKeyConfig *);
86
87         /* return context data */
88         int                     (*context)(const struct bContext *, const char*, struct bContextDataResult *);
89
90         /* region type definitions */
91         ListBase        regiontypes;
92         
93         /* tool shelf definitions */
94         ListBase toolshelf;
95         
96         /* read and write... */
97         
98         /* default keymaps to add */
99         int                     keymapflag;
100         
101 } SpaceType;
102
103 /* region types are also defined using spacetypes_init, via a callback */
104
105 typedef struct ARegionType {
106         struct ARegionType *next, *prev;
107         
108         int                     regionid;       /* unique identifier within this space */
109         
110         /* add handlers, stuff you only do once or on area/region type/size changes */
111         void            (*init)(struct wmWindowManager *, struct ARegion *);
112         /* draw entirely, view changes should be handled here */
113         void            (*draw)(const struct bContext *, struct ARegion *);     
114         /* contextual changes should be handled here */
115         void            (*listener)(struct ARegion *, struct wmNotifier *);
116         
117         void            (*free)(struct ARegion *);
118
119         /* split region, copy data optionally */
120         void            *(*duplicate)(void *);
121
122         
123         /* register operator types on startup */
124         void            (*operatortypes)(void);
125         /* add own items to keymap */
126         void            (*keymap)(struct wmKeyConfig *);
127         /* allows default cursor per region */
128         void            (*cursor)(struct wmWindow *, struct ScrArea *, struct ARegion *ar);
129
130         /* return context data */
131         int                     (*context)(const struct bContext *, const char *, struct bContextDataResult *);
132
133         /* custom drawing callbacks */
134         ListBase        drawcalls;
135
136         /* panels type definitions */
137         ListBase paneltypes;
138
139         /* header type definitions */
140         ListBase headertypes;
141
142         /* menu type definitions */
143         ListBase menutypes;
144         
145         /* hardcoded constraints, smaller than these values region is not visible */
146         int                     minsizex, minsizey;
147         /* default keymaps to add */
148         int                     keymapflag;
149 } ARegionType;
150
151 /* panel types */
152
153 typedef struct PanelType {
154         struct PanelType *next, *prev;
155         
156         char            idname[BKE_ST_MAXNAME];         /* unique name */
157         char            label[BKE_ST_MAXNAME];          /* for panel header */
158         char            context[BKE_ST_MAXNAME];        /* for buttons window */
159         int                     space_type;
160         int                     region_type;
161
162         int             flag;
163
164         /* verify if the panel should draw or not */
165         int                     (*poll)(const struct bContext *, struct PanelType *);
166         /* draw header (optional) */
167         void            (*draw_header)(const struct bContext *, struct Panel *);        
168         /* draw entirely, view changes should be handled here */
169         void            (*draw)(const struct bContext *, struct Panel *);       
170
171         /* RNA integration */
172         ExtensionRNA ext;
173 } PanelType;
174
175 /* header types */
176
177 typedef struct HeaderType {
178         struct HeaderType *next, *prev;
179
180         char            idname[BKE_ST_MAXNAME]; /* unique name */
181         int             space_type;
182
183         /* draw entirely, view changes should be handled here */
184         void            (*draw)(const struct bContext *, struct Header *);      
185
186         /* RNA integration */
187         ExtensionRNA ext;
188 } HeaderType;
189
190 typedef struct Header {
191         struct HeaderType *type;        /* runtime */
192         struct uiLayout *layout;        /* runtime for drawing */
193 } Header;
194
195
196 /* menu types */
197
198 typedef struct MenuType {
199         struct MenuType *next, *prev;
200
201         char            idname[BKE_ST_MAXNAME]; /* unique name */
202         char            label[BKE_ST_MAXNAME];  /* for button text */
203         int             space_type;
204
205         /* verify if the menu should draw or not */
206         int                     (*poll)(const struct bContext *, struct MenuType *);
207         /* draw entirely, view changes should be handled here */
208         void            (*draw)(const struct bContext *, struct Menu *);        
209
210         /* RNA integration */
211         ExtensionRNA ext;
212 } MenuType;
213
214 typedef struct Menu {
215         struct MenuType *type;          /* runtime */
216         struct uiLayout *layout;        /* runtime for drawing */
217 } Menu;
218
219 /* spacetypes */
220 struct SpaceType *BKE_spacetype_from_id(int spaceid);
221 struct ARegionType *BKE_regiontype_from_id(struct SpaceType *st, int regionid);
222 const struct ListBase *BKE_spacetypes_list(void);
223 void BKE_spacetype_register(struct SpaceType *st);
224 void BKE_spacetypes_free(void); /* only for quitting blender */
225
226 MenuType *BKE_spacemenu_find(const char *idname, int spacetype);
227
228 /* spacedata */
229 void BKE_spacedata_freelist(ListBase *lb);
230 void BKE_spacedata_copylist(ListBase *lb1, ListBase *lb2);
231 void BKE_spacedata_copyfirst(ListBase *lb1, ListBase *lb2);
232
233 /* area/regions */
234 struct ARegion *BKE_area_region_copy(struct SpaceType *st, struct ARegion *ar);
235 void    BKE_area_region_free(struct SpaceType *st, struct ARegion *ar);
236 void    BKE_screen_area_free(struct ScrArea *sa);
237
238 /* screen */
239 void free_screen(struct bScreen *sc); 
240 unsigned int BKE_screen_visible_layers(struct bScreen *screen);
241
242 #endif
243