X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c71d3313a42a8fdc6efd6a0c49ad13def665ef2f..c13d6ac1ea199d1e3908d40d129e2fd5a4d82df7:/src/generic/selstore.cpp diff --git a/src/generic/selstore.cpp b/src/generic/selstore.cpp index 8793eda3e0..9aece14443 100644 --- a/src/generic/selstore.cpp +++ b/src/generic/selstore.cpp @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Name: generic/selstore.cpp +// Name: src/generic/selstore.cpp // Purpose: wxSelectionStore implementation // Author: Vadim Zeitlin // Modified by: @@ -17,6 +17,12 @@ // headers // ---------------------------------------------------------------------------- +#include "wx/wxprec.h" + +#ifdef __BORLANDC__ + #pragma hdrstop +#endif + #include "wx/selstore.h" // ============================================================================ @@ -27,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; @@ -40,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 @@ -54,7 +60,7 @@ bool wxSelectionStore::SelectItem(size_t item, bool select) { m_itemsSel.AddAt(item, index); - return TRUE; + return true; } } else // reset to default state @@ -62,23 +68,23 @@ bool wxSelectionStore::SelectItem(size_t item, bool select) if ( isSel ) { m_itemsSel.RemoveAt(index); - return TRUE; + return true; } } - return FALSE; + 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 ) @@ -96,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 ) @@ -160,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 ) { @@ -185,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); @@ -202,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; +}