| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- /////////////////////////////////////////////////////////////////////////////
- // Name: wx/xtihandler.h
- // Purpose: XTI handlers
- // Author: Stefan Csomor
- // Modified by: Francesco Montorsi
- // Created: 27/07/03
- // Copyright: (c) 1997 Julian Smart
- // (c) 2003 Stefan Csomor
- // Licence: wxWindows licence
- /////////////////////////////////////////////////////////////////////////////
- #ifndef _XTIHANDLER_H_
- #define _XTIHANDLER_H_
- #include "wx/defs.h"
- #if wxUSE_EXTENDED_RTTI
- #include "wx/xti.h"
- // copied from event.h which cannot be included at this place
- class WXDLLIMPEXP_FWD_BASE wxEvent;
- #ifdef __VISUALC__
- #define wxMSVC_FWD_MULTIPLE_BASES __multiple_inheritance
- #else
- #define wxMSVC_FWD_MULTIPLE_BASES
- #endif
- class WXDLLIMPEXP_FWD_BASE wxMSVC_FWD_MULTIPLE_BASES wxEvtHandler;
- typedef void (wxEvtHandler::*wxEventFunction)(wxEvent&);
- typedef wxEventFunction wxObjectEventFunction;
- // ----------------------------------------------------------------------------
- // Handler Info
- //
- // this describes an event sink
- // ----------------------------------------------------------------------------
- class WXDLLIMPEXP_BASE wxHandlerInfo
- {
- friend class WXDLLIMPEXP_BASE wxDynamicClassInfo;
- public:
- wxHandlerInfo(wxHandlerInfo* &iter,
- wxClassInfo* itsClass,
- const wxString& name,
- wxObjectEventFunction address,
- const wxClassInfo* eventClassInfo) :
- m_eventFunction(address),
- m_name(name),
- m_eventClassInfo(eventClassInfo),
- m_itsClass(itsClass)
- {
- Insert(iter);
- }
- ~wxHandlerInfo()
- { Remove(); }
- // return the name of this handler
- const wxString& GetName() const { return m_name; }
- // return the class info of the event
- const wxClassInfo *GetEventClassInfo() const { return m_eventClassInfo; }
- // get the handler function pointer
- wxObjectEventFunction GetEventFunction() const { return m_eventFunction; }
- // returns NULL if this is the last handler of this class
- wxHandlerInfo* GetNext() const { return m_next; }
- // return the class this property is declared in
- const wxClassInfo* GetDeclaringClass() const { return m_itsClass; }
- private:
- // inserts this handler at the end of the linked chain which begins
- // with "iter" handler.
- void Insert(wxHandlerInfo* &iter);
- // removes this handler from the linked chain of the m_itsClass handlers.
- void Remove();
- wxObjectEventFunction m_eventFunction;
- wxString m_name;
- const wxClassInfo* m_eventClassInfo;
- wxHandlerInfo* m_next;
- wxClassInfo* m_itsClass;
- };
- #define wxHANDLER(name,eventClassType) \
- static wxHandlerInfo _handlerInfo##name( first, class_t::GetClassInfoStatic(), \
- wxT(#name), (wxObjectEventFunction) (wxEventFunction) &name, \
- wxCLASSINFO( eventClassType ) );
- #define wxBEGIN_HANDLERS_TABLE(theClass) \
- wxHandlerInfo *theClass::GetHandlersStatic() \
- { \
- typedef theClass class_t; \
- static wxHandlerInfo* first = NULL;
- #define wxEND_HANDLERS_TABLE() \
- return first; }
- #define wxEMPTY_HANDLERS_TABLE(theClass) \
- wxBEGIN_HANDLERS_TABLE(theClass) \
- wxEND_HANDLERS_TABLE()
- #endif // wxUSE_EXTENDED_RTTI
- #endif // _XTIHANDLER_H_
|