if (!hasMultipleRanges) {
doLayout(animateChangedItemCount(count) ? Animation : NoAnimation, index, count);
+ updateSiblingsInformation();
}
}
}
if (hasMultipleRanges) {
+ m_endTransactionAnimationHint = NoAnimation;
endTransaction();
+ updateSiblingsInformation();
}
}
m_activeTransactions = 0;
doLayout(animateChangedItemCount(count) ? Animation : NoAnimation, index, -count);
m_activeTransactions = activeTransactions;
+ updateSiblingsInformation();
}
}
}
if (hasMultipleRanges) {
+ m_endTransactionAnimationHint = NoAnimation;
endTransaction();
+ updateSiblingsInformation();
}
}
}
}
- if (supportsItemExpanding()) {
- // The siblings information only gets updated in KItemListView::doLayout() if
- // items have been inserted or removed. In the case of just moving the items
- // the siblings must be updated manually:
- updateSiblingsInformation(firstVisibleMovedIndex, lastVisibleMovedIndex);
- }
-
doLayout(NoAnimation);
+ updateSiblingsInformation();
}
void KItemListView::slotItemsChanged(const KItemRangeList& itemRanges,
const int lastVisibleIndex = m_layouter->lastVisibleIndex();
- int firstExpansionIndex = -1;
- int lastExpansionIndex = -1;
+ int firstSibblingIndex = -1;
+ int lastSibblingIndex = -1;
const bool supportsExpanding = supportsItemExpanding();
- if (supportsExpanding && changedCount != 0) {
- // Any inserting or removing of items might result in changing the siblings-information
- // of other visible items.
- firstExpansionIndex = firstVisibleIndex;
- lastExpansionIndex = lastVisibleIndex;
- }
QList<int> reusableItems = recycleInvisibleItems(firstVisibleIndex, lastVisibleIndex, hint);
}
if (supportsExpanding && changedCount == 0) {
- if (firstExpansionIndex < 0) {
- firstExpansionIndex = i;
+ if (firstSibblingIndex < 0) {
+ firstSibblingIndex = i;
}
- lastExpansionIndex = i;
+ lastSibblingIndex = i;
}
}
recycleWidget(m_visibleItems.value(index));
}
- if (supportsExpanding) {
- updateSiblingsInformation(firstExpansionIndex, lastExpansionIndex);
+ if (supportsExpanding && firstSibblingIndex >= 0) {
+ Q_ASSERT(lastSibblingIndex >= 0);
+ updateSiblingsInformation(firstSibblingIndex, lastSibblingIndex);
}
if (m_grouped) {
void KItemListView::updateSiblingsInformation(int firstIndex, int lastIndex)
{
- const int firstVisibleIndex = m_layouter->firstVisibleIndex();
- const int lastVisibleIndex = m_layouter->lastVisibleIndex();
- const bool isRangeVisible = firstIndex >= 0 &&
- lastIndex >= firstIndex &&
- lastIndex >= firstVisibleIndex &&
- firstIndex <= lastVisibleIndex;
- if (!isRangeVisible) {
+ if (!supportsItemExpanding()) {
return;
}
+ if (firstIndex < 0 || lastIndex < 0) {
+ firstIndex = m_layouter->firstVisibleIndex();
+ lastIndex = m_layouter->lastVisibleIndex();
+ } else {
+ const bool isRangeVisible = (firstIndex <= m_layouter->lastVisibleIndex() &&
+ lastIndex >= m_layouter->firstVisibleIndex());
+ if (!isRangeVisible) {
+ return;
+ }
+ }
+
int previousParents = 0;
QBitArray previousSiblings;
}
}
+ Q_ASSERT(previousParents >= 0);
for (int i = rootIndex; i <= lastIndex; ++i) {
// Update the parent-siblings in case if the current item represents
// a child or an upper parent.
const int currentParents = m_model->expandedParentsCount(i);
+ Q_ASSERT(currentParents >= 0);
if (previousParents < currentParents) {
previousParents = currentParents;
previousSiblings.resize(currentParents);