New particle collisions 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19  *
20  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
21  * All rights reserved.
22  *
23  * Contributor(s): Blender Foundation
24  *
25  * ***** END GPL LICENSE BLOCK *****
26  */
27 #ifndef DNA_SCREEN_TYPES_H
28 #define DNA_SCREEN_TYPES_H
29
30 /** \file DNA_screen_types.h
31  *  \ingroup DNA
32  */
33
34 #include "DNA_listBase.h"
35 #include "DNA_view2d_types.h"
36 #include "DNA_vec_types.h"
37
38 #include "DNA_ID.h"
39
40 struct SpaceType;
41 struct SpaceLink;
42 struct ARegion;
43 struct ARegionType;
44 struct PanelType;
45 struct HeaderType;
46 struct Scene;
47 struct uiLayout;
48 struct wmTimer;
49
50 typedef struct bScreen {
51         ID id;
52         
53         ListBase vertbase;                                      /* screens have vertices/edges to define areas */
54         ListBase edgebase;
55         ListBase areabase;
56         ListBase regionbase;                            /* screen level regions (menus), runtime only */
57         
58         struct Scene *scene;
59         struct Scene *newscene;                         /* temporary when switching */
60         
61         int redraws_flag;                                       /* user-setting for which editors get redrawn during anim playback (used to be time->redraws) */
62         int pad1;
63         
64         short full;                                                     /* temp screen for image render display or fileselect */
65         short temp;                                                     /* temp screen in a temp window, don't save (like user prefs) */
66         short winid;                                            /* winid from WM, starts with 1 */
67         short do_draw;                                          /* notifier for drawing edges */
68         short do_refresh;                                       /* notifier for scale screen, changed screen, etc */
69         short do_draw_gesture;                          /* notifier for gesture draw. */
70         short do_draw_paintcursor;                      /* notifier for paint cursor draw. */
71         short do_draw_drag;                                     /* notifier for dragging draw. */
72         short swap;                                                     /* indicator to survive swap-exchange systems */
73         
74         short mainwin;                                          /* screensize subwindow, for screenedges and global menus */
75         short subwinactive;                                     /* active subwindow */
76         
77         short pad;
78         
79         struct wmTimer *animtimer;                      /* if set, screen has timer handler added in window */
80         void *context;                                          /* context callback */
81         
82         short handler[8];                                       /* similar to space handler */
83 } bScreen;
84
85 typedef struct ScrVert {
86         struct ScrVert *next, *prev, *newv;
87         vec2s vec;
88         int flag;
89 } ScrVert;
90
91 typedef struct ScrEdge {
92         struct ScrEdge *next, *prev;
93         ScrVert *v1, *v2;
94         short border;                   /* 1 when at edge of screen */
95         short flag;
96         int pad;
97 } ScrEdge;
98
99 typedef struct Panel {          /* the part from uiBlock that needs saved in file */
100         struct Panel *next, *prev;
101
102         struct PanelType *type;                 /* runtime */
103         struct uiLayout *layout;                /* runtime for drawing */
104
105         char panelname[64], tabname[64];        /* defined as UI_MAX_NAME_STR */
106         char drawname[64];                                      /* panelname is identifier for restoring location */
107         short ofsx, ofsy, sizex, sizey;
108         short labelofs, pad;
109         short flag, runtime_flag;
110         short control;
111         short snap;
112         int sortorder;                  /* panels are aligned according to increasing sortorder */
113         struct Panel *paneltab;         /* this panel is tabbed in *paneltab */
114         void *activedata;                       /* runtime for panel manipulation */
115
116         int list_scroll, list_size;
117         int list_last_len, list_grip_size;
118         char list_search[64];
119 } Panel;
120
121 typedef struct ScrArea {
122         struct ScrArea *next, *prev;
123         
124         ScrVert *v1, *v2, *v3, *v4;
125         bScreen *full;                  /* if area==full, this is the parent */
126
127         rcti totrct;                    /* rect bound by v1 v2 v3 v4 */
128
129         char spacetype, butspacetype;   /* SPACE_..., butspacetype is button arg  */
130         short winx, winy;                               /* size */
131         
132         short headertype;                               /* OLD! 0=no header, 1= down, 2= up */
133         short pad;
134         short do_refresh;                               /* private, for spacetype refresh callback */
135         short cursor, flag;
136         
137         struct SpaceType *type;         /* callbacks for this space type */
138         
139         ListBase spacedata;             /* SpaceLink */
140         ListBase regionbase;    /* ARegion */
141         ListBase handlers;              /* wmEventHandler */
142         
143         ListBase actionzones;   /* AZone */
144 } ScrArea;
145
146 typedef struct ARegion {
147         struct ARegion *next, *prev;
148         
149         View2D v2d;                                     /* 2D-View scrolling/zoom info (most regions are 2d anyways) */
150         rcti winrct;                            /* coordinates of region */
151         rcti drawrct;                           /* runtime for partial redraw, same or smaller than winrct */
152         short winx, winy;                       /* size */
153         
154         short swinid;
155         short regiontype;                       /* window, header, etc. identifier for drawing */
156         short alignment;                        /* how it should split */
157         short flag;                                     /* hide, ... */
158         
159         float fsize;                            /* current split size in float (unused) */
160         short sizex, sizey;                     /* current split size in pixels (if zero it uses regiontype) */
161         
162         short do_draw;                          /* private, cached notifier events */
163         short do_draw_overlay;          /* private, cached notifier events */
164         short swap;                                     /* private, indicator to survive swap-exchange */
165         short pad[3];
166         
167         struct ARegionType *type;       /* callbacks for this region type */
168         
169         ListBase uiblocks;                      /* uiBlock */
170         ListBase panels;                        /* Panel */
171         ListBase handlers;                      /* wmEventHandler */
172         
173         char *headerstr;                        /* use this string to draw info */
174         void *regiondata;                       /* XXX 2.50, need spacedata equivalent? */
175 } ARegion;
176
177 /* swap */
178 #define WIN_BACK_OK             1
179 #define WIN_FRONT_OK    2
180 #define WIN_EQUAL               3
181
182 /* area->flag */
183 #define HEADER_NO_PULLDOWN              1
184 #define AREA_FLAG_DRAWJOINTO    2
185 #define AREA_FLAG_DRAWJOINFROM  4
186 #define AREA_TEMP_INFO                  8
187 #define AREA_FLAG_DRAWSPLIT_H   16
188 #define AREA_FLAG_DRAWSPLIT_V   32
189
190 /* If you change EDGEWIDTH, also do the global arrat edcol[]  */
191 #define EDGEWIDTH       1
192 #define AREAGRID        4
193 #define AREAMINX        32
194 #define HEADERY         26
195 #define AREAMINY        (HEADERY+EDGEWIDTH)
196
197 #define HEADERDOWN      1
198 #define HEADERTOP       2
199
200 /* screen->full */
201 #define SCREENNORMAL    0
202 #define SCREENFULL              1
203 #define SCREENFULLTEMP  2
204
205
206 /* Panel->snap - for snapping to screen edges */
207 #define PNL_SNAP_NONE           0
208 /* #define PNL_SNAP_TOP         1 */
209 /* #define PNL_SNAP_RIGHT               2 */
210 #define PNL_SNAP_BOTTOM         4
211 /* #define PNL_SNAP_LEFT                8 */
212
213 /* #define PNL_SNAP_DIST                9.0 */
214
215 /* paneltype flag */
216 #define PNL_DEFAULT_CLOSED              1
217 #define PNL_NO_HEADER                   2
218
219 /* screen handlers */
220 #define SCREEN_MAXHANDLER               8
221
222 #define SCREEN_HANDLER_ANIM             1
223 #define SCREEN_HANDLER_PYTHON   2
224 #define SCREEN_HANDLER_VERSE    3
225
226 /* regiontype, first two are the default set */
227 /* Do NOT change order, append on end. Types are hardcoded needed */
228 enum {
229         RGN_TYPE_WINDOW = 0,
230         RGN_TYPE_HEADER,
231         RGN_TYPE_CHANNELS,
232         RGN_TYPE_TEMPORARY,
233         RGN_TYPE_UI,
234         RGN_TYPE_TOOLS,
235         RGN_TYPE_TOOL_PROPS,
236         RGN_TYPE_PREVIEW
237 };
238
239 /* region alignment */
240 #define RGN_ALIGN_NONE          0
241 #define RGN_ALIGN_TOP           1
242 #define RGN_ALIGN_BOTTOM        2
243 #define RGN_ALIGN_LEFT          3
244 #define RGN_ALIGN_RIGHT         4
245 #define RGN_ALIGN_HSPLIT        5
246 #define RGN_ALIGN_VSPLIT        6
247 #define RGN_ALIGN_FLOAT         7
248 #define RGN_ALIGN_QSPLIT        8
249 #define RGN_OVERLAP_TOP         9
250 #define RGN_OVERLAP_BOTTOM      10
251 #define RGN_OVERLAP_LEFT        11
252 #define RGN_OVERLAP_RIGHT       12
253
254 #define RGN_SPLIT_PREV          32
255
256 /* region flag */
257 #define RGN_FLAG_HIDDEN         1
258 #define RGN_FLAG_TOO_SMALL      2
259
260 /* region do_draw */
261 #define RGN_DRAW                        1
262 #define RGN_DRAW_PARTIAL        2
263
264 #endif
265