]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Port ViewModeSettings from macros to std::variant
authorFelix Ernst <fe.a.ernst@gmail.com>
Sat, 7 Aug 2021 13:48:02 +0000 (15:48 +0200)
committerNate Graham <nate@kde.org>
Wed, 3 Nov 2021 16:02:46 +0000 (16:02 +0000)
Macros should be avoided if possible. Instead this commit replaces
the usage of macros with an std::variant of the ViewModeSettings.

As part of this cleanup, code that belongs to the VideModeSettings
class is moved there. Some parameters are also renamed to be more
in line with typical naming conventions.

src/settings/viewmodes/viewmodesettings.cpp
src/settings/viewmodes/viewmodesettings.h
src/settings/viewmodes/viewsettingstab.cpp
src/settings/viewmodes/viewsettingstab.h
src/views/dolphinitemlistview.cpp
src/views/dolphinitemlistview.h
src/views/dolphinview.cpp

index 2ea843f3b6b7f5444f7c33561d520f13fffeb6f4..8c11bde5b348790b10550a46bab4026494593963 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * SPDX-FileCopyrightText: 2011 Peter Penz <peter.penz19@gmail.com>
+ * SPDX-FileCopyrightText: 2021 Felix Ernst <fe.a.ernst@gmail.com>
  *
  * SPDX-License-Identifier: GPL-2.0-or-later
  */
 #include "dolphin_detailsmodesettings.h"
 #include "dolphin_iconsmodesettings.h"
 
