Various changes made in the process of working on the UI code:
[blender.git] / source / blender / makesdna / DNA_screen_types.h
1 /**
2  * $Id$ 
3  *
4  * ***** BEGIN GPL LICENSE BLOCK *****
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version. 
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software Foundation,
18  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
19  *
20  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
21  * All rights reserved.
22  *
23  * 
24  * Contributor(s): Blender Foundation
25  *
26  * ***** END GPL LICENSE BLOCK *****
27  */
28 #ifndef DNA_SCREEN_TYPES_H
29 #define DNA_SCREEN_TYPES_H
30
31 #include "DNA_listBase.h"
32 #include "DNA_vec_types.h"
33
34 #include "DNA_ID.h"
35 #include "DNA_scriptlink_types.h"
36
37 struct Scene;
38 struct SpaceType;
39 struct SpaceLink;
40 struct ARegionType;
41 struct bContext;
42 struct wmNotifier;
43 struct wmWindowManager;
44                 
45
46 typedef struct bScreen {
47         ID id;
48         
49         ListBase vertbase, edgebase;
50         ListBase areabase;
51         ListBase regionbase;                            /* screen level regions, runtime only */
52         struct Scene *scene;
53         
54         short scenenr, screennr;                        /* only for pupmenu */
55         
56         short full, winid;                                      /* winid from WM, starts with 1 */
57         short do_draw;                                          /* notifier for drawing edges */
58         short do_refresh;                                       /* notifier for scale screen, changed screen, etc */
59         short do_gesture;                                       /* notifier for gesture draw. */
60         short pad[3];
61         
62         short mainwin;                                          /* screensize subwindow, for screenedges and global menus */
63         short subwinactive;                                     /* active subwindow */
64         
65         short handler[8];                                       /* similar to space handler */
66 } bScreen;
67
68 typedef struct ScrVert {
69         struct ScrVert *next, *prev, *newv;
70         vec2s vec;
71         int flag;
72 } ScrVert;
73
74 typedef struct ScrEdge {
75         struct ScrEdge *next, *prev;
76         ScrVert *v1, *v2;
77         short border;                   /* 1 when at edge of screen */
78         short flag;
79         int pad;
80 } ScrEdge;
81
82 #ifndef DNA_USHORT_FIX
83 #define DNA_USHORT_FIX
84 /**
85  * @deprecated This typedef serves to avoid badly typed functions when
86  * @deprecated compiling while delivering a proper dna.c. Do not use
87  * @deprecated it in any case.
88  */
89 typedef unsigned short dna_ushort_fix;
90 #endif
91
92
93
94 typedef struct Panel {          /* the part from uiBlock that needs saved in file */
95         struct Panel *next, *prev;
96
97         char panelname[64], tabname[64];        /* defined as UI_MAX_NAME_STR */
98         char drawname[64];                                      /* panelname is identifier for restoring location */
99         short ofsx, ofsy, sizex, sizey;
100         short flag, active;                                     /* active= used currently by a uiBlock */
101         short control;
102         short snap;
103         short old_ofsx, old_ofsy;               /* for stow */
104         int sortcounter;                        /* when sorting panels, it uses this to put new ones in right place */
105         struct Panel *paneltab;         /* this panel is tabbed in *paneltab */
106 } Panel;
107
108 typedef struct ScrArea {
109         struct ScrArea *next, *prev;
110         
111         ScrVert *v1, *v2, *v3, *v4;
112         bScreen *full;                  /* if area==full, this is the parent */
113
114         rcti totrct;                    /* rect bound by v1 v2 v3 v4 */
115
116         char spacetype, butspacetype;   /* SPACE_..., butspacetype is button arg  */
117         short winx, winy;                               /* size */
118         
119         short headertype;                               /* OLD! 0=no header, 1= down, 2= up */
120         short headbutlen, headbutofs;   /* OLD! */
121         short cursor, flag;
122
123         ScriptLink scriptlink;
124         
125         struct SpaceType *type;         /* callbacks for this space type */
126         
127         ListBase spacedata;
128         ListBase uiblocks;
129         ListBase panels;
130         ListBase regionbase;    /* ARegion */
131         ListBase handlers;              /* wmEventHandler */
132         ListBase modalops;              /* wmOperator */
133         
134         ListBase actionzones;   /* AZone */
135 } ScrArea;
136
137 typedef struct ARegion {
138         struct ARegion *next, *prev;
139         
140         rcti winrct;
141         short swinid;
142         short regiontype;                       /* window, header, etc. identifier for drawing */
143         short alignment;                        /* how it should split */
144         short size;                                     /* current split size in pixels */
145         short minsize;                          /* set by spacedata's region init */
146         short flag;                                     /* hide, ... */
147         
148         float fsize;                            /* current split size in float */
149         
150         int pad;
151         short do_draw, do_refresh;      /* cached notifier events */
152         
153         struct ARegionType *type;       /* callbacks for this region type */
154         
155         ListBase uiblocks;
156         ListBase handlers;                      /* wmEventHandler */
157         ListBase modalops;                      /* wmOperator */
158         
159         void *regiondata;                       /* XXX 2.50, need spacedata equivalent? */
160 } ARegion;
161
162 /* area->flag */
163 #define HEADER_NO_PULLDOWN      1
164 #define AREA_FLAG_DRAWJOINTO 2
165 #define AREA_FLAG_DRAWJOINFROM 4
166
167 /* If you change EDGEWIDTH, also do the global arrat edcol[]  */
168 #define EDGEWIDTH       1
169 #define AREAGRID        4
170 #define AREAMINX        32
171 #define HEADERY         26
172 #define AREAMINY        (HEADERY+EDGEWIDTH)
173
174 #define HEADERDOWN      1
175 #define HEADERTOP       2
176
177 #define SCREENNORMAL    0
178 #define SCREENFULL      1
179 #define SCREENAUTOPLAY  2
180
181 /* sa->win_swap */
182 #define WIN_FRONT_OK    1
183 #define WIN_BACK_OK             2
184 #define WIN_EQUAL               3
185
186 #define L_SCROLL 1                      /* left scrollbar */
187 #define R_SCROLL 2
188 #define VERT_SCROLL 3
189 #define T_SCROLL 4
190 #define B_SCROLL 8
191 #define HOR_SCROLL  12
192 #define B_SCROLLO   16          /* special hack for outliner hscroll - prevent hanging */
193 #define HOR_SCROLLO 20          /*        in older versions of blender                       */
194
195 /* Panel->snap - for snapping to screen edges */
196 #define PNL_SNAP_NONE           0
197 #define PNL_SNAP_TOP            1
198 #define PNL_SNAP_RIGHT          2
199 #define PNL_SNAP_BOTTOM 4
200 #define PNL_SNAP_LEFT           8
201
202 #define PNL_SNAP_DIST           9.0
203
204 /* screen handlers */
205 #define SCREEN_MAXHANDLER               8
206
207 #define SCREEN_HANDLER_ANIM             1
208 #define SCREEN_HANDLER_PYTHON   2
209 #define SCREEN_HANDLER_VERSE    3
210
211 /* regiontype, first two are the default set */
212 #define RGN_TYPE_WINDOW         0
213 #define RGN_TYPE_HEADER         1
214 #define RGN_TYPE_TEMPORARY      2
215
216 /* region alignment */
217 #define RGN_ALIGN_NONE          0
218 #define RGN_ALIGN_TOP           1
219 #define RGN_ALIGN_BOTTOM        2
220 #define RGN_ALIGN_LEFT          3
221 #define RGN_ALIGN_RIGHT         4
222 #define RGN_ALIGN_HSPLIT        5
223 #define RGN_ALIGN_VSPLIT        6
224 #define RGN_ALIGN_FLOAT         7
225
226 /* region flag */
227 #define RGN_FLAG_HIDDEN         1
228 #define RGN_FLAG_TOO_SMALL      2
229
230 #endif
231