60072ec2553ac0eea38f06d2e9e7316a28fb29e4
[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 ARegion *, struct wmNotifier *);
67         
68         /* after a spacedata copy, an init should result in exact same situation */
69         struct SpaceLink        *(*duplicate)(struct SpaceLink *);
70
71         /* register operator types on startup */
72         void            (*operatortypes)(void);
73         /* add default items to WM keymap */
74         void            (*keymap)(struct wmWindowManager *);
75         /* sets default cursor per region */
76         void            (*cursor)(struct wmWindow *win, struct ARegion *ar);
77
78         /* return context data */
79         int                     (*context)(const struct bContext *, const void *, struct bContextDataResult *);
80
81         /* region type definitions */
82         ListBase        regiontypes;
83         
84         /* read and write... */
85         
86         /* default keymaps to add */
87         int                     keymapflag;
88         
89 } SpaceType;
90
91 /* region types are also defined using spacetypes_init, via a callback */
92
93 typedef struct ARegionType {
94         struct ARegionType *next, *prev;
95         
96         int                     regionid;       /* unique identifier within this space */
97         
98         /* add handlers, stuff you only do once or on area/region type/size changes */
99         void            (*init)(struct wmWindowManager *, struct ARegion *);
100         /* draw entirely, view changes should be handled here */
101         void            (*draw)(const struct bContext *, struct ARegion *);     
102         /* contextual changes should be handled here */
103         void            (*listener)(struct ARegion *, struct wmNotifier *);
104         
105         void            (*free)(struct ARegion *);
106
107         /* register operator types on startup */
108         void            (*operatortypes)(void);
109         /* add own items to keymap */
110         void            (*keymap)(struct wmWindowManager *);
111         
112         /* return context data */
113         int                     (*context)(const struct bContext *, const void *, struct bContextDataResult *);
114
115         /* hardcoded constraints, smaller than these values region is not visible */
116         int                     minsizex, minsizey;
117         /* default keymaps to add */
118         int                     keymapflag;
119 } ARegionType;
120
121
122 /* spacetypes */
123 struct SpaceType *BKE_spacetype_from_id(int spaceid);
124 const struct ListBase *BKE_spacetypes_list(void);
125 void BKE_spacetype_register(struct SpaceType *st);
126 void BKE_spacetypes_free(void); /* only for quitting blender */
127
128 /* spacedata */
129 void BKE_spacedata_freelist(ListBase *lb);
130 void BKE_spacedata_copylist(ListBase *lb1, ListBase *lb2);
131
132 /* area/regions */
133 struct ARegion *BKE_area_region_copy(struct ARegion *ar);
134 void    BKE_area_region_free(struct ARegion *ar);
135
136 void BKE_screen_area_free(struct ScrArea *sa);
137
138 void free_screen(struct bScreen *sc); 
139
140
141 #endif
142