2
/******************************************************************************
3
* MODULE : basic_event.cpp
4
* DESCRIPTION: The most common events
5
* COPYRIGHT : (C) 1999 Joris van der Hoeven
6
*******************************************************************************
7
* This software falls under the GNU general public license and comes WITHOUT
8
* ANY WARRANTY WHATSOEVER. See the file $TEXMACS_PATH/LICENSE for more details.
9
* If you don't have this file, write to the Free Software Foundation, Inc.,
10
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
11
******************************************************************************/
13
#include "Event/basic_event.hpp"
16
/******************************************************************************
18
******************************************************************************/
20
get_size_event_rep::get_size_event_rep (SI& w2, SI& h2, int m):
21
event_rep (GET_SIZE_EVENT), w (w2), h (h2), mode (m) {}
22
get_size_event_rep::operator tree () {
23
if (mode==-1) return "get_min_size_event";
24
if (mode== 0) return "get_size_event";
25
else return "get_max_size_event"; }
26
event get_size (SI& w, SI& h, int mode) {
27
return new get_size_event_rep (w, h, mode); }
29
get_widget_event_rep::get_widget_event_rep (string ww, widget& w2):
30
event_rep (GET_WIDGET_EVENT), which (ww), w (w2) {}
31
get_widget_event_rep::operator tree () {
32
return tree (TUPLE, "get_widget_event", which); }
33
event get_widget (string which, widget& w) {
34
return new get_widget_event_rep (which, w); }
36
set_widget_event_rep::set_widget_event_rep (string ww, widget w2):
37
event_rep (SET_WIDGET_EVENT), which (ww), w (w2) {}
38
set_widget_event_rep::operator tree () {
39
return tree (TUPLE, "set_widget_event", which); }
40
event set_widget (string which, widget w) {
41
return new set_widget_event_rep (which, w); }
43
set_language_event_rep::set_language_event_rep (string ww, bool& rr):
44
event_rep (SET_LANGUAGE_EVENT), which (ww), resize (rr) {}
45
set_language_event_rep::operator tree () {
46
return tree (TUPLE, "set_language_event", which); }
47
event set_language (string which, bool& resize) {
48
return new set_language_event_rep (which, resize); }
50
/******************************************************************************
52
******************************************************************************/
54
attach_window_event_rep::attach_window_event_rep (window win2):
55
event_rep (ATTACH_WINDOW_EVENT), win (win2) {}
56
attach_window_event_rep::operator tree () { return "attach_window_event"; }
57
event emit_attach_window (window win) {
58
return new attach_window_event_rep (win); }
60
position_event_rep::position_event_rep ():
61
event_rep (POSITION_EVENT), flag (true),
62
ox (0), oy (0), w (0), h (0), grav (north_west) {}
63
position_event_rep::position_event_rep (SI a, SI b, SI c, SI d, gravity grav2):
64
event_rep (POSITION_EVENT), flag (false),
65
ox (a), oy (b), w (c), h (d), grav (grav2) {}
66
position_event_rep::operator tree () {
67
if (flag) return "reposition";
68
return tree (TUPLE, "position_event", as_tree (grav),
69
tree (TUPLE, as_string (ox/PIXEL), as_string (oy/PIXEL)),
70
tree (TUPLE, as_string (w /PIXEL), as_string (h /PIXEL))); }
71
event emit_reposition () {
72
return new position_event_rep (); }
73
event emit_position (SI ox, SI oy, SI w, SI h, gravity grav) {
74
return new position_event_rep (ox, oy, w, h, grav); }
76
move_event_rep::move_event_rep ():
77
event_rep (MOVE_EVENT) {}
78
move_event_rep::operator tree () { return "move_event"; }
80
return new move_event_rep (); }
82
resize_event_rep::resize_event_rep ():
83
event_rep (RESIZE_EVENT) {}
84
resize_event_rep::operator tree () { return "resize_event"; }
85
event emit_resize () {
86
return new resize_event_rep (); }
88
destroy_event_rep::destroy_event_rep ():
89
event_rep (DESTROY_EVENT) {}
90
destroy_event_rep::operator tree () { return "destroy_event"; }
91
event emit_destroy () {
92
return new destroy_event_rep (); }
94
/******************************************************************************
96
******************************************************************************/
98
keypress_event_rep::keypress_event_rep (string key2, time_t t2):
99
event_rep (KEYPRESS_EVENT), key (key2), t (t2) {}
100
keypress_event_rep::operator tree () {
101
return tree (TUPLE, "keypress_event", key); }
102
event emit_keypress (string key, time_t t) {
103
return new keypress_event_rep (key, t); }
104
event emit_keypress (keypress_event ev, string key) {
105
return new keypress_event_rep (key, ev->t); }
107
keyboard_focus_event_rep::keyboard_focus_event_rep (bool io, time_t t2):
108
event_rep (KEYBOARD_FOCUS_EVENT), flag (io), t (t2) {}
109
keyboard_focus_event_rep::operator tree () {
110
return tree (TUPLE, "keyboard_focus_event", (char*) (flag? "in": "out")); }
111
event emit_keyboard_focus (bool in_out_flag, time_t t) {
112
return new keyboard_focus_event_rep (in_out_flag, t); }
114
mouse_event_rep::mouse_event_rep (string type2, SI x2, SI y2,
115
time_t t2, int status2): event_rep (MOUSE_EVENT),
116
type (type2), x (x2), y (y2), t (t2), status (status2) {}
117
mouse_event_rep::operator tree () {
118
return tree (TUPLE, "mouse_event", type,
119
tree (TUPLE, as_string (x/PIXEL), as_string (y/PIXEL))); }
121
mouse_event_rep::pressed (string s) {
122
if (s == "left") return (status&1) != 0;
123
if (s == "middle") return (status&2) != 0;
124
if (s == "right") return (status&4) != 0;
125
if (s == "extra1") return (status&8) != 0;
126
if (s == "extra2") return (status&16) != 0;
128
event emit_mouse (string type, SI x, SI y, time_t t, int status) {
129
return new mouse_event_rep (type, x, y, t, status); }
130
event emit_mouse (mouse_event ev, string type, SI x, SI y) {
131
return new mouse_event_rep (type, x, y, ev->t, ev->status); }
133
alarm_event_rep::alarm_event_rep (string message2, time_t t2):
134
event_rep (ALARM_EVENT), message (message2), t (t2) {}
135
alarm_event_rep::operator tree () {
136
return tree (TUPLE, "alarm_event", message); }
137
event emit_alarm (string message, time_t t) {
138
return new alarm_event_rep (message, t); }
140
/******************************************************************************
142
******************************************************************************/
144
clear_event_rep::clear_event_rep (SI x1b, SI y1b, SI x2b, SI y2b):
145
event_rep (CLEAR_EVENT), x1 (x1b), y1 (y1b), x2 (x2b), y2 (y2b) {}
146
clear_event_rep::operator tree () {
147
return tree (TUPLE, "clear event",
148
tree (TUPLE, as_string (x1/PIXEL), as_string (y1/PIXEL)),
149
tree (TUPLE, as_string (x2/PIXEL), as_string (y2/PIXEL))); }
150
event emit_clear (SI x1, SI y1, SI x2, SI y2) {
151
return new clear_event_rep (x1, y1, x2, y2); }
153
repaint_event_rep::repaint_event_rep (SI x1b, SI y1b, SI x2b, SI y2b, bool& b):
154
event_rep (REPAINT_EVENT), x1 (x1b), y1 (y1b), x2 (x2b), y2 (y2b), stop(b) {}
155
repaint_event_rep::operator tree () {
156
return tree (TUPLE, "repaint event",
157
tree (TUPLE, as_string (x1/PIXEL), as_string (y1/PIXEL)),
158
tree (TUPLE, as_string (x2/PIXEL), as_string (y2/PIXEL))); }
159
event emit_repaint (SI x1, SI y1, SI x2, SI y2, bool& stop) {
160
return new repaint_event_rep (x1, y1, x2, y2, stop); }
162
/******************************************************************************
163
* Request some action
164
******************************************************************************/
166
update_event_rep::update_event_rep ():
167
event_rep (UPDATE_EVENT) {}
168
update_event_rep::operator tree () { return "update_event"; }
169
event emit_update () {
170
return new update_event_rep (); }
172
invalidate_event_rep::invalidate_event_rep ():
173
event_rep (INVALIDATE_EVENT), all_flag (true),
174
x1 (0), y1 (0), x2 (0), y2 (0) {}
175
invalidate_event_rep::invalidate_event_rep (SI x1b, SI y1b, SI x2b, SI y2b):
176
event_rep (INVALIDATE_EVENT), all_flag (false),
177
x1 (x1b), y1 (y1b), x2 (x2b), y2 (y2b) {}
178
invalidate_event_rep::operator tree () {
179
if (all_flag) return "invalidate_event";
180
else return tree (TUPLE, "invalidate_event",
181
tree (TUPLE, as_string (x1/PIXEL),as_string (y1/PIXEL)),
182
tree (TUPLE, as_string (x2/PIXEL),as_string (y2/PIXEL))); }
183
event emit_invalidate_all () {
184
return new invalidate_event_rep (); }
185
event emit_invalidate (SI x1, SI y1, SI x2, SI y2) {
186
return new invalidate_event_rep (x1, y1, x2, y2); }
188
keyboard_grab_event_rep::keyboard_grab_event_rep (bool io, time_t t2):
189
event_rep (KEYBOARD_GRAB_EVENT), flag (io), t (t2) {}
190
keyboard_grab_event_rep::operator tree () {
191
return tree (TUPLE, "keyboard_grab_event", (char*) (flag? "in": "out")); }
192
event emit_keyboard_grab (bool in_out_flag, time_t t) {
193
return new keyboard_grab_event_rep (in_out_flag, t); }
195
mouse_grab_event_rep::mouse_grab_event_rep (bool io, time_t t2):
196
event_rep (MOUSE_GRAB_EVENT), flag (io), t (t2) {}
197
mouse_grab_event_rep::operator tree () {
198
return tree (TUPLE, "mouse_grab_event", (char*) (flag? "in": "out")); }
199
event emit_mouse_grab (bool in_out_flag, time_t t) {
200
return new mouse_grab_event_rep (in_out_flag, t); }
202
request_alarm_event_rep::request_alarm_event_rep (event ev2, time_t delay2):
203
event_rep (REQUEST_ALARM_EVENT), ev (ev2), delay (delay2) {}
204
request_alarm_event_rep::operator tree () {
205
return tree (TUPLE, "request_alarm_event",
206
(tree) ev, as_string ((int) delay)); }
207
event emit_request_alarm (event ev, time_t delay) {
208
return new request_alarm_event_rep (ev, delay); }
210
/******************************************************************************
211
* Miscellaneous events
212
******************************************************************************/
214
find_child_event_rep::find_child_event_rep (SI x2, SI y2, int& which2):
215
event_rep (FIND_CHILD_EVENT), x (x2), y (y2), which (which2) {}
216
find_child_event_rep::operator tree () {
217
return tree (TUPLE, "find_child_event",
218
tree (TUPLE, as_string (x/PIXEL), as_string (y/PIXEL))); }
219
event emit_find_child (SI x, SI y, int& which) {
220
return new find_child_event_rep (x, y, which); }
222
/******************************************************************************
223
* Output routines for the gravity class
224
******************************************************************************/
227
operator << (ostream& out, gravity grav) {
228
return out << as_tree (grav);
232
as_tree (gravity grav) {
234
case north_west: return "north west";
235
case north : return "north";
236
case north_east: return "north east";
237
case west : return "west";
238
case center : return "center";
239
case east : return "east";
240
case south_west: return "south west";
241
case south : return "south";
242
case south_east: return "south east";
244
fatal_error ("unknown gravity", "as_tree", "basic_event.cpp");
245
return ""; // Because of bug in certain versions of g++