-
-
-/*
- * wxVariant
- */
-
-IMPLEMENT_DYNAMIC_CLASS(wxVariant, wxObject)
-
-// Construction & destruction
-wxVariant::wxVariant()
-{
-    m_data = (wxVariantData*) NULL;
-}
-
-wxVariant::wxVariant(double val, const wxString& name)
-{
-    m_data = new wxVariantDataReal(val);
-    m_name = name;
-}
-
-wxVariant::wxVariant(long val, const wxString& name)
-{
-    m_data = new wxVariantDataLong(val);
-    m_name = name;
-}
-
-#ifdef HAVE_BOOL
-wxVariant::wxVariant(bool val, const wxString& name)
-{
-    m_data = new wxVariantDataBool(val);
-    m_name = name;
-}
-#endif
-
-wxVariant::wxVariant(char val, const wxString& name)
-{
-    m_data = new wxVariantDataChar(val);
-    m_name = name;
-}
-
-wxVariant::wxVariant(const wxString& val, const wxString& name)
-{
-    m_data = new wxVariantDataString(val);
-    m_name = name;
-}
-
-wxVariant::wxVariant(const wxChar* val, const wxString& name)
-{
-    m_data = new wxVariantDataString(wxString(val));
-    m_name = name;
-}
-
-#if WXWIN_COMPATIBILITY_2_4
-
-wxVariant::wxVariant(const wxStringList& val, const wxString& name)
-{
-    m_data = new wxVariantDataStringList(val);
-    m_name = name;
-}
-
-#endif
-
-wxVariant::wxVariant(const wxList& val, const wxString& name) // List of variants
-{
-    m_data = new wxVariantDataList(val);
-    m_name = name;
-}
-
-wxVariant::wxVariant( void* val, const wxString& name)
-{
-    m_data = new wxVariantDataVoidPtr(val);
-    m_name = name;
-}
-
-wxVariant::wxVariant( wxObject* val, const wxString& name)
-{
-    m_data = new wxVariantDataWxObjectPtr(val);
-    m_name = name;
-}
-
-#if wxUSE_DATETIME
-wxVariant::wxVariant(const wxDateTime& val, const wxString& name) // Date
-{
-    m_data = new wxVariantDataDateTime(val);
-    m_name = name;
-}
-#endif // wxUSE_DATETIME
-
-#if wxUSE_ODBC
-wxVariant::wxVariant(const TIME_STRUCT* valptr, const wxString& name) // Date
-{
-    m_data = new wxVariantDataDateTime(valptr);
-    m_name = name;
-}
-
-wxVariant::wxVariant(const TIMESTAMP_STRUCT* valptr, const wxString& name) // Date
-{
-    m_data = new wxVariantDataDateTime(valptr);
-    m_name = name;
-}
-
-wxVariant::wxVariant(const DATE_STRUCT* valptr, const wxString& name) // Date
-{
-    m_data = new wxVariantDataDateTime(valptr);
-    m_name = name;
-}
-#endif // wxUSE_ODBC
-
-wxVariant::wxVariant(const wxArrayString& val, const wxString& name) // Strings
-{
-    m_data = new wxVariantDataArrayString(val);
-    m_name = name;
-}
-
-wxVariant::wxVariant(const wxVariant& variant)
-    : wxObject()
-{
-    if (!variant.IsNull())
-    {
-        m_data = (wxVariantData*) variant.GetData()->GetClassInfo()->CreateObject();
-        variant.m_data->Copy(*m_data);
-    }
-    else
-        m_data = (wxVariantData*) NULL;
-    m_name = variant.m_name;
-}
-
-wxVariant::wxVariant(wxVariantData* data, const wxString& name) // User-defined data
-{
-    m_data = data;
-    m_name = name;
-}
-
-wxVariant::~wxVariant()
-{
-    delete m_data;
-}
-
-
-// Make NULL (i.e. delete the data)
-void wxVariant::MakeNull()
-{
-    delete m_data;
-    m_data = NULL;
-}
-
-// Generic operators
-// Assignment
-void wxVariant::operator= (const wxVariant& variant)
-{
-    if (variant.IsNull())
-    {
-        MakeNull();
-        return;
-    }
-
-    if (IsNull() || (GetType() != variant.GetType()))
-    {
-        if (m_data)
-            delete m_data;
-        m_data = (wxVariantData*) variant.GetData()->GetClassInfo()->CreateObject();
-    }
-
-    variant.GetData()->Copy(* GetData());
-
-    m_name = variant.m_name;
-}
-
-// Assignment using data, e.g.
-// myVariant = new wxStringVariantData("hello")
-void wxVariant::operator= (wxVariantData* variantData)
-{
-    MakeNull();
-    m_data = variantData;
-}
-
-bool wxVariant::operator== (const wxVariant& variant) const
-{
-    if (IsNull() || variant.IsNull())
-        return (IsNull() == variant.IsNull());
-
-    return (GetData()->Eq(* variant.GetData()));
-}
-
-bool wxVariant::operator!= (const wxVariant& variant) const
-{
-    return (!(*this == variant));
-}
-
-
-// Specific operators
-bool wxVariant::operator== (double value) const
-{
-    double thisValue;
-    if (!Convert(&thisValue))
-        return false;
-
-    return wxIsSameDouble(value, thisValue);
-}
-
-bool wxVariant::operator!= (double value) const
-{
-    return (!((*this) == value));
-}
-
-void wxVariant::operator= (double value)
-{
-    if (GetType() == wxT("double"))
-    {
-        ((wxVariantDataReal*)GetData())->SetValue(value);
-    }
-    else
-    {
-        if (m_data)
-            delete m_data;
-        m_data = new wxVariantDataReal(value);
-    }
-}
-
-bool wxVariant::operator== (long value) const
-{
-    long thisValue;
-    if (!Convert(&thisValue))
-        return false;
-    else
-        return (value == thisValue);
-}
-
-bool wxVariant::operator!= (long value) const
-{
-    return (!((*this) == value));
-}
-
-void wxVariant::operator= (long value)
-{
-    if (GetType() == wxT("long"))
-    {
-        ((wxVariantDataLong*)GetData())->SetValue(value);
-    }
-    else
-    {
-        if (m_data)
-            delete m_data;
-        m_data = new wxVariantDataLong(value);
-    }
-}
-
-bool wxVariant::operator== (char value) const
-{
-    char thisValue;
-    if (!Convert(&thisValue))
-        return false;
-    else
-        return (value == thisValue);
-}
-
-bool wxVariant::operator!= (char value) const
-{
-    return (!((*this) == value));
-}
-
-void wxVariant::operator= (char value)
-{
-    if (GetType() == wxT("char"))
-    {
-        ((wxVariantDataChar*)GetData())->SetValue(value);
-    }
-    else
-    {
-        if (m_data)
-            delete m_data;
-        m_data = new wxVariantDataChar(value);
-    }
-}
-
-#ifdef HAVE_BOOL
-bool wxVariant::operator== (bool value) const
-{
-    bool thisValue;
-    if (!Convert(&thisValue))
-        return false;
-    else
-        return (value == thisValue);
-}
-
-bool wxVariant::operator!= (bool value) const