9d840ad13e8fa3f8dfdf930aa58efa69ebbe3802
[blender-staging.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         /* first one used internally, second one for tools */
86         short flag, editflag;
87 } ScrVert;
88
89 typedef struct ScrEdge {
90         struct ScrEdge *next, *prev;
91         ScrVert *v1, *v2;
92         short border;                   /* 1 when at edge of screen */
93         short flag;
94         int pad;
95 } ScrEdge;
96
97 typedef struct Panel {          /* the part from uiBlock that needs saved in file */
98         struct Panel *next, *prev;
99
100         struct PanelType *type;                 /* runtime */
101         struct uiLayout *layout;                /* runtime for drawing */
102
103         char panelname[64], tabname[64];        /* defined as UI_MAX_NAME_STR */
104         char drawname[64];                                      /* panelname is identifier for restoring location */
105         int ofsx, ofsy, sizex, sizey;
106         short labelofs, pad;
107         short flag, runtime_flag;
108         short control;
109         short snap;
110         int sortorder;                  /* panels are aligned according to increasing sortorder */
111         struct Panel *paneltab;         /* this panel is tabbed in *paneltab */
112         void *activedata;                       /* runtime for panel manipulation */
113 } Panel;
114
115 typedef struct uiList {                         /* some list UI data need to be saved in file */
116         struct uiList *next, *prev;
117
118         struct uiListType *type;                /* runtime */
119         void *padp;
120
121         char list_id[64];                               /* defined as UI_MAX_NAME_STR */
122
123         int layout_type;                                /* How items are layedout in the list */
124         int padi;
125
126         int list_scroll;
127         int list_size;
128         int list_last_len;
129         int list_grip_size;
130 /*      char list_search[64]; */
131 } uiList;
132
133 typedef struct ScrArea {
134         struct ScrArea *next, *prev;
135         
136         ScrVert *v1, *v2, *v3, *v4;             /* ordered (bl, tl, tr, br) */
137         bScreen *full;                  /* if area==full, this is the parent */
138
139         rcti totrct;                    /* rect bound by v1 v2 v3 v4 */
140
141         char spacetype, butspacetype;   /* SPACE_..., butspacetype is button arg  */
142         short winx, winy;                               /* size */
143         
144         short headertype;                               /* OLD! 0=no header, 1= down, 2= up */
145         short do_refresh;                               /* private, for spacetype refresh callback */
146         short flag;
147         short region_active_win;                /* index of last used region of 'RGN_TYPE_WINDOW'
148                                                                          * runtuime variable, updated by executing operators */
149         short pad;
150         
151         struct SpaceType *type;         /* callbacks for this space type */
152         
153         ListBase spacedata;             /* SpaceLink */
154         ListBase regionbase;    /* ARegion */
155         ListBase handlers;              /* wmEventHandler */
156         
157         ListBase actionzones;   /* AZone */
158 } ScrArea;
159
160 typedef struct ARegion {
161         struct ARegion *next, *prev;
162         
163         View2D v2d;                                     /* 2D-View scrolling/zoom info (most regions are 2d anyways) */
164         rcti winrct;                            /* coordinates of region */
165         rcti drawrct;                           /* runtime for partial redraw, same or smaller than winrct */
166         short winx, winy;                       /* size */
167         
168         short swinid;
169         short regiontype;                       /* window, header, etc. identifier for drawing */
170         short alignment;                        /* how it should split */
171         short flag;                                     /* hide, ... */
172         
173         float fsize;                            /* current split size in float (unused) */
174         short sizex, sizey;                     /* current split size in pixels (if zero it uses regiontype) */
175         
176         short do_draw;                          /* private, cached notifier events */
177         short do_draw_overlay;          /* private, cached notifier events */
178         short swap;                                     /* private, indicator to survive swap-exchange */
179         short overlap;                          /* private, set for indicate drawing overlapped */
180         short pad[2];
181         
182         struct ARegionType *type;       /* callbacks for this region type */
183         
184         ListBase uiblocks;                      /* uiBlock */
185         ListBase panels;                        /* Panel */
186         ListBase ui_lists;                      /* uiList */
187         ListBase handlers;                      /* wmEventHandler */
188         
189         struct wmTimer *regiontimer; /* blend in/out */
190         
191         char *headerstr;                        /* use this string to draw info */
192         void *regiondata;                       /* XXX 2.50, need spacedata equivalent? */
193 } ARegion;
194
195 /* swap */
196 #define WIN_BACK_OK             1
197 #define WIN_FRONT_OK    2
198 // #define WIN_EQUAL            3  // UNUSED
199
200 /* area->flag */
201 #define HEADER_NO_PULLDOWN              1
202 #define AREA_FLAG_DRAWJOINTO    2
203 #define AREA_FLAG_DRAWJOINFROM  4
204 #define AREA_TEMP_INFO                  8
205 #define AREA_FLAG_DRAWSPLIT_H   16
206 #define AREA_FLAG_DRAWSPLIT_V   32
207
208 #define EDGEWIDTH       1
209 #define AREAGRID        4
210 #define AREAMINX        32
211 #define HEADERY         26
212 #define AREAMINY        (HEADERY+EDGEWIDTH)
213
214 #define HEADERDOWN      1
215 #define HEADERTOP       2
216
217 /* screen->full */
218 #define SCREENNORMAL    0
219 #define SCREENFULL              1
220
221
222 /* Panel->snap - for snapping to screen edges */
223 #define PNL_SNAP_NONE           0
224 /* #define PNL_SNAP_TOP         1 */
225 /* #define PNL_SNAP_RIGHT               2 */
226 #define PNL_SNAP_BOTTOM         4
227 /* #define PNL_SNAP_LEFT                8 */
228
229 /* #define PNL_SNAP_DIST                9.0 */
230
231 /* paneltype flag */
232 #define PNL_DEFAULT_CLOSED              1
233 #define PNL_NO_HEADER                   2
234
235 /* uilist layout_type */
236 enum {
237         UILST_LAYOUT_DEFAULT          = 0,
238         UILST_LAYOUT_COMPACT          = 1,
239         UILST_LAYOUT_GRID             = 2,
240 };
241
242 /* regiontype, first two are the default set */
243 /* Do NOT change order, append on end. Types are hardcoded needed */
244 enum {
245         RGN_TYPE_WINDOW = 0,
246         RGN_TYPE_HEADER = 1,
247         RGN_TYPE_CHANNELS = 2,
248         RGN_TYPE_TEMPORARY = 3,
249         RGN_TYPE_UI = 4,
250         RGN_TYPE_TOOLS = 5,
251         RGN_TYPE_TOOL_PROPS = 6,
252         RGN_TYPE_PREVIEW = 7
253 };
254
255 /* region alignment */
256 #define RGN_ALIGN_NONE          0
257 #define RGN_ALIGN_TOP           1
258 #define RGN_ALIGN_BOTTOM        2
259 #define RGN_ALIGN_LEFT          3
260 #define RGN_ALIGN_RIGHT         4
261 #define RGN_ALIGN_HSPLIT        5
262 #define RGN_ALIGN_VSPLIT        6
263 #define RGN_ALIGN_FLOAT         7
264 #define RGN_ALIGN_QSPLIT        8
265
266 #define RGN_SPLIT_PREV          32
267
268 /* region flag */
269 #define RGN_FLAG_HIDDEN         1
270 #define RGN_FLAG_TOO_SMALL      2
271
272 /* region do_draw */
273 #define RGN_DRAW                        1
274 #define RGN_DRAW_PARTIAL        2
275
276 #endif
277