# | Line 15 | Line 15 | |
---|---|---|
15 | * | |
16 | ************************************************************************ | |
17 | *Description: | |
18 | < | * |
18 | > | * |
19 | ***********************************************************************/ | |
20 | #include "event.h" | |
21 | /*********************************************************************** | |
# | Line 59 | Line 59 | void TEventItem::RemoveHandler(PEventHandler handler) | |
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 | |
# | Line 75 | Line 88 | void TEventItems::Clear() | |
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) | |
# | Line 161 | Line 167 | TEventItem *TEventItems::GetEventItem(TEventObject *ob | |
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 | ***********************************************************************/ | |
# | Line 269 | Line 277 | void TEventTable::Dispatch(int eventType, | |
277 | } | |
278 | ||
279 | void TEventTable::Dispatch(int eventType, | |
280 | < | TEventDispatcher *dispatcher, void *extra) |
280 | > | TEvenPoster *poster, void *extra) |
281 | { | |
282 | TEventItems *items; | |
283 | ||
# | Line 277 | Line 285 | void TEventTable::Dispatch(int eventType, | |
285 | ||
286 | if (items != NULL) | |
287 | { | |
288 | < | items->Dispatch(dispatcher, extra); |
288 | > | items->Dispatch(eventType,poster, extra); |
289 | } | |
290 | else | |
291 | { | |
# | Line 296 | Line 304 | void TEventObject::Register(int eventType, TEventObjec | |
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 | + | } |
– | Removed lines |
+ | Added lines |
< | Changed lines |
> | Changed lines |