wxEnumData s_enumData##e( s_enumDataMembers##e ); \
wxEnumData *wxGetEnumData(e) { return &s_enumData##e; } \
template<> void wxStringReadValue(const wxString& s, e &data ) \
- { data = (e) s_enumData##e.GetEnumMemberValue(s); } \
+ { data = (e) s_enumData##e.GetEnumMemberValue(s.c_str()); } \
template<> void wxStringWriteValue(wxString &s, const e &data ) \
{ s = s_enumData##e.GetEnumMemberName((int)data); } \
- void FromLong##e( long data, wxVariantBase& result ) \
- { result = wxVariantBase((e)data); } \
- void ToLong##e( const wxVariantBase& data, long &result ) \
- { result = (long) data.wxTEMPLATED_MEMBER_CALL(Get, e); } \
+ void FromLong##e( long data, wxAny& result ) \
+ { result = wxAny((e)data); } \
+ void ToLong##e( const wxAny& data, long &result ) \
+ { result = (long) (data).As(static_cast<e*>(NULL)); } \
\
wxTO_STRING_IMP( e ) \
wxFROM_STRING_IMP( e ) \
//
// ----------------------------------------------------------------------------
-// in order to remove dependancy on string tokenizer
void WXDLLIMPEXP_BASE wxSetStringToArray( const wxString &s, wxArrayString &array );
template<typename e>
{
flag = array[i];
int ivalue;
- if ( edata->HasEnumMemberValue( flag, &ivalue ) )
+ if ( edata->HasEnumMemberValue( flag.c_str(), &ivalue ) )
{
data.set( (e) ivalue );
}
{ wxSetFromString( s, data ); } \
template<> void wxStringWriteValue( wxString &s, const wxBitset<e> &data ) \
{ wxSetToString( s, data ); } \
- void FromLong##SetName( long data, wxVariantBase& result ) \
- { result = wxVariantBase(SetName((unsigned long)data)); } \
- void ToLong##SetName( const wxVariantBase& data, long &result ) \
- { result = (long) data.wxTEMPLATED_MEMBER_CALL(Get, SetName).to_ulong(); } \
+ void FromLong##SetName( long data, wxAny& result ) \
+ { result = wxAny(SetName((unsigned long)data)); } \
+ void ToLong##SetName( const wxAny& data, long &result ) \
+ { result = (long) (data).As(static_cast<SetName*>(NULL)).to_ulong(); } \
wxTO_STRING_IMP( SetName ) \
wxFROM_STRING_IMP( SetName ) \
wxEnumTypeInfo s_typeInfo##SetName(wxT_SET, &s_enumData##e, \
{
flag = array[i];
int ivalue;
- if ( edata->HasEnumMemberValue( flag, &ivalue ) )
+ if ( edata->HasEnumMemberValue( flag.c_str(), &ivalue ) )
{
data.m_data |= ivalue;
}
{ wxFlagsFromString<e>( s, data ); } \
template<> void wxStringWriteValue( wxString &s, const e& data ) \
{ wxFlagsToString<e>( s, data ); } \
- void FromLong##e( long data, wxVariantBase& result ) \
- { result = wxVariantBase(e(data)); } \
- void ToLong##e( const wxVariantBase& data, long &result ) \
- { result = (long) data.wxTEMPLATED_MEMBER_CALL(Get, e).m_data; } \
+ void FromLong##e( long data, wxAny& result ) \
+ { result = wxAny(e(data)); } \
+ void ToLong##e( const wxAny& data, long &result ) \
+ { result = (long) (data).As(static_cast<e*>(NULL)).m_data; } \
wxTO_STRING_IMP( e ) \
wxFROM_STRING_IMP( e ) \
wxEnumTypeInfo s_typeInfo##e(wxT_SET, &s_enumData##e, \
wxT_UINT,
wxT_LONG,
wxT_ULONG,
+ wxT_LONGLONG,
+ wxT_ULONGLONG,
wxT_FLOAT,
wxT_DOUBLE,
wxT_STRING, // must be wxString
wxT_LAST_TYPE_KIND = wxT_DELEGATE // sentinel for bad data, asserts, debugging
};
-class WXDLLIMPEXP_BASE wxVariantBase;
+class WXDLLIMPEXP_BASE wxAny;
class WXDLLIMPEXP_BASE wxTypeInfo;
WX_DECLARE_STRING_HASH_MAP_WITH_DECL( wxTypeInfo*, wxTypeInfoMap, class WXDLLIMPEXP_BASE );
class WXDLLIMPEXP_BASE wxTypeInfo
{
public:
- typedef void (*wxVariant2StringFnc)( const wxVariantBase& data, wxString &result );
- typedef void (*wxString2VariantFnc)( const wxString& data, wxVariantBase &result );
+ typedef void (*wxVariant2StringFnc)( const wxAny& data, wxString &result );
+ typedef void (*wxString2VariantFnc)( const wxString& data, wxAny &result );
wxTypeInfo(wxTypeKind kind,
wxVariant2StringFnc to = NULL, wxString2VariantFnc from = NULL,
{
Register();
}
-#if wxUSE_UNICODE
+#if 0 // wxUSE_UNICODE
wxTypeInfo(wxTypeKind kind,
wxVariant2StringFnc to, wxString2VariantFnc from,
const char *name):
// can the content of this type be converted to and from strings ?
bool HasStringConverters() const { return m_toString != NULL && m_fromString != NULL; }
- // convert a wxVariantBase holding data of this type into a string
- void ConvertToString( const wxVariantBase& data, wxString &result ) const
+ // convert a wxAny holding data of this type into a string
+ void ConvertToString( const wxAny& data, wxString &result ) const
{
if ( m_toString )
(*m_toString)( data, result );
else
- wxLogError( wxGetTranslation(_T("String conversions not supported")) );
+ wxLogError( wxGetTranslation(wxT("String conversions not supported")) );
}
- // convert a string into a wxVariantBase holding the corresponding data in this type
- void ConvertFromString( const wxString& data, wxVariantBase &result ) const
+ // convert a string into a wxAny holding the corresponding data in this type
+ void ConvertFromString( const wxString& data, wxAny &result ) const
{
if( m_fromString )
(*m_fromString)( data, result );
else
- wxLogError( wxGetTranslation(_T("String conversions not supported")) );
+ wxLogError( wxGetTranslation(wxT("String conversions not supported")) );
}
// statics:
-#if wxUSE_UNICODE
- static wxTypeInfo *FindType(const char *typeName)
- { return FindType( wxString::FromAscii(typeName) ); }
-#endif
- static wxTypeInfo *FindType(const wxChar *typeName);
- static wxTypeInfo *FindType(const wxString& typeName)
- {
-#if wxUSE_UNICODE
- return FindType( typeName.wchar_str() );
-#else
- return FindType( typeName.char_str() );
-#endif
- }
-
+ // looks for the corresponding type, will return NULL if not found
+ static wxTypeInfo *FindType( const wxString& typeName );
private:
void Register();
void Unregister();
const wxString &name = wxEmptyString ) :
wxTypeInfo( kind, to, from, name )
{ wxASSERT_MSG( GetKind() < wxT_SET, wxT("Illegal Kind for Base Type") ); }
-
-#if wxUSE_UNICODE
- wxBuiltInTypeInfo( wxTypeKind kind, wxVariant2StringFnc to,
- wxString2VariantFnc from , const char *name ) :
- wxTypeInfo( kind, to, from, name )
- { wxASSERT_MSG( GetKind() < wxT_SET, wxT("Illegal Kind for Base Type") ); }
-#endif
};
class WXDLLIMPEXP_BASE wxCustomTypeInfo : public wxTypeInfo
wxString2VariantFnc from ) :
wxTypeInfo( wxT_CUSTOM, to, from, name )
{}
-
-#if wxUSE_UNICODE
- wxCustomTypeInfo( const char *name , wxVariant2StringFnc to,
- wxString2VariantFnc from ) :
- wxTypeInfo( wxT_CUSTOM, to, from, name )
- {}
-#endif
};
class WXDLLIMPEXP_BASE wxEnumTypeInfo : public wxTypeInfo
{
public:
- typedef void (*converterToLong_t)( const wxVariantBase& data, long &result );
- typedef void (*converterFromLong_t)( long data, wxVariantBase &result );
+ typedef void (*converterToLong_t)( const wxAny& data, long &result );
+ typedef void (*converterFromLong_t)( long data, wxAny &result );
wxEnumTypeInfo( wxTypeKind kind, wxEnumData* enumInfo, wxVariant2StringFnc to,
wxString2VariantFnc from, converterToLong_t toLong,
m_enumInfo = enumInfo;
}
-#if wxUSE_UNICODE
- wxEnumTypeInfo( wxTypeKind kind, wxEnumData* enumInfo, wxVariant2StringFnc to,
- wxString2VariantFnc from, converterToLong_t toLong,
- converterFromLong_t fromLong, const char * name ) :
- wxTypeInfo( kind, to, from, name ), m_toLong( toLong ), m_fromLong( fromLong )
- {
- wxASSERT_MSG( kind == wxT_ENUM || kind == wxT_SET,
- wxT("Illegal Kind for Enum Type"));
- m_enumInfo = enumInfo;
- }
-#endif
const wxEnumData* GetEnumData() const { return m_enumInfo; }
- // convert a wxVariantBase holding data of this type into a long
- void ConvertToLong( const wxVariantBase& data, long &result ) const
+ // convert a wxAny holding data of this type into a long
+ void ConvertToLong( const wxAny& data, long &result ) const
{
if( m_toLong )
(*m_toLong)( data, result );
else
- wxLogError( wxGetTranslation(_T("Long Conversions not supported")) );
+ wxLogError( wxGetTranslation(wxT("Long Conversions not supported")) );
}
- // convert a long into a wxVariantBase holding the corresponding data in this type
- void ConvertFromLong( long data, wxVariantBase &result ) const
+ // convert a long into a wxAny holding the corresponding data in this type
+ void ConvertFromLong( long data, wxAny &result ) const
{
if( m_fromLong )
(*m_fromLong)( data, result );
else
- wxLogError( wxGetTranslation(_T("Long Conversions not supported")) );
+ wxLogError( wxGetTranslation(wxT("Long Conversions not supported")) );
}
private:
wxVariant2StringFnc to = NULL, wxString2VariantFnc from = NULL,
const wxString &name = wxEmptyString);
-#if wxUSE_UNICODE
- wxClassTypeInfo( wxTypeKind kind, wxClassInfo* classInfo, wxVariant2StringFnc to,
- wxString2VariantFnc from , const char *name );
-#endif
-
const wxClassInfo *GetClassInfo() const { return m_classInfo; }
private:
wxTypeInfo( wxT_COLLECTION, to, from, name )
{ m_elementTypeName = elementName; m_elementType = NULL; }
-#if wxUSE_UNICODE
- wxCollectionTypeInfo( const char *elementName, wxVariant2StringFnc to,
- wxString2VariantFnc from , const char *name ) :
- wxTypeInfo( wxT_COLLECTION, to, from, name )
- { m_elementTypeName = wxString::FromAscii( elementName ); m_elementType = NULL; }
-#endif
-
const wxTypeInfo* GetElementType() const
{
if ( m_elementType == NULL )
int m_lastEventType;
};
-template<typename T> const wxTypeInfo* wxGetTypeInfo( T * ) \
+template<typename T> const wxTypeInfo* wxGetTypeInfo( T * )
{ return wxTypeInfo::FindType(typeid(T).name()); }
// this macro is for usage with custom, non-object derived classes and structs,
wxCustomTypeInfo s_typeInfo##e(typeid(e).name(), &toString, &fromString);
#else
#define wxCUSTOM_TYPE_INFO( e, toString, fromString ) \
- void ToString##e( const wxVariantBase& data, wxString &result ) \
+ void ToString##e( const wxAny& data, wxString &result ) \
{ toString(data, result); } \
- void FromString##e( const wxString& data, wxVariantBase &result ) \
+ void FromString##e( const wxString& data, wxAny &result ) \
{ fromString(data, result); } \
wxCustomTypeInfo s_typeInfo##e(typeid(e).name(), \
&ToString##e, &FromString##e);