ab91612defe7798dd50dd2d3addd452ff657904e
[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 ScrArea;
40 struct SpaceType;
41 struct wmNotifier;
42 struct wmWindow;
43 struct wmWindowManager;
44
45 /* spacetype has everything stored to get an editor working, it gets initialized via 
46    ED_spacetypes_init() in editors/area/spacetypes.c   */
47 /* an editor in Blender is a combined ScrArea + SpaceType + SpaceData */
48
49 #define BKE_ST_MAXNAME  32
50
51 typedef struct SpaceType {
52         struct SpaceType *next, *prev;
53         
54         char                    name[BKE_ST_MAXNAME];           /* for menus */
55         int                             spaceid;                                        /* unique space identifier */
56         int                             iconid;                                         /* icon lookup for menus */
57         
58         /* initial allocation, after this WM will call init() too */
59         struct SpaceLink        *(*new)(const struct bContext *C);
60         /* not free spacelink itself */
61         void            (*free)(struct SpaceLink *);
62         
63         /* init is to cope with file load, screen (size) changes, check handlers */
64         void            (*init)(struct wmWindowManager *, struct ScrArea *);
65         /* Listeners can react to bContext changes */
66         void            (*listener)(struct ScrArea *, struct wmNotifier *);
67         
68         /* refresh context, called after filereads, ED_area_tag_refresh() */
69         void            (*refresh)(const struct bContext *, struct ScrArea *);
70         
71         /* after a spacedata copy, an init should result in exact same situation */
72         struct SpaceLink        *(*duplicate)(struct SpaceLink *);
73
74         /* register operator types on startup */
75         void            (*operatortypes)(void);
76         /* add default items to WM keymap */
77         void            (*keymap)(struct wmWindowManager *);
78         /* sets default cursor per region */
79         void            (*cursor)(struct wmWindow *win, struct ARegion *ar);
80
81         /* return context data */
82         int                     (*context)(const struct bContext *, const void *, struct bContextDataResult *);
83
84         /* region type definitions */
85         ListBase        regiontypes;
86         
87         /* read and write... */
88         
89         /* default keymaps to add */
90         int                     keymapflag;
91         
92 } SpaceType;
93
94 /* region types are also defined using spacetypes_init, via a callback */
95
96 typedef struct ARegionType {
97         struct ARegionType *next, *prev;
98         
99         int                     regionid;       /* unique identifier within this space */
100         
101         /* add handlers, stuff you only do once or on area/region type/size changes */
102         void            (*init)(struct wmWindowManager *, struct ARegion *);
103         /* draw entirely, view changes should be handled here */
104         void            (*draw)(const struct bContext *, struct ARegion *);     
105         /* contextual changes should be handled here */
106         void            (*listener)(struct ARegion *, struct wmNotifier *);
107         
108         void            (*free)(struct ARegion *);
109
110         /* register operator types on startup */
111         void            (*operatortypes)(void);
112         /* add own items to keymap */
113         void            (*keymap)(struct wmWindowManager *);
114         
115         /* return context data */
116         int                     (*context)(const struct bContext *, const void *, struct bContextDataResult *);
117
118         /* hardcoded constraints, smaller than these values region is not visible */
119         int                     minsizex, minsizey;
120         /* default keymaps to add */
121         int                     keymapflag;
122 } ARegionType;
123
124
125 /* spacetypes */
126 struct SpaceType *BKE_spacetype_from_id(int spaceid);
127 const struct ListBase *BKE_spacetypes_list(void);
128 void BKE_spacetype_register(struct SpaceType *st);
129 void BKE_spacetypes_free(void); /* only for quitting blender */
130
131 /* spacedata */
132 void BKE_spacedata_freelist(ListBase *lb);
133 void BKE_spacedata_copylist(ListBase *lb1, ListBase *lb2);
134
135 /* area/regions */
136 struct ARegion *BKE_area_region_copy(struct ARegion *ar);
137 void    BKE_area_region_free(struct ARegion *ar);
138
139 void BKE_screen_area_free(struct ScrArea *sa);
140
141 void free_screen(struct bScreen *sc); 
142
143
144 #endif
145