X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/dbc5fd7a491f95ca4084a113d0f902ea975478fd..1cbe55b97c3b8fd9265ad6b40ce6cc169d4451c1:/src/kitemviews/kfileitemlistview.cpp diff --git a/src/kitemviews/kfileitemlistview.cpp b/src/kitemviews/kfileitemlistview.cpp index 27ef7fdb5..a0650b665 100644 --- a/src/kitemviews/kfileitemlistview.cpp +++ b/src/kitemviews/kfileitemlistview.cpp @@ -106,8 +106,6 @@ void KFileItemListView::setItemLayout(Layout layout) applyRolesToModel(); } updateLayoutOfVisibleItems(); - - setSupportsItemExpanding(m_itemLayout == DetailsLayout); } } @@ -195,12 +193,12 @@ QSizeF KFileItemListView::itemSizeHint(int index) const return QSize(); } -QHash KFileItemListView::visibleRolesSizes(const KItemRangeList& itemRanges) const +QHash KFileItemListView::preferredColumnWidths(const KItemRangeList& itemRanges) const { QElapsedTimer timer; timer.start(); - QHash sizes; + QHash widths; int calculatedItemCount = 0; bool maxTimeExceeded = false; @@ -210,10 +208,10 @@ QHash KFileItemListView::visibleRolesSizes(const KItemRangeL for (int i = startIndex; i <= endIndex; ++i) { foreach (const QByteArray& visibleRole, visibleRoles()) { - QSizeF maxSize = sizes.value(visibleRole, QSizeF(0, 0)); + qreal maxWidth = widths.value(visibleRole, 0); const QSizeF itemSize = visibleRoleSizeHint(i, visibleRole); - maxSize = maxSize.expandedTo(itemSize); - sizes.insert(visibleRole, maxSize); + maxWidth = qMax(itemSize.width(), maxWidth); + widths.insert(visibleRole, maxWidth); } if (calculatedItemCount > 100 && timer.elapsed() > 200) { @@ -240,7 +238,7 @@ QHash KFileItemListView::visibleRolesSizes(const KItemRangeL } kDebug() << "[TIME] Calculated dynamic item size for " << rangesItemCount << "items:" << timer.elapsed(); #endif - return sizes; + return widths; } QPixmap KFileItemListView::createDragPixmap(const QSet& indexes) const @@ -324,6 +322,8 @@ void KFileItemListView::initializeItemListWidget(KItemListWidget* item) case DetailsLayout: fileItemListWidget->setLayout(KFileItemListWidget::DetailsLayout); break; default: Q_ASSERT(false); break; } + + fileItemListWidget->setSupportsItemExpanding(supportsItemExpanding()); } bool KFileItemListView::itemSizeHintUpdateRequired(const QSet& changedRoles) const @@ -388,6 +388,13 @@ void KFileItemListView::onStyleOptionChanged(const KItemListStyleOption& current triggerIconSizeUpdate(); } +void KFileItemListView::onSupportsItemExpandingChanged(bool supportsExpanding) +{ + Q_UNUSED(supportsExpanding); + applyRolesToModel(); + updateLayoutOfVisibleItems(); +} + void KFileItemListView::onTransactionBegin() { m_modelRolesUpdater->setPaused(true); @@ -506,7 +513,7 @@ QSizeF KFileItemListView::visibleRoleSizeHint(int index, const QByteArray& role) if (role == "name") { // Increase the width by the expansion-toggle and the current expansion level const int expandedParentsCount = values.value("expandedParentsCount", 0).toInt(); - width += option.padding + expandedParentsCount * itemSize().height() + KIconLoader::SizeSmall; + width += option.padding + (expandedParentsCount + 1) * itemSize().height() + KIconLoader::SizeSmall; // Increase the width by the required space for the icon width += option.padding * 2 + option.iconSize; @@ -569,7 +576,7 @@ void KFileItemListView::applyRolesToModel() roles.insert("iconName"); roles.insert("name"); roles.insert("isDir"); - if (m_itemLayout == DetailsLayout) { + if (supportsItemExpanding()) { roles.insert("isExpanded"); roles.insert("isExpandable"); roles.insert("expandedParentsCount");