diff options
| author | Peter Penz <[email protected]> | 2012-03-25 23:57:51 +0200 |
|---|---|---|
| committer | Peter Penz <[email protected]> | 2012-03-26 00:00:12 +0200 |
| commit | b7f0091733ec558ced0eacf0708c0146e3961bb3 (patch) | |
| tree | 47cff440872d820d77003d2099f889b470451c1b /src/kitemviews/kitemlistview.cpp | |
| parent | e70c2f8aa472c01433f9416c363c698677c5b45f (diff) | |
Internal interface cleanup
Let derived classes from KItemListView just implement
preferredColumnWidth() for one role of an item instead of returning
a hashtable for a given item-range.
Diffstat (limited to 'src/kitemviews/kitemlistview.cpp')
| -rw-r--r-- | src/kitemviews/kitemlistview.cpp | 45 |
1 files changed, 42 insertions, 3 deletions
diff --git a/src/kitemviews/kitemlistview.cpp b/src/kitemviews/kitemlistview.cpp index e68c1143e..fdb68a1a4 100644 --- a/src/kitemviews/kitemlistview.cpp +++ b/src/kitemviews/kitemlistview.cpp @@ -514,10 +514,11 @@ QSizeF KItemListView::itemSizeHint(int index) const return itemSize(); } -QHash<QByteArray, qreal> KItemListView::preferredColumnWidths(const KItemRangeList& itemRanges) const +qreal KItemListView::preferredColumnWidth(int index, const QByteArray& role) const { - Q_UNUSED(itemRanges); - return QHash<QByteArray, qreal>(); + Q_UNUSED(index); + Q_UNUSED(role); + return 100; } void KItemListView::setSupportsItemExpanding(bool supportsExpanding) @@ -1898,6 +1899,44 @@ bool KItemListView::useAlternateBackgrounds() const return m_itemSize.isEmpty() && m_visibleRoles.count() > 1; } +QHash<QByteArray, qreal> KItemListView::preferredColumnWidths(const KItemRangeList& itemRanges) const +{ + QElapsedTimer timer; + timer.start(); + + QHash<QByteArray, qreal> widths; + + 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()) { + qreal maxWidth = widths.value(visibleRole, 0); + const qreal width = preferredColumnWidth(i, visibleRole); + maxWidth = qMax(width, maxWidth); + widths.insert(visibleRole, maxWidth); + } + + 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. + maxTimeExceeded = true; + break; + } + ++calculatedItemCount; + } + if (maxTimeExceeded) { + break; + } + } + + return widths; +} + void KItemListView::applyColumnWidthsFromHeader() { // Apply the new size to the layouter |
