]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/views/dolphinitemlistview.cpp
Fix view mode-specific settings not always applying
[dolphin.git] / src / views / dolphinitemlistview.cpp
index df28a0858c5e71011538da7837e43f5aa39f34bc..5dec2b1f880e7beee53a874e2e59aa6aeaa45cc7 100644 (file)
 #include "dolphin_generalsettings.h"
 #include "dolphin_iconsmodesettings.h"
 #include "dolphinfileitemlistwidget.h"
-#include "kitemviews/kfileitemmodel.h"
-#include "kitemviews/kitemlistcontroller.h"
-#include "views/viewmodecontroller.h"
+#include "settings/viewmodes/viewmodesettings.h"
 #include "zoomlevelinfo.h"
 
 #include <KIO/PreviewJob>
+#include <QtMath>
 
 
 DolphinItemListView::DolphinItemListView(QGraphicsWidget* parent) :
@@ -46,7 +45,7 @@ void DolphinItemListView::setZoomLevel(int level)
 
     m_zoomLevel = level;
 
-    ViewModeSettings settings(viewMode());
+    ViewModeSettings settings(itemLayout());
     if (previewsShown()) {
         const int previewSize = ZoomLevelInfo::iconSizeForZoomLevel(level);
         settings.setPreviewSize(previewSize);
@@ -63,14 +62,30 @@ int DolphinItemListView::zoomLevel() const
     return m_zoomLevel;
 }
 
+void DolphinItemListView::setEnabledSelectionToggles(DolphinItemListView::SelectionTogglesEnabled selectionTogglesEnabled)
+{
+    m_selectionTogglesEnabled = selectionTogglesEnabled;
+    switch (m_selectionTogglesEnabled) {
+    case True:
+        return setEnabledSelectionToggles(true);
+    case False:
+        return setEnabledSelectionToggles(false);
+    case FollowSetting:
+        return setEnabledSelectionToggles(GeneralSettings::showSelectionToggle());
+    }
+}
+
 void DolphinItemListView::readSettings()
 {
-    ViewModeSettings settings(viewMode());
-    settings.readConfig();
+    // We load the settings for all view modes now because we don't load them when the view mode changes.
+    IconsModeSettings::self()->load();
+    CompactModeSettings::self()->load();
+    DetailsModeSettings::self()->load();
 
     beginTransaction();
 
-    setEnabledSelectionToggles(GeneralSettings::showSelectionToggle());
+    setEnabledSelectionToggles(m_selectionTogglesEnabled);
+    setHighlightEntireRow(itemLayoutHighlightEntireRow(itemLayout()));
     setSupportsItemExpanding(itemLayoutSupportsItemExpanding(itemLayout()));
 
     updateFont();
@@ -94,6 +109,11 @@ KItemListWidgetCreatorBase* DolphinItemListView::defaultWidgetCreator() const
     return new KItemListWidgetCreator<DolphinFileItemListWidget>();
 }
 
+bool DolphinItemListView::itemLayoutHighlightEntireRow(ItemLayout layout) const
+{
+    return layout == DetailsLayout && DetailsModeSettings::highlightEntireRow();
+}
+
 bool DolphinItemListView::itemLayoutSupportsItemExpanding(ItemLayout layout) const
 {
     return layout == DetailsLayout && DetailsModeSettings::expandableFolders();
@@ -124,15 +144,12 @@ void DolphinItemListView::onVisibleRolesChanged(const QList<QByteArray>& current
 
 void DolphinItemListView::updateFont()
 {
-    const ViewModeSettings settings(viewMode());
+    const ViewModeSettings settings(itemLayout());
 
     if (settings.useSystemFont()) {
         KItemListView::updateFont();
     } else {
-        QFont font(settings.fontFamily(), qRound(settings.fontSize()));
-        font.setItalic(settings.italicFont());
-        font.setWeight(settings.fontWeight());
-        font.setPointSizeF(settings.fontSize());
+        QFont font(settings.viewFont());
 
         KItemListStyleOption option = styleOption();
         option.font = font;
@@ -144,7 +161,7 @@ void DolphinItemListView::updateFont()
 
 void DolphinItemListView::updateGridSize()
 {
-    const ViewModeSettings settings(viewMode());
+    const ViewModeSettings settings(itemLayout());
 
     // Calculate the size of the icon
     const int iconSize = previewsShown() ? settings.previewSize() : settings.iconSize();
@@ -163,11 +180,16 @@ void DolphinItemListView::updateGridSize()
 
     switch (itemLayout()) {
     case KFileItemListView::IconsLayout: {
-        const int minItemWidth = 48;
-        itemWidth = minItemWidth + IconsModeSettings::textWidthIndex() * 64;
 
-        if (itemWidth < iconSize + padding * 2) {
-            itemWidth = iconSize + padding * 2;
+        // an exponential factor based on zoom, 0 -> 1, 4 -> 1.36 8 -> ~1.85, 16 -> 3.4
+        auto zoomFactor = qExp(m_zoomLevel / 13.0);
+        // 9 is the average char width for 10pt Noto Sans, making fontFactor =1
+        // by each pixel the font gets larger the factor increases by 1/9
+        auto fontFactor = option.fontMetrics.averageCharWidth() / 9.0;
+        itemWidth = 48 + IconsModeSettings::textWidthIndex() * 64 * fontFactor * zoomFactor;
+
+        if (itemWidth < iconSize + padding * 2 * zoomFactor) {
+            itemWidth = iconSize + padding * 2 * zoomFactor;
         }
 
         itemHeight = padding * 3 + iconSize + option.fontMetrics.lineSpacing();
@@ -215,20 +237,3 @@ void DolphinItemListView::updateGridSize()
     setItemSize(QSizeF(itemWidth, itemHeight));
     endTransaction();
 }
-
-ViewModeSettings::ViewMode DolphinItemListView::viewMode() const
-{
-    ViewModeSettings::ViewMode mode;
-
-    switch (itemLayout()) {
-    case KFileItemListView::IconsLayout:   mode = ViewModeSettings::IconsMode; break;
-    case KFileItemListView::CompactLayout: mode = ViewModeSettings::CompactMode; break;
-    case KFileItemListView::DetailsLayout: mode = ViewModeSettings::DetailsMode; break;
-    default:                               mode = ViewModeSettings::IconsMode;
-                                           Q_ASSERT(false);
-                                           break;
-    }
-
-    return mode;
-}
-