From 2e1d71048207f3d008dac28d0c290ae0a6b59997 Mon Sep 17 00:00:00 2001 From: Robert Roebling Date: Thu, 15 Aug 2002 20:45:58 +0000 Subject: [PATCH] Further UNicode fixes. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@16525 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/gtk/choice.cpp | 19 +++++++++++++++++-- src/gtk/combobox.cpp | 32 ++++++++++++++++++++++++++------ src/gtk/dataobj.cpp | 8 ++++++-- src/gtk/listbox.cpp | 12 ++++++++++-- src/gtk1/choice.cpp | 19 +++++++++++++++++-- src/gtk1/combobox.cpp | 32 ++++++++++++++++++++++++++------ src/gtk1/dataobj.cpp | 8 ++++++-- src/gtk1/listbox.cpp | 12 ++++++++++-- 8 files changed, 118 insertions(+), 24 deletions(-) diff --git a/src/gtk/choice.cpp b/src/gtk/choice.cpp index c456577ce3..ef17528812 100644 --- a/src/gtk/choice.cpp +++ b/src/gtk/choice.cpp @@ -257,7 +257,11 @@ int wxChoice::FindString( const wxString &string ) const wxASSERT_MSG( label != NULL , wxT("wxChoice: invalid label") ); - wxString tmp( wxGTK_CONV_BACK( label->label ) ); +#ifdef __WXGTK20__ + wxString tmp( wxGTK_CONV_BACK( gtk_label_get_text( label) ) ); +#else + wxString tmp( label->label ); +#endif if (string == tmp) return count; @@ -271,9 +275,15 @@ int wxChoice::FindString( const wxString &string ) const int wxChoice::GetSelection() const { wxCHECK_MSG( m_widget != NULL, -1, wxT("invalid choice") ); + +#ifdef __WXGTK20__ + return gtk_option_menu_get_history( GTK_OPTION_MENU(m_widget) ); + +#else GtkMenuShell *menu_shell = GTK_MENU_SHELL( gtk_option_menu_get_menu( GTK_OPTION_MENU(m_widget) ) ); int count = 0; + GList *child = menu_shell->children; while (child) { @@ -284,6 +294,7 @@ int wxChoice::GetSelection() const } return -1; +#endif } void wxChoice::SetString( int WXUNUSED(n), const wxString& WXUNUSED(string) ) @@ -313,7 +324,11 @@ wxString wxChoice::GetString( int n ) const wxASSERT_MSG( label != NULL , wxT("wxChoice: invalid label") ); - return wxString( wxGTK_CONV_BACK(label->label) ); +#ifdef __WXGTK20__ + return wxString( wxGTK_CONV_BACK( gtk_label_get_text( label) ) ); +#else + return wxString( label->label ); +#endif } child = child->next; count++; diff --git a/src/gtk/combobox.cpp b/src/gtk/combobox.cpp index 99c554c5bd..f5e045a71e 100644 --- a/src/gtk/combobox.cpp +++ b/src/gtk/combobox.cpp @@ -131,7 +131,9 @@ bool wxComboBox::Create( wxWindow *parent, wxWindowID id, const wxString& value, GtkWidget *list = GTK_COMBO(m_widget)->list; +#ifndef __WXGTK20__ gtk_list_set_selection_mode( GTK_LIST(list), GTK_SELECTION_MULTIPLE ); +#endif for (int i = 0; i < n; i++) { @@ -405,7 +407,11 @@ wxString wxComboBox::GetString( int n ) const { GtkBin *bin = GTK_BIN( child->data ); GtkLabel *label = GTK_LABEL( bin->child ); - str = wxString(label->label,*wxConvCurrent); +#ifdef __WXGTK20__ + str = wxGTK_CONV_BACK( gtk_label_get_text( label) ); +#else + str = wxString( label->label ); +#endif } else { @@ -471,8 +477,18 @@ void wxComboBox::SetStringSelection( const wxString &string ) wxString wxComboBox::GetValue() const { - GtkWidget *entry = GTK_COMBO(m_widget)->entry; - wxString tmp = wxString(gtk_entry_get_text( GTK_ENTRY(entry) ),*wxConvCurrent); + GtkEntry *entry = GTK_ENTRY( GTK_COMBO(m_widget)->entry ); + wxString tmp( wxGTK_CONV_BACK( gtk_entry_get_text( entry ) ) ); + +#if 0 + for (int i = 0; i < wxStrlen(tmp.c_str()) +1; i++) + { + wxChar c = tmp[i]; + printf( "%d ", (int) (c) ); + } + printf( "\n" ); +#endif + return tmp; } @@ -540,14 +556,18 @@ long wxComboBox::GetLastPosition() const void wxComboBox::Replace( long from, long to, const wxString& value ) { wxCHECK_RET( m_widget != NULL, wxT("invalid combobox") ); - // FIXME: not quite sure how to do this method right in multibyte mode - // FIXME GTK 2.0 GtkWidget *entry = GTK_COMBO(m_widget)->entry; gtk_editable_delete_text( GTK_EDITABLE(entry), (gint)from, (gint)to ); if (value.IsNull()) return; gint pos = (gint)to; - gtk_editable_insert_text( GTK_EDITABLE(entry), value.mbc_str(), value.Length(), &pos ); + +#if wxUSE_UNICODE + wxCharBuffer buffer = wxConvUTF8.cWX2MB( value ); + gtk_editable_insert_text( GTK_EDITABLE(entry), (const char*) buffer, strlen( (const char*) buffer ), &pos ); +#else + gtk_editable_insert_text( GTK_EDITABLE(entry), value.c_str(), value.Length(), &pos ); +#endif } void wxComboBox::Remove(long from, long to) diff --git a/src/gtk/dataobj.cpp b/src/gtk/dataobj.cpp index cfbf0deb8a..712616a074 100644 --- a/src/gtk/dataobj.cpp +++ b/src/gtk/dataobj.cpp @@ -95,7 +95,7 @@ wxDataFormatId wxDataFormat::GetType() const wxString wxDataFormat::GetId() const { - wxString ret( gdk_atom_name( m_format ) ); // this will convert from ascii to Unicode + wxString ret = wxString::FromAscii( gdk_atom_name( m_format ) ); return ret; } @@ -121,7 +121,7 @@ void wxDataFormat::SetId( const wxChar *id ) PrepareFormats(); m_type = wxDF_PRIVATE; wxString tmp( id ); - m_format = gdk_atom_intern( wxMBSTRINGCAST tmp.mbc_str(), FALSE ); // what is the string cast for? + m_format = gdk_atom_intern( (const char*) tmp.ToAscii(), FALSE ); } void wxDataFormat::PrepareFormats() @@ -134,7 +134,11 @@ void wxDataFormat::PrepareFormats() // text/uri-list for file dnd because compatibility is not important // here (with whom?) if (!g_textAtom) +#if wxUSE_UNICODE + g_textAtom = gdk_atom_intern( "text/utf8", FALSE ); +#else g_textAtom = gdk_atom_intern( "STRING" /* "text/plain" */, FALSE ); +#endif if (!g_pngAtom) g_pngAtom = gdk_atom_intern( "image/png", FALSE ); if (!g_fileAtom) diff --git a/src/gtk/listbox.cpp b/src/gtk/listbox.cpp index 98e2f3b09d..b81275e629 100644 --- a/src/gtk/listbox.cpp +++ b/src/gtk/listbox.cpp @@ -756,7 +756,11 @@ wxString wxListBox::GetString( int n ) const GtkBin *bin = GTK_BIN( child->data ); GtkLabel *label = GTK_LABEL( bin->child ); - wxString str = wxGTK_CONV_BACK( GET_REAL_LABEL(label->label) ); +#ifdef __WXGTK20__ + wxString str = wxGTK_CONV_BACK( gtk_label_get_text( label ) ); +#else + wxString str = wxString( label->label ); +#endif return str; } @@ -785,7 +789,11 @@ int wxListBox::FindString( const wxString &item ) const GtkBin *bin = GTK_BIN( child->data ); GtkLabel *label = GTK_LABEL( bin->child ); - wxString str = wxGTK_CONV_BACK( GET_REAL_LABEL(label->label) ); +#ifdef __WXGTK20__ + wxString str = wxGTK_CONV_BACK( gtk_label_get_text( label ) ); +#else + wxString str = wxString( label->label ); +#endif if (str == item) return count; diff --git a/src/gtk1/choice.cpp b/src/gtk1/choice.cpp index c456577ce3..ef17528812 100644 --- a/src/gtk1/choice.cpp +++ b/src/gtk1/choice.cpp @@ -257,7 +257,11 @@ int wxChoice::FindString( const wxString &string ) const wxASSERT_MSG( label != NULL , wxT("wxChoice: invalid label") ); - wxString tmp( wxGTK_CONV_BACK( label->label ) ); +#ifdef __WXGTK20__ + wxString tmp( wxGTK_CONV_BACK( gtk_label_get_text( label) ) ); +#else + wxString tmp( label->label ); +#endif if (string == tmp) return count; @@ -271,9 +275,15 @@ int wxChoice::FindString( const wxString &string ) const int wxChoice::GetSelection() const { wxCHECK_MSG( m_widget != NULL, -1, wxT("invalid choice") ); + +#ifdef __WXGTK20__ + return gtk_option_menu_get_history( GTK_OPTION_MENU(m_widget) ); + +#else GtkMenuShell *menu_shell = GTK_MENU_SHELL( gtk_option_menu_get_menu( GTK_OPTION_MENU(m_widget) ) ); int count = 0; + GList *child = menu_shell->children; while (child) { @@ -284,6 +294,7 @@ int wxChoice::GetSelection() const } return -1; +#endif } void wxChoice::SetString( int WXUNUSED(n), const wxString& WXUNUSED(string) ) @@ -313,7 +324,11 @@ wxString wxChoice::GetString( int n ) const wxASSERT_MSG( label != NULL , wxT("wxChoice: invalid label") ); - return wxString( wxGTK_CONV_BACK(label->label) ); +#ifdef __WXGTK20__ + return wxString( wxGTK_CONV_BACK( gtk_label_get_text( label) ) ); +#else + return wxString( label->label ); +#endif } child = child->next; count++; diff --git a/src/gtk1/combobox.cpp b/src/gtk1/combobox.cpp index 99c554c5bd..f5e045a71e 100644 --- a/src/gtk1/combobox.cpp +++ b/src/gtk1/combobox.cpp @@ -131,7 +131,9 @@ bool wxComboBox::Create( wxWindow *parent, wxWindowID id, const wxString& value, GtkWidget *list = GTK_COMBO(m_widget)->list; +#ifndef __WXGTK20__ gtk_list_set_selection_mode( GTK_LIST(list), GTK_SELECTION_MULTIPLE ); +#endif for (int i = 0; i < n; i++) { @@ -405,7 +407,11 @@ wxString wxComboBox::GetString( int n ) const { GtkBin *bin = GTK_BIN( child->data ); GtkLabel *label = GTK_LABEL( bin->child ); - str = wxString(label->label,*wxConvCurrent); +#ifdef __WXGTK20__ + str = wxGTK_CONV_BACK( gtk_label_get_text( label) ); +#else + str = wxString( label->label ); +#endif } else { @@ -471,8 +477,18 @@ void wxComboBox::SetStringSelection( const wxString &string ) wxString wxComboBox::GetValue() const { - GtkWidget *entry = GTK_COMBO(m_widget)->entry; - wxString tmp = wxString(gtk_entry_get_text( GTK_ENTRY(entry) ),*wxConvCurrent); + GtkEntry *entry = GTK_ENTRY( GTK_COMBO(m_widget)->entry ); + wxString tmp( wxGTK_CONV_BACK( gtk_entry_get_text( entry ) ) ); + +#if 0 + for (int i = 0; i < wxStrlen(tmp.c_str()) +1; i++) + { + wxChar c = tmp[i]; + printf( "%d ", (int) (c) ); + } + printf( "\n" ); +#endif + return tmp; } @@ -540,14 +556,18 @@ long wxComboBox::GetLastPosition() const void wxComboBox::Replace( long from, long to, const wxString& value ) { wxCHECK_RET( m_widget != NULL, wxT("invalid combobox") ); - // FIXME: not quite sure how to do this method right in multibyte mode - // FIXME GTK 2.0 GtkWidget *entry = GTK_COMBO(m_widget)->entry; gtk_editable_delete_text( GTK_EDITABLE(entry), (gint)from, (gint)to ); if (value.IsNull()) return; gint pos = (gint)to; - gtk_editable_insert_text( GTK_EDITABLE(entry), value.mbc_str(), value.Length(), &pos ); + +#if wxUSE_UNICODE + wxCharBuffer buffer = wxConvUTF8.cWX2MB( value ); + gtk_editable_insert_text( GTK_EDITABLE(entry), (const char*) buffer, strlen( (const char*) buffer ), &pos ); +#else + gtk_editable_insert_text( GTK_EDITABLE(entry), value.c_str(), value.Length(), &pos ); +#endif } void wxComboBox::Remove(long from, long to) diff --git a/src/gtk1/dataobj.cpp b/src/gtk1/dataobj.cpp index cfbf0deb8a..712616a074 100644 --- a/src/gtk1/dataobj.cpp +++ b/src/gtk1/dataobj.cpp @@ -95,7 +95,7 @@ wxDataFormatId wxDataFormat::GetType() const wxString wxDataFormat::GetId() const { - wxString ret( gdk_atom_name( m_format ) ); // this will convert from ascii to Unicode + wxString ret = wxString::FromAscii( gdk_atom_name( m_format ) ); return ret; } @@ -121,7 +121,7 @@ void wxDataFormat::SetId( const wxChar *id ) PrepareFormats(); m_type = wxDF_PRIVATE; wxString tmp( id ); - m_format = gdk_atom_intern( wxMBSTRINGCAST tmp.mbc_str(), FALSE ); // what is the string cast for? + m_format = gdk_atom_intern( (const char*) tmp.ToAscii(), FALSE ); } void wxDataFormat::PrepareFormats() @@ -134,7 +134,11 @@ void wxDataFormat::PrepareFormats() // text/uri-list for file dnd because compatibility is not important // here (with whom?) if (!g_textAtom) +#if wxUSE_UNICODE + g_textAtom = gdk_atom_intern( "text/utf8", FALSE ); +#else g_textAtom = gdk_atom_intern( "STRING" /* "text/plain" */, FALSE ); +#endif if (!g_pngAtom) g_pngAtom = gdk_atom_intern( "image/png", FALSE ); if (!g_fileAtom) diff --git a/src/gtk1/listbox.cpp b/src/gtk1/listbox.cpp index 98e2f3b09d..b81275e629 100644 --- a/src/gtk1/listbox.cpp +++ b/src/gtk1/listbox.cpp @@ -756,7 +756,11 @@ wxString wxListBox::GetString( int n ) const GtkBin *bin = GTK_BIN( child->data ); GtkLabel *label = GTK_LABEL( bin->child ); - wxString str = wxGTK_CONV_BACK( GET_REAL_LABEL(label->label) ); +#ifdef __WXGTK20__ + wxString str = wxGTK_CONV_BACK( gtk_label_get_text( label ) ); +#else + wxString str = wxString( label->label ); +#endif return str; } @@ -785,7 +789,11 @@ int wxListBox::FindString( const wxString &item ) const GtkBin *bin = GTK_BIN( child->data ); GtkLabel *label = GTK_LABEL( bin->child ); - wxString str = wxGTK_CONV_BACK( GET_REAL_LABEL(label->label) ); +#ifdef __WXGTK20__ + wxString str = wxGTK_CONV_BACK( gtk_label_get_text( label ) ); +#else + wxString str = wxString( label->label ); +#endif if (str == item) return count; -- 2.45.2