wxPreRegisterAnyToVariant(this);
}
+wxAnyToVariantRegistration::~wxAnyToVariantRegistration()
+{
+}
+
wxVariant::wxVariant(const wxAny& any)
: wxObject()
{
if ( IsNull() )
return wxAny();
- wxVariantData* data = GetData();
wxAny any;
+ wxVariantData* data = GetData();
if ( data->GetAsAny(&any) )
return 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;
while (node)
{
wxVariant* pVar = node->GetData();
- dst.push_back(new wxAny(*pVar));
+ dst.push_back(new wxAny(((const wxVariant&)*pVar)));
node = node->GetNext();
}
*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;