- // If no valid index range is given assume that all items are visible.
- // A cleanup will be done later as soon as the index range has been set.
- const bool hasValidIndexRange = (m_lastVisibleIndex >= 0);
-
- if (hasValidIndexRange) {
- // Move all current pending visible items that are not visible anymore
- // to the pending invisible items.
- QSet<KFileItem>::iterator it = m_pendingVisibleItems.begin();
- while (it != m_pendingVisibleItems.end()) {
- const KFileItem item = *it;
- const int index = m_model->index(item);
- if (index < m_firstVisibleIndex || index > m_lastVisibleIndex) {
- it = m_pendingVisibleItems.erase(it);
- m_pendingInvisibleItems.insert(item);
- } else {
- ++it;
- }
- }
- }
-
- int rangesCount = 0;
-
- foreach (const KItemRange& range, itemRanges) {
- rangesCount += range.count;
-
- // Add the inserted items to the pending visible and invisible items
- const int lastIndex = range.index + range.count - 1;
- for (int i = range.index; i <= lastIndex; ++i) {
- const KFileItem item = m_model->fileItem(i);
- bool visible;
- if (hasValidIndexRange) {
- visible = (i >= m_firstVisibleIndex && i <= m_lastVisibleIndex);
- } else {
- // If the view has not informed us about the visible range yet,
- // just assume that the first items are visible.
- visible = (i < m_maximumVisibleItems);
- }
-
- if (visible) {
- m_pendingVisibleItems.insert(item);
- } else {
- m_pendingInvisibleItems.insert(item);
- }
- }