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