]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/gtk/private/string.h
Fix wxPropertyGrid::GetPropertyRect when the last item is collapsed.
[wxWidgets.git] / include / wx / gtk / private / string.h
index a537667166bf64c89493bf054c6f6534bc6ceb04..bd188d10f87c03e9dc9064bd5775f20372ff8dca 100644 (file)
@@ -3,7 +3,6 @@
 // Purpose:     wxGtkString class declaration
 // Author:      Vadim Zeitlin
 // Created:     2006-10-19
 // Purpose:     wxGtkString class declaration
 // Author:      Vadim Zeitlin
 // Created:     2006-10-19
-// RCS-ID:      $Id$
 // Copyright:   (c) 2006 Vadim Zeitlin <vadim@wxwindows.org>
 // Licence:     wxWindows licence
 ///////////////////////////////////////////////////////////////////////////////
 // Copyright:   (c) 2006 Vadim Zeitlin <vadim@wxwindows.org>
 // Licence:     wxWindows licence
 ///////////////////////////////////////////////////////////////////////////////
@@ -31,5 +30,91 @@ private:
     wxDECLARE_NO_COPY_CLASS(wxGtkString);
 };
 
     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_
 
 #endif // _WX_GTK_PRIVATE_STRING_H_