1 #ifndef GUI_UTILS___EVENT_HANDLER__HPP
2 #define GUI_UTILS___EVENT_HANDLER__HPP
81 #define DECLARE_EVENT_MAP() \
83 static const SEvtMapEntry sm_EvtMapEntries[]; \
85 static const SEvtMap sm_EvtMap; \
86 virtual const SEvtMap* GetEventMap() const
89 #define BEGIN_EVENT_MAP(thisClass, baseClass) \
90 const SEvtMap* thisClass::GetEventMap() const \
91 { return &thisClass::sm_EvtMap; } \
92 const SEvtMap thisClass::sm_EvtMap = \
93 { &baseClass::sm_EvtMap, &thisClass::sm_EvtMapEntries[0] }; \
94 const SEvtMapEntry thisClass::sm_EvtMapEntries[] = \
98 #define END_EVENT_MAP() \
99 { CEvent::eEvent_Message, typeid(void).name(), \
100 CEvent::eEvent_InvalidID, CEvent::eEvent_InvalidID, 0} \
103 #define ON_EVENT(type, id, handler) \
104 { ncbi::CEvent::eEvent_Message, typeid(type).name(), id, id, (FEventHandler) handler },
106 #define ON_EVENT_RANGE(type, id, id_last, handler) \
107 { CEvent::eEvent_Message, typeid(type).name(), id, id_last, (FEventHandler) handler },
144 eDispatch_Default = eDispatch_AllHandlers
171 typedef void (*FOnPostCallback)();
183 int pool_name = ePool_Default);
189 virtual void RemoveAllListeners(
void);
193 int pool_name = ePool_Default)
const;
196 virtual const TListeners* GetListeners(
int pool_name = ePool_Default)
const;
199 virtual bool OnEvent(
CEvent * evt);
203 virtual bool Dispatch(
CEvent* evt,
205 int pool_name = ePool_Default);
209 virtual bool Send(
CEvent* evt,
211 int pool_name = ePool_Default);
212 virtual bool Send(
CEvent* evt,
int pool_name);
220 int pool_name = ePool_Default);
228 static bool HandlePostRequest();
231 static void ClearPostQueue();
232 static void DestroyPostQueue();
240 void x_DeclareDead();
242 void x_AddListenerToPool(
CEventHandler* listener,
int pool_name);
254 static void DestroyInstance();
259 bool ExecuteFirstRequest();
CPostQueue - singleton queue for asynchronous events all methods are synchronized.
CEvent - generic event implementation TODO TODO - Attachments.
void(*)(CSeq_entry_Handle seh, IWorkbench *wb, const CSerialObject &obj) handler
CMutex m_Mutex
queue of Events for async sending
CEvent::EEventClass evt_class
vector< CEventHandler * > TListeners
CEvent::TEventID last_id
Event ID (or ID range start)
FEventHandler handler
Envent ID range end.
const char * TEventTypeInfo
const SEvtMapEntry * entries
pointer to command map of the base class
CEvent::TEventID id
Type Information.
void(CEventHandler::* FEventHandler)(CEvent *)
event handler
CEvent::TEventTypeInfo type_info
message or command or update
std::map< CEventHandler *, int > THandlerToCount
EEventClass
default event classes
THandlerToCount m_AliveTargets
the only instance
EDispatch
enum controlling dispatching strategies
#define DECLARE_EVENT_MAP()
map< int, TListeners > TPools
CRef< CPostQueue > m_Queue
static CRef< CPostQueue > sm_PostQueue
CPostQueue.
list< AutoPtr< SPostRequest > > TPostRequests
EPoolName
Identifiers for standard pools.
@ eDispatch_AllHandlers
handle and do not dispatch to listeners
@ eDispatch_FirstHandler
dispatch to all handlers
#define END_NCBI_SCOPE
End previously defined NCBI scope.
#define BEGIN_NCBI_SCOPE
Define ncbi namespace.
#define NCBI_GUIUTILS_EXPORT
Defines NCBI C++ exception handling.
Multi-threading – mutexes; rw-locks; semaphore.