Blender 2.5 project: added first more complex handler + operator
[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
51 /* windowmanager is saved, tag WMAN */
52 typedef struct wmWindowManager {
53         ID id;
54         
55         struct wmWindow *windrawable, *winactive;               /* separate active from drawable */
56         ListBase windows;
57         
58         int initialized;                /* set on file read */
59         int pad;
60         
61         ListBase operators;             /* operator registry */
62         
63         ListBase queue;                 /* refresh/redraw wmNotifier structs */
64         
65         /* custom keymaps */
66         ListBase windowkeymap;
67         ListBase screenkeymap;
68         
69         
70 } wmWindowManager;
71
72
73 /* the savable part, rest of data is local in ghostwinlay */
74 typedef struct wmWindow {
75         struct wmWindow *next, *prev;
76         
77         void *ghostwin;         /* dont want to include ghost.h stuff */
78         void *timer;
79         int timer_event;
80         
81         int winid;      /* winid also in screens, is for retrieving this window after read */
82         
83         struct bScreen *screen; /* active screen */
84         char screenname[32];    /* MAX_ID_NAME for matching window with active screen after file read */
85         
86         short posx, posy, sizex, sizey; /* window coords */
87         short windowstate;      /* borderless, full */
88         short monitor;          /* multiscreen... no idea how to store yet */
89         short active;           /* set to 1 if an active window, for quick rejects */
90         short cursor;           /* current mouse cursor type */
91         
92         struct wmEvent *eventstate;     /* storage for event system */
93         
94         struct wmSubWindow *curswin;    /* internal for wm_subwindow.c only */
95         
96         ListBase queue;                 /* all events (ghost level events were handled) */
97         ListBase handlers;              /* window+screen handlers, overriding all queues */
98         
99         ListBase subwindows;    /* opengl stuff for sub windows, see notes in wm_subwindow.c */
100         
101 } wmWindow;
102
103 #
104 #
105 typedef struct wmOperatorType {
106         struct wmOperatorType *next, *prev;
107         
108         char *name;             /* text for ui, undo */
109         char *idname;   /* unique identifier */
110         
111         /* this callback alters UI, adds handlers, or uses cb's below */
112         int (*invoke)(struct bContext *, struct wmOperator *, struct wmEvent *event);
113         /* this callback is for modal temporary ops, initialize was called */
114         int (*modal)(struct bContext *, struct wmOperator *, struct wmEvent *event);
115         
116         int (*init)(struct bContext *, struct wmOperator *);
117         int (*exec)(struct bContext *, struct wmOperator *);
118         int (*exit)(struct bContext *, struct wmOperator *);
119         
120         int (*poll)(struct bContext *);
121         
122         void *(*uiBlock)(struct wmOperator *);  /* panel for redo or repeat */
123         
124         char *customname;       /* dna name */
125         void *customdata;       /* defaults */
126         
127         short flag;
128
129 } wmOperatorType;
130
131 #define OP_MAX_TYPENAME 64
132
133 /* partial copy of the event, for matching by eventhandler */
134 typedef struct wmKeymapItem {
135         struct wmKeymapItem *next, *prev;
136         
137         char idname[64];                                /* used to retrieve operator type pointer */
138         
139         short type;                                             /* event code itself */
140         short val;                                              /* 0=any, 1=click, 2=release, or wheelvalue, or... */
141         short shift, ctrl, alt, oskey;  /* oskey is apple or windowskey, value denotes order of pressed */
142         short keymodifier;                              /* rawkey modifier */
143         
144         short pad;
145 } wmKeymapItem;
146
147
148 /* this one is the operator itself, stored in files for macros etc */
149 /* operator + operatortype should be able to redo entirely, but for different contextes */
150 typedef struct wmOperator {
151         struct wmOperator *next, *prev;
152         
153         wmOperatorType *type;
154         char idname[64];                /* used to retrieve type pointer */
155         
156         /* default storage (lazy?) */
157         void *argv1, *argv2;
158         vec3f   vecf;
159         vec3i   veci;
160         float fac, deltaf;
161         int value, delta;
162
163         /* custom storage, dna pointer */
164         void *customdata; 
165         /* or IDproperty list */
166         void *properties;
167
168         
169 } wmOperator;
170
171
172 #endif /* DNA_WINDOWMANAGER_TYPES_H */
173