1/////////////////////////////////////////////////////////////////////////////// 2// Name: src/common/lboxcmn.cpp 3// Purpose: wxListBox class methods common to all platforms 4// Author: Vadim Zeitlin 5// Modified by: 6// Created: 22.10.99 7// RCS-ID: $Id: lboxcmn.cpp 39964 2006-07-04 00:31:52Z VZ $ 8// Copyright: (c) wxWidgets team 9// Licence: wxWindows licence 10/////////////////////////////////////////////////////////////////////////////// 11 12// ============================================================================ 13// declarations 14// ============================================================================ 15 16// ---------------------------------------------------------------------------- 17// headers 18// ---------------------------------------------------------------------------- 19 20// For compilers that support precompilation, includes "wx.h". 21#include "wx/wxprec.h" 22 23#ifdef __BORLANDC__ 24 #pragma hdrstop 25#endif 26 27#if wxUSE_LISTBOX 28 29#include "wx/listbox.h" 30 31#ifndef WX_PRECOMP 32 #include "wx/dynarray.h" 33 #include "wx/arrstr.h" 34#endif 35 36// ============================================================================ 37// implementation 38// ============================================================================ 39 40wxListBoxBase::~wxListBoxBase() 41{ 42 // this destructor is required for Darwin 43} 44 45// ---------------------------------------------------------------------------- 46// adding items 47// ---------------------------------------------------------------------------- 48 49void wxListBoxBase::InsertItems(unsigned int nItems, const wxString *items, unsigned int pos) 50{ 51 wxArrayString aItems; 52 for ( unsigned int n = 0; n < nItems; n++ ) 53 { 54 aItems.Add(items[n]); 55 } 56 57 DoInsertItems(aItems, pos); 58} 59 60 61void wxListBoxBase::Set(int nItems, const wxString* items, void **clientData) 62{ 63 wxArrayString aItems; 64 for ( int n = 0; n < nItems; n++ ) 65 { 66 aItems.Add(items[n]); 67 } 68 69 DoSetItems(aItems, clientData); 70} 71 72// ---------------------------------------------------------------------------- 73// selection 74// ---------------------------------------------------------------------------- 75 76bool wxListBoxBase::SetStringSelection(const wxString& s, bool select) 77{ 78 const int sel = FindString(s); 79 if ( sel == wxNOT_FOUND ) 80 return false; 81 82 SetSelection(sel, select); 83 84 return true; 85} 86 87void wxListBoxBase::DeselectAll(int itemToLeaveSelected) 88{ 89 if ( HasMultipleSelection() ) 90 { 91 wxArrayInt selections; 92 GetSelections(selections); 93 94 size_t count = selections.GetCount(); 95 for ( size_t n = 0; n < count; n++ ) 96 { 97 int item = selections[n]; 98 if ( item != itemToLeaveSelected ) 99 Deselect(item); 100 } 101 } 102 else // single selection 103 { 104 int sel = GetSelection(); 105 if ( sel != wxNOT_FOUND && sel != itemToLeaveSelected ) 106 { 107 Deselect(sel); 108 } 109 } 110} 111 112// ---------------------------------------------------------------------------- 113// misc 114// ---------------------------------------------------------------------------- 115 116void wxListBoxBase::Command(wxCommandEvent& event) 117{ 118 SetSelection(event.GetInt(), event.GetExtraLong() != 0); 119 (void)ProcessEvent(event); 120} 121 122// ---------------------------------------------------------------------------- 123// SetFirstItem() and such 124// ---------------------------------------------------------------------------- 125 126void wxListBoxBase::SetFirstItem(const wxString& s) 127{ 128 int n = FindString(s); 129 130 wxCHECK_RET( n != wxNOT_FOUND, wxT("invalid string in wxListBox::SetFirstItem") ); 131 132 DoSetFirstItem(n); 133} 134 135void wxListBoxBase::AppendAndEnsureVisible(const wxString& s) 136{ 137 Append(s); 138 EnsureVisible(GetCount() - 1); 139} 140 141void wxListBoxBase::EnsureVisible(int WXUNUSED(n)) 142{ 143 // the base class version does nothing (the only alternative would be to 144 // call SetFirstItem() but this is probably even more stupid) 145} 146 147#endif // wxUSE_LISTBOX 148