]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/settings/viewmodes/viewsettingstab.cpp
Details view: Allow to turn off expandable folders like in Dolphin 1.7
[dolphin.git] / src / settings / viewmodes / viewsettingstab.cpp
index 743f042caf5acdd40e58c2753973321b880cc8d5..c734344eea8db5fd44e9e119655f19bffdadad16 100644 (file)
@@ -27,6 +27,7 @@
 #include <KComboBox>
 #include <KLocale>
 
+#include <QCheckBox>
 #include <QGroupBox>
 #include <QLabel>
 #include <QSlider>
 
 #include <views/zoomlevelinfo.h>
 
-template<class T>
-void apply(int iconSizeValue, int previewSizeValue, const QFont& font, bool useSystemFont)
-{
-    const int iconSize = ZoomLevelInfo::iconSizeForZoomLevel(iconSizeValue);
-    const int previewSize = ZoomLevelInfo::iconSizeForZoomLevel(previewSizeValue);
-    T::setIconSize(iconSize);
-    T::setPreviewSize(previewSize);
-
-    T::setUseSystemFont(useSystemFont);
-    T::setFontFamily(font.family());
-    T::setFontSize(font.pointSizeF());
-    T::setItalicFont(font.italic());
-    T::setFontWeight(font.weight());
-
-    T::self()->writeConfig();
-}
-
-template<class T>
-void load(int* iconSizeValue, int* previewSizeValue, QFont* font, bool* useSystemFont)
-{
-    const QSize iconSize(T::iconSize(), T::iconSize());
-    *iconSizeValue = ZoomLevelInfo::zoomLevelForIconSize(iconSize);
-
-    const QSize previewSize(T::previewSize(), T::previewSize());
-    *previewSizeValue = ZoomLevelInfo::zoomLevelForIconSize(previewSize);
-
-    *useSystemFont = T::useSystemFont();
-
-    *font = QFont(T::fontFamily(), qRound(T::fontSize()));
-    font->setItalic(T::italicFont());
-    font->setWeight(T::fontWeight());
-    font->setPointSizeF(T::fontSize());
-}
-
-
 ViewSettingsTab::ViewSettingsTab(Mode mode, QWidget* parent) :
     QWidget(parent),
     m_mode(mode),
     m_defaultSizeSlider(0),
     m_previewSizeSlider(0),
     m_fontRequester(0),
