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