X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ca65c0440a7163e4e37e48b1c4329709d722db47..3dea8ba7acb49948ccda20029655fd190a306298:/src/generic/selstore.cpp?ds=sidebyside diff --git a/src/generic/selstore.cpp b/src/generic/selstore.cpp index 816ed07939..b08f1e9b0a 100644 --- a/src/generic/selstore.cpp +++ b/src/generic/selstore.cpp @@ -33,7 +33,7 @@ // tests // ---------------------------------------------------------------------------- -bool wxSelectionStore::IsSelected(size_t item) const +bool wxSelectionStore::IsSelected(unsigned item) const { bool isSel = m_itemsSel.Index(item) != wxNOT_FOUND; @@ -46,7 +46,7 @@ bool wxSelectionStore::IsSelected(size_t item) const // Select*() // ---------------------------------------------------------------------------- -bool wxSelectionStore::SelectItem(size_t item, bool select) +bool wxSelectionStore::SelectItem(unsigned item, bool select) { // search for the item ourselves as like this we get the index where to // insert it later if needed, so we do only one search in the array instead @@ -75,16 +75,16 @@ bool wxSelectionStore::SelectItem(size_t item, bool select) return false; } -bool wxSelectionStore::SelectRange(size_t itemFrom, size_t itemTo, +bool wxSelectionStore::SelectRange(unsigned itemFrom, unsigned itemTo, bool select, wxArrayInt *itemsChanged) { // 100 is hardcoded but it shouldn't matter much: the important thing is // that we don't refresh everything when really few (e.g. 1 or 2) items // change state - static const size_t MANY_ITEMS = 100; + static const unsigned MANY_ITEMS = 100; - wxASSERT_MSG( itemFrom <= itemTo, _T("should be in order") ); + wxASSERT_MSG( itemFrom <= itemTo, wxT("should be in order") ); // are we going to have more [un]selected items than the other ones? if ( itemTo - itemFrom > m_count/2 ) @@ -102,7 +102,7 @@ bool wxSelectionStore::SelectRange(size_t itemFrom, size_t itemTo, // TODO: it should be possible to optimize the searches a bit // knowing the possible range - size_t item; + unsigned item; for ( item = 0; item < itemFrom; item++ ) { if ( selOld.Index(item) == wxNOT_FOUND ) @@ -166,7 +166,7 @@ bool wxSelectionStore::SelectRange(size_t itemFrom, size_t itemTo, } // just add the items to the selection - for ( size_t item = itemFrom; item <= itemTo; item++ ) + for ( unsigned item = itemFrom; item <= itemTo; item++ ) { if ( SelectItem(item, select) && itemsChanged ) { @@ -191,7 +191,7 @@ bool wxSelectionStore::SelectRange(size_t itemFrom, size_t itemTo, // callbacks // ---------------------------------------------------------------------------- -void wxSelectionStore::OnItemDelete(size_t item) +void wxSelectionStore::OnItemDelete(unsigned item) { size_t count = m_itemsSel.GetCount(), i = m_itemsSel.IndexForInsert(item); @@ -208,9 +208,25 @@ void wxSelectionStore::OnItemDelete(size_t item) while ( i < count ) { // all following elements must be greater than the one we deleted - wxASSERT_MSG( m_itemsSel[i] > item, _T("logic error") ); + wxASSERT_MSG( m_itemsSel[i] > item, wxT("logic error") ); m_itemsSel[i++]--; } } +void wxSelectionStore::SetItemCount(unsigned count) +{ + // forget about all items whose indices are now invalid if the size + // decreased + if ( count < m_count ) + { + for ( size_t i = m_itemsSel.GetCount(); i > 0; i-- ) + { + if ( m_itemsSel[i - 1] >= count ) + m_itemsSel.RemoveAt(i - 1); + } + } + + // remember the new number of items + m_count = count; +}