-#define VIEWMODESETTINGS_SET_VALUE(mode, setValue, value) \
-    switch (mode) { \
-    case ViewModeSettings::IconsMode:   IconsModeSettings::setValue(value); break; \
-    case ViewModeSettings::CompactMode: CompactModeSettings::setValue(value); break; \
-    case ViewModeSettings::DetailsMode: DetailsModeSettings::setValue(value); break; \
-    default: Q_ASSERT(false); break; \
+ViewModeSettings::ViewModeSettings(DolphinView::Mode mode)
+{
+    switch (mode) {
+    case DolphinView::IconsView:    m_viewModeSettingsVariant = IconsModeSettings::self();   return;
+    case DolphinView::CompactView:  m_viewModeSettingsVariant = CompactModeSettings::self(); return;
+    case DolphinView::DetailsView:  m_viewModeSettingsVariant = DetailsModeSettings::self(); return;
+    default:
+        Q_UNREACHABLE();
     }
+}
 
-#define VIEWMODESETTINGS_RETURN_VALUE(mode, getValue, type) \
-    type value; \
-    switch (m_mode) { \
-    case IconsMode:   value = IconsModeSettings::getValue(); break; \
-    case CompactMode: value = CompactModeSettings::getValue(); break; \
-    case DetailsMode: value = DetailsModeSettings::getValue(); break; \
-    default:          value = IconsModeSettings::getValue(); \
-                      Q_ASSERT(false); \
-                      break; \
-    } \
-    return value
-
-ViewModeSettings::ViewModeSettings(ViewMode mode) :
-    m_mode(mode)
+ViewModeSettings::ViewModeSettings(ViewSettingsTab::Mode mode)
 {
+    switch (mode) {
+    case ViewSettingsTab::IconsMode:    m_viewModeSettingsVariant = IconsModeSettings::self();   return;
+    case ViewSettingsTab::CompactMode:  m_viewModeSettingsVariant = CompactModeSettings::self(); return;
+    case ViewSettingsTab::DetailsMode:  m_viewModeSettingsVariant = DetailsModeSettings::self(); return;
+    default:
+        Q_UNREACHABLE();
+    }
 }
 
-ViewModeSettings::~ViewModeSettings()
+ViewModeSettings::ViewModeSettings(KStandardItemListView::ItemLayout itemLayout)
 {
+    switch (itemLayout) {
+    case KStandardItemListView::IconsLayout:    m_viewModeSettingsVariant = IconsModeSettings::self();   return;
+    case KStandardItemListView::CompactLayout:  m_viewModeSettingsVariant = CompactModeSettings::self(); return;
+    case KStandardItemListView::DetailsLayout:  m_viewModeSettingsVariant = DetailsModeSettings::self(); return;
+    default:
+        Q_UNREACHABLE();
+    }
 }
 
-void ViewModeSettings::setIconSize(int size) const
+void ViewModeSettings::setIconSize(int iconSize)
 {
-    VIEWMODESETTINGS_SET_VALUE(m_mode, setIconSize, size);
+    std::visit([iconSize](auto &&v) {
+        v->setIconSize(iconSize);
+    }, m_viewModeSettingsVariant);
 }
 
 int ViewModeSettings::iconSize() const
 {
-    VIEWMODESETTINGS_RETURN_VALUE(m_mode, iconSize, int);
+    return std::visit([](auto &&v) {
+        return v->iconSize();
+    }, m_viewModeSettingsVariant);
 }
 
-void ViewModeSettings::setPreviewSize(int size) const
+void ViewModeSettings::setPreviewSize(int previewSize)
 {
-    VIEWMODESETTINGS_SET_VALUE(m_mode, setPreviewSize, size);
+    std::visit([previewSize](auto &&v) {
+        v->setPreviewSize(previewSize);
+    }, m_viewModeSettingsVariant);
 }
 
 int ViewModeSettings::previewSize() const
 {
-    VIEWMODESETTINGS_RETURN_VALUE(m_mode, previewSize, int);
+    return std::visit([](auto &&v) {
+        return v->previewSize();
+    }, m_viewModeSettingsVariant);
 }
 
-void ViewModeSettings::setUseSystemFont(bool flag)
+void ViewModeSettings::setUseSystemFont(bool useSystemFont)
 {
-    VIEWMODESETTINGS_SET_VALUE(m_mode, setUseSystemFont, flag);
+    std::visit([useSystemFont](auto &&v) {
+        v->setUseSystemFont(useSystemFont);
+    }, m_viewModeSettingsVariant);
 }
 
 bool ViewModeSettings::useSystemFont() const
 {
-    VIEWMODESETTINGS_RETURN_VALUE(m_mode, useSystemFont, bool);
+    return std::visit([](auto &&v) {
+        return v->useSystemFont();
+    }, m_viewModeSettingsVariant);
 }
 
-void ViewModeSettings::setFontFamily(const QStringfontFamily)
+void ViewModeSettings::setFontFamily(const QString &fontFamily)
 {
-    VIEWMODESETTINGS_SET_VALUE(m_mode, setFontFamily, fontFamily);
+    std::visit([&fontFamily](auto &&v) {
+        v->setFontFamily(fontFamily);
+    }, m_viewModeSettingsVariant);
 }
 
 QString ViewModeSettings::fontFamily() const
 {
-    VIEWMODESETTINGS_RETURN_VALUE(m_mode, fontFamily, QString);
+    return std::visit([](auto &&v) {
+        return v->fontFamily();
+    }, m_viewModeSettingsVariant);
 }
 
 void ViewModeSettings::setFontSize(qreal fontSize)
 {
-    VIEWMODESETTINGS_SET_VALUE(m_mode, setFontSize, fontSize);
+    std::visit([fontSize](auto &&v) {
+        v->setFontSize(fontSize);
+    }, m_viewModeSettingsVariant);
 }
 
 qreal ViewModeSettings::fontSize() const
 {
-    VIEWMODESETTINGS_RETURN_VALUE(m_mode, fontSize, qreal);
+    return std::visit([](auto &&v) {
+        return v->fontSize();
+    }, m_viewModeSettingsVariant);
 }
 
 void ViewModeSettings::setItalicFont(bool italic)
 {
-    VIEWMODESETTINGS_SET_VALUE(m_mode, setItalicFont, italic);
+    std::visit([italic](auto &&v) {
+        v->setItalicFont(italic);
+    }, m_viewModeSettingsVariant);
 }
 
 bool ViewModeSettings::italicFont() const
 {
-    VIEWMODESETTINGS_RETURN_VALUE(m_mode, italicFont, bool);
+    return std::visit([](auto &&v) {
+        return v->italicFont();
+    }, m_viewModeSettingsVariant);
 }
 
 void ViewModeSettings::setFontWeight(int fontWeight)
 {
-    VIEWMODESETTINGS_SET_VALUE(m_mode, setFontWeight, fontWeight);
+    std::visit([fontWeight](auto &&v) {
+        v->setFontWeight(fontWeight);
+    }, m_viewModeSettingsVariant);
 }
 
 int ViewModeSettings::fontWeight() const
 {
-    VIEWMODESETTINGS_RETURN_VALUE(m_mode, fontWeight, int);
+    return std::visit([](auto &&v) {
+        return v->fontWeight();
+    }, m_viewModeSettingsVariant);
+}
+
+void ViewModeSettings::useDefaults(bool useDefaults)
+{
+    std::visit([useDefaults](auto &&v) {
+        v->useDefaults(useDefaults);
+    }, m_viewModeSettingsVariant);
 }
 
 void ViewModeSettings::readConfig()
 {
-    switch (m_mode) {
-    case ViewModeSettings::IconsMode:   IconsModeSettings::self()->load(); break;
-    case ViewModeSettings::CompactMode: CompactModeSettings::self()->load(); break;
-    case ViewModeSettings::DetailsMode: DetailsModeSettings::self()->load(); break;
-    default: Q_ASSERT(false); break;
-    }
+    std::visit([](auto &&v) {
+        v->load();
+    }, m_viewModeSettingsVariant);
 }
 
 void ViewModeSettings::save()
 {
-    switch (m_mode) {
-    case ViewModeSettings::IconsMode:   IconsModeSettings::self()->save(); break;
-    case ViewModeSettings::CompactMode: CompactModeSettings::self()->save(); break;
-    case ViewModeSettings::DetailsMode: DetailsModeSettings::self()->save(); break;
-    default: Q_ASSERT(false); break;
-    }
+    std::visit([](auto &&v) {
+        return v->save();
+    }, m_viewModeSettingsVariant);
 }
index 2e5299792dc13642380adf672a93996ac95541d4..5d2b6e0e21ca7ea627f20e19ea66b864055c01c5 100644 (file)
@@ -7,8 +7,18 @@
 #ifndef VIEWMODESETTINGS_H
 #define VIEWMODESETTINGS_H
 
+#include "kitemviews/kstandarditemlistview.h"
+#include "viewsettingstab.h"
+#include "views/dolphinview.h"
+
 #include <QString>
 
+#include <variant>
+
+class CompactModeSettings;
+class DetailsModeSettings;
+class IconsModeSettings;
+
 /**
  * @short Helper class for accessing similar properties of IconsModeSettings,
  *        CompactModeSettings and DetailsModeSettings.
 class ViewModeSettings
 {
 public:
-    enum ViewMode
-    {
-        IconsMode,
-        CompactMode,
-        DetailsMode
-    };
+    explicit ViewModeSettings(DolphinView::Mode mode);
+    explicit ViewModeSettings(ViewSettingsTab::Mode mode);
+    explicit ViewModeSettings(KStandardItemListView::ItemLayout itemLayout);
 
-    explicit ViewModeSettings(ViewMode mode);
-    virtual ~ViewModeSettings();
-
-    void setIconSize(int size) const;
+    void setIconSize(int iconSize);
     int iconSize() const;
 
-    void setPreviewSize(int size) const;
+    void setPreviewSize(int previewSize);
     int previewSize() const;
 
-    void setUseSystemFont(bool flag);
+    void setUseSystemFont(bool useSystemFont);
     bool useSystemFont() const;
 
-    void setFontFamily(const QStringfontFamily);
+    void setFontFamily(const QString &fontFamily);
     QString fontFamily() const;
 
     void setFontSize(qreal fontSize);
@@ -47,11 +51,13 @@ public:
     void setFontWeight(int fontWeight);
     int fontWeight() const;
 
+    void useDefaults(bool useDefaults);
+
     void readConfig();
     void save();
 
 private:
-    ViewMode m_mode;
+    std::variant<IconsModeSettings *, CompactModeSettings *, DetailsModeSettings *> m_viewModeSettingsVariant;
 };
 
 #endif
index 0fd2dca3ac84a83000230a45b11b84705e9707ba..7ea8d5809410ecbf7b6ab8f2330f92532e127b94 100644 (file)
@@ -11,6 +11,7 @@
 #include "dolphin_iconsmodesettings.h"
 #include "dolphinfontrequester.h"
 #include "global.h"
+#include "settings/viewmodes/viewmodesettings.h"
 #include "views/zoomlevelinfo.h"
 
 #include <KLocalizedString>
@@ -206,7 +207,7 @@ void ViewSettingsTab::applySettings()
         break;
     }
 
-    ViewModeSettings settings(viewMode());
+    ViewModeSettings settings(m_mode);
 
     const int iconSize = ZoomLevelInfo::iconSizeForZoomLevel(m_defaultSizeSlider->value());
     const int previewSize = ZoomLevelInfo::iconSizeForZoomLevel(m_previewSizeSlider->value());
@@ -224,17 +225,10 @@ void ViewSettingsTab::applySettings()
 
 void ViewSettingsTab::restoreDefaultSettings()
 {
-    KConfigSkeleton* settings = nullptr;
-    switch (m_mode) {
-    case IconsMode:   settings = IconsModeSettings::self(); break;
-    case CompactMode: settings = CompactModeSettings::self(); break;
-    case DetailsMode: settings = DetailsModeSettings::self(); break;
-    default: Q_ASSERT(false); break;
-    }
-
-    settings->useDefaults(true);
+    ViewModeSettings settings(m_mode);
+    settings.useDefaults(true);
     loadSettings();
-    settings->useDefaults(false);
+    settings.useDefaults(false);
 }
 
 void ViewSettingsTab::loadSettings()
@@ -266,7 +260,7 @@ void ViewSettingsTab::loadSettings()
         break;
     }
 
-    const ViewModeSettings settings(viewMode());
+    const ViewModeSettings settings(m_mode);
 
     const QSize iconSize(settings.iconSize(), settings.iconSize());
     m_defaultSizeSlider->setValue(ZoomLevelInfo::zoomLevelForIconSize(iconSize));
@@ -285,23 +279,6 @@ void ViewSettingsTab::loadSettings()
     m_fontRequester->setCustomFont(font);
 }
 
-ViewModeSettings::ViewMode ViewSettingsTab::viewMode() const
-{
-    ViewModeSettings::ViewMode mode;
-
-    switch (m_mode) {
-    case ViewSettingsTab::IconsMode:   mode = ViewModeSettings::IconsMode; break;
-    case ViewSettingsTab::CompactMode: mode = ViewModeSettings::CompactMode; break;
-    case ViewSettingsTab::DetailsMode: mode = ViewModeSettings::DetailsMode; break;
-    default:                           mode = ViewModeSettings::IconsMode;
-                                       Q_ASSERT(false);
-                                       break;
-    }
-
-    return mode;
-}
-
-
 void ViewSettingsTab::slotDefaultSliderMoved(int value)
 {
     showToolTip(m_defaultSizeSlider, value);
index 798968345c2885e647d8e51eb8e4b0fcc03d4bc5..36dde0583f30a9438c16669426439147a5cfd801 100644 (file)
@@ -7,8 +7,6 @@
 #ifndef VIEWSETTINGSTAB_H
 #define VIEWSETTINGSTAB_H
 
-#include "settings/viewmodes/viewmodesettings.h"
-
 #include <QWidget>
 
 class DolphinFontRequester;
@@ -50,8 +48,6 @@ private:
     void loadSettings();
     void showToolTip(QSlider* slider, int value);
 
-    ViewModeSettings::ViewMode viewMode() const;
-
 private:
     Mode m_mode;
     QSlider* m_defaultSizeSlider;
index 9fa91a674c41a31ec7f624e0b91d02de1276f442..864d180c8ee3f38ee78146723b2bd398407f3316 100644 (file)
@@ -13,6 +13,7 @@
 #include "dolphinfileitemlistwidget.h"
 #include "kitemviews/kfileitemmodel.h"
 #include "kitemviews/kitemlistcontroller.h"
+#include "settings/viewmodes/viewmodesettings.h"
 #include "views/viewmodecontroller.h"
 #include "zoomlevelinfo.h"
 
@@ -47,7 +48,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);
@@ -66,7 +67,7 @@ int DolphinItemListView::zoomLevel() const
 
 void DolphinItemListView::readSettings()
 {
-    ViewModeSettings settings(viewMode());
+    ViewModeSettings settings(itemLayout());
     settings.readConfig();
 
     beginTransaction();
@@ -125,7 +126,7 @@ void DolphinItemListView::onVisibleRolesChanged(const QList<QByteArray>& current
 
 void DolphinItemListView::updateFont()
 {
-    const ViewModeSettings settings(viewMode());
+    const ViewModeSettings settings(itemLayout());
 
     if (settings.useSystemFont()) {
         KItemListView::updateFont();
@@ -145,7 +146,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();
@@ -221,20 +222,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;
-}
-
index 283b224003987e0493f4f7842989c0b44e6870d4..1637752a6bca968333ee917c5179fa75f181ad51 100644 (file)
@@ -9,7 +9,6 @@
 
 #include "dolphin_export.h"
 #include "kitemviews/kfileitemlistview.h"
-#include "settings/viewmodes/viewmodesettings.h"
 
 class KFileItemListView;
 
@@ -47,8 +46,6 @@ protected:
 private:
     void updateGridSize();
 
-    ViewModeSettings::ViewMode viewMode() const;
-
 private:
     int m_zoomLevel;
 };
index 01c97a8f7f1eb08771bf5cb0ed119980f5f786d3..9a063d857f79dc07261af1d5012fb15c1db6dda4 100644 (file)
@@ -7,9 +7,6 @@
 
 #include "dolphinview.h"
 
-#include "dolphin_compactmodesettings.h"
-#include "dolphin_detailsmodesettings.h"
-#include "dolphin_iconsmodesettings.h"
 #include "dolphin_generalsettings.h"
 #include "dolphinitemlistview.h"
 #include "dolphinnewfilemenuobserver.h"
@@ -21,6 +18,7 @@
 #include "kitemviews/kitemlistheader.h"
 #include "kitemviews/kitemlistselectionmanager.h"
 #include "kitemviews/private/kitemlistroleeditor.h"
+#include "settings/viewmodes/viewmodesettings.h"
 #include "versioncontrol/versioncontrolobserver.h"
 #include "viewproperties.h"
 #include "views/tooltips/tooltipmanager.h"
@@ -1532,28 +1530,10 @@ QUrl DolphinView::openItemAsFolderUrl(const KFileItem& item, const bool browseTh
 
 void DolphinView::resetZoomLevel()
 {
-    // TODO : Switch to using ViewModeSettings after MR #256 is merged
-    int defaultIconSize = KIconLoader::SizeSmall;
-    switch (m_mode) {
-    case IconsView:
-        IconsModeSettings::self()->useDefaults(true);
-        defaultIconSize = IconsModeSettings::iconSize();
-        IconsModeSettings::self()->useDefaults(false);
-        break;
-    case DetailsView:
-        DetailsModeSettings::self()->useDefaults(true);
-        defaultIconSize = DetailsModeSettings::iconSize();
-        DetailsModeSettings::self()->useDefaults(false);
-        break;
-    case CompactView:
-        CompactModeSettings::self()->useDefaults(true);
-        defaultIconSize = CompactModeSettings::iconSize();
-        CompactModeSettings::self()->useDefaults(false);
-        break;
-    default:
-        Q_ASSERT(false);
-        break;
-    }
+    ViewModeSettings settings{m_mode};
+    settings.useDefaults(true);
+    const int defaultIconSize = settings.iconSize();
+    settings.useDefaults(false);
 
     setZoomLevel(ZoomLevelInfo::zoomLevelForIconSize(QSize(defaultIconSize, defaultIconSize)));
 }