]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/kitemviews/kfileitemlistview.cpp
Cleanup and minor fixes for column-handling
[dolphin.git] / src / kitemviews / kfileitemlistview.cpp
index 27ef7fdb5019c633bc1a5eb4fa54299d35025d2f..a0650b665660a6ccd3a37a67ef45dd2c5ade086b 100644 (file)
@@ -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<QByteArray, QSizeF> KFileItemListView::visibleRolesSizes(const KItemRangeList& itemRanges) const
+QHash<QByteArray, qreal> KFileItemListView::preferredColumnWidths(const KItemRangeList& itemRanges) const
 {
     QElapsedTimer timer;
     timer.start();
 
-    QHash<QByteArray, QSizeF> sizes;
+    QHash<QByteArray, qreal> widths;
 
     int calculatedItemCount = 0;
     bool maxTimeExceeded = false;
@@ -210,10 +208,10 @@ QHash<QByteArray, QSizeF> 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<QByteArray, QSizeF> 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<int>& 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<QByteArray>& 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");