xti.h

来自「A*算法 A*算法 A*算法 A*算法A*算法A*算法」· C头文件 代码 · 共 1,688 行 · 第 1/5 页

H
1,688
字号
           m_flags(flags),
           m_helpString(helpString),
           m_groupString(groupString)
       {
           Insert(iter);
       }

#if wxUSE_UNICODE
              wxPropertyInfo(wxPropertyInfo* &iter,
                      wxClassInfo* itsClass, const wxString& name,
                      const char* collectionTypeName,
                      const char* elementTypeName,
                      wxPropertyAccessor *accessor,
                      wxPropertyInfoFlags flags = 0,
                      const wxString& helpString = wxEmptyString,
                      const wxString& groupString = wxEmptyString) :
           m_itsClass(itsClass),
           m_name(name),
           m_typeInfo(NULL),
           m_typeName(wxString::FromAscii(collectionTypeName)) ,
           m_collectionElementTypeInfo(NULL),
           m_collectionElementTypeName(wxString::FromAscii(elementTypeName)),
           m_accessor(accessor) ,
           m_flags(flags),
           m_helpString(helpString),
           m_groupString(groupString)
       {
           Insert(iter);
       }
#endif
       ~wxPropertyInfo() ;

       // return the class this property is declared in
       const wxClassInfo*  GetDeclaringClass() const { return m_itsClass ; }

       // return the name of this property
       const wxString&     GetName() const { return m_name ; }

       // returns the flags of this property
       wxPropertyInfoFlags GetFlags() const { return m_flags ;}

       // returns the short help string of this property
       const wxString&     GetHelpString() const { return m_helpString ; }

       // returns the group string of this property
       const wxString&     GetGroupString() const { return m_groupString ; }

       // return the element type info of this property (for collections, otherwise NULL)
       const wxTypeInfo *  GetCollectionElementTypeInfo() const
       {
           if ( m_collectionElementTypeInfo == NULL )
               m_collectionElementTypeInfo = wxTypeInfo::FindType(m_collectionElementTypeName) ;
           return m_collectionElementTypeInfo ;
       }

       // return the type info of this property
       const wxTypeInfo *  GetTypeInfo() const
       {
           if ( m_typeInfo == NULL )
               m_typeInfo = wxTypeInfo::FindType(m_typeName) ;
           return m_typeInfo ;
       }

       // return the accessor for this property
       wxPropertyAccessor* GetAccessor() const { return m_accessor ; }

       // returns NULL if this is the last property of this class
       wxPropertyInfo*     GetNext() const { return m_next ; }

       // returns the default value of this property, its kind may be wxT_VOID if it is not valid
       wxxVariant          GetDefaultValue() const { return m_defaultValue ; }
private :
    void Insert(wxPropertyInfo* &iter)
    {
        m_next = NULL ;
        if ( iter == NULL )
            iter = this ;
        else
        {
            wxPropertyInfo* i = iter ;
            while( i->m_next )
                i = i->m_next ;

            i->m_next = this ;
        }
    }

    wxClassInfo*        m_itsClass ;
    wxString            m_name ;
    mutable wxTypeInfo*         m_typeInfo ;
    wxString            m_typeName ;
    mutable wxTypeInfo*         m_collectionElementTypeInfo ;
    wxString            m_collectionElementTypeName ;
    wxPropertyAccessor* m_accessor ;
    wxxVariant          m_defaultValue;
    wxPropertyInfoFlags m_flags ;
    wxString            m_helpString ;
    wxString            m_groupString ;
    // string representation of the default value
    //  to be assigned by the designer to the property
    //  when the component is dropped on the container.
    wxPropertyInfo*     m_next ;
};

WX_DECLARE_STRING_HASH_MAP_WITH_DECL( wxPropertyInfo* , wxPropertyInfoMap , class WXDLLIMPEXP_BASE ) ;

#define wxBEGIN_PROPERTIES_TABLE(theClass) \
    wxPropertyInfo *theClass::GetPropertiesStatic()  \
{  \
    typedef theClass class_t; \
    static wxPropertyInfo* first = NULL ;

#define wxEND_PROPERTIES_TABLE() \
    return first ; }

#define wxHIDE_PROPERTY( pname ) \
    static wxPropertyInfo _propertyInfo##pname( first , class_t::GetClassInfoStatic() , wxT(#pname) , typeid(void).name() ,NULL , wxxVariant() , wxPROP_DONT_STREAM , wxEmptyString , wxEmptyString ) ;

