2.5
[blender-staging.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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, 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
45 /* forwards */
46 struct bContext;
47 struct wmLocal;
48 struct bScreen;
49 struct uiBlock;
50 struct wmSubWindow;
51 struct wmTimer;
52 struct StructRNA;
53 struct PointerRNA;
54 struct ReportList;
55
56 /* windowmanager is saved, tag WMAN */
57 typedef struct wmWindowManager {
58         ID id;
59         
60         struct wmWindow *windrawable, *winactive;               /* separate active from drawable */
61         ListBase windows;
62         
63         int initialized;                /* set on file read */
64         short file_saved;               /* indicator whether data was saved */
65         short pad;
66         
67         ListBase operators;             /* operator registry */
68         
69         ListBase queue;                 /* refresh/redraw wmNotifier structs */
70         
71         ListBase reports;               /* information and error reports */
72         
73         ListBase jobs;                  /* threaded jobs manager */
74         
75         ListBase paintcursors;  /* extra overlay cursors to draw, like circles */
76         
77         /* used keymaps, optionally/partially saved */
78         ListBase keymaps;
79         
80 } wmWindowManager;
81
82
83 /* the savable part, rest of data is local in ghostwinlay */
84 typedef struct wmWindow {
85         struct wmWindow *next, *prev;
86         
87         void *ghostwin;         /* dont want to include ghost.h stuff */
88         
89         int winid, pad;         /* winid also in screens, is for retrieving this window after read */
90         
91         struct bScreen *screen; /* active screen */
92         char screenname[32];    /* MAX_ID_NAME for matching window with active screen after file read */
93         
94         short posx, posy, sizex, sizey; /* window coords */
95         short windowstate;      /* borderless, full */
96         short monitor;          /* multiscreen... no idea how to store yet */
97         short active;           /* set to 1 if an active window, for quick rejects */
98         short cursor;           /* current mouse cursor type */
99         short lastcursor;       /* for temp waitcursor */
100         short pad2;
101         int pad3;
102         
103         struct wmEvent *eventstate;     /* storage for event system */
104         
105         struct wmSubWindow *curswin;    /* internal for wm_subwindow.c only */
106
107         struct wmGesture *tweak;        /* internal for wm_operators.c */
108         
109         int drawmethod, drawfail;       /* internal for wm_draw.c only */
110         void *drawdata;                         /* internal for wm_draw.c only */
111         
112         ListBase timers;
113         
114         ListBase queue;                         /* all events (ghost level events were handled) */
115         ListBase handlers;                      /* window+screen handlers, overriding all queues */
116         
117         ListBase subwindows;    /* opengl stuff for sub windows, see notes in wm_subwindow.c */
118         ListBase gesture;               /* gesture stuff */
119 } wmWindow;
120
121 /* should be somthing like DNA_EXCLUDE 
122  * but the preprocessor first removes all comments, spaces etc */
123
124 #
125 #
126 typedef struct wmOperatorType {
127         struct wmOperatorType *next, *prev;
128         
129         char *name;             /* text for ui, undo */
130         char *idname;           /* unique identifier */
131         char *description;      /* tooltips and python docs */
132         
133         /* this callback executes the operator without any interactive input,
134          * parameters may be provided through operator properties. cannot use
135          * any interface code or input device state.
136          * - see defines below for return values */
137         int (*exec)(struct bContext *, struct wmOperator *);
138
139         /* for modal temporary operators, initially invoke is called. then
140          * any further events are handled in modal. if the operation is
141          * cancelled due to some external reason, cancel is called
142          * - see defines below for return values */
143         int (*invoke)(struct bContext *, struct wmOperator *, struct wmEvent *);
144         int (*cancel)(struct bContext *, struct wmOperator *);
145         int (*modal)(struct bContext *, struct wmOperator *, struct wmEvent *);
146
147         /* verify if the operator can be executed in the current context, note
148          * that the operator might still fail to execute even if this return true */
149         int (*poll)(struct bContext *);
150         
151         /* panel for redo and repeat */
152         void *(*uiBlock)(struct wmOperator *);
153         
154         /* rna for properties */
155         struct StructRNA *srna;
156         
157         short flag;
158
159         /* only used for operators defined with python
160          * use to store pointers to python functions */
161         void *pyop_data;
162
163 } wmOperatorType;
164
165 #define OP_MAX_TYPENAME 64
166
167 /* partial copy of the event, for matching by eventhandler */
168 typedef struct wmKeymapItem {
169         struct wmKeymapItem *next, *prev;
170         
171         char idname[64];                                /* used to retrieve operator type pointer */
172         struct PointerRNA *ptr;                 /* rna pointer to access properties */
173         
174         short type;                                             /* event code itself */
175         short val;                                              /* 0=any, 1=click, 2=release, or wheelvalue, or... */
176         short shift, ctrl, alt, oskey;  /* oskey is apple or windowskey, value denotes order of pressed */
177         short keymodifier;                              /* rawkey modifier */
178         
179         short pad;
180 } wmKeymapItem;
181
182 #define KMAP_MAX_NAME   64
183
184 /* stored in WM, the actively used keymaps */
185 typedef struct wmKeyMap {
186         struct wmKeyMap *next, *prev;
187         
188         ListBase keymap;
189         
190         char nameid[64];        /* global editor keymaps, or for more per space/region */
191         int spaceid;    /* same IDs as in DNA_space_types.h */
192         int regionid;   /* see above */
193 } wmKeyMap;
194
195
196 /* this one is the operator itself, stored in files for macros etc */
197 /* operator + operatortype should be able to redo entirely, but for different contextes */
198 typedef struct wmOperator {
199         struct wmOperator *next, *prev;
200
201         /* saved */
202         char idname[64];                        /* used to retrieve type pointer */
203         IDProperty *properties;         /* saved, user-settable properties */
204         
205         /* runtime */
206         wmOperatorType *type;           /* operator type definition from idname */
207         void *customdata;                       /* custom storage, only while operator runs */
208         struct PointerRNA *ptr;         /* rna pointer to access properties */
209         struct ReportList *reports;     /* errors and warnings storage */
210 } wmOperator;
211
212 /* operator type exec(), invoke() modal(), return values */
213 #define OPERATOR_RUNNING_MODAL  1
214 #define OPERATOR_CANCELLED              2
215 #define OPERATOR_FINISHED               4
216 /* add this flag if the event should pass through */
217 #define OPERATOR_PASS_THROUGH   8
218
219 typedef enum wmRadialControlMode {
220         WM_RADIALCONTROL_SIZE,
221         WM_RADIALCONTROL_STRENGTH,
222         WM_RADIALCONTROL_ANGLE
223 } wmRadialControlMode;
224
225 #endif /* DNA_WINDOWMANAGER_TYPES_H */
226