--- trunk/FAS/src/event.cpp 2002/08/20 17:54:47 91 +++ trunk/FAS/src/event.cpp 2002/08/20 23:26:55 92 @@ -15,7 +15,7 @@ * ************************************************************************ *Description: -* +* ***********************************************************************/ #include "event.h" /*********************************************************************** @@ -59,7 +59,20 @@ void TEventItem::RemoveHandler(PEventHandler handler) { _handlers.erase(i); } +} + +void TEventItem::ExecuteHandler(int eventType, TEvenPoster *poster, void *extra) +{ + PEventHandler handler; + switch (_object->GetEventObjectType()) + { + case TEventObjectType::BaseEventObject : + CallHandler(_object, _handlers, eventType, poster, extra); + break; + default: + ; + } } /*********************************************************************** * Class TEventItems @@ -75,13 +88,6 @@ void TEventItems::Clear() } _items.clear(); -} - -TEventItems::TEventItems() -{ - Clear(); - - SetType(TEventType::Unknown); } TEventItems::TEventItems(int eventType) @@ -161,12 +167,14 @@ TEventItem *TEventItems::GetEventItem(TEventObject *ob { return NULL; } - } -void TEventItems::Dispatch(TEventDispatcher *dispatcher, void *extra) -{ +void TEventItems::Dispatch(int eventType, TEvenPoster *poster, void *extra) +{ + for(int i=0; i < Count(); i++) + _items[i]->ExecuteHandler(eventType, poster, extra); } + /*********************************************************************** * Class TEventTable ***********************************************************************/ @@ -269,7 +277,7 @@ void TEventTable::Dispatch(int eventType, } void TEventTable::Dispatch(int eventType, - TEventDispatcher *dispatcher, void *extra) + TEvenPoster *poster, void *extra) { TEventItems *items; @@ -277,7 +285,7 @@ void TEventTable::Dispatch(int eventType, if (items != NULL) { - items->Dispatch(dispatcher, extra); + items->Dispatch(eventType,poster, extra); } else { @@ -296,30 +304,47 @@ void TEventObject::Register(int eventType, TEventObjec void TEventObject::Register(int eventType, TEventObject *object, PEventHandler handler) { - _table->AddItem(eventType, object, handler); + if (_table != NULL) + _table->AddItem(eventType, object, handler); } void TEventObject::UnRegister(int eventType, TEventObject *object, PEventHandler handler) { - _table->RemoveItem(eventType, object, handler); + if (_table != NULL) + _table->RemoveItem(eventType, object, handler); } void TEventObject::UnRegister(int eventType, TEventObject *object) { - _table->RemoveItem(eventType, object); + if (_table != NULL) + _table->RemoveItem(eventType, object); } void TEventObject::UnRegister(TEventObject *object) { - _table->RemoveItem(object); + if (_table != NULL) + _table->RemoveItem(object); } /*********************************************************************** -* Class TEventDispatcher +* Class TEvenPoster ***********************************************************************/ -void TEventDispatcher::Dispatch(int eventType, - TEventDispatcher *dispatcher,void *extra) +void TEvenPoster::PostEvent(int eventType, + TEvenPoster *poster, void *extra) { - _table->Dispatch(eventType, dispatcher, extra); + if (_table != NULL) + _table->Dispatch(eventType, poster, extra); } + +template CallHandler(T *object, const vector& handlers, + int eventType, TEvenPoster *poster, void *extra) +{ + PEventHandler handler; + + for(int i=0; i*handler)(eventType, poster, extra); + } +}