ScummVM API documentation
message.h
1/* ScummVM - Graphic Adventure Engine
2 *
3 * ScummVM is the legal property of its developers, whose names
4 * are too numerous to list here. Please refer to the COPYRIGHT
5 * file distributed with this source distribution.
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
11
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 *
20 */
21
22#ifndef BURIED_MESSAGE_H
23#define BURIED_MESSAGE_H
24
25#include "common/events.h"
26#include "common/keyboard.h"
27#include "common/rect.h"
28
29namespace Buried {
30
31// This is all based on the Windows messaging system
32// ...but less stupid
33
34class Window;
35
36enum MessageType {
37 // Actual message types
38 kMessageTypeKeyUp,
39 kMessageTypeKeyDown,
40 kMessageTypeTimer,
41 kMessageTypeMouseMove,
42 kMessageTypeLButtonUp,
43 kMessageTypeLButtonDown,
44 kMessageTypeMButtonUp,
45 kMessageTypeRButtonUp,
46 kMessageTypeRButtonDown,
47 kMessageTypeSetCursor,
48 kMessageTypeEnable,
49 kMessageTypeActionStart,
50 kMessageTypeActionEnd,
51
52 // Ranges of messages
53 kMessageTypeMouseBegin = kMessageTypeMouseMove,
54 kMessageTypeMouseEnd = kMessageTypeRButtonDown,
55 kMessageTypeKeyBegin = kMessageTypeKeyUp,
56 kMessageTypeKeyEnd = kMessageTypeKeyDown,
57 kMessageTypeActionRangeBegin = kMessageTypeActionStart,
58 kMessageTypeActionRangeEnd = kMessageTypeActionEnd
59};
60
61
62class Message {
63public:
64 virtual ~Message() {}
65
66 virtual MessageType getMessageType() const = 0;
67};
68
69// Templated version to make stuff a bit neater
70template <MessageType type>
71class MessageTypeIntern : public Message {
72public:
73 MessageType getMessageType() const { return type; }
74};
75
76// Some common template classes
77template <MessageType type>
78class MouseMessage : public MessageTypeIntern<type> {
79public:
80 MouseMessage(const Common::Point &point, uint flags) : _point(point), _flags(flags) {}
81
82 Common::Point getPoint() const { return _point; }
83 uint getFlags() const { return _flags; }
84
85private:
86 Common::Point _point;
87 uint _flags;
88};
89
90template <MessageType type>
91class KeyMessage : public MessageTypeIntern<type> {
92public:
93 KeyMessage(const Common::KeyState &keyState, uint flags) : _keyState(keyState), _flags(flags) {}
94
95 Common::KeyState getKeyState() const { return _keyState; }
96 uint getFlags() const { return _flags; }
97
98private:
99 Common::KeyState _keyState;
100 uint _flags;
101};
102
103template <MessageType type>
104class ActionMessage : public MessageTypeIntern<type> {
105public:
106 ActionMessage(const Common::CustomEventType &action, uint flags) : _action(action), _flags(flags) {}
107
108 Common::CustomEventType getAction() const { return _action; }
109 uint getFlags() const { return _flags; }
110
111private:
113 uint _flags;
114};
115
116// Types for everything that falls under one of the above categories
127
128// ...and the rest
129class SetCursorMessage : public MessageTypeIntern<kMessageTypeSetCursor> {
130public:
131 // Hit-test is purposely skipped
132 SetCursorMessage(uint message) : _message(message) {}
133
134 uint getMessage() const { return _message; }
135
136private:
137 uint _message;
138};
139
140class TimerMessage : public MessageTypeIntern<kMessageTypeTimer> {
141public:
142 TimerMessage(uint timer) : _timer(timer) {}
143
144 uint getTimer() const { return _timer; }
145
146private:
147 uint _timer;
148};
149
150class EnableMessage : public MessageTypeIntern<kMessageTypeEnable> {
151public:
152 EnableMessage(bool enable) : _enable(enable) {}
153
154 bool getEnable() const { return _enable; }
155
156private:
157 bool _enable;
158};
159
160} // End of namespace Buried
161
162#endif
Definition: message.h:104
Definition: message.h:150
Definition: message.h:91
Definition: message.h:62
Definition: message.h:71
Definition: message.h:78
Definition: message.h:129
Definition: message.h:140
uint32 CustomEventType
Definition: events.h:212
Definition: keyboard.h:294
Definition: rect.h:144