]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/gtk/private/string.h
Improve wxAuiNotebook appearance when using some GTK themes.
[wxWidgets.git] / include / wx / gtk / private / string.h
index a537667166bf64c89493bf054c6f6534bc6ceb04..9d13bf9fcaf00ade4e8e85d3525ccc7325a857c2 100644 (file)
@@ -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<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_