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 
29 namespace Buried {
30 
31 // This is all based on the Windows messaging system
32 // ...but less stupid
33 
34 class Window;
35 
36 enum 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 
62 class Message {
63 public:
64  virtual ~Message() {}
65 
66  virtual MessageType getMessageType() const = 0;
67 };
68 
69 // Templated version to make stuff a bit neater
70 template <MessageType type>
71 class MessageTypeIntern : public Message {
72 public:
73  MessageType getMessageType() const { return type; }
74 };
75 
76 // Some common template classes
77 template <MessageType type>
78 class MouseMessage : public MessageTypeIntern<type> {
79 public:
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 
85 private:
86  Common::Point _point;
87  uint _flags;
88 };
89 
90 template <MessageType type>
91 class KeyMessage : public MessageTypeIntern<type> {
92 public:
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 
98 private:
99  Common::KeyState _keyState;
100  uint _flags;
101 };
102 
103 template <MessageType type>
104 class ActionMessage : public MessageTypeIntern<type> {
105 public:
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 
111 private:
112  Common::CustomEventType _action;
113  uint _flags;
114 };
115 
116 // Types for everything that falls under one of the above categories
127 
128 // ...and the rest
129 class SetCursorMessage : public MessageTypeIntern<kMessageTypeSetCursor> {
130 public:
131  // Hit-test is purposely skipped
132  SetCursorMessage(uint message) : _message(message) {}
133 
134  uint getMessage() const { return _message; }
135 
136 private:
137  uint _message;
138 };
139 
140 class TimerMessage : public MessageTypeIntern<kMessageTypeTimer> {
141 public:
142  TimerMessage(uint timer) : _timer(timer) {}
143 
144  uint getTimer() const { return _timer; }
145 
146 private:
147  uint _timer;
148 };
149 
150 class EnableMessage : public MessageTypeIntern<kMessageTypeEnable> {
151 public:
152  EnableMessage(bool enable) : _enable(enable) {}
153 
154  bool getEnable() const { return _enable; }
155 
156 private:
157  bool _enable;
158 };
159 
160 } // End of namespace Buried
161 
162 #endif
Definition: message.h:140
Definition: message.h:71
Definition: message.h:104
uint32 CustomEventType
Definition: events.h:204
Definition: message.h:150
Definition: message.h:129
Definition: message.h:78
Definition: message.h:62
Definition: agent_evaluation.h:31
Definition: rect.h:144
Definition: keyboard.h:294
Definition: message.h:91