15 |
|
* |
16 |
|
************************************************************************ |
17 |
|
*Description: |
18 |
< |
* |
18 |
> |
* |
19 |
|
***********************************************************************/ |
20 |
|
#include "event.h" |
21 |
|
/*********************************************************************** |
59 |
|
{ |
60 |
|
_handlers.erase(i); |
61 |
|
} |
62 |
+ |
} |
63 |
|
|
64 |
+ |
|
65 |
+ |
void TEventItem::ExecuteHandler(int eventType, TEvenPoster *poster, void *extra) |
66 |
+ |
{ |
67 |
+ |
PEventHandler handler; |
68 |
+ |
switch (_object->GetEventObjectType()) |
69 |
+ |
{ |
70 |
+ |
case TEventObjectType::BaseEventObject : |
71 |
+ |
CallHandler<TEventObject>(_object, _handlers, eventType, poster, extra); |
72 |
+ |
break; |
73 |
+ |
default: |
74 |
+ |
; |
75 |
+ |
} |
76 |
|
} |
77 |
|
/*********************************************************************** |
78 |
|
* Class TEventItems |
88 |
|
} |
89 |
|
|
90 |
|
_items.clear(); |
78 |
– |
} |
79 |
– |
|
80 |
– |
TEventItems::TEventItems() |
81 |
– |
{ |
82 |
– |
Clear(); |
83 |
– |
|
84 |
– |
SetType(TEventType::Unknown); |
91 |
|
} |
92 |
|
|
93 |
|
TEventItems::TEventItems(int eventType) |
167 |
|
{ |
168 |
|
return NULL; |
169 |
|
} |
164 |
– |
|
170 |
|
} |
166 |
– |
void TEventItems::Dispatch(TEventDispatcher *dispatcher, void *extra) |
167 |
– |
{ |
171 |
|
|
172 |
+ |
void TEventItems::Dispatch(int eventType, TEvenPoster *poster, void *extra) |
173 |
+ |
{ |
174 |
+ |
for(int i=0; i < Count(); i++) |
175 |
+ |
_items[i]->ExecuteHandler(eventType, poster, extra); |
176 |
|
} |
177 |
+ |
|
178 |
|
/*********************************************************************** |
179 |
|
* Class TEventTable |
180 |
|
***********************************************************************/ |
277 |
|
} |
278 |
|
|
279 |
|
void TEventTable::Dispatch(int eventType, |
280 |
< |
TEventDispatcher *dispatcher, void *extra) |
280 |
> |
TEvenPoster *poster, void *extra) |
281 |
|
{ |
282 |
|
TEventItems *items; |
283 |
|
|
285 |
|
|
286 |
|
if (items != NULL) |
287 |
|
{ |
288 |
< |
items->Dispatch(dispatcher, extra); |
288 |
> |
items->Dispatch(eventType,poster, extra); |
289 |
|
} |
290 |
|
else |
291 |
|
{ |
304 |
|
void TEventObject::Register(int eventType, TEventObject *object, |
305 |
|
PEventHandler handler) |
306 |
|
{ |
307 |
< |
_table->AddItem(eventType, object, handler); |
307 |
> |
if (_table != NULL) |
308 |
> |
_table->AddItem(eventType, object, handler); |
309 |
|
} |
310 |
|
|
311 |
|
void TEventObject::UnRegister(int eventType, TEventObject *object, |
312 |
|
PEventHandler handler) |
313 |
|
{ |
314 |
< |
_table->RemoveItem(eventType, object, handler); |
314 |
> |
if (_table != NULL) |
315 |
> |
_table->RemoveItem(eventType, object, handler); |
316 |
|
} |
317 |
|
|
318 |
|
void TEventObject::UnRegister(int eventType, TEventObject *object) |
319 |
|
{ |
320 |
< |
_table->RemoveItem(eventType, object); |
320 |
> |
if (_table != NULL) |
321 |
> |
_table->RemoveItem(eventType, object); |
322 |
|
} |
323 |
|
|
324 |
|
void TEventObject::UnRegister(TEventObject *object) |
325 |
|
{ |
326 |
< |
_table->RemoveItem(object); |
326 |
> |
if (_table != NULL) |
327 |
> |
_table->RemoveItem(object); |
328 |
|
} |
329 |
|
/*********************************************************************** |
330 |
< |
* Class TEventDispatcher |
330 |
> |
* Class TEvenPoster |
331 |
|
***********************************************************************/ |
332 |
< |
void TEventDispatcher::Dispatch(int eventType, |
333 |
< |
TEventDispatcher *dispatcher,void *extra) |
332 |
> |
void TEvenPoster::PostEvent(int eventType, |
333 |
> |
TEvenPoster *poster, void *extra) |
334 |
|
{ |
335 |
< |
_table->Dispatch(eventType, dispatcher, extra); |
335 |
> |
if (_table != NULL) |
336 |
> |
_table->Dispatch(eventType, poster, extra); |
337 |
|
} |
338 |
|
|
339 |
+ |
|
340 |
+ |
template<class T> CallHandler(T *object, const vector<PEventHandler>& handlers, |
341 |
+ |
int eventType, TEvenPoster *poster, void *extra) |
342 |
+ |
{ |
343 |
+ |
PEventHandler handler; |
344 |
+ |
|
345 |
+ |
for(int i=0; i<handlers.size(); i++) |
346 |
+ |
{ |
347 |
+ |
handler = handlers[i]; |
348 |
+ |
(object->*handler)(eventType, poster, extra); |
349 |
+ |
} |
350 |
+ |
} |