The old email address is invalid since many years and shouldn't be used any longer. No real changes.
		
			
				
	
	
		
			121 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			121 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
///////////////////////////////////////////////////////////////////////////////
 | 
						|
// Name:        wx/gtk/private/string.h
 | 
						|
// Purpose:     wxGtkString class declaration
 | 
						|
// Author:      Vadim Zeitlin
 | 
						|
// Created:     2006-10-19
 | 
						|
// Copyright:   (c) 2006 Vadim Zeitlin <vadim@wxwidgets.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_
 | 
						|
 |