]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/settings/viewmodes/viewmodesettings.cpp
SVN_SILENT made messages (.desktop file) - always resolve ours
[dolphin.git] / src / settings / viewmodes / viewmodesettings.cpp
index 01601f71165a144ebc8508dbd0b7905dc6df220e..1644cc074a2713f52e2bfa468e480835c6a73a7e 100644 (file)
-/***************************************************************************
- *   Copyright (C) 2011 by Peter Penz <peter.penz19@gmail.com>             *
- *                                                                         *
- *   This program is free software; you can redistribute it and/or modify  *
- *   it under the terms of the GNU General Public License as published by  *
- *   the Free Software Foundation; either version 2 of the License, or     *
- *   (at your option) any later version.                                   *
- *                                                                         *
- *   This program is distributed in the hope that it will be useful,       *
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
- *   GNU General Public License for more details.                          *
- *                                                                         *
- *   You should have received a copy of the GNU General Public License     *
- *   along with this program; if not, write to the                         *
- *   Free Software Foundation, Inc.,                                       *
- *   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA            *
- ***************************************************************************/
+/*
+ * SPDX-FileCopyrightText: 2011 Peter Penz <peter.penz19@gmail.com>
+ * SPDX-FileCopyrightText: 2021 Felix Ernst <felixernst@kde.org>
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
 
 #include "viewmodesettings.h"
 
-#include "dolphin_iconsmodesettings.h"
-#include "dolphin_detailsmodesettings.h"
 #include "dolphin_compactmodesettings.h"
+#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; \
+#include "dolphin_generalsettings.h"
+
+ViewModeSettings::ViewModeSettings()
+{
+    auto removeEntries = [](KConfigGroup &group) {
+        group.deleteEntry("FontFamily");
+        group.deleteEntry("FontWeight");
+        group.deleteEntry("ItalicFont");
+    };
+
+    KSharedConfig::Ptr config = KSharedConfig::openConfig();
+    // Migrate old config entries
+    if (GeneralSettings::version() < 202) {
+        for (const QString &groupName : {QStringLiteral("CompactMode"), QStringLiteral("DetailsMode"), QStringLiteral("IconsMode")}) {
+            KConfigGroup group = config->group(groupName);
+            const QString family = group.readEntry("FontFamily", QString{});
+            if (family.isEmpty()) {
+                removeEntries(group);
+                continue;
+            }
+
+            QFont font;
+            font.setFamily(family);
+            const int weight = group.readEntry<int>("FontWeight", QFont::Normal);
+            font.setWeight(static_cast<QFont::Weight>(weight));
+            font.setItalic(group.readEntry("ItalicFont", false));
+            removeEntries(group);
+
+            // Write the new config entry
+            group.writeEntry("ViewFont", font);
+        }
+
+        config->sync();
     }
-
-#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()
-{
-}
-
-void ViewModeSettings::setIconSize(int size) const
-{
-    VIEWMODESETTINGS_SET_VALUE(m_mode, setIconSize, size);
-}
-
-int ViewModeSettings::iconSize() const
-{
-    VIEWMODESETTINGS_RETURN_VALUE(m_mode, iconSize, int);
-}
-
-void ViewModeSettings::setPreviewSize(int size) const
-{
-    VIEWMODESETTINGS_SET_VALUE(m_mode, setPreviewSize, size);
+ViewModeSettings::ViewModeSettings(DolphinView::Mode mode)
+    : ViewModeSettings()
+{
+    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();
+    }
 }
 
-int ViewModeSettings::previewSize() const
-{
-    VIEWMODESETTINGS_RETURN_VALUE(m_mode, previewSize, int);
+ViewModeSettings::ViewModeSettings(ViewSettingsTab::Mode mode)
+    : ViewModeSettings()
+{
+    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();
+    }
 }
 
-void ViewModeSettings::setUseSystemFont(bool flag)
-{
-    VIEWMODESETTINGS_SET_VALUE(m_mode, setUseSystemFont, flag);
+ViewModeSettings::ViewModeSettings(KStandardItemListView::ItemLayout itemLayout)
+    : ViewModeSettings()
+{
+    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();
+    }
 }
 
-bool ViewModeSettings::useSystemFont() const
+void ViewModeSettings::setIconSize(int iconSize)
 {
-    VIEWMODESETTINGS_RETURN_VALUE(m_mode, useSystemFont, bool);
+    std::visit(
+        [iconSize](auto &&v) {
+            v->setIconSize(iconSize);
+        },
+        m_viewModeSettingsVariant);
 }
 
-void ViewModeSettings::setFontFamily(const QString& fontFamily)
+int ViewModeSettings::iconSize() const
 {
-    VIEWMODESETTINGS_SET_VALUE(m_mode, setFontFamily, fontFamily);
+    return std::visit(
+        [](auto &&v) {
+            return v->iconSize();
+        },
+        m_viewModeSettingsVariant);
 }
 
-QString ViewModeSettings::fontFamily() const
+void ViewModeSettings::setPreviewSize(int previewSize)
 {
-    VIEWMODESETTINGS_RETURN_VALUE(m_mode, fontFamily, QString);
+    std::visit(
+        [previewSize](auto &&v) {
+            v->setPreviewSize(previewSize);
+        },
+        m_viewModeSettingsVariant);
 }
 
-void ViewModeSettings::setFontSize(qreal fontSize)
+int ViewModeSettings::previewSize() const
 {
-    VIEWMODESETTINGS_SET_VALUE(m_mode, setFontSize, fontSize);
+    return std::visit(
+        [](auto &&v) {
+            return v->previewSize();
+        },
+        m_viewModeSettingsVariant);
 }
 
-qreal ViewModeSettings::fontSize() const
+void ViewModeSettings::setUseSystemFont(bool useSystemFont)
 {
-    VIEWMODESETTINGS_RETURN_VALUE(m_mode, fontSize, qreal);
+    std::visit(
+        [useSystemFont](auto &&v) {
+            v->setUseSystemFont(useSystemFont);
+        },
+        m_viewModeSettingsVariant);
 }
 
-void ViewModeSettings::setItalicFont(bool italic)
+bool ViewModeSettings::useSystemFont() const
 {
-    VIEWMODESETTINGS_SET_VALUE(m_mode, setItalicFont, italic);
+    return std::visit(
+        [](auto &&v) {
+            return v->useSystemFont();
+        },
+        m_viewModeSettingsVariant);
 }
 
-bool ViewModeSettings::italicFont() const
+void ViewModeSettings::setViewFont(const QFont &font)
 {
-    VIEWMODESETTINGS_RETURN_VALUE(m_mode, italicFont, bool);
+    std::visit(
+        [&font](auto &&v) {
+            v->setViewFont(font);
+        },
+        m_viewModeSettingsVariant);
 }
 
-void ViewModeSettings::setFontWeight(int fontWeight)
+QFont ViewModeSettings::viewFont() const
 {
-    VIEWMODESETTINGS_SET_VALUE(m_mode, setFontWeight, fontWeight);
+    return std::visit(
+        [](auto &&v) {
+            return v->viewFont();
+        },
+        m_viewModeSettingsVariant);
 }
 
-int ViewModeSettings::fontWeight() const
+void ViewModeSettings::useDefaults(bool useDefaults)
 {
-    VIEWMODESETTINGS_RETURN_VALUE(m_mode, fontWeight, int);
+    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::writeConfig()
+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);
 }