]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/settings/viewmodes/viewsettingstab.cpp
Merge branch 'Applications/17.12'
[dolphin.git] / src / settings / viewmodes / viewsettingstab.cpp
index 6ad8663a677bfd3ca693d84e76792fd729dfa308..98f818c96e583bbd84eab78474b14a1d74a4308d 100644 (file)
 #include "dolphin_iconsmodesettings.h"
 
 #include <KComboBox>
-#include <KLocale>
+#include <KLocalizedString>
 
+#include <QCheckBox>
 #include <QGroupBox>
 #include <QLabel>
 #include <QSlider>
 #include <QVBoxLayout>
+#include <QHelpEvent>
+#include <QApplication>
 
 #include <views/zoomlevelinfo.h>
 
 ViewSettingsTab::ViewSettingsTab(Mode mode, QWidget* parent) :
     QWidget(parent),
     m_mode(mode),
-    m_defaultSizeSlider(0),
-    m_previewSizeSlider(0),
-    m_fontRequester(0),
-    m_textWidthBox(0)
+    m_defaultSizeSlider(nullptr),
+    m_previewSizeSlider(nullptr),
+    m_fontRequester(nullptr),
+    m_widthBox(nullptr),
+    m_maxLinesBox(nullptr),
+    m_expandableFolders(nullptr)
 {
     QVBoxLayout* topLayout = new QVBoxLayout(this);
 
@@ -56,12 +61,16 @@ ViewSettingsTab::ViewSettingsTab(Mode mode, QWidget* parent) :
     m_defaultSizeSlider->setPageStep(1);
     m_defaultSizeSlider->setTickPosition(QSlider::TicksBelow);
     m_defaultSizeSlider->setRange(minRange, maxRange);
+    connect(m_defaultSizeSlider, &QSlider::valueChanged,
+            this, &ViewSettingsTab::slotDefaultSliderMoved);
 
     QLabel* previewLabel = new QLabel(i18nc("@label:listbox", "Preview:"), this);
     m_previewSizeSlider = new QSlider(Qt::Horizontal, this);
     m_previewSizeSlider->setPageStep(1);
     m_previewSizeSlider->setTickPosition(QSlider::TicksBelow);
     m_previewSizeSlider->setRange(minRange, maxRange);
+    connect(m_previewSizeSlider, &QSlider::valueChanged,
+            this, &ViewSettingsTab::slotPreviewSliderMoved);
 
     QGridLayout* layout = new QGridLayout(iconSizeGroup);
     layout->addWidget(defaultLabel, 0, 0, Qt::AlignRight);
@@ -79,29 +88,75 @@ ViewSettingsTab::ViewSettingsTab(Mode mode, QWidget* parent) :
     textGroupLayout->addWidget(fontLabel, 0, 0, Qt::AlignRight);
     textGroupLayout->addWidget(m_fontRequester, 0, 1);
 
-    if (m_mode == 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"));
-        m_textWidthBox->addItem(i18nc("@item:inlistbox Text width", "Medium"));
-        m_textWidthBox->addItem(i18nc("@item:inlistbox Text width", "Large"));
-        m_textWidthBox->addItem(i18nc("@item:inlistbox Text width", "Huge"));
-
-        textGroupLayout->addWidget(textWidthLabel, 2, 0, Qt::AlignRight);
-        textGroupLayout->addWidget(m_textWidthBox, 2, 1);
+    switch (m_mode) {
+    case IconsMode: {
+        QLabel* widthLabel = new QLabel(i18nc("@label:listbox", "Width:"), textGroup);
+        m_widthBox = new KComboBox(textGroup);
+        m_widthBox->addItem(i18nc("@item:inlistbox Text width", "Small"));
+        m_widthBox->addItem(i18nc("@item:inlistbox Text width", "Medium"));
+        m_widthBox->addItem(i18nc("@item:inlistbox Text width", "Large"));
+        m_widthBox->addItem(i18nc("@item:inlistbox Text width", "Huge"));
+
+        QLabel* maxLinesLabel = new QLabel(i18nc("@label:listbox", "Maximum lines:"), textGroup);
+        m_maxLinesBox = new KComboBox(textGroup);
+        m_maxLinesBox->addItem(i18nc("@item:inlistbox Maximum lines", "Unlimited"));
+        m_maxLinesBox->addItem(i18nc("@item:inlistbox Maximum lines", "1"));
+        m_maxLinesBox->addItem(i18nc("@item:inlistbox Maximum lines", "2"));
+        m_maxLinesBox->addItem(i18nc("@item:inlistbox Maximum lines", "3"));
+        m_maxLinesBox->addItem(i18nc("@item:inlistbox Maximum lines", "4"));
+        m_maxLinesBox->addItem(i18nc("@item:inlistbox Maximum lines", "5"));
+
+        textGroupLayout->addWidget(widthLabel, 2, 0, Qt::AlignRight);
+        textGroupLayout->addWidget(m_widthBox, 2, 1);
+        textGroupLayout->addWidget(maxLinesLabel, 3, 0, Qt::AlignRight);
+        textGroupLayout->addWidget(m_maxLinesBox, 3, 1);
+        break;
+    }
+    case CompactMode: {
+        QLabel* maxWidthLabel = new QLabel(i18nc("@label:listbox", "Maximum width:"), textGroup);
+        m_widthBox = new KComboBox(textGroup);
+        m_widthBox->addItem(i18nc("@item:inlistbox Maximum width", "Unlimited"));
+        m_widthBox->addItem(i18nc("@item:inlistbox Maximum width", "Small"));
+        m_widthBox->addItem(i18nc("@item:inlistbox Maximum width", "Medium"));
+        m_widthBox->addItem(i18nc("@item:inlistbox Maximum width", "Large"));
+
+        textGroupLayout->addWidget(maxWidthLabel, 2, 0, Qt::AlignRight);
+        textGroupLayout->addWidget(m_widthBox, 2, 1);
+        break;
+    }
+    case DetailsMode:
+        m_expandableFolders = new QCheckBox(i18nc("@option:check", "Expandable folders"), this);
+        break;
+    default:
+        break;
     }
 
     topLayout->addWidget(iconSizeGroup);
     topLayout->addWidget(textGroup);
+    if (m_expandableFolders) {
+        topLayout->addWidget(m_expandableFolders);
+    }
     topLayout->addStretch(1);
 
     loadSettings();
 
-    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) {
-        connect(m_textWidthBox, SIGNAL(currentIndexChanged(int)), this, SIGNAL(changed()));
+    connect(m_defaultSizeSlider, &QSlider::valueChanged, this, &ViewSettingsTab::changed);
+    connect(m_previewSizeSlider, &QSlider::valueChanged, this, &ViewSettingsTab::changed);
+    connect(m_fontRequester, &DolphinFontRequester::changed, this, &ViewSettingsTab::changed);
+
+    switch (m_mode) {
+    case IconsMode:
+        connect(m_widthBox, static_cast<void(KComboBox::*)(int)>(&KComboBox::currentIndexChanged), this, &ViewSettingsTab::changed);
+        connect(m_maxLinesBox, static_cast<void(KComboBox::*)(int)>(&KComboBox::currentIndexChanged), this, &ViewSettingsTab::changed);
+        break;
+    case CompactMode:
+        connect(m_widthBox, static_cast<void(KComboBox::*)(int)>(&KComboBox::currentIndexChanged), this, &ViewSettingsTab::changed);
+        break;
+    case DetailsMode:
+        connect(m_expandableFolders, &QCheckBox::toggled, this, &ViewSettingsTab::changed);
+        break;
+    default:
+        break;
     }
 }
 
@@ -114,8 +169,19 @@ void ViewSettingsTab::applySettings()
     const QFont font = m_fontRequester->currentFont();
     const bool useSystemFont = (m_fontRequester->mode() == DolphinFontRequester::SystemFont);
 
-    if (m_mode == IconsMode) {
-        IconsModeSettings::setTextWidthIndex(m_textWidthBox->currentIndex());
+    switch (m_mode) {
+    case IconsMode:
+        IconsModeSettings::setTextWidthIndex(m_widthBox->currentIndex());
+        IconsModeSettings::setMaximumTextLines(m_maxLinesBox->currentIndex());
+        break;
+    case CompactMode:
+        CompactModeSettings::setMaximumTextWidthIndex(m_widthBox->currentIndex());
+        break;
+    case DetailsMode:
+        DetailsModeSettings::setExpandableFolders(m_expandableFolders->isChecked());
+        break;
+    default:
+        break;
     }
 
     ViewModeSettings settings(viewMode());
@@ -131,12 +197,12 @@ void ViewSettingsTab::applySettings()
     settings.setItalicFont(font.italic());
     settings.setFontWeight(font.weight());
 
-    settings.writeConfig();
+    settings.save();
 }
 
 void ViewSettingsTab::restoreDefaultSettings()
 {
-    KConfigSkeleton* settings = 0;
+    KConfigSkeleton* settings = nullptr;
     switch (m_mode) {
     case IconsMode:   settings = IconsModeSettings::self(); break;
     case CompactMode: settings = CompactModeSettings::self(); break;
@@ -151,11 +217,23 @@ void ViewSettingsTab::restoreDefaultSettings()
 
 void ViewSettingsTab::loadSettings()
 {
-    if (m_mode == IconsMode) {
-        m_textWidthBox->setCurrentIndex(IconsModeSettings::textWidthIndex());
+    switch (m_mode) {
+    case IconsMode:
+        m_widthBox->setCurrentIndex(IconsModeSettings::textWidthIndex());
+        m_maxLinesBox->setCurrentIndex(IconsModeSettings::maximumTextLines());
+        break;
+    case CompactMode:
+        m_widthBox->setCurrentIndex(CompactModeSettings::maximumTextWidthIndex());
+        break;
+    case DetailsMode:
+        m_expandableFolders->setChecked(DetailsModeSettings::expandableFolders());
+        break;
+    default:
+        break;
     }
 
     const ViewModeSettings settings(viewMode());
+
     const QSize iconSize(settings.iconSize(), settings.iconSize());
     m_defaultSizeSlider->setValue(ZoomLevelInfo::zoomLevelForIconSize(iconSize));
 
@@ -181,11 +259,35 @@ ViewModeSettings::ViewMode ViewSettingsTab::viewMode() const
     case ViewSettingsTab::IconsMode:   mode = ViewModeSettings::IconsMode; break;
     case ViewSettingsTab::CompactMode: mode = ViewModeSettings::CompactMode; break;
     case ViewSettingsTab::DetailsMode: mode = ViewModeSettings::DetailsMode; break;
-    default: Q_ASSERT(false); break;
+    default:                           mode = ViewModeSettings::IconsMode;
+                                       Q_ASSERT(false);
+                                       break;
     }
 
     return mode;
 }
 
 
-#include "viewsettingstab.moc"
+void ViewSettingsTab::slotDefaultSliderMoved(int value)
+{
+    showToolTip(m_defaultSizeSlider, value);
+}
+
+void ViewSettingsTab::slotPreviewSliderMoved(int value)
+{
+    showToolTip(m_previewSizeSlider, value);
+}
+
+void ViewSettingsTab::showToolTip(QSlider* slider, int value)
+{
+    const int size = ZoomLevelInfo::iconSizeForZoomLevel(value);
+    slider->setToolTip(i18ncp("@info:tooltip", "Size: 1 pixel", "Size: %1 pixels", size));
+    if (!slider->isVisible()) {
+        return;
+    }
+    QPoint global = slider->rect().topLeft();
+    global.ry() += slider->height() / 2;
+    QHelpEvent toolTipEvent(QEvent::ToolTip, QPoint(0, 0), slider->mapToGlobal(global));
+    QApplication::sendEvent(slider, &toolTipEvent);
+}
+