X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8ee9d6182c9b7774477e97f4326766ac05cc70c2..d94de683a60b20153591cc3f8f52a97cf9ce9453:/src/common/lboxcmn.cpp diff --git a/src/common/lboxcmn.cpp b/src/common/lboxcmn.cpp index 642b324e9b..2d764f33bf 100644 --- a/src/common/lboxcmn.cpp +++ b/src/common/lboxcmn.cpp @@ -1,11 +1,11 @@ /////////////////////////////////////////////////////////////////////////////// -// Name: common/lboxcmn.cpp +// Name: src/common/lboxcmn.cpp // Purpose: wxListBox class methods common to all platforms // Author: Vadim Zeitlin // Modified by: // Created: 22.10.99 // RCS-ID: $Id$ -// Copyright: (c) wxWindows team +// Copyright: (c) wxWidgets team // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -17,10 +17,6 @@ // headers // ---------------------------------------------------------------------------- -#ifdef __GNUG__ - #pragma implementation "listboxbase.h" -#endif - // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" @@ -28,39 +24,22 @@ #pragma hdrstop #endif +#if wxUSE_LISTBOX + +#include "wx/listbox.h" + #ifndef WX_PRECOMP - #include "wx/listbox.h" + #include "wx/dynarray.h" + #include "wx/arrstr.h" #endif // ============================================================================ // implementation // ============================================================================ -// ---------------------------------------------------------------------------- -// adding items -// ---------------------------------------------------------------------------- - -void wxListBoxBase::InsertItems(int nItems, const wxString *items, int pos) +wxListBoxBase::~wxListBoxBase() { - wxArrayString aItems; - for ( int n = 0; n < nItems; n++ ) - { - aItems.Add(items[n]); - } - - DoInsertItems(aItems, pos); -} - - -void wxListBoxBase::Set(int nItems, const wxString* items, void **clientData) -{ - wxArrayString aItems; - for ( int n = 0; n < nItems; n++ ) - { - aItems.Add(items[n]); - } - - DoSetItems(aItems, clientData); + // this destructor is required for Darwin } // ---------------------------------------------------------------------------- @@ -69,13 +48,38 @@ void wxListBoxBase::Set(int nItems, const wxString* items, void **clientData) bool wxListBoxBase::SetStringSelection(const wxString& s, bool select) { - int sel = FindString(s); - wxCHECK_MSG( sel != -1, FALSE, - wxT("invalid string in SetStringSelection") ); + const int sel = FindString(s); + if ( sel == wxNOT_FOUND ) + return false; SetSelection(sel, select); - return TRUE; + return true; +} + +void wxListBoxBase::DeselectAll(int itemToLeaveSelected) +{ + if ( HasMultipleSelection() ) + { + wxArrayInt selections; + GetSelections(selections); + + size_t count = selections.GetCount(); + for ( size_t n = 0; n < count; n++ ) + { + int item = selections[n]; + if ( item != itemToLeaveSelected ) + Deselect(item); + } + } + else // single selection + { + int sel = GetSelection(); + if ( sel != wxNOT_FOUND && sel != itemToLeaveSelected ) + { + Deselect(sel); + } + } } // ---------------------------------------------------------------------------- @@ -84,15 +88,33 @@ bool wxListBoxBase::SetStringSelection(const wxString& s, bool select) void wxListBoxBase::Command(wxCommandEvent& event) { - SetSelection(event.m_commandInt, event.m_extraLong != 0); + SetSelection(event.GetInt(), event.GetExtraLong() != 0); (void)ProcessEvent(event); } +// ---------------------------------------------------------------------------- +// SetFirstItem() and such +// ---------------------------------------------------------------------------- + void wxListBoxBase::SetFirstItem(const wxString& s) { int n = FindString(s); - wxCHECK_RET( n != -1, wxT("invalid string in wxListBox::SetFirstItem") ); + wxCHECK_RET( n != wxNOT_FOUND, wxT("invalid string in wxListBox::SetFirstItem") ); DoSetFirstItem(n); } + +void wxListBoxBase::AppendAndEnsureVisible(const wxString& s) +{ + Append(s); + EnsureVisible(GetCount() - 1); +} + +void wxListBoxBase::EnsureVisible(int WXUNUSED(n)) +{ + // the base class version does nothing (the only alternative would be to + // call SetFirstItem() but this is probably even more stupid) +} + +#endif // wxUSE_LISTBOX