// Author: Julian Smart
// Modified by:
// Created: 10/09/98
-// RCS-ID: $Id$
// Copyright: (c)
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#endif
#endif
-#if defined(__MWERKS__) && __MSL__ >= 0x6000
-namespace std {}
-using namespace std ;
-#endif
-
#if wxUSE_STREAMS
#include "wx/txtstrm.h"
#endif
wxPreRegisterAnyToVariant(this);
}
+wxAnyToVariantRegistration::~wxAnyToVariantRegistration()
+{
+}
+
wxVariant::wxVariant(const wxAny& any)
: wxObject()
{
wxAny wxVariant::GetAny() const
{
- wxAny any;
-
if ( IsNull() )
- return wxAny((const wxAny&)any);
+ return wxAny();
+ wxAny any;
wxVariantData* data = GetData();
if ( data->GetAsAny(&any) )
- return wxAny((const wxAny&)any);
+ return any;
// If everything else fails, wrap the whole wxVariantData
- return wxAny(((wxVariantData*)data));
+ return wxAny(data);
}
#endif // wxUSE_ANY
virtual wxString GetType() const { return wxT("long"); }
+#if wxUSE_ANY
// Since wxAny does not have separate type for integers shorter than
// longlong, we do not usually implement wxVariant->wxAny conversion
// here (but in wxVariantDataLongLong instead).
-#ifndef wxLongLong_t
+ #ifndef wxLongLong_t
DECLARE_WXANY_CONVERSION()
-#else
+ #else
bool GetAsAny(wxAny* any) const
{
*any = m_value;
return true;
}
-#endif
+ #endif
+#endif // wxUSE_ANY
protected:
long m_value;
IMPLEMENT_TRIVIAL_WXANY_CONVERSION(wxString, wxVariantDataString)
+#if wxUSE_ANY
+// This allows converting string literal wxAnys to string variants
+wxVariantData* wxVariantDataFromConstCharPAny(const wxAny& any)
+{
+ return new wxVariantDataString(wxANY_AS(any, const char*));
+}
+
+wxVariantData* wxVariantDataFromConstWchar_tPAny(const wxAny& any)
+{
+ return new wxVariantDataString(wxANY_AS(any, const wchar_t*));
+}
+
+_REGISTER_WXANY_CONVERSION(const char*,
+ ConstCharP,
+ wxVariantDataFromConstCharPAny)
+_REGISTER_WXANY_CONVERSION(const wchar_t*,
+ ConstWchar_tP,
+ wxVariantDataFromConstWchar_tPAny)
+#endif
+
bool wxVariantDataString::Eq(wxVariantData& data) const
{
wxASSERT_MSG( (data.GetType() == wxT("string")), wxT("wxVariantDataString::Eq: argument mismatch") );
m_name = name;
}
+#if wxUSE_STD_STRING
+wxVariant::wxVariant(const std::string& val, const wxString& name)
+{
+ m_refData = new wxVariantDataString(wxString(val));
+ m_name = name;
+}
+
+wxVariant::wxVariant(const wxStdWideString& val, const wxString& name)
+{
+ m_refData = new wxVariantDataString(wxString(val));
+ m_name = name;
+}
+#endif // wxUSE_STD_STRING
+
bool wxVariant::operator== (const wxString& value) const
{
wxString thisValue;
// Convert to/from list of wxAnys
//
-WX_DEFINE_LIST(wxAnyList)
-
bool wxVariantDataList::GetAsAny(wxAny* any) const
{
wxAnyList dst;
*value = (char) (((wxVariantDataLong*)GetData())->GetValue());
else if (type == wxT("bool"))
*value = (char) (((wxVariantDataBool*)GetData())->GetValue());
+ else if (type == wxS("string"))
+ {
+ // Also accept strings of length 1
+ const wxString& str = (((wxVariantDataString*)GetData())->GetValue());
+ if ( str.length() == 1 )
+ *value = str[0];
+ else
+ return false;
+ }
else
return false;