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