X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2ee3ee1bc8ac2f95029835ebc115fac0a1fbd02a..4b26b60fac70f89cf33935f78469e27536d8b614:/src/common/lboxcmn.cpp diff --git a/src/common/lboxcmn.cpp b/src/common/lboxcmn.cpp index 8525ef8104..429aa9e5ff 100644 --- a/src/common/lboxcmn.cpp +++ b/src/common/lboxcmn.cpp @@ -6,7 +6,7 @@ // Created: 22.10.99 // RCS-ID: $Id$ // Copyright: (c) wxWindows team -// Licence: wxWindows licence +// Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// // ============================================================================ @@ -28,14 +28,22 @@ #pragma hdrstop #endif +#if wxUSE_LISTBOX + #ifndef WX_PRECOMP #include "wx/listbox.h" + #include "wx/dynarray.h" #endif // ============================================================================ // implementation // ============================================================================ +wxListBoxBase::~wxListBoxBase() +{ + // this destructor is required for Darwin +} + // ---------------------------------------------------------------------------- // adding items // ---------------------------------------------------------------------------- @@ -67,71 +75,54 @@ void wxListBoxBase::Set(int nItems, const wxString* items, void **clientData) // selection // ---------------------------------------------------------------------------- -wxString wxListBoxBase::GetStringSelection () const -{ - wxString s; - int sel = GetSelection(); - if ( sel != -1 ) - s = GetString(sel); - - return s; -} - bool wxListBoxBase::SetStringSelection(const wxString& s, bool select) { int sel = FindString(s); wxCHECK_MSG( sel != -1, FALSE, - wxT("invalid string in wxListBox::SetStringSelection") ); + wxT("invalid string in SetStringSelection") ); SetSelection(sel, select); return TRUE; } -// ---------------------------------------------------------------------------- -// client data -// ---------------------------------------------------------------------------- - -void wxListBoxBase::SetClientObject(int n, wxClientData *data) -{ - wxASSERT_MSG( m_clientDataItemsType != ClientData_Void, - wxT("can't have both object and void client data") ); - - wxClientData *clientDataOld = DoGetClientObject(n); - if ( clientDataOld ) - delete clientDataOld; - - DoSetClientObject(n, data); - m_clientDataItemsType = ClientData_Object; -} - -wxClientData *wxListBoxBase::GetClientObject(int n) const +void wxListBoxBase::DeselectAll(int itemToLeaveSelected) { - wxASSERT_MSG( m_clientDataItemsType == ClientData_Object, - wxT("this window doesn't have object client data") ); - - return DoGetClientObject(n); + 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 != -1 && sel != itemToLeaveSelected ) + { + Deselect(sel); + } + } } -void wxListBoxBase::SetClientData(int n, void *data) -{ - wxASSERT_MSG( m_clientDataItemsType != ClientData_Object, - wxT("can't have both object and void client data") ); - - DoSetClientData(n, data); - m_clientDataItemsType = ClientData_Void; -} +// ---------------------------------------------------------------------------- +// misc +// ---------------------------------------------------------------------------- -void *wxListBoxBase::GetClientData(int n) const +void wxListBoxBase::Command(wxCommandEvent& event) { - wxASSERT_MSG( m_clientDataItemsType == ClientData_Void, - wxT("this window doesn't have void client data") ); - - return DoGetClientData(n); + SetSelection(event.m_commandInt, event.m_extraLong != 0); + (void)ProcessEvent(event); } // ---------------------------------------------------------------------------- -// misc +// SetFirstItem() and such // ---------------------------------------------------------------------------- void wxListBoxBase::SetFirstItem(const wxString& s) @@ -143,9 +134,16 @@ void wxListBoxBase::SetFirstItem(const wxString& s) DoSetFirstItem(n); } -void wxListBoxBase::Command(wxCommandEvent & event) +void wxListBoxBase::AppendAndEnsureVisible(const wxString& s) { - SetSelection(event.m_commandInt, event.m_extraLong); - (void)ProcessEvent(event); + 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