soui 5.0.0.1
Soui5 Doc
 
Loading...
Searching...
No Matches
SEventSet.h
1#ifndef __SEVENTSET__H__
2#define __SEVENTSET__H__
3
4#include "SEventSlot.h"
5
6SNSBEGIN
7
8/**
9 * @class SEvent
10 * @brief 表示一个事件对象
11 */
12class SOUI_EXP SEvent {
13 public:
14 /**
15 * @brief 构造函数
16 * @param dwEventID 事件ID
17 * @param pszEventName 事件名称
18 */
19 SEvent(DWORD dwEventID, LPCWSTR pszEventName);
20
21 /**
22 * @brief 析构函数
23 */
24 virtual ~SEvent();
25
26 /**
27 * @brief 获取事件ID
28 * @return 事件ID
29 */
30 DWORD GetID();
31
32 /**
33 * @brief 获取事件名称
34 * @return 事件名称
35 */
36 SStringW GetName() const;
37
38 /**
39 * @brief 获取脚本处理程序
40 * @return 脚本处理程序字符串
41 */
43
44 /**
45 * @brief 设置脚本处理程序
46 * @param strScriptHandler 脚本处理程序字符串
47 */
48 void SetScriptHandler(const SStringA &strScriptHandler);
49
50 /**
51 * @brief 订阅事件
52 * @param slot 事件槽对象
53 * @return 成功返回TRUE,失败返回FALSE
54 */
55 BOOL subscribe(const IEvtSlot *slot);
56
57 /**
58 * @brief 取消订阅事件
59 * @param slot 事件槽对象
60 * @return 成功返回TRUE,失败返回FALSE
61 */
62 BOOL unsubscribe(const IEvtSlot *slot);
63
64 /**
65 * @brief 触发事件
66 * @param args 事件参数对象
67 */
68 void fire(IEvtArgs *args);
69
70 protected:
71 /**
72 * @brief 查找事件槽对象
73 * @param slot 事件槽对象
74 * @return 找到的事件槽索引,未找到返回-1
75 */
76 int findSlotFunctor(const IEvtSlot *slot);
77
78 DWORD m_dwEventID; ///< 事件ID
79 SStringW m_strEventName; ///< 事件名称
80 SStringA m_strScriptHandler; ///< 脚本处理程序字符串
81
82 SArray<IEvtSlot *> m_evtSlots; ///< 事件槽数组
83};
84
85/**
86 * @class SEventSet
87 * @brief 表示一组事件对象
88 */
89class SOUI_EXP SEventSet {
90 friend class SWindow;
91
92 public:
93 /**
94 * @brief 构造函数
95 */
96 SEventSet(void);
97
98 /**
99 * @brief 析构函数
100 */
101 virtual ~SEventSet(void);
102
103 /**
104 * @brief 添加一个新事件到事件集
105 * @param dwEventID 事件ID
106 * @param pszEventHandlerName 事件处理程序名称
107 * @return 成功返回TRUE,失败返回FALSE
108 */
109 BOOL addEvent(DWORD dwEventID, LPCWSTR pszEventHandlerName);
110
111 /**
112 * @brief 移除指定ID的事件
113 * @param dwEventID 事件ID
114 * @return 成功返回TRUE,失败返回FALSE
115 */
116 BOOL removeEvent(DWORD dwEventID);
117
118 /**
119 * @brief 移除所有事件对象
120 */
121 void removeAllEvents(void);
122
123 /**
124 * @brief 检查事件集是否包含指定ID的事件
125 * @param dwEventID 事件ID
126 * @return 存在返回TRUE,不存在返回FALSE
127 */
128 BOOL isEventPresent(DWORD dwEventID);
129
130 /**
131 * @brief 设置事件的脚本处理程序
132 * @param strEventName 事件名称
133 * @param strScriptHandler 脚本处理程序字符串
134 * @return 成功返回TRUE,失败返回FALSE
135 */
136 BOOL setEventScriptHandler(const SStringW &strEventName, const SStringA strScriptHandler);
137
138 /**
139 * @brief 获取事件的脚本处理程序
140 * @param strEventName 事件名称
141 * @return 脚本处理程序字符串
142 */
143 SStringA getEventScriptHandler(const SStringW &strEventName) const;
144
145 /**
146 * @brief 订阅事件
147 * @param dwEventID 事件ID
148 * @param subscriber 事件槽对象
149 * @return 成功返回TRUE,失败返回FALSE
150 */
151 BOOL subscribeEvent(DWORD dwEventID, const IEvtSlot &subscriber)
152 {
153 return subscribeEvent(dwEventID, &subscriber);
154 }
155
156 /**
157 * @brief 订阅事件
158 * @param dwEventID 事件ID
159 * @param subscriber 事件槽对象指针
160 * @return 成功返回TRUE,失败返回FALSE
161 */
162 BOOL subscribeEvent(DWORD dwEventID, const IEvtSlot *subscriber);
163
164#if _MSC_VER >= 1700 // VS2012
165 /**
166 * @brief 订阅事件(使用标准函数回调)
167 * @param dwEventID 事件ID
168 * @param eventCallback 标准函数回调
169 * @return 成功返回TRUE,失败返回FALSE
170 */
171 BOOL subscribeEvent(DWORD dwEventID, const StdFunCallback &eventCallback);
172#endif
173
174 /**
175 * @brief 订阅事件(模板函数)
176 * @tparam T 对象类型
177 * @tparam A 事件参数类型
178 * @param pFn 成员函数指针
179 * @param pObject 对象指针
180 * @return 成功返回TRUE,失败返回FALSE
181 */
182 template <typename T, typename A>
183 BOOL subscribeEvent(BOOL (T::*pFn)(A *), T *pObject)
184 {
185 return subscribeEvent(A::EventID, Subscriber(pFn, pObject));
186 }
187
188 /**
189 * @brief 订阅事件(模板函数)
190 * @tparam A 事件参数类型
191 * @param pFn 函数指针
192 * @return 成功返回TRUE,失败返回FALSE
193 */
194 template <typename A>
195 BOOL subscribeEvent(BOOL (*pFn)(A *))
196 {
197 return subscribeEvent(A::EventID, Subscriber(pFn));
198 }
199
200 /**
201 * @brief 订阅事件(模板函数)
202 * @tparam T 对象类型
203 * @param pFn 成员函数指针
204 * @param pObject 对象指针
205 * @return 成功返回TRUE,失败返回FALSE
206 */
207 template <typename T>
208 BOOL subscribeEvent(DWORD dwEventID, BOOL (T::*pFn)(IEvtArgs *), T *pObject)
209 {
210 return subscribeEvent(dwEventID, Subscriber(pFn, this));
211 }
212
213 /**
214 * @brief 取消订阅事件
215 * @param dwEventID 事件ID
216 * @param subscriber 事件槽对象指针
217 * @return 成功返回TRUE,失败返回FALSE
218 */
219 BOOL unsubscribeEvent(DWORD dwEventID, const IEvtSlot *subscriber);
220
221 /**
222 * @brief 取消订阅事件
223 * @param dwEventID 事件ID
224 * @param subscriber 事件槽对象
225 * @return 成功返回TRUE,失败返回FALSE
226 */
227 BOOL unsubscribeEvent(DWORD dwEventID, const IEvtSlot &subscriber)
228 {
229 return unsubscribeEvent(dwEventID, &subscriber);
230 }
231
232 /**
233 * @brief 取消订阅事件(模板函数)
234 * @tparam T 对象类型
235 * @tparam A 事件参数类型
236 * @param pFn 成员函数指针
237 * @param pObject 对象指针
238 * @return 成功返回TRUE,失败返回FALSE
239 */
240 template <typename T, typename A>
241 BOOL unsubscribeEvent(BOOL (T::*pFn)(A *), T *pObject)
242 {
243 return unsubscribeEvent(A::EventID, Subscriber(pFn, pObject));
244 }
245
246 /**
247 * @brief 取消订阅事件(模板函数)
248 * @tparam A 事件参数类型
249 * @param pFn 函数指针
250 * @return 成功返回TRUE,失败返回FALSE
251 */
252 template <typename A>
253 BOOL unsubscribeEvent(BOOL (*pFn)(A *))
254 {
255 return unsubscribeEvent(A::EventID, Subscriber(pFn));
256 }
257
258 /**
259 * @brief 取消订阅事件(模板函数)
260 * @tparam T 对象类型
261 * @param pFn 成员函数指针
262 * @param pObject 对象指针
263 * @return 成功返回TRUE,失败返回FALSE
264 */
265 template <typename T>
266 BOOL unsubscribeEvent(DWORD dwEventID, BOOL (T::*pFn)(IEvtArgs *), T *pObject)
267 {
268 return unsubscribeEvent(dwEventID, Subscriber(pFn, this));
269 }
270
271 /**
272 * @brief 触发事件
273 * @param args 事件参数对象
274 */
275 void FireEvent(IEvtArgs *args);
276
277 /**
278 * @brief 检查事件集是否被静音
279 * @return 被静音返回TRUE,否则返回FALSE
280 */
281 BOOL isMuted(void) const
282 {
283 return m_nMuted > 0;
284 }
285
286 /**
287 * @brief 设置事件集的静音状态
288 * @param setting TRUE表示静音,FALSE表示取消静音
289 */
290 void setMutedState(BOOL setting);
291
292 protected:
293 /**
294 * @brief 获取事件对象
295 * @param dwEventID 事件ID
296 * @return 事件对象指针,未找到返回NULL
297 */
298 SEvent *GetEventObject(const DWORD dwEventID);
299
300 SArray<SEvent *> m_evtArr; ///< 事件数组
301 int m_nMuted; ///< 静音状态计数
302};
303
304SNSEND
305
306#endif // __SEVENTSET__H__
表示一个事件对象
Definition SEventSet.h:12
int findSlotFunctor(const IEvtSlot *slot)
查找事件槽对象
Definition SEventSet.cpp:42
SStringA m_strScriptHandler
脚本处理程序字符串
Definition SEventSet.h:80
BOOL unsubscribe(const IEvtSlot *slot)
取消订阅事件
Definition SEventSet.cpp:31
SStringW m_strEventName
事件名称
Definition SEventSet.h:79
BOOL subscribe(const IEvtSlot *slot)
订阅事件
Definition SEventSet.cpp:23
SEvent(DWORD dwEventID, LPCWSTR pszEventName)
构造函数
Definition SEventSet.cpp:8
DWORD GetID()
获取事件ID
Definition SEventSet.cpp:93
void fire(IEvtArgs *args)
触发事件
Definition SEventSet.cpp:54
SArray< IEvtSlot * > m_evtSlots
事件槽数组
Definition SEventSet.h:82
SStringA GetScriptHandler() const
获取脚本处理程序
Definition SEventSet.cpp:83
SStringW GetName() const
获取事件名称
Definition SEventSet.cpp:88
void SetScriptHandler(const SStringA &strScriptHandler)
设置脚本处理程序
Definition SEventSet.cpp:78
DWORD m_dwEventID
事件ID
Definition SEventSet.h:78
BOOL subscribeEvent(DWORD dwEventID, BOOL(T::*pFn)(IEvtArgs *), T *pObject)
订阅事件(模板函数)
Definition SEventSet.h:208
BOOL subscribeEvent(BOOL(T::*pFn)(A *), T *pObject)
订阅事件(模板函数)
Definition SEventSet.h:183
BOOL subscribeEvent(DWORD dwEventID, const IEvtSlot &subscriber)
订阅事件
Definition SEventSet.h:151
void removeAllEvents(void)
移除所有事件对象
SArray< SEvent * > m_evtArr
事件数组
Definition SEventSet.h:300
int m_nMuted
静音状态计数
Definition SEventSet.h:301
BOOL subscribeEvent(BOOL(*pFn)(A *))
订阅事件(模板函数)
Definition SEventSet.h:195
BOOL setEventScriptHandler(const SStringW &strEventName, const SStringA strScriptHandler)
设置事件的脚本处理程序
BOOL isEventPresent(DWORD dwEventID)
检查事件集是否包含指定ID的事件
BOOL unsubscribeEvent(DWORD dwEventID, const IEvtSlot *subscriber)
取消订阅事件
BOOL addEvent(DWORD dwEventID, LPCWSTR pszEventHandlerName)
添加一个新事件到事件集
BOOL unsubscribeEvent(BOOL(T::*pFn)(A *), T *pObject)
取消订阅事件(模板函数)
Definition SEventSet.h:241
BOOL unsubscribeEvent(DWORD dwEventID, BOOL(T::*pFn)(IEvtArgs *), T *pObject)
取消订阅事件(模板函数)
Definition SEventSet.h:266
BOOL unsubscribeEvent(BOOL(*pFn)(A *))
取消订阅事件(模板函数)
Definition SEventSet.h:253
BOOL removeEvent(DWORD dwEventID)
移除指定ID的事件
BOOL isMuted(void) const
检查事件集是否被静音
Definition SEventSet.h:281
BOOL unsubscribeEvent(DWORD dwEventID, const IEvtSlot &subscriber)
取消订阅事件
Definition SEventSet.h:227
SStringA getEventScriptHandler(const SStringW &strEventName) const
获取事件的脚本处理程序
SEventSet(void)
构造函数
A class representing an ASCII string.
Definition sstringa.h:96
A class representing an ASCII string.
Definition sstringw.h:96