}
}
-#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"))
{
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;
}
// 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;
}