]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/selstore.cpp
Ensure there is valid context for DrawRectangle
[wxWidgets.git] / src / generic / selstore.cpp
index dfd54ae7011c74c57fc862cd3831882ff0fa3249..9aece144435d328cfe43f83be426d245b6e70a8a 100644 (file)
@@ -1,5 +1,5 @@
 ///////////////////////////////////////////////////////////////////////////////
 ///////////////////////////////////////////////////////////////////////////////
-// Name:        generic/selstore.cpp
+// Name:        src/generic/selstore.cpp
 // Purpose:     wxSelectionStore implementation
 // Author:      Vadim Zeitlin
 // Modified by:
 // Purpose:     wxSelectionStore implementation
 // Author:      Vadim Zeitlin
 // Modified by:
@@ -33,7 +33,7 @@
 // tests
 // ----------------------------------------------------------------------------
 
 // tests
 // ----------------------------------------------------------------------------
 
-bool wxSelectionStore::IsSelected(size_t item) const
+bool wxSelectionStore::IsSelected(unsigned item) const
 {
     bool isSel = m_itemsSel.Index(item) != wxNOT_FOUND;
 
 {
     bool isSel = m_itemsSel.Index(item) != wxNOT_FOUND;
 
@@ -46,7 +46,7 @@ bool wxSelectionStore::IsSelected(size_t item) const
 // Select*()
 // ----------------------------------------------------------------------------
 
 // 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
 {
     // 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
@@ -60,7 +60,7 @@ bool wxSelectionStore::SelectItem(size_t item, bool select)
         {
             m_itemsSel.AddAt(item, index);
 
         {
             m_itemsSel.AddAt(item, index);
 
-            return TRUE;
+            return true;
         }
     }
     else // reset to default state
         }
     }
     else // reset to default state
@@ -68,23 +68,23 @@ bool wxSelectionStore::SelectItem(size_t item, bool select)
         if ( isSel )
         {
             m_itemsSel.RemoveAt(index);
         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
                                    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 )
 
     // 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
 
             // 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 )
             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
         }
 
         // 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 )
             {
         {
             if ( SelectItem(item, select) && itemsChanged )
             {
@@ -191,7 +191,7 @@ bool wxSelectionStore::SelectRange(size_t itemFrom, size_t itemTo,
 // callbacks
 // ----------------------------------------------------------------------------
 
 // callbacks
 // ----------------------------------------------------------------------------
 
-void wxSelectionStore::OnItemDelete(size_t item)
+void wxSelectionStore::OnItemDelete(unsigned item)
 {
     size_t count = m_itemsSel.GetCount(),
            i = m_itemsSel.IndexForInsert(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
     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++]--;
     }
 }
 
 
         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;
+}