X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/47908e25f992135fbc8c9573870784c62654e9e9..cb6780ff0129b790a29c0660e936430b0b063db8:/src/gtk1/combobox.cpp diff --git a/src/gtk1/combobox.cpp b/src/gtk1/combobox.cpp index 2e892f7e3a..bf9aa9dcc7 100644 --- a/src/gtk1/combobox.cpp +++ b/src/gtk1/combobox.cpp @@ -13,6 +13,7 @@ #endif #include "wx/combobox.h" +#include //----------------------------------------------------------------------------- // data @@ -29,6 +30,9 @@ extern bool g_blockEventsOnDrag; static void gtk_combo_clicked_callback( GtkWidget *WXUNUSED(widget), wxComboBox *combo ) { + if (!combo->HasVMT()) return; + if (g_blockEventsOnDrag) return; + if (combo->m_alreadySent) { combo->m_alreadySent = FALSE; @@ -43,7 +47,7 @@ static void gtk_combo_clicked_callback( GtkWidget *WXUNUSED(widget), wxComboBox event.SetString( WXSTRINGCAST(tmp) ); event.SetEventObject(combo); combo->GetEventHandler()->ProcessEvent(event); -}; +} //----------------------------------------------------------------------------- // size @@ -59,7 +63,7 @@ static gint gtk_combo_size_callback( GtkCombo *widget, GtkAllocation* alloc, wxC alloc->width - widget->button->allocation.width; return FALSE; -}; +} */ //----------------------------------------------------------------------------- @@ -69,13 +73,15 @@ IMPLEMENT_DYNAMIC_CLASS(wxComboBox,wxControl) bool wxComboBox::Create(wxWindow *parent, wxWindowID id, const wxString& value, const wxPoint& pos, const wxSize& size, int n, const wxString choices[], - long style, const wxString& name ) + long style, const wxValidator& validator, const wxString& name ) { m_alreadySent = FALSE; m_needParent = TRUE; PreCreation( parent, id, pos, size, style, name ); + SetValidator( validator ); + m_widget = gtk_combo_new(); wxSize newSize = size; @@ -90,15 +96,15 @@ bool wxComboBox::Create(wxWindow *parent, wxWindowID id, const wxString& value, GtkWidget *list_item; list_item = gtk_list_item_new_with_label( choices[i] ); - gtk_signal_connect( GTK_OBJECT(list_item), "select", - GTK_SIGNAL_FUNC(gtk_combo_clicked_callback), (gpointer)this ); - gtk_container_add( GTK_CONTAINER(list), list_item ); m_clientData.Append( (wxObject*)NULL ); gtk_widget_show( list_item ); - }; + + gtk_signal_connect( GTK_OBJECT(list_item), "select", + GTK_SIGNAL_FUNC(gtk_combo_clicked_callback), (gpointer)this ); + } PostCreation(); @@ -112,7 +118,7 @@ bool wxComboBox::Create(wxWindow *parent, wxWindowID id, const wxString& value, Show( TRUE ); return TRUE; -}; +} void wxComboBox::Clear(void) { @@ -120,12 +126,12 @@ void wxComboBox::Clear(void) gtk_list_clear_items( GTK_LIST(list), 0, Number() ); m_clientData.Clear(); -}; +} void wxComboBox::Append( const wxString &item ) { Append( item, (char*)NULL ); -}; +} void wxComboBox::Append( const wxString &item, char *clientData ) { @@ -142,7 +148,7 @@ void wxComboBox::Append( const wxString &item, char *clientData ) gtk_widget_show( list_item ); m_clientData.Append( (wxObject*)clientData ); -}; +} void wxComboBox::Delete( int n ) { @@ -152,11 +158,11 @@ void wxComboBox::Delete( int n ) wxNode *node = m_clientData.Nth( n ); if (!node) { - wxFAIL_MSG("wxComboBox::Delete wrong index"); + wxFAIL_MSG( "wxComboBox: wrong index" ); } else m_clientData.DeleteNode( node ); -}; +} int wxComboBox::FindString( const wxString &item ) { @@ -171,22 +177,30 @@ int wxComboBox::FindString( const wxString &item ) if (item == label->label) return count; count++; child = child->next; - }; + } + + wxFAIL_MSG( "wxComboBox: string not found" ); + return -1; -}; +} char* wxComboBox::GetClientData( int n ) { wxNode *node = m_clientData.Nth( n ); if (node) return (char*)node->Data(); + + wxFAIL_MSG( "wxComboBox: wrong index" ); + return NULL; -}; +} void wxComboBox::SetClientData( int n, char * clientData ) { wxNode *node = m_clientData.Nth( n ); if (node) node->SetData( (wxObject*) clientData ); -}; + + wxFAIL_MSG( "wxComboBox: wrong index" ); +} int wxComboBox::GetSelection(void) const { @@ -202,10 +216,13 @@ int wxComboBox::GetSelection(void) const if (child->data == selection->data) return count; count++; child = child->next; - }; - }; + } + } + + wxFAIL_MSG( "wxComboBox: no selection" ); + return -1; -}; +} wxString wxComboBox::GetString( int n ) const { @@ -217,9 +234,12 @@ wxString wxComboBox::GetString( int n ) const GtkBin *bin = GTK_BIN( child->data ); GtkLabel *label = GTK_LABEL( bin->child ); return label->label; - }; + } + + wxFAIL_MSG( "wxComboBox: wrong index" ); + return ""; -}; +} wxString wxComboBox::GetStringSelection(void) const { @@ -231,9 +251,12 @@ wxString wxComboBox::GetStringSelection(void) const GtkBin *bin = GTK_BIN( selection->data ); wxString tmp = GTK_LABEL( bin->child )->label; return tmp; - }; + } + + wxFAIL_MSG( "wxComboBox: no selection" ); + return ""; -}; +} int wxComboBox::Number(void) const { @@ -241,29 +264,29 @@ int wxComboBox::Number(void) const GList *child = GTK_LIST(list)->children; int count = 0; - while (child) { count++; child = child->next; }; + while (child) { count++; child = child->next; } return count; -}; +} void wxComboBox::SetSelection( int n ) { GtkWidget *list = GTK_COMBO(m_widget)->list; gtk_list_select_item( GTK_LIST(list), n ); -}; +} void wxComboBox::SetStringSelection( const wxString &string ) { int res = FindString( string ); if (res == -1) return; SetSelection( res ); -}; +} wxString wxComboBox::GetValue(void) const { GtkWidget *entry = GTK_COMBO(m_widget)->entry; wxString tmp = gtk_entry_get_text( GTK_ENTRY(entry) ); return tmp; -}; +} void wxComboBox::SetValue( const wxString& value ) { @@ -271,52 +294,52 @@ void wxComboBox::SetValue( const wxString& value ) wxString tmp = ""; if (!value.IsNull()) tmp = value; gtk_entry_set_text( GTK_ENTRY(entry), tmp ); -}; +} void wxComboBox::Copy(void) { GtkWidget *entry = GTK_COMBO(m_widget)->entry; gtk_editable_copy_clipboard( GTK_EDITABLE(entry), 0 ); -}; +} void wxComboBox::Cut(void) { GtkWidget *entry = GTK_COMBO(m_widget)->entry; gtk_editable_cut_clipboard( GTK_EDITABLE(entry), 0 ); -}; +} void wxComboBox::Paste(void) { GtkWidget *entry = GTK_COMBO(m_widget)->entry; gtk_editable_paste_clipboard( GTK_EDITABLE(entry), 0 ); -}; +} void wxComboBox::SetInsertionPoint( long pos ) { GtkWidget *entry = GTK_COMBO(m_widget)->entry; int tmp = (int) pos; gtk_entry_set_position( GTK_ENTRY(entry), tmp ); -}; +} void wxComboBox::SetInsertionPointEnd(void) { GtkWidget *entry = GTK_COMBO(m_widget)->entry; int pos = GTK_ENTRY(entry)->text_length; SetInsertionPoint( pos-1 ); -}; +} long wxComboBox::GetInsertionPoint(void) const { GtkWidget *entry = GTK_COMBO(m_widget)->entry; return (long) GTK_EDITABLE(entry)->current_pos; -}; +} long wxComboBox::GetLastPosition(void) const { GtkWidget *entry = GTK_COMBO(m_widget)->entry; int pos = GTK_ENTRY(entry)->text_length; return (long) pos-1; -}; +} void wxComboBox::Replace( long from, long to, const wxString& value ) { @@ -325,20 +348,20 @@ void wxComboBox::Replace( long from, long to, const wxString& value ) if (value.IsNull()) return; gint pos = (gint)to; gtk_editable_insert_text( GTK_EDITABLE(entry), value, value.Length(), &pos ); -}; +} void wxComboBox::Remove(long from, long to) { GtkWidget *entry = GTK_COMBO(m_widget)->entry; gtk_editable_delete_text( GTK_EDITABLE(entry), (gint)from, (gint)to ); -}; +} void wxComboBox::SetSelection( long WXUNUSED(from), long WXUNUSED(to) ) { -}; +} void wxComboBox::SetEditable( bool WXUNUSED(editable) ) { -}; +}