#define wxPROPERTY( pname , type , setter , getter , defaultValue , flags , help , group) \
    wxSETTER( pname , class_t , type , setter ) \
    static wxSetter##pname _setter##pname ; \
    wxGETTER( pname , class_t , type , getter ) \
    static wxGetter##pname _getter##pname ; \
    static wxPropertyAccessor _accessor##pname( &_setter##pname , &_getter##pname , NULL , NULL ) ; \
    static wxPropertyInfo _propertyInfo##pname( first , class_t::GetClassInfoStatic() , wxT(#pname) , typeid(type).name() ,&_accessor##pname , wxxVariant(defaultValue) , flags , group , help ) ;

#define wxPROPERTY_FLAGS( pname , flags , type , setter , getter ,defaultValue , pflags , help , group) \
    wxSETTER( pname , class_t , type , setter ) \
    static wxSetter##pname _setter##pname ; \
    wxGETTER( pname , class_t , type , getter ) \
    static wxGetter##pname _getter##pname ; \
    static wxPropertyAccessor _accessor##pname( &_setter##pname , &_getter##pname , NULL , NULL ) ; \
    static wxPropertyInfo _propertyInfo##pname( first , class_t::GetClassInfoStatic() , wxT(#pname) , typeid(flags).name() ,&_accessor##pname , wxxVariant(defaultValue), wxPROP_ENUM_STORE_LONG | pflags , help , group ) ;

#define wxREADONLY_PROPERTY( pname , type , getter ,defaultValue , flags , help , group) \
    wxGETTER( pname , class_t , type , getter ) \
    static wxGetter##pname _getter##pname ; \
    static wxPropertyAccessor _accessor##pname( NULL , &_getter##pname , NULL , NULL ) ; \
    static wxPropertyInfo _propertyInfo##pname( first , class_t::GetClassInfoStatic() , wxT(#pname) , typeid(type).name() ,&_accessor##pname , wxxVariant(defaultValue), flags , help , group ) ;

#define wxREADONLY_PROPERTY_FLAGS( pname , flags , type , getter ,defaultValue , pflags , help , group) \
    wxGETTER( pname , class_t , type , getter ) \
    static wxGetter##pname _getter##pname ; \
    static wxPropertyAccessor _accessor##pname( NULL , &_getter##pname , NULL , NULL ) ; \
    static wxPropertyInfo _propertyInfo##pname( first , class_t::GetClassInfoStatic() , wxT(#pname) , typeid(flags).name() ,&_accessor##pname , wxxVariant(defaultValue), wxPROP_ENUM_STORE_LONG | pflags , help , group ) ;

#define wxPROPERTY_COLLECTION( pname , colltype , addelemtype , adder , getter , flags , help , group ) \
    wxADDER( pname , class_t , addelemtype , adder ) \
    static wxAdder##pname _adder##pname ; \
    wxCOLLECTION_GETTER( pname , class_t , colltype , getter ) \
    static wxCollectionGetter##pname _collectionGetter##pname ; \
    static wxPropertyAccessor _accessor##pname( NULL , NULL ,&_adder##pname , &_collectionGetter##pname ) ; \
    static wxPropertyInfo _propertyInfo##pname( first , class_t::GetClassInfoStatic() , wxT(#pname) , typeid(colltype).name() ,typeid(addelemtype).name() ,&_accessor##pname , flags , help , group ) ;

#define wxREADONLY_PROPERTY_COLLECTION( pname , colltype , addelemtype , getter , flags , help , group) \
    wxCOLLECTION_GETTER( pname , class_t , colltype , getter ) \
    static wxCollectionGetter##pname _collectionGetter##pname ; \
    static wxPropertyAccessor _accessor##pname( NULL , NULL , NULL , &_collectionGetter##pname ) ; \
    static wxPropertyInfo _propertyInfo##pname( first ,class_t::GetClassInfoStatic() ,  wxT(#pname) , typeid(colltype).name() ,typeid(addelemtype).name() ,&_accessor##pname , flags , help , group  ) ;


#define wxEVENT_PROPERTY( name , eventType , eventClass ) \
    static wxDelegateTypeInfo _typeInfo##name( eventType , CLASSINFO( eventClass ) ) ; \
    static wxPropertyInfo _propertyInfo##name( first ,class_t::GetClassInfoStatic() , wxT(#name) , &_typeInfo##name , NULL , wxxVariant() ) ; \

