-QHash<QByteArray, QSizeF> KFileItemListView::visibleRolesSizes(const KItemRangeList& itemRanges) const
-{
- QElapsedTimer timer;
- timer.start();
-
- QHash<QByteArray, QSizeF> sizes;
-
- int calculatedItemCount = 0;
- bool maxTimeExceeded = false;
- foreach (const KItemRange& itemRange, itemRanges) {
- const int startIndex = itemRange.index;
- const int endIndex = startIndex + itemRange.count - 1;
-
- for (int i = startIndex; i <= endIndex; ++i) {
- foreach (const QByteArray& visibleRole, visibleRoles()) {
- QSizeF maxSize = sizes.value(visibleRole, QSizeF(0, 0));
- const QSizeF itemSize = visibleRoleSizeHint(i, visibleRole);
- maxSize = maxSize.expandedTo(itemSize);
- sizes.insert(visibleRole, maxSize);
- }
-
- if (calculatedItemCount > 100 && timer.elapsed() > 200) {
- // When having several thousands of items calculating the sizes can get
- // very expensive. We accept a possibly too small role-size in favour
- // of having no blocking user interface.
- #ifdef KFILEITEMLISTVIEW_DEBUG
- kDebug() << "Timer exceeded, stopped after" << calculatedItemCount << "items";
- #endif
- maxTimeExceeded = true;
- break;
- }
- ++calculatedItemCount;