source: vendor/synergy/current/lib/base/IEventQueue.h

Last change on this file was 2749, checked in by bird, 19 years ago

synergy v1.3.1 sources (zip).

File size: 6.1 KB
Line 
1/*
2 * synergy -- mouse and keyboard sharing utility
3 * Copyright (C) 2004 Chris Schoeneman
4 *
5 * This package is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License
7 * found in the file COPYING that should have accompanied this file.
8 *
9 * This package is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 */
14
15#ifndef IEVENTQUEUE_H
16#define IEVENTQUEUE_H
17
18#include "IInterface.h"
19#include "CEvent.h"
20
21#define EVENTQUEUE IEventQueue::getInstance()
22
23class IEventJob;
24class IEventQueueBuffer;
25
26// Opaque type for timer info. This is defined by subclasses of
27// IEventQueueBuffer.
28class CEventQueueTimer;
29
30//! Event queue interface
31/*!
32An event queue provides a queue of CEvents. Clients can block waiting
33on any event becoming available at the head of the queue and can place
34new events at the end of the queue. Clients can also add and remove
35timers which generate events periodically.
36*/
37class IEventQueue : public IInterface {
38public:
39 class CTimerEvent {
40 public:
41 CEventQueueTimer* m_timer; //!< The timer
42 UInt32 m_count; //!< Number of repeats
43 };
44
45 //! @name manipulators
46 //@{
47
48 //! Set the buffer
49 /*!
50 Replace the current event queue buffer. Any queued events are
51 discarded. The queue takes ownership of the buffer.
52 */
53 virtual void adoptBuffer(IEventQueueBuffer*) = 0;
54
55 //! Remove event from queue
56 /*!
57 Returns the next event on the queue into \p event. If no event is
58 available then blocks for up to \p timeout seconds, or forever if
59 \p timeout is negative. Returns true iff an event was available.
60 */
61 virtual bool getEvent(CEvent& event, double timeout = -1.0) = 0;
62
63 //! Dispatch an event
64 /*!
65 Looks up the dispatcher for the event's target and invokes it.
66 Returns true iff a dispatcher exists for the target.
67 */
68 virtual bool dispatchEvent(const CEvent& event) = 0;
69
70 //! Add event to queue
71 /*!
72 Adds \p event to the end of the queue.
73 */
74 virtual void addEvent(const CEvent& event) = 0;
75
76 //! Create a recurring timer
77 /*!
78 Creates and returns a timer. An event is returned after \p duration
79 seconds and the timer is reset to countdown again. When a timer event
80 is returned the data points to a \c CTimerEvent. The client must pass
81 the returned timer to \c deleteTimer() (whether or not the timer has
82 expired) to release the timer. The returned timer event uses the
83 given \p target. If \p target is NULL it uses the returned timer as
84 the target.
85
86 Events for a single timer don't accumulate in the queue, even if the
87 client reading events can't keep up. Instead, the \c m_count member
88 of the \c CTimerEvent indicates how many events for the timer would
89 have been put on the queue since the last event for the timer was
90 removed (or since the timer was added).
91 */
92 virtual CEventQueueTimer*
93 newTimer(double duration, void* target) = 0;
94
95 //! Create a one-shot timer
96 /*!
97 Creates and returns a one-shot timer. An event is returned when
98 the timer expires and the timer is removed from further handling.
99 When a timer event is returned the data points to a \c CTimerEvent.
100 The \m c_count member of the \c CTimerEvent is always 1. The client
101 must pass the returned timer to \c deleteTimer() (whether or not the
102 timer has expired) to release the timer. The returned timer event
103 uses the given \p target. If \p target is NULL it uses the returned
104 timer as the target.
105 */
106 virtual CEventQueueTimer*
107 newOneShotTimer(double duration,
108 void* target) = 0;
109
110 //! Destroy a timer
111 /*!
112 Destroys a previously created timer. The timer is removed from the
113 queue and will not generate event, even if the timer has expired.
114 */
115 virtual void deleteTimer(CEventQueueTimer*) = 0;
116
117 //! Register an event handler for an event type
118 /*!
119 Registers an event handler for \p type and \p target. The \p handler
120 is adopted. Any existing handler for the type,target pair is deleted.
121 \c dispatchEvent() will invoke \p handler for any event for \p target
122 of type \p type. If no such handler exists it will use the handler
123 for \p target and type \p kUnknown if it exists.
124 */
125 virtual void adoptHandler(CEvent::Type type,
126 void* target, IEventJob* handler) = 0;
127
128 //! Unregister an event handler for an event type
129 /*!
130 Unregisters an event handler for the \p type, \p target pair and
131 deletes it.
132 */
133 virtual void removeHandler(CEvent::Type type, void* target) = 0;
134
135 //! Unregister all event handlers for an event target
136 /*!
137 Unregisters all event handlers for the \p target and deletes them.
138 */
139 virtual void removeHandlers(void* target) = 0;
140
141 //! Creates a new event type
142 /*!
143 Returns a unique event type id.
144 */
145 virtual CEvent::Type
146 registerType(const char* name) = 0;
147
148 //! Creates a new event type
149 /*!
150 If \p type contains \c kUnknown then it is set to a unique event
151 type id otherwise it is left alone. The final value of \p type
152 is returned.
153 */
154 virtual CEvent::Type
155 registerTypeOnce(CEvent::Type& type,
156 const char* name) = 0;
157
158 //@}
159 //! @name accessors
160 //@{
161
162 //! Test if queue is empty
163 /*!
164 Returns true iff the queue has no events in it, including timer
165 events.
166 */
167 virtual bool isEmpty() const = 0;
168
169 //! Get an event handler
170 /*!
171 Finds and returns the event handler for the \p type, \p target pair
172 if it exists, otherwise it returns NULL.
173 */
174 virtual IEventJob* getHandler(CEvent::Type type, void* target) const = 0;
175
176 //! Get name for event
177 /*!
178 Returns the name for the event \p type. This is primarily for
179 debugging.
180 */
181 virtual const char* getTypeName(CEvent::Type type) = 0;
182
183 //! Get the system event type target
184 /*!
185 Returns the target to use for dispatching \c CEvent::kSystem events.
186 */
187 static void* getSystemTarget();
188
189 //! Get the singleton instance
190 /*!
191 Returns the singleton instance of the event queue
192 */
193 static IEventQueue* getInstance();
194
195 //@}
196
197protected:
198 //! @name manipulators
199 //@{
200
201 //! Set the singleton instance
202 /*!
203 Sets the singleton instance of the event queue
204 */
205 static void setInstance(IEventQueue*);
206
207 //@}
208
209private:
210 static IEventQueue* s_instance;
211};
212
213#endif
Note: See TracBrowser for help on using the repository browser.