]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/variant.cpp
cvs to svn
[wxWidgets.git] / src / common / variant.cpp
index 308965606bff483cbedbf0c6a9918951961bf84e..689278480774da6a886ce8ab89dc31c1ec6632ea 100644 (file)
@@ -23,6 +23,7 @@
 #ifndef WX_PRECOMP
     #include "wx/string.h"
     #include "wx/math.h"
+    #include "wx/crt.h"
     #if wxUSE_STREAMS
         #include "wx/stream.h"
     #endif
@@ -226,7 +227,7 @@ public:
     virtual bool Write(wxOutputStream &str) const;
 #endif // wxUSE_STREAMS
 
-    virtual wxString GetType() const { return wxT("long"); };
+    virtual wxString GetType() const { return wxT("long"); }
 
 protected:
     long m_value;
@@ -286,11 +287,11 @@ bool wxVariantDataLong::Read(wxInputStream& str)
 
 bool wxVariantDataLong::Read(wxString& str)
 {
-    m_value = wxAtol((const wxChar*) str);
+    m_value = wxAtol(str);
     return true;
 }
 
-// wxVariant 
+// wxVariant
 
 wxVariant::wxVariant(long val, const wxString& name)
 {
@@ -377,7 +378,7 @@ public:
     virtual bool Read(wxInputStream& str);
     virtual bool Write(wxOutputStream &str) const;
 #endif // wxUSE_STREAMS
-    virtual wxString GetType() const { return wxT("double"); };
+    virtual wxString GetType() const { return wxT("double"); }
 
 protected:
     double m_value;
@@ -436,7 +437,7 @@ bool wxVariantDoubleData::Read(wxInputStream& str)
 
 bool wxVariantDoubleData::Read(wxString& str)
 {
-    m_value = wxAtof((const wxChar*) str);
+    m_value = wxAtof(str);
     return true;
 }
 
@@ -517,7 +518,7 @@ public:
     virtual bool Read(wxInputStream& str);
     virtual bool Write(wxOutputStream& str) const;
 #endif // wxUSE_STREAMS
-    virtual wxString GetType() const { return wxT("bool"); };
+    virtual wxString GetType() const { return wxT("bool"); }
 
 protected:
     bool m_value;
@@ -579,7 +580,7 @@ bool wxVariantDataBool::Read(wxInputStream& str)
 
 bool wxVariantDataBool::Read(wxString& str)
 {
-    m_value = (wxAtol((const wxChar*) str) != 0);
+    m_value = (wxAtol(str) != 0);
     return true;
 }
 
@@ -658,7 +659,7 @@ public:
     virtual bool Read(wxInputStream& str);
     virtual bool Write(wxOutputStream& str) const;
 #endif // wxUSE_STREAMS
-    virtual wxString GetType() const { return wxT("char"); };
+    virtual wxString GetType() const { return wxT("char"); }
 
 protected:
     wxChar m_value;
@@ -695,7 +696,7 @@ bool wxVariantDataChar::Write(wxString& str) const
 bool wxVariantDataChar::Read(wxSTD istream& WXUNUSED(str))
 {
     wxFAIL_MSG(wxT("Unimplemented"));
-    
+
     return false;
 }
 #endif
@@ -705,7 +706,8 @@ bool wxVariantDataChar::Write(wxOutputStream& str) const
 {
     wxTextOutputStream s(str);
 
-    s.Write8(m_value);
+    s << m_value;
+
     return true;
 }
 
@@ -733,7 +735,7 @@ wxVariant::wxVariant(wxChar val, const wxString& name)
 
 bool wxVariant::operator== (wxChar value) const
 {
-    char thisValue;
+    wxChar thisValue;
     if (!Convert(&thisValue))
         return false;
     else
@@ -761,7 +763,7 @@ void wxVariant::operator= (wxChar value)
 
 wxChar wxVariant::GetChar() const
 {
-    char value;
+    wxChar value;
     if (Convert(& value))
         return value;
     else
@@ -792,13 +794,13 @@ public:
     virtual bool Read(wxString& str);
     virtual bool Write(wxString& str) const;
 #if wxUSE_STD_IOSTREAM
-    virtual bool Read(wxSTD istream& WXUNUSED(str)) { return false; };
+    virtual bool Read(wxSTD istream& WXUNUSED(str)) { return false; }
 #endif
 #if wxUSE_STREAMS
     virtual bool Read(wxInputStream& str);
     virtual bool Write(wxOutputStream& str) const;
 #endif // wxUSE_STREAMS
-    virtual wxString GetType() const { return wxT("string"); };
+    virtual wxString GetType() const { return wxT("string"); }
 
 protected:
     wxString m_value;
@@ -854,7 +856,7 @@ bool wxVariantDataString::Read(wxString& str)
 IMPLEMENT_DYNAMIC_CLASS(wxVariantDataString, wxVariantData)
 
 // wxVariant ****
+
 wxVariant::wxVariant(const wxString& val, const wxString& name)
 {
     m_data = new wxVariantDataString(val);
@@ -1065,7 +1067,7 @@ public:
     virtual bool Read(wxSTD istream& str);
 #endif
     virtual bool Read(wxString& str);
-    virtual wxString GetType() const { return wxT("void*"); };
+    virtual wxString GetType() const { return wxT("void*"); }
     virtual wxVariantData* Clone() { return new wxVariantDataVoidPtr; }
 
 protected:
@@ -1189,7 +1191,7 @@ public:
     virtual bool Read(wxSTD istream& str);
 #endif
     virtual bool Read(wxString& str);
-    virtual wxString GetType() const { return wxT("datetime"); };
+    virtual wxString GetType() const { return wxT("datetime"); }
     virtual wxVariantData* Clone() { return new wxVariantDataDateTime; }
 
 protected:
@@ -1238,7 +1240,7 @@ bool wxVariantDataDateTime::Read(wxSTD istream& WXUNUSED(str))
 
 bool wxVariantDataDateTime::Read(wxString& str)
 {
-    if(! m_value.ParseDateTime(str))
+    if(! m_value.ParseDateTime(str.c_str()/*FIXME-UTF8*/))
         return false;
     return true;
 }
@@ -1355,7 +1357,7 @@ public:
     virtual bool Read(wxSTD istream& str);
 #endif
     virtual bool Read(wxString& str);
-    virtual wxString GetType() const { return wxT("arrstring"); };
+    virtual wxString GetType() const { return wxT("arrstring"); }
     virtual wxVariantData* Clone() { return new wxVariantDataArrayString; }
 
 protected:
@@ -1484,7 +1486,7 @@ public:
     virtual bool Read(wxSTD istream& str);
 #endif
     virtual bool Read(wxString& str);
-    virtual wxString GetType() const { return wxT("list"); };
+    virtual wxString GetType() const { return wxT("list"); }
 
     void Clear();
 
@@ -1700,165 +1702,10 @@ void wxVariant::ClearList()
     }
 }
 
-#if WXWIN_COMPATIBILITY_2_4
-
-// ----------------------------------------------------------------------------
-// wxVariantDataStringList
-// ----------------------------------------------------------------------------
-
-class WXDLLIMPEXP_BASE wxVariantDataStringList: public wxVariantData
-{
-DECLARE_DYNAMIC_CLASS(wxVariantDataStringList)
-public:
-    wxVariantDataStringList() {}
-    wxVariantDataStringList(const wxStringList& list) { m_value = list; }
-
-    wxStringList& GetValue() const { return (wxStringList&) m_value; }
-    void SetValue(const wxStringList& value);
-
-    virtual bool Eq(wxVariantData& data) const;
-#if wxUSE_STD_IOSTREAM
-    virtual bool Write(wxSTD ostream& str) const;
-#endif
-    virtual bool Write(wxString& str) const;
-#if wxUSE_STD_IOSTREAM
-    virtual bool Read(wxSTD istream& str);
-#endif
-    virtual bool Read(wxString& str);
-    virtual wxString GetType() const { return wxT("stringlist"); };
-
-protected:
-    wxStringList  m_value;
-};
-
-IMPLEMENT_DYNAMIC_CLASS(wxVariantDataStringList, wxVariantData)
-
-void wxVariantDataStringList::SetValue(const wxStringList& value)
-{
-    m_value = value;
-}
-
-bool wxVariantDataStringList::Eq(wxVariantData& data) const
-{
-    wxASSERT_MSG( (data.GetType() == wxT("stringlist")), wxT("wxVariantDataStringList::Eq: argument mismatch") );
-
-    wxVariantDataStringList& listData = (wxVariantDataStringList&) data;
-    wxStringList::compatibility_iterator node1 = m_value.GetFirst();
-    wxStringList::compatibility_iterator node2 = listData.GetValue().GetFirst();
-    while (node1 && node2)
-    {
-        wxString str1 ( node1->GetData() );
-        wxString str2 ( node2->GetData() );
-        if (str1 != str2)
-            return false;
-        node1 = node1->GetNext();
-        node2 = node2->GetNext();
-    }
-    if (node1 || node2) return false;
-    return true;
-}
-
-#if wxUSE_STD_IOSTREAM
-bool wxVariantDataStringList::Write(wxSTD ostream& str) const
-{
-    wxString s;
-    Write(s);
-    str << (const char*) s.mb_str();
-    return true;
-}
-#endif
-
-bool wxVariantDataStringList::Write(wxString& str) const
-{
-    str.Empty();
-    wxStringList::compatibility_iterator node = m_value.GetFirst();
-    while (node)
-    {
-        const wxChar* s = node->GetData();
-        if (node != m_value.GetFirst())
-          str += wxT(" ");
-        str += s;
-        node = node->GetNext();
-    }
-
-    return true;
-}
-
-#if wxUSE_STD_IOSTREAM
-bool wxVariantDataStringList::Read(wxSTD istream& WXUNUSED(str))
-{
-    wxFAIL_MSG(wxT("Unimplemented"));
-    // TODO
-    return false;
-}
-#endif
-
-bool wxVariantDataStringList::Read(wxString& WXUNUSED(str))
-{
-    wxFAIL_MSG(wxT("Unimplemented"));
-    // TODO
-    return false;
-}
-
-#endif //2.4 compat
-
-#if WXWIN_COMPATIBILITY_2_4
-
-wxVariant::wxVariant(const wxStringList& val, const wxString& name)
-{
-    m_data = new wxVariantDataStringList(val);
-    m_name = name;
-}
-
-bool wxVariant::operator== (const wxStringList& value) const
-{
-    wxASSERT_MSG( (GetType() == wxT("stringlist")), wxT("Invalid type for == operator") );
-
-    wxVariantDataStringList other(value);
-    return (GetData()->Eq(other));
-}
-
-bool wxVariant::operator!= (const wxStringList& value) const
-{
-    wxASSERT_MSG( (GetType() == wxT("stringlist")), wxT("Invalid type for == operator") );
-
-    wxVariantDataStringList other(value);
-    return !(GetData()->Eq(other));
-}
-
-void wxVariant::operator= (const wxStringList& value)
-{
-    if (GetType() == wxT("stringlist") &&
-        m_data->GetRefCount() == 1)
-    {
-        ((wxVariantDataStringList*)GetData())->SetValue(value);
-    }
-    else
-    {
-        UnRef();
-        m_data = new wxVariantDataStringList(value);
-    }
-}
-
-// wxVariant 
-
-wxStringList& wxVariant::GetStringList() const
-{
-    wxASSERT( (GetType() == wxT("stringlist")) );
-
-    return (wxStringList&) ((wxVariantDataStringList*) m_data)->GetValue();
-}
-
-#endif
-
 // Treat a list variant as an array
 wxVariant wxVariant::operator[] (size_t idx) const
 {
-#if WXWIN_COMPATIBILITY_2_4
-    wxASSERT_MSG( (GetType() == wxT("list") || GetType() == wxT("stringlist")), wxT("Invalid type for array operator") );
-#else
     wxASSERT_MSG( GetType() == wxT("list"), wxT("Invalid type for array operator") );
-#endif
 
     if (GetType() == wxT("list"))
     {
@@ -1866,17 +1713,6 @@ wxVariant wxVariant::operator[] (size_t idx) const
         wxASSERT_MSG( (idx < data->GetValue().GetCount()), wxT("Invalid index for array") );
         return * (wxVariant*) (data->GetValue().Item(idx)->GetData());
     }
-#if WXWIN_COMPATIBILITY_2_4
-    else if (GetType() == wxT("stringlist"))
-    {
-        wxVariantDataStringList* data = (wxVariantDataStringList*) m_data;
-        wxASSERT_MSG( (idx < data->GetValue().GetCount()), wxT("Invalid index for array") );
-
-        wxString str( (const wxChar*) (data->GetValue().Item(idx)->GetData()) );
-        wxVariant variant( str );
-        return variant;
-    }
-#endif
     return wxNullVariant;
 }
 
@@ -1896,24 +1732,13 @@ wxVariant& wxVariant::operator[] (size_t idx)
 // Return the number of elements in a list
 size_t wxVariant::GetCount() const
 {
-#if WXWIN_COMPATIBILITY_2_4
-    wxASSERT_MSG( (GetType() == wxT("list") || GetType() == wxT("stringlist")), wxT("Invalid type for GetCount()") );
-#else
     wxASSERT_MSG( GetType() == wxT("list"), wxT("Invalid type for GetCount()") );
-#endif
 
     if (GetType() == wxT("list"))
     {
         wxVariantDataList* data = (wxVariantDataList*) m_data;
         return data->GetValue().GetCount();
     }
-#if WXWIN_COMPATIBILITY_2_4
-    else if (GetType() == wxT("stringlist"))
-    {
-        wxVariantDataStringList* data = (wxVariantDataStringList*) m_data;
-        return data->GetValue().GetCount();
-    }
-#endif
     return 0;
 }
 
@@ -1933,7 +1758,7 @@ bool wxVariant::Convert(long* value) const
         *value = (long) (((wxVariantDataBool*)GetData())->GetValue());
 #endif
     else if (type == wxT("string"))
-        *value = wxAtol((const wxChar*) ((wxVariantDataString*)GetData())->GetValue());
+        *value = wxAtol(((wxVariantDataString*)GetData())->GetValue());
     else
         return false;
 
@@ -1980,14 +1805,14 @@ bool wxVariant::Convert(double* value) const
         *value = (double) (((wxVariantDataBool*)GetData())->GetValue());
 #endif
     else if (type == wxT("string"))
-        *value = (double) wxAtof((const wxChar*) ((wxVariantDataString*)GetData())->GetValue());
+        *value = (double) wxAtof(((wxVariantDataString*)GetData())->GetValue());
     else
         return false;
 
     return true;
 }
 
-bool wxVariant::Convert(char* value) const
+bool wxVariant::Convert(wxChar* value) const
 {
     wxString type(GetType());
     if (type == wxT("char"))
@@ -2022,15 +1847,10 @@ bool wxVariant::Convert(wxDateTime* value) const
     // Fallback to string conversion
     wxString val;
     return Convert(&val) &&
-                (value->ParseDateTime(val) || value->ParseDate(val) || value->ParseTime(val));
+                (value->ParseDateTime(val.c_str()/*FIXME-UTF8*/) ||
+                 value->ParseDate(val.c_str()/*FIXME-UTF8*/) ||
+                 value->ParseTime(val.c_str()/*FIXME-UTF8*/));
 }
 #endif // wxUSE_DATETIME
 
-IMPLEMENT_VARIANT_OBJECT(wxColour)
-IMPLEMENT_VARIANT_OBJECT(wxPen)
-IMPLEMENT_VARIANT_OBJECT(wxBrush)
-IMPLEMENT_VARIANT_OBJECT(wxImage)
-IMPLEMENT_VARIANT_OBJECT(wxIcon)
-IMPLEMENT_VARIANT_OBJECT(wxBitmap)
-
 #endif // wxUSE_VARIANT