From: Robert Roebling Date: Thu, 6 Aug 1998 19:07:05 +0000 (+0000) Subject: Fixed compilation (add serbase.cpp) X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/09cf7c5853e45018195dd43805e4d88ff33f8692?ds=sidebyside;hp=496e3a4a030bf8d631c8b3730b51a8aa02311473 Fixed compilation (add serbase.cpp) Added ListBox::SetString Changed listbox message behaviour to match wxMSW (I hope) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@445 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/common/serbase.cpp b/src/common/serbase.cpp new file mode 100644 index 0000000000..e5bb3d9dd6 --- /dev/null +++ b/src/common/serbase.cpp @@ -0,0 +1,31 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: serbase.cpp +// Purpose: wxStream base classes +// Author: Robert Roebling +// Modified by: +// Created: 11/07/98 +// RCS-ID: $Id$ +// Copyright: (c) Robert Roebling +// Licence: wxWindows license +///////////////////////////////////////////////////////////////////////////// + +#ifdef __GNUG__ +#pragma implementation "stream.h" +#endif + +// For compilers that support precompilation, includes "wx.h". +#include "wx/wxprec.h" + +#include + +#ifdef __BORLANDC__ +#pragma hdrstop +#endif + +// ---------------------------------------------------------------------------- +// wxObject_Serialize +// ---------------------------------------------------------------------------- + +#if !USE_SHARED_LIBRARY +IMPLEMENT_DYNAMIC_CLASS(wxObject_Serialize,wxObject) +#endif diff --git a/src/gtk.inc b/src/gtk.inc index 2a35a5b834..da724fad37 100644 --- a/src/gtk.inc +++ b/src/gtk.inc @@ -16,6 +16,7 @@ LIB_CPP_SRC=\ common/docmdi.cpp \ common/docview.cpp \ common/dynarray.cpp \ + common/dynlib.cpp \ common/event.cpp \ common/file.cpp \ common/fileconf.cpp \ @@ -35,6 +36,7 @@ LIB_CPP_SRC=\ common/odbc.cpp \ common/postscrp.cpp \ common/prntbase.cpp \ + common/serbase.cpp \ common/string.cpp \ common/textfile.cpp \ common/time.cpp \ @@ -112,7 +114,6 @@ LIB_CPP_SRC=\ generic/textdlgg.cpp \ generic/treectrl.cpp -# common/dynlib.cpp Disabled until I write support for DLL on all platforms LIB_C_SRC=\ common/extended.c \ diff --git a/src/gtk/listbox.cpp b/src/gtk/listbox.cpp index e4f05dc807..ba55ab7bd7 100644 --- a/src/gtk/listbox.cpp +++ b/src/gtk/listbox.cpp @@ -15,6 +15,7 @@ #include "wx/dynarray.h" #include "wx/listbox.h" +#include "wx/utils.h" //----------------------------------------------------------------------------- // data @@ -26,22 +27,32 @@ extern bool g_blockEventsOnDrag; // wxListBox //----------------------------------------------------------------------------- -static void gtk_listitem_select_callback( GtkWidget *widget, wxListBox *listbox ) +static void gtk_listitem_select_callback( GtkWidget *WXUNUSED(widget), wxListBox *listbox ) { if (!listbox->HasVMT()) return; if (g_blockEventsOnDrag) return; wxCommandEvent event(wxEVT_COMMAND_LISTBOX_SELECTED, listbox->GetId() ); - event.SetInt( listbox->GetIndex( widget ) ); - - GtkBin *bin = GTK_BIN( widget ); - GtkLabel *label = GTK_LABEL( bin->child ); - wxString tmp( label->label ); - event.SetString( WXSTRINGCAST(tmp) ); + 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->GetEventHandler()->ProcessEvent( event ); + if (event.m_commandString) delete[] event.m_commandString ; }; //----------------------------------------------------------------------------- @@ -98,6 +109,10 @@ bool wxListBox::Create( wxWindow *parent, wxWindowID id, gtk_signal_connect( GTK_OBJECT(list_item), "select", GTK_SIGNAL_FUNC(gtk_listitem_select_callback), (gpointer)this ); + 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 ); @@ -114,17 +129,7 @@ bool wxListBox::Create( wxWindow *parent, wxWindowID id, 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 ) @@ -132,9 +137,13 @@ 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 ); @@ -304,8 +313,15 @@ void wxListBox::SetSelection( int n, bool select ) 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 ) diff --git a/src/gtk1/listbox.cpp b/src/gtk1/listbox.cpp index e4f05dc807..ba55ab7bd7 100644 --- a/src/gtk1/listbox.cpp +++ b/src/gtk1/listbox.cpp @@ -15,6 +15,7 @@ #include "wx/dynarray.h" #include "wx/listbox.h" +#include "wx/utils.h" //----------------------------------------------------------------------------- // data @@ -26,22 +27,32 @@ extern bool g_blockEventsOnDrag; // wxListBox //----------------------------------------------------------------------------- -static void gtk_listitem_select_callback( GtkWidget *widget, wxListBox *listbox ) +static void gtk_listitem_select_callback( GtkWidget *WXUNUSED(widget), wxListBox *listbox ) { if (!listbox->HasVMT()) return; if (g_blockEventsOnDrag) return; wxCommandEvent event(wxEVT_COMMAND_LISTBOX_SELECTED, listbox->GetId() ); - event.SetInt( listbox->GetIndex( widget ) ); - - GtkBin *bin = GTK_BIN( widget ); - GtkLabel *label = GTK_LABEL( bin->child ); - wxString tmp( label->label ); - event.SetString( WXSTRINGCAST(tmp) ); + 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->GetEventHandler()->ProcessEvent( event ); + if (event.m_commandString) delete[] event.m_commandString ; }; //----------------------------------------------------------------------------- @@ -98,6 +109,10 @@ bool wxListBox::Create( wxWindow *parent, wxWindowID id, gtk_signal_connect( GTK_OBJECT(list_item), "select", GTK_SIGNAL_FUNC(gtk_listitem_select_callback), (gpointer)this ); + 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 ); @@ -114,17 +129,7 @@ bool wxListBox::Create( wxWindow *parent, wxWindowID id, 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 ) @@ -132,9 +137,13 @@ 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 ); @@ -304,8 +313,15 @@ void wxListBox::SetSelection( int n, bool select ) 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 )