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