svn merge -r36603:36628 https://svn.blender.org/svnroot/bf-blender/trunk/blender
[blender.git] / source / blender / makesdna / DNA_windowmanager_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) 2007 Blender Foundation.
21  * All rights reserved.
22  *
23  * 
24  * Contributor(s): Blender Foundation
25  *
26  * ***** END GPL LICENSE BLOCK *****
27  */
28 #ifndef DNA_WINDOWMANAGER_TYPES_H
29 #define DNA_WINDOWMANAGER_TYPES_H
30
31 /** \file DNA_windowmanager_types.h
32  *  \ingroup DNA
33  */
34
35 #include "DNA_listBase.h"
36 #include "DNA_vec_types.h"
37
38 #include "DNA_ID.h"
39
40 /* defined here: */
41 struct wmWindowManager;
42 struct wmWindow;
43
44 struct wmEvent;
45 struct wmGesture;
46 struct wmOperatorType;
47 struct wmOperator;
48 struct wmKeyMap;
49 struct wmKeyConfig;
50
51 /* forwards */
52 struct bContext;
53 struct wmLocal;
54 struct bScreen;
55 struct uiBlock;
56 struct wmSubWindow;
57 struct wmTimer;
58 struct StructRNA;
59 struct PointerRNA;
60 struct ReportList;
61 struct Report;
62 struct uiLayout;
63
64 #define OP_MAX_TYPENAME 64
65 #define KMAP_MAX_NAME   64
66
67 /* keep in sync with 'wm_report_items' in wm_rna.c */
68 typedef enum ReportType {
69         RPT_DEBUG                                       = 1<<0,
70         RPT_INFO                                        = 1<<1,
71         RPT_OPERATOR                            = 1<<2,
72         RPT_WARNING                                     = 1<<3,
73         RPT_ERROR                                       = 1<<4,
74         RPT_ERROR_INVALID_INPUT         = 1<<5,
75         RPT_ERROR_INVALID_CONTEXT       = 1<<6,
76         RPT_ERROR_OUT_OF_MEMORY         = 1<<7
77 } ReportType;
78
79 #define RPT_DEBUG_ALL           (RPT_DEBUG)
80 #define RPT_INFO_ALL            (RPT_INFO)
81 #define RPT_OPERATOR_ALL        (RPT_OPERATOR)
82 #define RPT_WARNING_ALL         (RPT_WARNING)
83 #define RPT_ERROR_ALL           (RPT_ERROR|RPT_ERROR_INVALID_INPUT|RPT_ERROR_INVALID_CONTEXT|RPT_ERROR_OUT_OF_MEMORY)
84
85 enum ReportListFlags {
86         RPT_PRINT = 1,
87         RPT_STORE = 2,
88         RPT_FREE = 4,
89         RPT_OP_HOLD = 8 /* dont move them into the operator global list (caller will use) */
90 };
91 #
92 #
93 typedef struct Report {
94         struct Report *next, *prev;
95         short type; /* ReportType */
96         short flag;
97         int len; /* strlen(message), saves some time calculating the word wrap  */
98         const char *typestr;
99         const char *message;
100 } Report;
101
102 /* saved in the wm, dont remove */
103 typedef struct ReportList {
104         ListBase list;
105         int printlevel; /* ReportType */
106         int storelevel; /* ReportType */
107         int flag, pad;
108         struct wmTimer *reporttimer;
109 } ReportList;
110
111 /* timer customdata to control reports display */
112 #
113 #
114 typedef struct ReportTimerInfo {
115         float col[3];
116         float greyscale;
117         float widthfac;
118 } ReportTimerInfo;
119
120 /* reports need to be before wmWindowManager */
121
122
123 /* windowmanager is saved, tag WMAN */
124 typedef struct wmWindowManager {
125         ID id;
126         
127         struct wmWindow *windrawable, *winactive;               /* separate active from drawable */
128         ListBase windows;
129         
130         int initialized;                /* set on file read */
131         short file_saved;               /* indicator whether data was saved */
132         short op_undo_depth;    /* operator stack depth to avoid nested undo pushes */
133         
134         ListBase operators;             /* operator registry */
135         
136         ListBase queue;                 /* refresh/redraw wmNotifier structs */
137         
138         struct ReportList reports;      /* information and error reports */
139         
140         ListBase jobs;                  /* threaded jobs manager */
141         
142         ListBase paintcursors;  /* extra overlay cursors to draw, like circles */
143         
144         ListBase drags;                 /* active dragged items */
145         
146         ListBase keyconfigs;                            /* known key configurations */
147         struct wmKeyConfig *defaultconf;        /* default configuration, not saved */
148
149         ListBase timers;                                        /* active timers */
150         struct wmTimer *autosavetimer;          /* timer for auto save */
151 } wmWindowManager;
152
153 /* wmWindowManager.initialized */
154 #define WM_INIT_WINDOW          (1<<0)
155 #define WM_INIT_KEYMAP          (1<<1)
156
157 /* the savable part, rest of data is local in ghostwinlay */
158 typedef struct wmWindow {
159         struct wmWindow *next, *prev;
160         
161         void *ghostwin;         /* dont want to include ghost.h stuff */
162         
163         int winid;              /* winid also in screens, is for retrieving this window after read */
164
165         short grabcursor; /* cursor grab mode */
166         short pad;
167         
168         struct bScreen *screen;         /* active screen */
169         struct bScreen *newscreen;      /* temporary when switching */
170         char screenname[32];    /* MAX_ID_NAME for matching window with active screen after file read */
171         
172         short posx, posy, sizex, sizey; /* window coords */
173         short windowstate;      /* borderless, full */
174         short monitor;          /* multiscreen... no idea how to store yet */
175         short active;           /* set to 1 if an active window, for quick rejects */
176         short cursor;           /* current mouse cursor type */
177         short lastcursor;       /* previous cursor when setting modal one */
178         short modalcursor;      /* the current modal cursor */
179         short addmousemove;     /* internal: tag this for extra mousemove event, makes cursors/buttons active on UI switching */
180         short pad2;
181
182         struct wmEvent *eventstate;     /* storage for event system */
183         
184         struct wmSubWindow *curswin;    /* internal for wm_subwindow.c only */
185
186         struct wmGesture *tweak;        /* internal for wm_operators.c */
187         
188         int drawmethod, drawfail;       /* internal for wm_draw.c only */
189         void *drawdata;                         /* internal for wm_draw.c only */
190         
191         ListBase queue;                         /* all events (ghost level events were handled) */
192         ListBase handlers;                      /* window+screen handlers, handled last */
193         ListBase modalhandlers;         /* priority handlers, handled first */
194         
195         ListBase subwindows;    /* opengl stuff for sub windows, see notes in wm_subwindow.c */
196         ListBase gesture;               /* gesture stuff */
197         double lasttime;
198 } wmWindow;
199
200 /* should be somthing like DNA_EXCLUDE 
201  * but the preprocessor first removes all comments, spaces etc */
202
203 #
204 #
205 typedef struct wmOperatorTypeMacro {
206         struct wmOperatorTypeMacro *next, *prev;
207
208         /* operator id */
209         char idname[64];
210         /* rna pointer to access properties, like keymap */
211         struct IDProperty *properties;  /* operator properties, assigned to ptr->data and can be written to a file */
212         struct PointerRNA *ptr;
213
214 } wmOperatorTypeMacro;
215
216 /* partial copy of the event, for matching by eventhandler */
217 typedef struct wmKeyMapItem {
218         struct wmKeyMapItem *next, *prev;
219         
220         /* operator */
221         char idname[64];        /* used to retrieve operator type pointer */
222         IDProperty *properties;                 /* operator properties, assigned to ptr->data and can be written to a file */
223         
224         /* modal */
225         short propvalue;                                /* if used, the item is from modal map */
226
227         /* event */
228         short type;                                             /* event code itself */
229         short val;                                              /* KM_ANY, KM_PRESS, KM_NOTHING etc */
230         short shift, ctrl, alt, oskey;  /* oskey is apple or windowskey, value denotes order of pressed */
231         short keymodifier;                              /* rawkey modifier */
232         
233         /* flag: inactive, expanded */
234         short flag;
235
236         /* runtime */
237         short maptype;                                  /* keymap editor */
238         short id;                                               /* unique identifier. Positive for kmi that override builtins, negative otherwise */
239         short pad;
240         struct PointerRNA *ptr;                 /* rna pointer to access properties */
241 } wmKeyMapItem;
242
243 /* wmKeyMapItem.flag */
244 #define KMI_INACTIVE    1
245 #define KMI_EXPANDED    2
246
247 /* stored in WM, the actively used keymaps */
248 typedef struct wmKeyMap {
249         struct wmKeyMap *next, *prev;
250         
251         ListBase items;
252         
253         char idname[64];        /* global editor keymaps, or for more per space/region */
254         short spaceid;          /* same IDs as in DNA_space_types.h */
255         short regionid;         /* see above */
256         
257         short flag;                     /* general flags */
258         short kmi_id;           /* last kmi id */
259         
260         /* runtime */
261         int (*poll)(struct bContext *); /* verify if enabled in the current context */
262         void *modal_items;                              /* for modal, EnumPropertyItem for now */
263 } wmKeyMap;
264
265 /* wmKeyMap.flag */
266 #define KEYMAP_MODAL                            1       /* modal map, not using operatornames */
267 #define KEYMAP_USER                                     2       /* user created keymap */
268 #define KEYMAP_EXPANDED                         4
269 #define KEYMAP_CHILDREN_EXPANDED        8
270
271 typedef struct wmKeyConfig {
272         struct wmKeyConfig *next, *prev;
273
274         char idname[64];                /* unique name */
275         char basename[64];              /* idname of configuration this is derives from, "" if none */
276         
277         ListBase keymaps;
278         int actkeymap, flag;
279 } wmKeyConfig;
280
281 /* wmKeyConfig.flag */
282 #define KEYCONF_USER                    (1 << 1)
283
284 /* this one is the operator itself, stored in files for macros etc */
285 /* operator + operatortype should be able to redo entirely, but for different contextes */
286 typedef struct wmOperator {
287         struct wmOperator *next, *prev;
288
289         /* saved */
290         char idname[64];/* used to retrieve type pointer */
291         IDProperty *properties;         /* saved, user-settable properties */
292
293         /* runtime */
294         struct wmOperatorType *type;/* operator type definition from idname */
295         void *customdata;                       /* custom storage, only while operator runs */
296         void *py_instance;                      /* python stores the class instance here */
297
298         struct PointerRNA *ptr;         /* rna pointer to access properties */
299         struct ReportList *reports;     /* errors and warnings storage */
300
301         ListBase macro;                         /* list of operators, can be a tree */
302         struct wmOperator *opm;         /* current running macro, not saved */
303         struct uiLayout *layout;        /* runtime for drawing */
304         short flag, pad[3];
305
306 } wmOperator;
307
308 /* operator type exec(), invoke() modal(), return values */
309 #define OPERATOR_RUNNING_MODAL  1
310 #define OPERATOR_CANCELLED              2
311 #define OPERATOR_FINISHED               4
312 /* add this flag if the event should pass through */
313 #define OPERATOR_PASS_THROUGH   8
314 /* in case operator got executed outside WM code... like via fileselect */
315 #define OPERATOR_HANDLED                16
316
317 /* wmOperator flag */
318 #define OP_GRAB_POINTER                 1
319
320 #endif /* DNA_WINDOWMANAGER_TYPES_H */