// Created: 01/02/97
// Id:
// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem
-// Licence: wxWindows licence
+// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#include "wx/dynarray.h"
#include "wx/listbox.h"
+#include "wx/utils.h"
+#include <wx/intl.h>
+
+//-----------------------------------------------------------------------------
+// data
+//-----------------------------------------------------------------------------
+
+extern bool g_blockEventsOnDrag;
//-----------------------------------------------------------------------------
// wxListBox
//-----------------------------------------------------------------------------
-void gtk_listitem_select_callback( GtkWidget *widget, gpointer data )
+static void gtk_listitem_select_callback( GtkWidget *WXUNUSED(widget), wxListBox *listbox )
{
- wxListBox *listbox = (wxListBox*)data;
-
- wxCommandEvent event(wxEVT_COMMAND_LISTBOX_SELECTED, listbox->GetId() );
-
- event.SetInt( listbox->GetIndex( widget ) );
+ if (!listbox->HasVMT()) return;
+ if (g_blockEventsOnDrag) return;
- GtkBin *bin = GTK_BIN( widget );
- GtkLabel *label = GTK_LABEL( bin->child );
- wxString tmp( label->label );
- event.SetString( WXSTRINGCAST(tmp) );
+ wxCommandEvent event(wxEVT_COMMAND_LISTBOX_SELECTED, listbox->GetId() );
+ wxArrayInt aSelections;
+ int count = listbox->GetSelections(aSelections);
+ if ( count > 0 )
+ {
+ event.m_commandInt = aSelections[0] ;
+ event.m_clientData = listbox->GetClientData(event.m_commandInt);
+ wxString str(listbox->GetString(event.m_commandInt));
+ if (str != "")
+ event.m_commandString = copystring((char *)(const char *)str);
+ }
+ else
+ {
+ event.m_commandInt = -1 ;
+ event.m_commandString = copystring("") ;
+ }
+
event.SetEventObject( listbox );
-
- listbox->ProcessEvent( event );
+
+ listbox->GetEventHandler()->ProcessEvent( event );
+ if (event.m_commandString) delete[] event.m_commandString ;
};
//-----------------------------------------------------------------------------
GtkWidget *list_item;
list_item = gtk_list_item_new_with_label( choices[i] );
+ gtk_container_add( GTK_CONTAINER(m_list), list_item );
+
gtk_signal_connect( GTK_OBJECT(list_item), "select",
GTK_SIGNAL_FUNC(gtk_listitem_select_callback), (gpointer)this );
- gtk_container_add( GTK_CONTAINER(m_list), list_item );
-
+ if ( style & wxLB_MULTIPLE )
+ gtk_signal_connect( GTK_OBJECT(list_item), "deselect",
+ GTK_SIGNAL_FUNC(gtk_listitem_select_callback), (gpointer)this );
+
m_clientData.Append( (wxObject*)NULL );
gtk_widget_show( list_item );
void wxListBox::Append( const wxString &item )
{
- GtkWidget *list_item;
- list_item = gtk_list_item_new_with_label( item );
-
- gtk_signal_connect( GTK_OBJECT(list_item), "select",
- GTK_SIGNAL_FUNC(gtk_listitem_select_callback), (gpointer)this );
-
- gtk_container_add( GTK_CONTAINER(m_list), list_item );
-
- m_clientData.Append( (wxObject*)NULL );
-
- gtk_widget_show( list_item );
+ Append( item, (char*)NULL );
};
void wxListBox::Append( const wxString &item, char *clientData )
GtkWidget *list_item;
list_item = gtk_list_item_new_with_label( item );
- gtk_signal_connect( GTK_OBJECT(list_item), "select",
+ gtk_signal_connect( GTK_OBJECT(list_item), "select",
GTK_SIGNAL_FUNC(gtk_listitem_select_callback), (gpointer)this );
+ if ( GetWindowStyleFlag() & wxLB_MULTIPLE )
+ gtk_signal_connect( GTK_OBJECT(list_item), "deselect",
+ GTK_SIGNAL_FUNC(gtk_listitem_select_callback), (gpointer)this );
+
gtk_container_add( GTK_CONTAINER(m_list), list_item );
m_clientData.Append( (wxObject*)clientData );
gtk_list_unselect_item( m_list, n );
};
-void wxListBox::SetString( int WXUNUSED(n), const wxString &WXUNUSED(string) )
+void wxListBox::SetString( int n, const wxString &string )
{
+ GList *child = g_list_nth( m_list->children, n );
+ if (child)
+ {
+ GtkBin *bin = GTK_BIN( child->data );
+ GtkLabel *label = GTK_LABEL( bin->child );
+ gtk_label_set( label, string );
+ };
};
void wxListBox::SetStringSelection( const wxString &string, bool select )
return -1;
};
-GtkWidget *wxListBox::GetDropTargetWidget(void)
+GtkWidget *wxListBox::GetConnectWidget(void)
{
return GTK_WIDGET(m_list);
};