| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- ///////////////////////////////////////////////////////////////////////////////
- // Name: wx/gtk/private/string.h
- // Purpose: wxGtkString class declaration
- // Author: Vadim Zeitlin
- // Created: 2006-10-19
- // Copyright: (c) 2006 Vadim Zeitlin <vadim@wxwindows.org>
- // Licence: wxWindows licence
- ///////////////////////////////////////////////////////////////////////////////
- #ifndef _WX_GTK_PRIVATE_STRING_H_
- #define _WX_GTK_PRIVATE_STRING_H_
- // ----------------------------------------------------------------------------
- // Convenience class for g_freeing a gchar* on scope exit automatically
- // ----------------------------------------------------------------------------
- class wxGtkString
- {
- public:
- explicit wxGtkString(gchar *s) : m_str(s) { }
- ~wxGtkString() { g_free(m_str); }
- const gchar *c_str() const { return m_str; }
- operator gchar *() const { return m_str; }
- private:
- gchar *m_str;
- 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<wxGtkCollatableString> new_ptr( new wxGtkCollatableString( new_label, new_key ) );
- wxVector< wxSharedPtr<wxGtkCollatableString> >::iterator iter;
- for (iter = m_list.begin(); iter != m_list.end(); ++iter)
- {
- wxSharedPtr<wxGtkCollatableString> 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<wxGtkCollatableString> > m_list;
- };
- #endif // _WX_GTK_PRIVATE_STRING_H_
|