git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@66651 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			114 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			114 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/////////////////////////////////////////////////////////////////////////////
 | 
						|
// Name:        wx/xtihandler.h
 | 
						|
// Purpose:     XTI handlers
 | 
						|
// Author:      Stefan Csomor
 | 
						|
// Modified by: Francesco Montorsi
 | 
						|
// Created:     27/07/03
 | 
						|
// RCS-ID:      $Id$
 | 
						|
// 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,     \
 | 
						|
                    CLASSINFO( 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_
 |