-    m_textWidthBox(0)
+    m_textWidthBox(0),
+    m_expandableFolders(0)
 {
     QVBoxLayout* topLayout = new QVBoxLayout(this);
 
@@ -114,7 +81,8 @@ ViewSettingsTab::ViewSettingsTab(Mode mode, QWidget* parent) :
     textGroupLayout->addWidget(fontLabel, 0, 0, Qt::AlignRight);
     textGroupLayout->addWidget(m_fontRequester, 0, 1);
 
-    if (m_mode == IconsMode) {
+    switch (m_mode) {
+    case IconsMode: {
         QLabel* textWidthLabel = new QLabel(i18nc("@label:listbox", "Text width:"), textGroup);
         m_textWidthBox = new KComboBox(textGroup);
         m_textWidthBox->addItem(i18nc("@item:inlistbox Text width", "Small"));
@@ -124,10 +92,19 @@ ViewSettingsTab::ViewSettingsTab(Mode mode, QWidget* parent) :
 
         textGroupLayout->addWidget(textWidthLabel, 2, 0, Qt::AlignRight);
         textGroupLayout->addWidget(m_textWidthBox, 2, 1);
+        break;
+    }
+    case DetailsMode:
+        // Disabled for 4.8.x: No new UI-strings are allowed
+        // m_expandableFolders = new QCheckBox(i18nc("@option:check", "Expandable folders"), this);
+        break;
+    default:
+        break;
     }
 
     topLayout->addWidget(iconSizeGroup);
     topLayout->addWidget(textGroup);
+    topLayout->addWidget(m_expandableFolders);
     topLayout->addStretch(1);
 
     loadSettings();
@@ -135,8 +112,17 @@ ViewSettingsTab::ViewSettingsTab(Mode mode, QWidget* parent) :
     connect(m_defaultSizeSlider, SIGNAL(valueChanged(int)), this, SIGNAL(changed()));
     connect(m_previewSizeSlider, SIGNAL(valueChanged(int)), this, SIGNAL(changed()));
     connect(m_fontRequester, SIGNAL(changed()), this, SIGNAL(changed()));
-    if (m_mode == IconsMode) {
+
+    switch (m_mode) {
+    case IconsMode:
         connect(m_textWidthBox, SIGNAL(currentIndexChanged(int)), this, SIGNAL(changed()));
+        break;
+    case DetailsMode:
+        // Disabled for 4.8.x: No new UI-strings are allowed
+        //connect(m_expandableFolders, SIGNAL(toggled(bool)), this, SIGNAL(changed()));
+        break;
+    default:
+        break;
     }
 }
 
@@ -146,26 +132,35 @@ ViewSettingsTab::~ViewSettingsTab()
 
 void ViewSettingsTab::applySettings()
 {
-    const int defaultSize = m_defaultSizeSlider->value();
-    const int previewSize = m_previewSizeSlider->value();
     const QFont font = m_fontRequester->currentFont();
     const bool useSystemFont = (m_fontRequester->mode() == DolphinFontRequester::SystemFont);
 
     switch (m_mode) {
     case IconsMode:
         IconsModeSettings::setTextWidthIndex(m_textWidthBox->currentIndex());
-        apply<IconsModeSettings>(defaultSize, previewSize, font, useSystemFont);
-        break;
-    case CompactMode:
-        apply<CompactModeSettings>(defaultSize, previewSize, font, useSystemFont);
         break;
     case DetailsMode:
-        apply<DetailsModeSettings>(defaultSize, previewSize, font, useSystemFont);
+        // Disabled for 4.8.x: No new UI-strings are allowed
+        //DetailsModeSettings::setExpandableFolders(m_expandableFolders->isChecked());
         break;
     default:
-        Q_ASSERT(false);
         break;
     }
+
+    ViewModeSettings settings(viewMode());
+
+    const int iconSize = ZoomLevelInfo::iconSizeForZoomLevel(m_defaultSizeSlider->value());
+    const int previewSize = ZoomLevelInfo::iconSizeForZoomLevel(m_previewSizeSlider->value());
+    settings.setIconSize(iconSize);
+    settings.setPreviewSize(previewSize);
+
+    settings.setUseSystemFont(useSystemFont);
+    settings.setFontFamily(font.family());
+    settings.setFontSize(font.pointSizeF());
+    settings.setItalicFont(font.italic());
+    settings.setFontWeight(font.weight());
+
+    settings.writeConfig();
 }
 
 void ViewSettingsTab::restoreDefaultSettings()
@@ -185,31 +180,53 @@ void ViewSettingsTab::restoreDefaultSettings()
 
 void ViewSettingsTab::loadSettings()
 {
-    int iconSizeValue = 0;
-    int previewSizeValue = 0;
-    QFont font;
-    bool useSystemFont = false;
-
     switch (m_mode) {
     case IconsMode:
         m_textWidthBox->setCurrentIndex(IconsModeSettings::textWidthIndex());
-        load<IconsModeSettings>(&iconSizeValue, &previewSizeValue, &font, &useSystemFont);
-        break;
-    case CompactMode:
-        load<CompactModeSettings>(&iconSizeValue, &previewSizeValue, &font, &useSystemFont);
         break;
     case DetailsMode:
-        load<DetailsModeSettings>(&iconSizeValue, &previewSizeValue, &font, &useSystemFont);
+        // Disabled for 4.8.x: No new UI-strings are allowed
+        // m_expandableFolders->setChecked(DetailsModeSettings::expandableFolders());
         break;
     default:
-        Q_ASSERT(false);
         break;
     }
 
-    m_defaultSizeSlider->setValue(iconSizeValue);
-    m_previewSizeSlider->setValue(previewSizeValue);
-    m_fontRequester->setMode(useSystemFont ? DolphinFontRequester::SystemFont : DolphinFontRequester::CustomFont);
+    ViewModeSettings settings(viewMode());
+    settings.readConfig();
+
+    const QSize iconSize(settings.iconSize(), settings.iconSize());
+    m_defaultSizeSlider->setValue(ZoomLevelInfo::zoomLevelForIconSize(iconSize));
+
+    const QSize previewSize(settings.previewSize(), settings.previewSize());
+    m_previewSizeSlider->setValue(ZoomLevelInfo::zoomLevelForIconSize(previewSize));
+
+    m_fontRequester->setMode(settings.useSystemFont()
+                             ? DolphinFontRequester::SystemFont
+                             : DolphinFontRequester::CustomFont);
+
+    QFont font(settings.fontFamily(), qRound(settings.fontSize()));
+    font.setItalic(settings.italicFont());
+    font.setWeight(settings.fontWeight());
+    font.setPointSizeF(settings.fontSize());
     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;
+}
+
+
 #include "viewsettingstab.moc"