#define wxEVENT_RANGE_PROPERTY( name , eventType , lastEventType , eventClass ) \
    static wxDelegateTypeInfo _typeInfo##name( eventType , lastEventType , CLASSINFO( eventClass ) ) ; \
    static wxPropertyInfo _propertyInfo##name( first , class_t::GetClassInfoStatic() , wxT(#name) , &_typeInfo##name , NULL , wxxVariant() ) ; \

// ----------------------------------------------------------------------------
// Implementation Helper for Simple Properties
// ----------------------------------------------------------------------------

#define wxIMPLEMENT_PROPERTY(name, type) \
private:\
    type m_##name; \
public: \
  void  Set##name( type const & p) { m_##name = p; } \
  type const & Get##name() const  { return m_##name; }

// ----------------------------------------------------------------------------
// Handler Info
//
// this is describing 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)
       {
           m_next = NULL ;
           if ( iter == NULL )
               iter = this ;
           else
           {
               wxHandlerInfo* i = iter ;
               while( i->m_next )
                   i = i->m_next ;

               i->m_next = this ;
           }
       }

       ~wxHandlerInfo() ;

       // 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 :
    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 ; }

// ----------------------------------------------------------------------------
// Constructor Bridges
//
// allow to set up constructors with params during runtime
// ----------------------------------------------------------------------------

class WXDLLIMPEXP_BASE wxConstructorBridge
{
public :
    virtual void Create(wxObject * &o, wxxVariant *args) = 0;
};

// a direct constructor bridge calls the operator new for this class and
// passes all params to the constructor. needed for classes that cannot be
// instantiated using alloc-create semantics
class WXDLLIMPEXP_BASE wxDirectConstructorBrigde : public wxConstructorBridge
{
public :
    virtual void Create(wxObject * &o, wxxVariant *args) = 0;
} ;

// Creator Bridges for all Numbers of Params

// no params

template<typename Class>
struct wxConstructorBridge_0 : public wxConstructorBridge
{
    void Create(wxObject * &o, wxxVariant *)
    {
        Class *obj = dynamic_cast<Class*>(o);
        obj->Create();
    }
};

struct wxConstructorBridge_Dummy : public wxConstructorBridge
{
    void Create(wxObject *&, wxxVariant *)
    {
    }
} ;

#define wxCONSTRUCTOR_0(klass) \
    wxConstructorBridge_0<klass> constructor##klass ; \
    wxConstructorBridge* klass::ms_constructor = &constructor##klass ; \
    const wxChar *klass::ms_constructorProperties[] = { NULL } ; \
    const int klass::ms_constructorPropertiesCount = 0 ;

#define wxCONSTRUCTOR_DUMMY(klass) \
    wxConstructorBridge_Dummy constructor##klass ; \
    wxConstructorBridge* klass::ms_constructor = &constructor##klass ; \
    const wxChar *klass::ms_constructorProperties[] = { NULL } ; \
    const int klass::ms_constructorPropertiesCount = 0 ;

// 1 param

template<typename Class, typename T0>
struct wxConstructorBridge_1 : public wxConstructorBridge
{
    void Create(wxObject * &o, wxxVariant *args)
    {
        Class *obj = dynamic_cast<Class*>(o);
        obj->Create(
            args[0].wxTEMPLATED_MEMBER_CALL(Get , T0)
            );
    }
};

#define wxCONSTRUCTOR_1(klass,t0,v0) \
    wxConstructorBridge_1<klass,t0> constructor##klass ; \
    wxConstructorBridge* klass::ms_constructor = &constructor##klass ; \
    const wxChar *klass::ms_constructorProperties[] = { wxT(#v0) } ; \
    const int klass::ms_constructorPropertiesCount = 1 ;

// 2 params

template<typename Class,
typename T0, typename T1>
struct wxConstructorBridge_2 : public wxConstructorBridge
{
    void Create(wxObject * &o, wxxVariant *args)
    {
        Class *obj = dynamic_cast<Class*>(o);
        obj->Create(
            args[0].wxTEMPLATED_MEMBER_CALL(Get , T0) ,
            args[1].wxTEMPLATED_MEMBER_CALL(Get , T1)
            );
    }

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?