]> git.saurik.com Git - wxWidgets.git/blame_incremental - include/wx/gtk/private/string.h
Fix bug with using invalid date in wxMSW wxCalendarCtrl.
[wxWidgets.git] / include / wx / gtk / private / string.h
... / ...
CommitLineData
1///////////////////////////////////////////////////////////////////////////////
2// Name: wx/gtk/private/string.h
3// Purpose: wxGtkString class declaration
4// Author: Vadim Zeitlin
5// Created: 2006-10-19
6// RCS-ID: $Id$
7// Copyright: (c) 2006 Vadim Zeitlin <vadim@wxwindows.org>
8// Licence: wxWindows licence
9///////////////////////////////////////////////////////////////////////////////
10
11#ifndef _WX_GTK_PRIVATE_STRING_H_
12#define _WX_GTK_PRIVATE_STRING_H_
13
14// ----------------------------------------------------------------------------
15// Convenience class for g_freeing a gchar* on scope exit automatically
16// ----------------------------------------------------------------------------
17
18class wxGtkString
19{
20public:
21 explicit wxGtkString(gchar *s) : m_str(s) { }
22 ~wxGtkString() { g_free(m_str); }
23
24 const gchar *c_str() const { return m_str; }
25
26 operator gchar *() const { return m_str; }
27
28private:
29 gchar *m_str;
30
31 wxDECLARE_NO_COPY_CLASS(wxGtkString);
32};
33
34
35// ----------------------------------------------------------------------------
36// list for sorting collated strings
37// ----------------------------------------------------------------------------
38
39#include "wx/string.h"
40#include "wx/vector.h"
41#include "wx/sharedptr.h"
42
43class wxGtkCollatableString
44{
45public:
46 wxGtkCollatableString( const wxString &label, gchar *key )
47 {
48 m_label = label;
49 m_key = key;
50 }
51
52 ~wxGtkCollatableString()
53 {
54 if (m_key)
55 g_free( m_key );
56 }
57
58 wxString m_label;
59 gchar *m_key;
60};
61
62class wxGtkCollatedArrayString
63{
64public:
65 wxGtkCollatedArrayString() { }
66
67 int Add( const wxString &new_label )
68 {
69 int index = 0;
70
71 gchar *new_key_lower = g_utf8_casefold( new_label.utf8_str(), -1);
72 gchar *new_key = g_utf8_collate_key( new_key_lower, -1);
73 g_free( new_key_lower );
74
75 wxSharedPtr<wxGtkCollatableString> new_ptr( new wxGtkCollatableString( new_label, new_key ) );
76
77 wxVector< wxSharedPtr<wxGtkCollatableString> >::iterator iter;
78 for (iter = m_list.begin(); iter != m_list.end(); ++iter)
79 {
80 wxSharedPtr<wxGtkCollatableString> ptr = *iter;
81
82 gchar *key = ptr->m_key;
83 if (strcmp(key,new_key) >= 0)
84 {
85 m_list.insert( iter, new_ptr );
86 return index;
87 }
88 index ++;
89 }
90
91 m_list.push_back( new_ptr );
92 return index;
93 }
94
95 size_t GetCount()
96 {
97 return m_list.size();
98 }
99
100 wxString At( size_t index )
101 {
102 return m_list[index]->m_label;
103 }
104
105 void Clear()
106 {
107 m_list.clear();
108 }
109
110 void RemoveAt( size_t index )
111 {
112 m_list.erase( m_list.begin() + index );
113 }
114
115private:
116 wxVector< wxSharedPtr<wxGtkCollatableString> > m_list;
117};
118
119
120#endif // _WX_GTK_PRIVATE_STRING_H_
121