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