]> git.saurik.com Git - wxWidgets.git/commitdiff
Fix wxAny for VC6 by removing 'wxAny& operator=(const wxVariant &variant)' for it...
authorJaakko Salli <jaakko.salli@dnainternet.net>
Sun, 18 Apr 2010 11:15:26 +0000 (11:15 +0000)
committerJaakko Salli <jaakko.salli@dnainternet.net>
Sun, 18 Apr 2010 11:15:26 +0000 (11:15 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64022 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/any.h
src/common/any.cpp
src/common/variant.cpp
tests/any/anytest.cpp

index 125f556f746b1d35d2b80d520b7159b4216146e4..8ee3d3c830d3d621e03f1a5ac8059aef8844f859 100644 (file)
@@ -772,7 +772,18 @@ public:
         return *this;
     }
 
-#if wxUSE_VARIANT
+#if wxUSE_VARIANT && (!defined(__VISUALC__) || __VISUALC__ >= 1300)
+    //
+    // Adding this operator for VC6 breaks wxAny, and also
+    // some cases of implicit conversion from wxVariant to wxAny.
+    //
+    // e.g. wxAny any = variant;  // should work
+    //
+    //      wxAny any;
+    //      any = 16;
+    //      any = variant;  // probably doesn't work - uses template
+    //                      // assignment, most likely
+    //
     wxAny& operator=(const wxVariant &variant)
     {
         AssignVariant(variant);
index 1e49badd8119fcdb6ff9f435308d562214c2d484..a1e21b57c26c4cabafe592b3af65ba835c919d4a 100644 (file)
@@ -201,7 +201,13 @@ bool wxConvertAnyToVariant(const wxAny& any, wxVariant* variant)
     {
         // Check if wxAny wrapped wxVariantData*
         if ( !any.GetAs(&data) )
+        {
+            // Ok, one last chance: while unlikely, it is possible that the
+            // wxAny actually contains wxVariant.
+            if ( wxANY_CHECK_TYPE(any, wxVariant) )
+                *variant = wxANY_AS(any, wxVariant);
             return false;
+        }
 
         // Wrapper's GetValue() does not increase reference
         // count, se have to do it before the data gets passed
index f297b3c4d67e7f81d23968cf132380abec6cbdd5..0470d2d4b373bd5f563fcce865d09580390c0b9f 100644 (file)
@@ -225,11 +225,10 @@ wxVariant::wxVariant(const wxAny& any)
 
 wxAny wxVariant::GetAny() const
 {
-    wxAny any;
-
     if ( IsNull() )
-        return any;
+        return wxAny();
 
+    wxAny any;
     wxVariantData* data = GetData();
 
     if ( data->GetAsAny(&any) )
index 6912bd622fe22e7730fdfd5b12b703072e490b8e..35e585224c84352373cd006b90aa8acfc555304e 100644 (file)
@@ -482,13 +482,16 @@ void wxAnyTestCase::wxVariantConversions()
     CPPUNIT_ASSERT(variant.GetType() == "ulonglong");
     CPPUNIT_ASSERT(variant.GetLong() == 1000);
 
-    any = vString;
+    // FIXME-VC6: for VC6, any = variant needs to be any = wxAny(variant).
+    //            Note that 'wxAny any = variant' does work, probably because
+    //            ctor is used in that case instead of assignment operator.
+    any = wxAny(vString);
     CPPUNIT_ASSERT(any == "ABC");
     res = any.GetAs(&variant);
     CPPUNIT_ASSERT(res);
     CPPUNIT_ASSERT(variant.GetString() == "ABC");
 
-    any = vDouble;
+    any = wxAny(vDouble);
     double d = wxANY_AS(any, double);
     CPPUNIT_ASSERT_DOUBLES_EQUAL(d, TEST_FLOAT_CONST, FEQ_DELTA);
     res = any.GetAs(&variant);
@@ -497,27 +500,27 @@ void wxAnyTestCase::wxVariantConversions()
                                  TEST_FLOAT_CONST,
                                  FEQ_DELTA);
 
-    any = vBool;
+    any = wxAny(vBool);
     CPPUNIT_ASSERT(wxANY_AS(any, bool) == true);
     res = any.GetAs(&variant);
     CPPUNIT_ASSERT(res);
     CPPUNIT_ASSERT(variant.GetBool() == true);
 
-    any = vChar;
+    any = wxAny(vChar);
     //CPPUNIT_ASSERT(wxANY_AS(any, wxUniChar) == 'A');
     res = any.GetAs(&variant);
     CPPUNIT_ASSERT(res);
     CPPUNIT_ASSERT(variant.GetChar() == 'A');
 
 #ifdef wxLongLong_t
-    any = vLongLong;
+    any = wxAny(vLongLong);
     CPPUNIT_ASSERT(any == wxLL(0xFFFFFFFFFF));
     res = any.GetAs(&variant);
     CPPUNIT_ASSERT(res);
     CPPUNIT_ASSERT(variant.GetLongLong() == wxLongLong(wxLL(0xFFFFFFFFFF)));
     CPPUNIT_ASSERT(variant.GetType() == "longlong");
 
-    any = vULongLong;
+    any = wxAny(vULongLong);
     CPPUNIT_ASSERT(any == wxLL(123456));
     res = any.GetAs(&variant);
     CPPUNIT_ASSERT(res);
@@ -526,7 +529,7 @@ void wxAnyTestCase::wxVariantConversions()
 
     // Cannot test equality for the rest, just test that they convert
     // back correctly.
-    any = vArrayString;
+    any = wxAny(vArrayString);
     res = any.GetAs(&variant);
     CPPUNIT_ASSERT(res);
     wxArrayString arrstr2 = variant.GetArrayString();
@@ -534,18 +537,18 @@ void wxAnyTestCase::wxVariantConversions()
 
     any = m_testDateTime;
     CPPUNIT_ASSERT(wxANY_AS(any, wxDateTime) == m_testDateTime);
-    any = vDateTime;
+    any = wxAny(vDateTime);
     CPPUNIT_ASSERT(wxANY_AS(any, wxDateTime) == m_testDateTime);
     res = any.GetAs(&variant);
     CPPUNIT_ASSERT(res);
     CPPUNIT_ASSERT(variant == m_testDateTime);
 
-    any = vVoidPtr;
+    any = wxAny(vVoidPtr);
     res = any.GetAs(&variant);
     CPPUNIT_ASSERT(res);
     CPPUNIT_ASSERT(variant.GetVoidPtr() == dummyVoidPointer);
 
-    any = vList;
+    any = wxAny(vList);
     CPPUNIT_ASSERT(wxANY_CHECK_TYPE(any, wxAnyList));
     wxAnyList anyList = wxANY_AS(any, wxAnyList);
     CPPUNIT_ASSERT(anyList.GetCount() == 2);
@@ -558,7 +561,7 @@ void wxAnyTestCase::wxVariantConversions()
     CPPUNIT_ASSERT(variant[0].GetLong() == 15);
     CPPUNIT_ASSERT(variant[1].GetString() == "abc");
 
-    any = vCustomType;
+    any = wxAny(vCustomType);
     CPPUNIT_ASSERT(wxANY_CHECK_TYPE(any, wxVariantData*));
     res = any.GetAs(&variant);
     CPPUNIT_ASSERT(res);