+wxVariant::wxVariant(const char* val, const wxString& name)
+{
+ m_refData = new wxVariantDataString(wxString(val));
+ m_name = name;
+}
+
+wxVariant::wxVariant(const wchar_t* val, const wxString& name)
+{
+ m_refData = new wxVariantDataString(wxString(val));
+ m_name = name;
+}
+
+wxVariant::wxVariant(const wxCStrData& val, const wxString& name)
+{
+ m_refData = new wxVariantDataString(val.AsString());
+ m_name = name;
+}
+
+wxVariant::wxVariant(const wxScopedCharBuffer& val, const wxString& name)
+{
+ m_refData = new wxVariantDataString(wxString(val));
+ m_name = name;
+}
+
+wxVariant::wxVariant(const wxScopedWCharBuffer& val, const wxString& name)
+{
+ m_refData = new wxVariantDataString(wxString(val));
+ 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;
+ if (!Convert(&thisValue))
+ return false;
+
+ return value == thisValue;
+}
+
+bool wxVariant::operator!= (const wxString& value) const
+{
+ return (!((*this) == value));
+}
+
+wxVariant& wxVariant::operator= (const wxString& value)
+{
+ if (GetType() == wxT("string") &&
+ m_refData->GetRefCount() == 1)
+ {
+ ((wxVariantDataString*)GetData())->SetValue(value);
+ }
+ else
+ {
+ UnRef();
+ m_refData = new wxVariantDataString(value);
+ }
+ return *this;
+}
+
+wxString wxVariant::GetString() const
+{
+ wxString value;
+ if (!Convert(& value))
+ {
+ wxFAIL_MSG(wxT("Could not convert to a string"));
+ }
+
+ return value;
+}
+
+// ----------------------------------------------------------------------------
+// wxVariantDataWxObjectPtr
+// ----------------------------------------------------------------------------
+
+class wxVariantDataWxObjectPtr: public wxVariantData