]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/variant.cpp
Use gdk_window_invalidate instead of gtk_widget_queue_draw as the latter doesn't...
[wxWidgets.git] / src / common / variant.cpp
index 42c9742966a9e51bd8f1c01c5caf0aa2cc5effd0..627edfbef604c42ad8cfd7bbae749eebaf28189c 100644 (file)
@@ -63,12 +63,12 @@ IMPLEMENT_DYNAMIC_CLASS(wxVariant, wxObject)
 
 wxVariant::wxVariant()
 {
-    m_data = (wxVariantData*) NULL;
+    m_data = NULL;
 }
 
 bool wxVariant::IsNull() const
 {
-     return (m_data == (wxVariantData*) NULL);
+     return (m_data == NULL);
 }
 
 void wxVariant::MakeNull()
@@ -84,7 +84,7 @@ void wxVariant::Clear()
 wxVariant::wxVariant(const wxVariant& variant)
     : wxObject()
 {
-    m_data = (wxVariantData*) NULL;
+    m_data = NULL;
 
     if (!variant.IsNull())
         Ref(variant);
@@ -517,8 +517,6 @@ double wxVariant::GetDouble() const
 // wxVariantBoolData
 // -----------------------------------------------------------------
 
-#ifdef HAVE_BOOL
-
 class WXDLLIMPEXP_BASE wxVariantDataBool: public wxVariantData
 {
 public:
@@ -654,8 +652,6 @@ bool wxVariant::GetBool() const
     }
 }
 
-#endif // HAVE_BOOL
-
 // -----------------------------------------------------------------
 // wxVariantDataChar
 // -----------------------------------------------------------------
@@ -1038,7 +1034,7 @@ bool wxVariantDataWxObjectPtr::Write(wxSTD ostream& str) const
 
 bool wxVariantDataWxObjectPtr::Write(wxString& str) const
 {
-    str.Printf(wxT("%s(%p)"), GetType().c_str(), wx_static_cast(void*, m_value));
+    str.Printf(wxT("%s(%p)"), GetType().c_str(), static_cast<void*>(m_value));
     return true;
 }
 
@@ -1186,7 +1182,11 @@ void wxVariant::operator= (void* value)
 
 void* wxVariant::GetVoidPtr() const
 {
-    wxASSERT( (GetType() == wxT("void*")) );
+    // handling this specially is convenient when working with COM, see #9873
+    if ( IsNull() )
+        return NULL;
+
+    wxASSERT( GetType() == wxT("void*") );
 
     return (void*) ((wxVariantDataVoidPtr*) m_data)->GetValue();
 }
@@ -1246,7 +1246,10 @@ bool wxVariantDataDateTime::Write(wxSTD ostream& str) const
 
 bool wxVariantDataDateTime::Write(wxString& str) const
 {
-    str = m_value.Format();
+    if ( m_value.IsValid() )
+        str = m_value.Format();
+    else
+        str = wxS("Invalid");
     return true;
 }
 
@@ -1262,6 +1265,12 @@ bool wxVariantDataDateTime::Read(wxSTD istream& WXUNUSED(str))
 
 bool wxVariantDataDateTime::Read(wxString& str)
 {
+    if ( str == wxS("Invalid") )
+    {
+        m_value = wxInvalidDateTime;
+        return true;
+    }
+
     if(! m_value.ParseDateTime(str.c_str()/*FIXME-UTF8*/))
         return false;
     return true;
@@ -1728,10 +1737,8 @@ bool wxVariant::Convert(long* value) const
         *value = (long) (((wxVariantDoubleData*)GetData())->GetValue());
     else if (type == wxT("long"))
         *value = ((wxVariantDataLong*)GetData())->GetValue();
-#ifdef HAVE_BOOL
     else if (type == wxT("bool"))
         *value = (long) (((wxVariantDataBool*)GetData())->GetValue());
-#endif
     else if (type == wxT("string"))
         *value = wxAtol(((wxVariantDataString*)GetData())->GetValue());
     else
@@ -1747,10 +1754,8 @@ bool wxVariant::Convert(bool* value) const
         *value = ((int) (((wxVariantDoubleData*)GetData())->GetValue()) != 0);
     else if (type == wxT("long"))
         *value = (((wxVariantDataLong*)GetData())->GetValue() != 0);
-#ifdef HAVE_BOOL
     else if (type == wxT("bool"))
         *value = ((wxVariantDataBool*)GetData())->GetValue();
-#endif
     else if (type == wxT("string"))
     {
         wxString val(((wxVariantDataString*)GetData())->GetValue());
@@ -1775,10 +1780,8 @@ bool wxVariant::Convert(double* value) const
         *value = ((wxVariantDoubleData*)GetData())->GetValue();
     else if (type == wxT("long"))
         *value = (double) (((wxVariantDataLong*)GetData())->GetValue());
-#ifdef HAVE_BOOL
     else if (type == wxT("bool"))
         *value = (double) (((wxVariantDataBool*)GetData())->GetValue());
-#endif
     else if (type == wxT("string"))
         *value = (double) wxAtof(((wxVariantDataString*)GetData())->GetValue());
     else
@@ -1794,10 +1797,8 @@ bool wxVariant::Convert(wxUniChar* value) const
         *value = ((wxVariantDataChar*)GetData())->GetValue();
     else if (type == wxT("long"))
         *value = (char) (((wxVariantDataLong*)GetData())->GetValue());
-#ifdef HAVE_BOOL
     else if (type == wxT("bool"))
         *value = (char) (((wxVariantDataBool*)GetData())->GetValue());
-#endif
     else
         return false;