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 + -
显示快捷键?