X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c0c133e13b36a923c65f94499554e432bc3a0daa..0bb84570cea789202aa26409a4879202a9810b70:/include/wx/gtk/private/string.h diff --git a/include/wx/gtk/private/string.h b/include/wx/gtk/private/string.h index a537667166..9d13bf9fca 100644 --- a/include/wx/gtk/private/string.h +++ b/include/wx/gtk/private/string.h @@ -31,5 +31,91 @@ private: wxDECLARE_NO_COPY_CLASS(wxGtkString); }; + +// ---------------------------------------------------------------------------- +// list for sorting collated strings +// ---------------------------------------------------------------------------- + +#include "wx/string.h" +#include "wx/vector.h" +#include "wx/sharedptr.h" + +class wxGtkCollatableString +{ +public: + wxGtkCollatableString( const wxString &label, gchar *key ) + { + m_label = label; + m_key = key; + } + + ~wxGtkCollatableString() + { + if (m_key) + g_free( m_key ); + } + + wxString m_label; + gchar *m_key; +}; + +class wxGtkCollatedArrayString +{ +public: + wxGtkCollatedArrayString() { } + + int Add( const wxString &new_label ) + { + int index = 0; + + gchar *new_key_lower = g_utf8_casefold( new_label.utf8_str(), -1); + gchar *new_key = g_utf8_collate_key( new_key_lower, -1); + g_free( new_key_lower ); + + wxSharedPtr new_ptr( new wxGtkCollatableString( new_label, new_key ) ); + + wxVector< wxSharedPtr >::iterator iter; + for (iter = m_list.begin(); iter != m_list.end(); ++iter) + { + wxSharedPtr ptr = *iter; + + gchar *key = ptr->m_key; + if (strcmp(key,new_key) >= 0) + { + m_list.insert( iter, new_ptr ); + return index; + } + index ++; + } + + m_list.push_back( new_ptr ); + return index; + } + + size_t GetCount() + { + return m_list.size(); + } + + wxString At( size_t index ) + { + return m_list[index]->m_label; + } + + void Clear() + { + m_list.clear(); + } + + void RemoveAt( size_t index ) + { + m_list.erase( m_list.begin() + index ); + } + +private: + wxVector< wxSharedPtr > m_list; +}; + + #endif // _WX_GTK_PRIVATE_STRING_H_