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