FBX exporter conversion almost done.
[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., 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 uiLayout;
48 struct uiMenuItem;
49 struct StructRNA;
50 struct PointerRNA;
51 struct FunctionRNA;
52 struct ParameterList;
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  32
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 wmWindowManager *);
87
88         /* return context data */
89         int                     (*context)(const struct bContext *, const char*, struct bContextDataResult *);
90
91         /* region type definitions */
92         ListBase        regiontypes;
93         
94         /* tool shelf definitions */
95         ListBase toolshelf;
96         
97         /* read and write... */
98         
99         /* default keymaps to add */
100         int                     keymapflag;
101         
102 } SpaceType;
103
104 /* region types are also defined using spacetypes_init, via a callback */
105
106 typedef struct ARegionType {
107         struct ARegionType *next, *prev;
108         
109         int                     regionid;       /* unique identifier within this space */
110         
111         /* add handlers, stuff you only do once or on area/region type/size changes */
112         void            (*init)(struct wmWindowManager *, struct ARegion *);
113         /* draw entirely, view changes should be handled here */
114         void            (*draw)(const struct bContext *, struct ARegion *);     
115         /* contextual changes should be handled here */
116         void            (*listener)(struct ARegion *, struct wmNotifier *);
117         
118         void            (*free)(struct ARegion *);
119
120         /* split region, copy data optionally */
121         void            *(*duplicate)(void *);
122
123         
124         /* register operator types on startup */
125         void            (*operatortypes)(void);
126         /* add own items to keymap */
127         void            (*keymap)(struct wmWindowManager *);
128         /* allows default cursor per region */
129         void            (*cursor)(struct wmWindow *, struct ScrArea *, struct ARegion *ar);
130
131         /* return context data */
132         int                     (*context)(const struct bContext *, const char *, struct bContextDataResult *);
133
134         /* custom drawing callbacks */
135         ListBase        drawcalls;
136
137         /* panels type definitions */
138         ListBase paneltypes;
139
140         /* header type definitions */
141         ListBase headertypes;
142
143         /* menu type definitions */
144         ListBase menutypes;
145         
146         /* hardcoded constraints, smaller than these values region is not visible */
147         int                     minsizex, minsizey;
148         /* default keymaps to add */
149         int                     keymapflag;
150 } ARegionType;
151
152 /* panel types */
153
154 typedef struct PanelType {
155         struct PanelType *next, *prev;
156         
157         char            idname[BKE_ST_MAXNAME];         /* unique name */
158         char            label[BKE_ST_MAXNAME];          /* for panel header */
159         char            context[BKE_ST_MAXNAME];        /* for buttons window */
160         int                     space_type;
161         int                     region_type;
162
163         int             flag;
164
165         /* verify if the panel should draw or not */
166         int                     (*poll)(const struct bContext *, struct PanelType *);
167         /* draw header (optional) */
168         void            (*draw_header)(const struct bContext *, struct Panel *);        
169         /* draw entirely, view changes should be handled here */
170         void            (*draw)(const struct bContext *, struct Panel *);       
171
172         /* python integration */
173         void                            *py_data;
174         struct StructRNA        *py_srna;
175         int                                     (*py_call)(struct PointerRNA *, struct FunctionRNA *, struct ParameterList *);
176         void                            (*py_free)(void *py_data);
177 } PanelType;
178
179 /* header types */
180
181 typedef struct HeaderType {
182         struct HeaderType *next, *prev;
183
184         char            idname[BKE_ST_MAXNAME]; /* unique name */
185         int             space_type;
186
187         /* draw entirely, view changes should be handled here */
188         void            (*draw)(const struct bContext *, struct Header *);      
189
190         /* python integration */
191         void                            *py_data;
192         struct StructRNA        *py_srna;
193         int                                     (*py_call)(struct PointerRNA *, struct FunctionRNA *, struct ParameterList *);
194         void                            (*py_free)(void *py_data);
195 } HeaderType;
196
197 /* menu types */
198
199 typedef struct MenuType {
200         struct MenuType *next, *prev;
201
202         char            idname[BKE_ST_MAXNAME]; /* unique name */
203         char            label[BKE_ST_MAXNAME];  /* for button text */
204         int             space_type;
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         /* python integration */
212         void                            *py_data;
213         struct StructRNA        *py_srna;
214         int                                     (*py_call)(struct PointerRNA *, struct FunctionRNA *, struct ParameterList *);
215         void                            (*py_free)(void *py_data);
216 } MenuType;
217
218 /* spacetypes */
219 struct SpaceType *BKE_spacetype_from_id(int spaceid);
220 struct ARegionType *BKE_regiontype_from_id(struct SpaceType *st, int regionid);
221 const struct ListBase *BKE_spacetypes_list(void);
222 void BKE_spacetype_register(struct SpaceType *st);
223 void BKE_spacetypes_free(void); /* only for quitting blender */
224
225 /* spacedata */
226 void BKE_spacedata_freelist(ListBase *lb);
227 void BKE_spacedata_copylist(ListBase *lb1, ListBase *lb2);
228 void BKE_spacedata_copyfirst(ListBase *lb1, ListBase *lb2);
229
230 /* area/regions */
231 struct ARegion *BKE_area_region_copy(struct SpaceType *st, struct ARegion *ar);
232 void    BKE_area_region_free(struct SpaceType *st, struct ARegion *ar);
233
234 void BKE_screen_area_free(struct ScrArea *sa);
235
236 void free_screen(struct bScreen *sc); 
237
238
239 #endif
240