| 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 |
+ |
} |