- 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;
- else
- return (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
-{
- return (!((*this) == value));
-}
-
-void wxVariant::operator= (bool value)
-{
- if (GetType() == wxT("bool"))
- {
- ((wxVariantDataBool*)GetData())->SetValue(value);
- }
- else
- {
- if (m_data)
- delete m_data;
- m_data = new wxVariantDataBool(value);
- }
-}
-#endif // HAVE_BOOL
-
-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));
-}
-
-void wxVariant::operator= (const wxString& value)
-{
- if (GetType() == wxT("string"))
- {
- ((wxVariantDataString*)GetData())->SetValue(value);
- }
- else
- {
- if (m_data)
- delete m_data;
- m_data = new wxVariantDataString(value);
- }
-}
-
-void wxVariant::operator= (const wxChar* value)
-{
- if (GetType() == wxT("string"))
- {
- ((wxVariantDataString*)GetData())->SetValue(wxString(value));
- }
- else
- {
- if (m_data)
- delete m_data;
- m_data = new wxVariantDataString(wxString(value));
- }
-}
-
-bool wxVariant::operator== (const wxStringList& value) const
-{
- wxASSERT_MSG( (GetType() == wxT("stringlist")), wxT("Invalid type for == operator") );
-
- wxVariantDataStringList other(value);
- return (m_data->Eq(other));
-}
-
-bool wxVariant::operator!= (const wxStringList& value) const
-{
- return (!((*this) == value));
-}
-
-void wxVariant::operator= (const wxStringList& value)
-{
- if (GetType() == wxT("stringlist"))
- {
- ((wxVariantDataStringList*)GetData())->SetValue(value);
- }
- else
- {
- if (m_data)
- delete m_data;
- m_data = new wxVariantDataStringList(value);
- }
-}
-
-bool wxVariant::operator== (const wxList& value) const
-{
- wxASSERT_MSG( (GetType() == wxT("list")), wxT("Invalid type for == operator") );
-
- wxVariantDataList other(value);
- return (m_data->Eq(other));
-}
-
-bool wxVariant::operator!= (const wxList& value) const
-{
- return (!((*this) == value));
-}
-
-void wxVariant::operator= (const wxList& value)
-{
- if (GetType() == wxT("list"))
- {
- ((wxVariantDataList*)GetData())->SetValue(value);
- }
- else
- {
- if (m_data)
- delete m_data;
- m_data = new wxVariantDataList(value);
- }
-}
-
-// For some reason, Watcom C++ can't link variant.cpp with time/date classes compiled
-#if wxUSE_TIMEDATE && !defined(__WATCOMC__)
-bool wxVariant::operator== (const wxTime& value) const
-{
- wxTime thisValue;
- if (!Convert(&thisValue))
- return FALSE;
-
- return value == thisValue;
-}
-
-bool wxVariant::operator!= (const wxTime& value) const
-{
- return (!((*this) == value));
-}
-
-void wxVariant::operator= (const wxTime& value)
-{
- if (GetType() == wxT("time"))
- {
- ((wxVariantDataTime*)GetData())->SetValue(value);
- }
- else
- {
- if (m_data)
- delete m_data;
- m_data = new wxVariantDataTime(value);
- }
-}
-
-bool wxVariant::operator== (const wxDate& value) const
-{
- wxDate thisValue;
- if (!Convert(&thisValue))
- return FALSE;
-
- return (value == thisValue);
-}
-
-bool wxVariant::operator!= (const wxDate& value) const
-{
- return (!((*this) == value));
-}
-
-void wxVariant::operator= (const wxDate& value)
-{
- if (GetType() == wxT("date"))
- {
- ((wxVariantDataTime*)GetData())->SetValue(value);
- }
- else
- {
- if (m_data)
- delete m_data;
- m_data = new wxVariantDataDate(value);
- }
-}
-#endif
-
-bool wxVariant::operator== (void* value) const
-{
- return (value == ((wxVariantDataVoidPtr*)GetData())->GetValue());
-}
-
-bool wxVariant::operator!= (void* value) const
-{
- return (!((*this) == (void*) value));
-}
-
-void wxVariant::operator= (void* value)
-{
- if (GetType() == wxT("void*"))
- {
- ((wxVariantDataVoidPtr*)GetData())->SetValue(value);
- }
- else
- {
- if (m_data)
- delete m_data;
- m_data = new wxVariantDataVoidPtr(value);
- }
-}
-
-bool wxVariant::operator== (const wxDateTime& value) const
-{
- wxDateTime thisValue;
- if (!Convert(&thisValue))
- return FALSE;
-
- return value.IsEqualTo(thisValue);
-}
-
-bool wxVariant::operator!= (const wxDateTime& value) const
-{
- return (!((*this) == value));
-}
-
-void wxVariant::operator= (const wxDateTime& value)
-{
- if (GetType() == wxT("datetime"))
- {
- ((wxVariantDataDateTime*)GetData())->SetValue(value);
- }
- else
- {
- if (m_data)
- delete m_data;
- m_data = new wxVariantDataDateTime(value);
- }
-}
-
-#if wxUSE_ODBC
-void wxVariant::operator= (const DATE_STRUCT* value)
-{
- if (m_data)
- delete m_data;
- m_data = new wxVariantDataDateTime(value);
-}
-
-
-void wxVariant::operator= (const TIME_STRUCT* value)
-{
- if (m_data)
- delete m_data;
- m_data = new wxVariantDataDateTime(value);
-}
-
-
-void wxVariant::operator= (const TIMESTAMP_STRUCT* value)
-{
- if (m_data)
- delete m_data;
- m_data = new wxVariantDataDateTime(value);
-}
-
-#endif // wxUSE_ODBC
-
-bool wxVariant::operator==(const wxArrayString& WXUNUSED(value)) const
-{
- wxFAIL_MSG( _T("TODO") );
-
- return FALSE;
-}
-
-bool wxVariant::operator!=(const wxArrayString& value) const
-{
- return !(*this == value);
-}
-
-void wxVariant::operator=(const wxArrayString& value)
-{
- if (GetType() == wxT("arrstring"))
- {
- ((wxVariantDataArrayString *)GetData())->SetValue(value);
- }
- else
- {
- delete m_data;
- m_data = new wxVariantDataArrayString(value);
- }
-}
-
-wxArrayString wxVariant::GetArrayString() const
-{
- if ( GetType() == wxT("arrstring") )
- return ((wxVariantDataArrayString *)GetData())->GetValue();
-
- return wxArrayString();
-}
-
-
-// Treat a list variant as an array
-wxVariant wxVariant::operator[] (size_t idx) const
-{
- wxASSERT_MSG( (GetType() == wxT("list") || GetType() == wxT("stringlist")), wxT("Invalid type for array operator") );
-
- if (GetType() == wxT("list"))
- {
- wxVariantDataList* data = (wxVariantDataList*) m_data;
- wxASSERT_MSG( (idx < (size_t) data->GetValue().Number()), wxT("Invalid index for array") );
- return * (wxVariant*) (data->GetValue().Nth(idx)->Data());
- }
- else if (GetType() == wxT("stringlist"))
- {
- wxVariantDataStringList* data = (wxVariantDataStringList*) m_data;
- wxASSERT_MSG( (idx < (size_t) data->GetValue().Number()), wxT("Invalid index for array") );
-
- wxVariant variant( wxString( (wxChar*) (data->GetValue().Nth(idx)->Data()) ));
- return variant;
- }
- return wxNullVariant;
-}
-
-wxVariant& wxVariant::operator[] (size_t idx)
-{
- // We can't return a reference to a variant for a string list, since the string
- // is actually stored as a char*, not a variant.
-
- wxASSERT_MSG( (GetType() == wxT("list")), wxT("Invalid type for array operator") );
-
- wxVariantDataList* data = (wxVariantDataList*) m_data;
- wxASSERT_MSG( (idx < (size_t) data->GetValue().Number()), wxT("Invalid index for array") );
-
- return * (wxVariant*) (data->GetValue().Nth(idx)->Data());
-}
-
-// Return the number of elements in a list
-int wxVariant::GetCount() const
-{
- wxASSERT_MSG( (GetType() == wxT("list") || GetType() == wxT("stringlist")), wxT("Invalid type for GetCount()") );
-
- if (GetType() == wxT("list"))
- {
- wxVariantDataList* data = (wxVariantDataList*) m_data;
- return data->GetValue().Number();
- }
- else if (GetType() == wxT("stringlist"))
- {
- wxVariantDataStringList* data = (wxVariantDataStringList*) m_data;
- return data->GetValue().Number();
- }
- return 0;
-}
-
-wxString wxVariant::MakeString() const
-{
- if (!IsNull())
- {
- wxString str;
- if (GetData()->Write(str))
- return str;
- }
- return wxString(wxT(""));
-}
-
-// Accessors
-
-void wxVariant::SetData(wxVariantData* data)
-{
- if (m_data) delete m_data;
- m_data = data;