fixed to make wxVariant compatible with both ANSI and Unicode modes
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@47207 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -215,28 +215,60 @@ public:
|
|||||||
|
|
||||||
// wxString
|
// wxString
|
||||||
wxVariant(const wxString& val, const wxString& name = wxEmptyString);
|
wxVariant(const wxString& val, const wxString& name = wxEmptyString);
|
||||||
wxVariant(const wxChar* val, const wxString& name = wxEmptyString); // Necessary or VC++ assumes bool!
|
// these overloads are necessary to prevent the compiler from using bool
|
||||||
|
// version instead of wxString one:
|
||||||
|
wxVariant(const char* val, const wxString& name = wxEmptyString);
|
||||||
|
wxVariant(const wchar_t* val, const wxString& name = wxEmptyString);
|
||||||
|
wxVariant(const wxCStrData& val, const wxString& name = wxEmptyString);
|
||||||
|
wxVariant(const wxCharBuffer& val, const wxString& name = wxEmptyString);
|
||||||
|
wxVariant(const wxWCharBuffer& val, const wxString& name = wxEmptyString);
|
||||||
|
|
||||||
bool operator== (const wxString& value) const;
|
bool operator== (const wxString& value) const;
|
||||||
bool operator!= (const wxString& value) const;
|
bool operator!= (const wxString& value) const;
|
||||||
void operator= (const wxString& value) ;
|
wxVariant& operator=(const wxString& value);
|
||||||
void operator= (const wxChar* value) ; // Necessary or VC++ assumes bool!
|
// these overloads are necessary to prevent the compiler from using bool
|
||||||
|
// version instead of wxString one:
|
||||||
|
wxVariant& operator=(const char* value)
|
||||||
|
{ return *this = wxString(value); }
|
||||||
|
wxVariant& operator=(const wchar_t* value)
|
||||||
|
{ return *this = wxString(value); }
|
||||||
|
wxVariant& operator=(const wxCStrData& value)
|
||||||
|
{ return *this = value.AsString(); }
|
||||||
|
template<typename T>
|
||||||
|
wxVariant& operator=(const wxCharTypeBuffer<T>& value)
|
||||||
|
{ return *this = value.data(); }
|
||||||
|
|
||||||
inline operator wxString () const { return MakeString(); }
|
inline operator wxString () const { return MakeString(); }
|
||||||
wxString GetString() const;
|
wxString GetString() const;
|
||||||
|
|
||||||
// wxChar
|
// wxUniChar
|
||||||
wxVariant(wxChar val, const wxString& name = wxEmptyString);
|
wxVariant(const wxUniChar& val, const wxString& name = wxEmptyString);
|
||||||
bool operator== (wxChar value) const;
|
wxVariant(const wxUniCharRef& val, const wxString& name = wxEmptyString);
|
||||||
bool operator!= (wxChar value) const;
|
wxVariant(char val, const wxString& name = wxEmptyString);
|
||||||
void operator= (wxChar value) ;
|
wxVariant(wchar_t val, const wxString& name = wxEmptyString);
|
||||||
inline operator wxChar () const { return GetChar(); }
|
bool operator==(const wxUniChar& value) const;
|
||||||
wxChar GetChar() const ;
|
bool operator==(const wxUniCharRef& value) const { return *this == wxUniChar(value); }
|
||||||
|
bool operator==(char value) const { return *this == wxUniChar(value); }
|
||||||
|
bool operator==(wchar_t value) const { return *this == wxUniChar(value); }
|
||||||
|
bool operator!=(const wxUniChar& value) const { return !(*this == value); }
|
||||||
|
bool operator!=(const wxUniCharRef& value) const { return !(*this == value); }
|
||||||
|
bool operator!=(char value) const { return !(*this == value); }
|
||||||
|
bool operator!=(wchar_t value) const { return !(*this == value); }
|
||||||
|
wxVariant& operator=(const wxUniChar& value);
|
||||||
|
wxVariant& operator=(const wxUniCharRef& value) { return *this = wxUniChar(value); }
|
||||||
|
wxVariant& operator=(char value) { return *this = wxUniChar(value); }
|
||||||
|
wxVariant& operator=(wchar_t value) { return *this = wxUniChar(value); }
|
||||||
|
operator wxUniChar() const { return GetChar(); }
|
||||||
|
operator char() const { return GetChar(); }
|
||||||
|
operator wchar_t() const { return GetChar(); }
|
||||||
|
wxUniChar GetChar() const;
|
||||||
|
|
||||||
// wxArrayString
|
// wxArrayString
|
||||||
wxVariant(const wxArrayString& val, const wxString& name = wxEmptyString);
|
wxVariant(const wxArrayString& val, const wxString& name = wxEmptyString);
|
||||||
bool operator== (const wxArrayString& value) const;
|
bool operator== (const wxArrayString& value) const;
|
||||||
bool operator!= (const wxArrayString& value) const;
|
bool operator!= (const wxArrayString& value) const;
|
||||||
void operator= (const wxArrayString& value);
|
void operator= (const wxArrayString& value);
|
||||||
inline operator wxArrayString () const { return GetArrayString(); }
|
operator wxArrayString () const { return GetArrayString(); }
|
||||||
wxArrayString GetArrayString() const;
|
wxArrayString GetArrayString() const;
|
||||||
|
|
||||||
// void*
|
// void*
|
||||||
@@ -244,7 +276,7 @@ public:
|
|||||||
bool operator== (void* value) const;
|
bool operator== (void* value) const;
|
||||||
bool operator!= (void* value) const;
|
bool operator!= (void* value) const;
|
||||||
void operator= (void* value);
|
void operator= (void* value);
|
||||||
inline operator void* () const { return GetVoidPtr(); }
|
operator void* () const { return GetVoidPtr(); }
|
||||||
void* GetVoidPtr() const;
|
void* GetVoidPtr() const;
|
||||||
|
|
||||||
// wxObject*
|
// wxObject*
|
||||||
@@ -295,7 +327,9 @@ public:
|
|||||||
bool Convert(bool* value) const;
|
bool Convert(bool* value) const;
|
||||||
bool Convert(double* value) const;
|
bool Convert(double* value) const;
|
||||||
bool Convert(wxString* value) const;
|
bool Convert(wxString* value) const;
|
||||||
bool Convert(wxChar* value) const;
|
bool Convert(wxUniChar* value) const;
|
||||||
|
bool Convert(char* value) const;
|
||||||
|
bool Convert(wchar_t* value) const;
|
||||||
#if wxUSE_DATETIME
|
#if wxUSE_DATETIME
|
||||||
bool Convert(wxDateTime* value) const;
|
bool Convert(wxDateTime* value) const;
|
||||||
#endif // wxUSE_DATETIME
|
#endif // wxUSE_DATETIME
|
||||||
|
@@ -643,10 +643,10 @@ class WXDLLIMPEXP_BASE wxVariantDataChar: public wxVariantData
|
|||||||
DECLARE_DYNAMIC_CLASS(wxVariantDataChar)
|
DECLARE_DYNAMIC_CLASS(wxVariantDataChar)
|
||||||
public:
|
public:
|
||||||
wxVariantDataChar() { m_value = 0; }
|
wxVariantDataChar() { m_value = 0; }
|
||||||
wxVariantDataChar(wxChar value) { m_value = value; }
|
wxVariantDataChar(const wxUniChar& value) { m_value = value; }
|
||||||
|
|
||||||
inline wxChar GetValue() const { return m_value; }
|
inline wxUniChar GetValue() const { return m_value; }
|
||||||
inline void SetValue(wxChar value) { m_value = value; }
|
inline void SetValue(const wxUniChar& value) { m_value = value; }
|
||||||
|
|
||||||
virtual bool Eq(wxVariantData& data) const;
|
virtual bool Eq(wxVariantData& data) const;
|
||||||
#if wxUSE_STD_IOSTREAM
|
#if wxUSE_STD_IOSTREAM
|
||||||
@@ -662,7 +662,7 @@ public:
|
|||||||
virtual wxString GetType() const { return wxT("char"); }
|
virtual wxString GetType() const { return wxT("char"); }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
wxChar m_value;
|
wxUniChar m_value;
|
||||||
};
|
};
|
||||||
|
|
||||||
IMPLEMENT_DYNAMIC_CLASS(wxVariantDataChar, wxVariantData)
|
IMPLEMENT_DYNAMIC_CLASS(wxVariantDataChar, wxVariantData)
|
||||||
@@ -679,16 +679,14 @@ bool wxVariantDataChar::Eq(wxVariantData& data) const
|
|||||||
#if wxUSE_STD_IOSTREAM
|
#if wxUSE_STD_IOSTREAM
|
||||||
bool wxVariantDataChar::Write(wxSTD ostream& str) const
|
bool wxVariantDataChar::Write(wxSTD ostream& str) const
|
||||||
{
|
{
|
||||||
wxString s;
|
str << wxString(m_value);
|
||||||
Write(s);
|
|
||||||
str << (const char*) s.mb_str();
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bool wxVariantDataChar::Write(wxString& str) const
|
bool wxVariantDataChar::Write(wxString& str) const
|
||||||
{
|
{
|
||||||
str.Printf(wxT("%c"), m_value);
|
str = m_value;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -706,7 +704,9 @@ bool wxVariantDataChar::Write(wxOutputStream& str) const
|
|||||||
{
|
{
|
||||||
wxTextOutputStream s(str);
|
wxTextOutputStream s(str);
|
||||||
|
|
||||||
s << m_value;
|
// FIXME-UTF8: this should be just "s << m_value;" after removal of
|
||||||
|
// ANSI build and addition of wxUniChar to wxTextOutputStream:
|
||||||
|
s << (wxChar)m_value;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -715,7 +715,11 @@ bool wxVariantDataChar::Read(wxInputStream& str)
|
|||||||
{
|
{
|
||||||
wxTextInputStream s(str);
|
wxTextInputStream s(str);
|
||||||
|
|
||||||
s >> m_value;
|
// FIXME-UTF8: this should be just "s >> m_value;" after removal of
|
||||||
|
// ANSI build and addition of wxUniChar to wxTextInputStream:
|
||||||
|
wxChar ch;
|
||||||
|
s >> ch;
|
||||||
|
m_value = ch;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -723,31 +727,38 @@ bool wxVariantDataChar::Read(wxInputStream& str)
|
|||||||
|
|
||||||
bool wxVariantDataChar::Read(wxString& str)
|
bool wxVariantDataChar::Read(wxString& str)
|
||||||
{
|
{
|
||||||
m_value = str[size_t(0)];
|
m_value = str[0u];
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxVariant::wxVariant(wxChar val, const wxString& name)
|
wxVariant::wxVariant(const wxUniChar& val, const wxString& name)
|
||||||
{
|
{
|
||||||
m_data = new wxVariantDataChar(val);
|
m_data = new wxVariantDataChar(val);
|
||||||
m_name = name;
|
m_name = name;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wxVariant::operator== (wxChar value) const
|
wxVariant::wxVariant(char val, const wxString& name)
|
||||||
{
|
{
|
||||||
wxChar thisValue;
|
m_data = new wxVariantDataChar(val);
|
||||||
|
m_name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxVariant::wxVariant(wchar_t val, const wxString& name)
|
||||||
|
{
|
||||||
|
m_data = new wxVariantDataChar(val);
|
||||||
|
m_name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxVariant::operator==(const wxUniChar& value) const
|
||||||
|
{
|
||||||
|
wxUniChar thisValue;
|
||||||
if (!Convert(&thisValue))
|
if (!Convert(&thisValue))
|
||||||
return false;
|
return false;
|
||||||
else
|
else
|
||||||
return (value == thisValue);
|
return (value == thisValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wxVariant::operator!= (wxChar value) const
|
wxVariant& wxVariant::operator=(const wxUniChar& value)
|
||||||
{
|
|
||||||
return (!((*this) == value));
|
|
||||||
}
|
|
||||||
|
|
||||||
void wxVariant::operator= (wxChar value)
|
|
||||||
{
|
{
|
||||||
if (GetType() == wxT("char") &&
|
if (GetType() == wxT("char") &&
|
||||||
m_data->GetRefCount() == 1)
|
m_data->GetRefCount() == 1)
|
||||||
@@ -759,17 +770,19 @@ void wxVariant::operator= (wxChar value)
|
|||||||
UnRef();
|
UnRef();
|
||||||
m_data = new wxVariantDataChar(value);
|
m_data = new wxVariantDataChar(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxChar wxVariant::GetChar() const
|
wxUniChar wxVariant::GetChar() const
|
||||||
{
|
{
|
||||||
wxChar value;
|
wxUniChar value;
|
||||||
if (Convert(& value))
|
if (Convert(& value))
|
||||||
return value;
|
return value;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
wxFAIL_MSG(wxT("Could not convert to a char"));
|
wxFAIL_MSG(wxT("Could not convert to a char"));
|
||||||
return 0;
|
return wxUniChar(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -863,7 +876,31 @@ wxVariant::wxVariant(const wxString& val, const wxString& name)
|
|||||||
m_name = name;
|
m_name = name;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxVariant::wxVariant(const wxChar* val, const wxString& name)
|
wxVariant::wxVariant(const char* val, const wxString& name)
|
||||||
|
{
|
||||||
|
m_data = new wxVariantDataString(wxString(val));
|
||||||
|
m_name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxVariant::wxVariant(const wchar_t* val, const wxString& name)
|
||||||
|
{
|
||||||
|
m_data = new wxVariantDataString(wxString(val));
|
||||||
|
m_name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxVariant::wxVariant(const wxCStrData& val, const wxString& name)
|
||||||
|
{
|
||||||
|
m_data = new wxVariantDataString(val.AsString());
|
||||||
|
m_name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxVariant::wxVariant(const wxCharBuffer& val, const wxString& name)
|
||||||
|
{
|
||||||
|
m_data = new wxVariantDataString(wxString(val));
|
||||||
|
m_name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxVariant::wxVariant(const wxWCharBuffer& val, const wxString& name)
|
||||||
{
|
{
|
||||||
m_data = new wxVariantDataString(wxString(val));
|
m_data = new wxVariantDataString(wxString(val));
|
||||||
m_name = name;
|
m_name = name;
|
||||||
@@ -883,7 +920,7 @@ bool wxVariant::operator!= (const wxString& value) const
|
|||||||
return (!((*this) == value));
|
return (!((*this) == value));
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxVariant::operator= (const wxString& value)
|
wxVariant& wxVariant::operator= (const wxString& value)
|
||||||
{
|
{
|
||||||
if (GetType() == wxT("string") &&
|
if (GetType() == wxT("string") &&
|
||||||
m_data->GetRefCount() == 1)
|
m_data->GetRefCount() == 1)
|
||||||
@@ -895,20 +932,7 @@ void wxVariant::operator= (const wxString& value)
|
|||||||
UnRef();
|
UnRef();
|
||||||
m_data = new wxVariantDataString(value);
|
m_data = new wxVariantDataString(value);
|
||||||
}
|
}
|
||||||
}
|
return *this;
|
||||||
|
|
||||||
void wxVariant::operator= (const wxChar* value)
|
|
||||||
{
|
|
||||||
if (GetType() == wxT("string") &&
|
|
||||||
m_data->GetRefCount() == 1)
|
|
||||||
{
|
|
||||||
((wxVariantDataString*)GetData())->SetValue(wxString(value));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
UnRef();
|
|
||||||
m_data = new wxVariantDataString(wxString(value));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
wxString wxVariant::GetString() const
|
wxString wxVariant::GetString() const
|
||||||
@@ -1812,7 +1836,7 @@ bool wxVariant::Convert(double* value) const
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wxVariant::Convert(wxChar* value) const
|
bool wxVariant::Convert(wxUniChar* value) const
|
||||||
{
|
{
|
||||||
wxString type(GetType());
|
wxString type(GetType());
|
||||||
if (type == wxT("char"))
|
if (type == wxT("char"))
|
||||||
@@ -1829,6 +1853,24 @@ bool wxVariant::Convert(wxChar* value) const
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool wxVariant::Convert(char* value) const
|
||||||
|
{
|
||||||
|
wxUniChar ch;
|
||||||
|
if ( !Convert(&ch) )
|
||||||
|
return false;
|
||||||
|
*value = ch;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxVariant::Convert(wchar_t* value) const
|
||||||
|
{
|
||||||
|
wxUniChar ch;
|
||||||
|
if ( !Convert(&ch) )
|
||||||
|
return false;
|
||||||
|
*value = ch;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool wxVariant::Convert(wxString* value) const
|
bool wxVariant::Convert(wxString* value) const
|
||||||
{
|
{
|
||||||
*value = MakeString();
|
*value = MakeString();
|
||||||
|
Reference in New Issue
Block a user