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