// Author: Robert Roebling
// Id: $Id$
// Copyright: (c) 1998 Robert Roebling
-// Licence: wxWidgets licence
+// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
}
#endif // wxUSE_CHECKLISTBOX
+ // Check or uncheck item with SPACE
+ if ((gdk_event->keyval == ' ') && (!ret) &&
+ (((listbox->GetWindowStyleFlag() & wxLB_MULTIPLE) != 0) ||
+ ((listbox->GetWindowStyleFlag() & wxLB_EXTENDED) != 0)) )
+ {
+ int sel = listbox->GtkGetIndex( widget );
+
+ if (sel != -1)
+ {
+ ret = TRUE;
+
+ if (listbox->IsSelected( sel ))
+ gtk_list_unselect_item( listbox->m_list, sel );
+ else
+ gtk_list_select_item( listbox->m_list, sel );
+
+ wxCommandEvent new_event(wxEVT_COMMAND_LISTBOX_SELECTED, listbox->GetId() );
+ new_event.SetEventObject( listbox );
+ wxArrayInt aSelections;
+ int n, count = listbox->GetSelections(aSelections);
+ if ( count > 0 )
+ {
+ n = aSelections[0];
+ if ( listbox->HasClientObjectData() )
+ new_event.SetClientObject( listbox->GetClientObject(n) );
+ else if ( listbox->HasClientUntypedData() )
+ new_event.SetClientData( listbox->GetClientData(n) );
+ new_event.SetString( listbox->GetString(n) );
+ }
+ else
+ {
+ n = -1;
+ }
+ new_event.m_commandInt = n;
+ listbox->GetEventHandler()->ProcessEvent( new_event );
+ }
+ }
+
if (ret)
{
gtk_signal_emit_stop_by_name( GTK_OBJECT(widget), "key_press_event" );
wxASSERT_MSG( m_clientList.GetCount() == (size_t)GetCount(),
wxT("bug in client data management") );
+ InvalidateBestSize();
+
GList *children = m_list->children;
int length = g_list_length(children);
int wxListBox::DoAppend( const wxString& item )
{
+ InvalidateBestSize();
+
if (m_strings)
{
// need to determine the index
gtk_widget_realize( list_item );
gtk_widget_realize( GTK_BIN(list_item)->child );
- // Apply current widget style to the new list_item
- if (m_widgetStyle)
- {
- gtk_widget_set_style( GTK_WIDGET( list_item ), m_widgetStyle );
- GtkBin *bin = GTK_BIN( list_item );
- GtkWidget *label = GTK_WIDGET( bin->child );
- gtk_widget_set_style( label, m_widgetStyle );
- }
-
#if wxUSE_TOOLTIPS
if (m_tooltip) m_tooltip->Apply( this );
#endif
}
+
+ // Apply current widget style to the new list_item
+ GtkRcStyle *style = CreateWidgetStyle();
+ if (style)
+ {
+ gtk_widget_modify_style( GTK_WIDGET( list_item ), style );
+ GtkBin *bin = GTK_BIN( list_item );
+ GtkWidget *label = GTK_WIDGET( bin->child );
+ gtk_widget_modify_style( label, style );
+ gtk_rc_style_unref( style );
+ }
}
void wxListBox::DoSetItems( const wxArrayString& items,
GtkWidget *wxListBox::GetConnectWidget()
{
- return GTK_WIDGET(m_list);
+ // return GTK_WIDGET(m_list);
+ return m_widget;
}
bool wxListBox::IsOwnGtkWindow( GdkWindow *window )
{
+ return TRUE;
+
+#if 0
if (m_widget->window == window) return TRUE;
if (GTK_WIDGET(m_list)->window == window) return TRUE;
}
return FALSE;
+#endif
}
-void wxListBox::ApplyWidgetStyle()
+void wxListBox::DoApplyWidgetStyle(GtkRcStyle *style)
{
- SetWidgetStyle();
-
- if (m_backgroundColour.Ok())
+ if (m_hasBgCol && m_backgroundColour.Ok())
{
GdkWindow *window = GTK_WIDGET(m_list)->window;
if ( window )
GList *child = m_list->children;
while (child)
{
- gtk_widget_set_style( GTK_WIDGET(child->data), m_widgetStyle );
+ gtk_widget_modify_style( GTK_WIDGET(child->data), style );
GtkBin *bin = GTK_BIN( child->data );
GtkWidget *label = GTK_WIDGET( bin->child );
- gtk_widget_set_style( label, m_widgetStyle );
+ gtk_widget_modify_style( label, style );
child = child->next;
}
// make it too small neither
lbHeight = (cy+4) * wxMin(wxMax(GetCount(), 3), 10);
- return wxSize(lbWidth, lbHeight);
+ wxSize best(lbWidth, lbHeight);
+ CacheBestSize(best);
+ return best;
}
void wxListBox::FixUpMouseEvent(GtkWidget *widget, wxCoord& x, wxCoord& y)