]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Modernize Settings window
authorNathaniel Graham <nate@kde.org>
Fri, 6 Jul 2018 03:24:27 +0000 (21:24 -0600)
committerNathaniel Graham <nate@kde.org>
Fri, 6 Jul 2018 03:24:49 +0000 (21:24 -0600)
Summary: This patch modernizes the appearance of Dolphin's configuration window by following the KDE HIG as much as possible and following design cues from Plasma and System Settings.

Test Plan:
Tested all settings to make sure they still work; they do.

Startup page, before:
{F5825313}

Startup page, after:
{F5918574}

View page (Icons), before:
{F5825319}

View page (Icons) after:
{F5918575}

View page (Compact), before:
{F5825321}

View page (Compact) after:
{F5918700}

View page (Detailed), before:
{F5825323}

View page: (Detailed), after:
{F5918701}

Navigation page: no change

Trash page, before:
{F5858748}

Trash page, after:
{F5866656}
(Provided by {D12986})

General page (behavior), before:
{F5825316}

General page (behavior) after:
{F5918572}

General page (confirmations), before:
{F5866885}

General page (confirmations), after:
{F5918702}

General page (status bar): no change

Reviewers: #dolphin, #vdg, broulik, elvisangelaccio

Reviewed By: #dolphin, elvisangelaccio

Subscribers: fabianr, cfeck, medhefgo, zzag, rkflx, kfm-devel, elvisangelaccio, abetts

Tags: #dolphin

Differential Revision: https://phabricator.kde.org/D12571

src/global.h
src/settings/dolphinsettingsdialog.cpp
src/settings/general/behaviorsettingspage.cpp
src/settings/general/confirmationssettingspage.cpp
src/settings/startup/startupsettingspage.cpp
src/settings/trash/trashsettingspage.cpp
src/settings/viewmodes/viewsettingstab.cpp

index 3b6af43e9732cc9cd0ece4f5a7d69995ecb4c682..e3c4a1cca10ee508ef4d3fb05eed65f16250cb81 100644 (file)
@@ -41,6 +41,11 @@ namespace Dolphin {
      * Opens a new Dolphin window
      */
     void openNewWindow(const QList<QUrl> &urls = {}, QWidget *window = nullptr, const OpenNewWindowFlags &flags = OpenNewWindowFlag::None);
+
+    /**
+     * TODO: Move this somewhere global to all KDE apps, not just Dolphin
+     */
+    const int VERTICAL_SPACER_HEIGHT = 18;
 }
 
 #endif //GLOBAL_H
index a79561b4ad1ab227b62508e4a33bd06298f72c1b..6bddb861f03d80802c7926521f77af6fd789b791 100644 (file)
@@ -41,7 +41,7 @@ DolphinSettingsDialog::DolphinSettingsDialog(const QUrl& url, QWidget* parent) :
 
 {
     const QSize minSize = minimumSize();
-    setMinimumSize(QSize(512, minSize.height()));
+    setMinimumSize(QSize(540, minSize.height()));
 
     setFaceType(List);
     setWindowTitle(i18nc("@title:window", "Dolphin Preferences"));
index ba8d0549c7890f024cc46b9296a02acd6f9a1444..921ab3f8e126c8fd848f86ceaa43d2dd2f24dc10 100644 (file)
 
 #include "behaviorsettingspage.h"
 
+#include "global.h"
 #include "views/viewproperties.h"
 
 #include <KLocalizedString>
 
+#include <QButtonGroup>
 #include <QCheckBox>
-#include <QGroupBox>
+#include <QFormLayout>
 #include <QRadioButton>
-#include <QVBoxLayout>
+#include <QSpacerItem>
 
 BehaviorSettingsPage::BehaviorSettingsPage(const QUrl& url, QWidget* parent) :
     SettingsPageBase(parent),
@@ -42,51 +44,55 @@ BehaviorSettingsPage::BehaviorSettingsPage(const QUrl& url, QWidget* parent) :
     m_renameInline(nullptr),
     m_useTabForSplitViewSwitch(nullptr)
 {
-    QVBoxLayout* topLayout = new QVBoxLayout(this);
+    QFormLayout* topLayout = new QFormLayout(this);
+
 
     // View properties
-    QGroupBox* viewPropsBox = new QGroupBox(i18nc("@title:group", "View"), this);
-    viewPropsBox->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Maximum);
+    m_localViewProps = new QRadioButton(i18nc("@option:radio", "Remember properties for each folder"));
+    m_globalViewProps = new QRadioButton(i18nc("@option:radio", "Use common properties for all folders"));
+
+    QButtonGroup* viewGroup = new QButtonGroup(this);
+    viewGroup->addButton(m_localViewProps);
+    viewGroup->addButton(m_globalViewProps);
+    topLayout->addRow(i18nc("@title:group", "View: "), m_localViewProps);
+    topLayout->addRow(QString(), m_globalViewProps);
+
 
-    m_localViewProps = new QRadioButton(i18nc("@option:radio", "Remember properties for each folder"), viewPropsBox);
-    m_globalViewProps = new QRadioButton(i18nc("@option:radio", "Use common properties for all folders"), viewPropsBox);
+    topLayout->addItem(new QSpacerItem(0, Dolphin::VERTICAL_SPACER_HEIGHT, QSizePolicy::Fixed, QSizePolicy::Fixed));
 
-    QVBoxLayout* viewPropsLayout = new QVBoxLayout(viewPropsBox);
-    viewPropsLayout->addWidget(m_localViewProps);
-    viewPropsLayout->addWidget(m_globalViewProps);
 
     // Sorting properties
-    QGroupBox* sortingPropsBox = new QGroupBox(i18nc("@title:group", "Sorting Mode"), this);
-    sortingPropsBox->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Maximum);
+    m_naturalSorting = new QRadioButton(i18nc("option:radio", "Natural"));
+    m_caseInsensitiveSorting = new QRadioButton(i18nc("option:radio", "Alphabetical, case insensitive"));
+    m_caseSensitiveSorting = new QRadioButton(i18nc("option:radio", "Alphabetical, case sensitive"));
 
-    m_naturalSorting = new QRadioButton(i18nc("option:radio", "Natural sorting"), sortingPropsBox);
-    m_caseInsensitiveSorting = new QRadioButton(i18nc("option:radio", "Alphabetical sorting, case insensitive"), sortingPropsBox);
-    m_caseSensitiveSorting = new QRadioButton(i18nc("option:radio", "Alphabetical sorting, case sensitive"), sortingPropsBox);
+    QButtonGroup* sortingModeGroup = new QButtonGroup(this);
+    sortingModeGroup->addButton(m_naturalSorting);
+    sortingModeGroup->addButton(m_caseInsensitiveSorting);
+    sortingModeGroup->addButton(m_caseSensitiveSorting);
+    topLayout->addRow(i18nc("@title:group", "Sorting mode: "), m_naturalSorting);
+    topLayout->addRow(QString(), m_caseInsensitiveSorting);
+    topLayout->addRow(QString(), m_caseSensitiveSorting);
+
+
+    topLayout->addItem(new QSpacerItem(0, Dolphin::VERTICAL_SPACER_HEIGHT, QSizePolicy::Fixed, QSizePolicy::Fixed));
 
-    QVBoxLayout* sortingPropsLayout = new QVBoxLayout(sortingPropsBox);
-    sortingPropsLayout->addWidget(m_naturalSorting);
-    sortingPropsLayout->addWidget(m_caseInsensitiveSorting);
-    sortingPropsLayout->addWidget(m_caseSensitiveSorting);
 
     // 'Show tooltips'
-    m_showToolTips = new QCheckBox(i18nc("@option:check", "Show tooltips"), this);
+    m_showToolTips = new QCheckBox(i18nc("@option:check", "Show tooltips"));
+    topLayout->addRow(i18nc("@title:group", "Miscellaneous: "), m_showToolTips);
 
     // 'Show selection marker'
-    m_showSelectionToggle = new QCheckBox(i18nc("@option:check", "Show selection marker"), this);
+    m_showSelectionToggle = new QCheckBox(i18nc("@option:check", "Show selection marker"));
+    topLayout->addRow(QString(), m_showSelectionToggle);
 
     // 'Inline renaming of items'
-    m_renameInline = new QCheckBox(i18nc("option:check", "Rename inline"), this);
-
-    // 'Use tab for switching between right and left split'
-    m_useTabForSplitViewSwitch = new QCheckBox(i18nc("option:check", "Use tab for switching between right and left split view"), this);
-
-    topLayout->addWidget(viewPropsBox);
-    topLayout->addWidget(sortingPropsBox);
-    topLayout->addWidget(m_showToolTips);
-    topLayout->addWidget(m_showSelectionToggle);
-    topLayout->addWidget(m_renameInline);
-    topLayout->addWidget(m_useTabForSplitViewSwitch);
-    topLayout->addStretch();
+    m_renameInline = new QCheckBox(i18nc("option:check", "Rename inline"));
+    topLayout->addRow(QString(), m_renameInline);
+
+    // 'Switch between split views with tab key'
+    m_useTabForSplitViewSwitch = new QCheckBox(i18nc("option:check", "Switch between split views with tab key"));
+    topLayout->addRow(QString(), m_useTabForSplitViewSwitch);
 
     loadSettings();
 
index 728d082d296791862421f39618c7e7a0f7b7eb4d..d96dfe0b210d5a4ed484b18f8d0f6c6be5fba321 100644 (file)
@@ -20,6 +20,7 @@
 #include "confirmationssettingspage.h"
 
 #include "dolphin_generalsettings.h"
+#include "global.h"
 
 #include <KLocalizedString>
 
@@ -55,17 +56,18 @@ ConfirmationsSettingsPage::ConfirmationsSettingsPage(QWidget* parent) :
     m_confirmScriptExecution = new QCheckBox(i18nc("@option:check Ask for confirmation when",
                                                    "Executing scripts or desktop files"), this);
 
-    QLabel* confirmLabelDolphin = new QLabel(i18nc("@title:group", "Ask for confirmation when:"), this);
+    QLabel* confirmLabelDolphin = new QLabel(i18nc("@title:group", "Ask for confirmation in Dolphin when:"), this);
     confirmLabelDolphin->setWordWrap(true);
 
-    m_confirmClosingMultipleTabs = new QCheckBox(i18nc("@option:check Ask for confirmation when",
-                                                       "Closing Dolphin windows with multiple tabs"), this);
+    m_confirmClosingMultipleTabs = new QCheckBox(i18nc("@option:check Ask for confirmation in Dolphin when",
+                                                       "Closing windows with multiple tabs"), this);
 
     topLayout->addWidget(confirmLabelKde);
     topLayout->addWidget(m_confirmMoveToTrash);
     topLayout->addWidget(m_confirmEmptyTrash);
     topLayout->addWidget(m_confirmDelete);
     topLayout->addWidget(m_confirmScriptExecution);
+    topLayout->addSpacing(Dolphin::VERTICAL_SPACER_HEIGHT);
     topLayout->addWidget(confirmLabelDolphin);
     topLayout->addWidget(m_confirmClosingMultipleTabs);
     topLayout->addStretch();
index 4071ee04f58fb5b80d47c0e3695b898bae762af1..f8b7daa79ef1d3d74e4d198f85aca1be857eb722 100644 (file)
 
 #include <QCheckBox>
 #include <QFileDialog>
-#include <QGroupBox>
-#include <QLabel>
 #include <QLineEdit>
 #include <QPushButton>
+#include <QFormLayout>
+#include <QHBoxLayout>
 #include <QVBoxLayout>
 
 StartupSettingsPage::StartupSettingsPage(const QUrl& url, QWidget* parent) :
@@ -45,27 +45,18 @@ StartupSettingsPage::StartupSettingsPage(const QUrl& url, QWidget* parent) :
     m_filterBar(nullptr),
     m_showFullPathInTitlebar(nullptr)
 {
-    QVBoxLayout* topLayout = new QVBoxLayout(this);
-    QWidget* vBox = new QWidget(this);
-    QVBoxLayout *vBoxLayout = new QVBoxLayout(vBox);
-    vBoxLayout->setMargin(0);
-    vBoxLayout->setAlignment(Qt::AlignTop);
+    QFormLayout* topLayout = new QFormLayout(this);
 
-    // create 'Home URL' editor
-    QGroupBox* homeBox = new QGroupBox(i18nc("@title:group", "Home Folder"), vBox);
-    vBoxLayout->addWidget(homeBox);
 
-    QWidget* homeUrlBox = new QWidget(homeBox);
-    QHBoxLayout *homeUrlBoxLayout = new QHBoxLayout(homeUrlBox);
+    // create 'Home URL' editor
+    QHBoxLayout* homeUrlBoxLayout = new QHBoxLayout();
     homeUrlBoxLayout->setMargin(0);
 
-    QLabel* homeUrlLabel = new QLabel(i18nc("@label:textbox", "Location:"), homeUrlBox);
-    homeUrlBoxLayout->addWidget(homeUrlLabel);
-    m_homeUrl = new QLineEdit(homeUrlBox);
-    homeUrlBoxLayout->addWidget(m_homeUrl);
+    m_homeUrl = new QLineEdit();
     m_homeUrl->setClearButtonEnabled(true);
+    homeUrlBoxLayout->addWidget(m_homeUrl);
 
-    QPushButton* selectHomeUrlButton = new QPushButton(QIcon::fromTheme(QStringLiteral("folder-open")), QString(), homeUrlBox);
+    QPushButton* selectHomeUrlButton = new QPushButton(QIcon::fromTheme(QStringLiteral("folder-open")), QString());
     homeUrlBoxLayout->addWidget(selectHomeUrlButton);
 
 #ifndef QT_NO_ACCESSIBILITY
@@ -75,41 +66,41 @@ StartupSettingsPage::StartupSettingsPage(const QUrl& url, QWidget* parent) :
     connect(selectHomeUrlButton, &QPushButton::clicked,
             this, &StartupSettingsPage::selectHomeUrl);
 
-    QWidget* buttonBox = new QWidget(homeBox);
-    QHBoxLayout *buttonBoxLayout = new QHBoxLayout(buttonBox);
+    QHBoxLayout* buttonBoxLayout = new QHBoxLayout();
     buttonBoxLayout->setMargin(0);
 
-    QPushButton* useCurrentButton = new QPushButton(i18nc("@action:button", "Use Current Location"), buttonBox);
+    QPushButton* useCurrentButton = new QPushButton(i18nc("@action:button", "Use Current Location"));
     buttonBoxLayout->addWidget(useCurrentButton);
     connect(useCurrentButton, &QPushButton::clicked,
             this, &StartupSettingsPage::useCurrentLocation);
-    QPushButton* useDefaultButton = new QPushButton(i18nc("@action:button", "Use Default Location"), buttonBox);
+    QPushButton* useDefaultButton = new QPushButton(i18nc("@action:button", "Use Default Location"));
     buttonBoxLayout->addWidget(useDefaultButton);
     connect(useDefaultButton, &QPushButton::clicked,
             this, &StartupSettingsPage::useDefaultLocation);
 
-    QVBoxLayout* homeBoxLayout = new QVBoxLayout(homeBox);
-    homeBoxLayout->addWidget(homeUrlBox);
-    homeBoxLayout->addWidget(buttonBox);
+    QVBoxLayout* homeBoxLayout = new QVBoxLayout();
+    homeBoxLayout->setMargin(0);
+    homeBoxLayout->addLayout(homeUrlBoxLayout);
+    homeBoxLayout->addLayout(buttonBoxLayout);
+
+    topLayout->addRow(i18nc("@label:textbox", "Start in:"), homeBoxLayout);
+
+
+    topLayout->addItem(new QSpacerItem(0, Dolphin::VERTICAL_SPACER_HEIGHT, QSizePolicy::Fixed, QSizePolicy::Fixed));
+
 
     // create 'Split view', 'Show full path', 'Editable location' and 'Filter bar' checkboxes
-    m_splitView = new QCheckBox(i18nc("@option:check Startup Settings", "Split view mode"), vBox);
-    vBoxLayout->addWidget(m_splitView);
-    m_editableUrl = new QCheckBox(i18nc("@option:check Startup Settings", "Editable location bar"), vBox);
-    vBoxLayout->addWidget(m_editableUrl);
-    m_showFullPath = new QCheckBox(i18nc("@option:check Startup Settings", "Show full path inside location bar"), vBox);
-    vBoxLayout->addWidget(m_showFullPath);
-    m_filterBar = new QCheckBox(i18nc("@option:check Startup Settings", "Show filter bar"), vBox);
-    vBoxLayout->addWidget(m_filterBar);
-    m_showFullPathInTitlebar = new QCheckBox(i18nc("@option:check Startup Settings", "Show full path in title bar"), vBox);
-    vBoxLayout->addWidget(m_showFullPathInTitlebar);
-
-    // Add a dummy widget with no restriction regarding
-    // a vertical resizing. This assures that the dialog layout
-    // is not stretched vertically.
-    new QWidget(vBox);
-
-    topLayout->addWidget(vBox);
+    m_splitView = new QCheckBox(i18nc("@option:check Startup Settings", "Split view mode"));
+    topLayout->addRow(i18nc("@label:checkbox", "Window options:"), m_splitView);
+    m_editableUrl = new QCheckBox(i18nc("@option:check Startup Settings", "Editable location bar"));
+    topLayout->addRow(QString(), m_editableUrl);
+    m_showFullPath = new QCheckBox(i18nc("@option:check Startup Settings", "Show full path inside location bar"));
+    topLayout->addRow(QString(), m_showFullPath);
+    m_filterBar = new QCheckBox(i18nc("@option:check Startup Settings", "Show filter bar"));
+    topLayout->addRow(QString(), m_filterBar);
+    m_showFullPathInTitlebar = new QCheckBox(i18nc("@option:check Startup Settings", "Show full path in title bar"));
+    topLayout->addRow(QString(), m_showFullPathInTitlebar);
+
 
     loadSettings();
 
index 4c71aa3ec8d70f2e38a7ce287a230e5ab1d4ffc0..a9b8c734c7a0516571ee1987e05b40438ca2b30a 100644 (file)
 
 #include <KCModuleProxy>
 
-#include <QVBoxLayout>
+#include <QFormLayout>
 
 TrashSettingsPage::TrashSettingsPage(QWidget* parent) :
         SettingsPageBase(parent)
 {
-    QVBoxLayout* topLayout = new QVBoxLayout(this);
-    QWidget* vBox = new QWidget(this);
-    QVBoxLayout *vBoxVBoxLayout = new QVBoxLayout(vBox);
-    vBoxVBoxLayout->setMargin(0);
+    QFormLayout* topLayout = new QFormLayout(this);
 
     m_proxy = new KCModuleProxy(QStringLiteral("kcmtrash"));
-    topLayout->addWidget(m_proxy);
-
-    // Add a dummy widget with no restriction regarding
-    // a vertical resizing. This assures that the dialog layout
-    // is not stretched vertically.
-    QWidget *w = new QWidget(vBox);
-    vBoxVBoxLayout->addWidget(w);
-    
-    topLayout->addWidget(vBox);
+    topLayout->addRow(m_proxy);
 
     loadSettings();
 
index 3971c8ed804fa4ff90662940f82a098d0caa40a0..925a982d901ae803ff2236ec2d578ad1dd19f61a 100644 (file)
@@ -23,6 +23,7 @@
 #include "dolphin_detailsmodesettings.h"
 #include "dolphin_iconsmodesettings.h"
 #include "dolphinfontrequester.h"
+#include "global.h"
 #include "views/zoomlevelinfo.h"
 
 #include <KLocalizedString>
 #include <QApplication>
 #include <QCheckBox>
 #include <QComboBox>
-#include <QGroupBox>
 #include <QHelpEvent>
-#include <QLabel>
-#include <QVBoxLayout>
+#include <QFormLayout>
 
 ViewSettingsTab::ViewSettingsTab(Mode mode, QWidget* parent) :
     QWidget(parent),
@@ -45,97 +44,74 @@ ViewSettingsTab::ViewSettingsTab(Mode mode, QWidget* parent) :
     m_maxLinesBox(nullptr),
     m_expandableFolders(nullptr)
 {
-    QVBoxLayout* topLayout = new QVBoxLayout(this);
+    QFormLayout* topLayout = new QFormLayout(this);
 
-    // Create "Icon Size" group
-    QGroupBox* iconSizeGroup = new QGroupBox(this);
-    iconSizeGroup->setTitle(i18nc("@title:group", "Icon Size"));
 
+    // Create "Icon Size" section
     const int minRange = ZoomLevelInfo::minimumLevel();
     const int maxRange = ZoomLevelInfo::maximumLevel();
 
-    QLabel* defaultLabel = new QLabel(i18nc("@label:listbox", "Default:"), this);
-    m_defaultSizeSlider = new QSlider(Qt::Horizontal, this);
+    m_defaultSizeSlider = new QSlider(Qt::Horizontal);
     m_defaultSizeSlider->setPageStep(1);
     m_defaultSizeSlider->setTickPosition(QSlider::TicksBelow);
     m_defaultSizeSlider->setRange(minRange, maxRange);
     connect(m_defaultSizeSlider, &QSlider::valueChanged,
             this, &ViewSettingsTab::slotDefaultSliderMoved);
+    topLayout->addRow(i18nc("@label:listbox", "Default icon size:"), m_defaultSizeSlider);
 
-    QLabel* previewLabel = new QLabel(i18nc("@label:listbox", "Preview:"), this);
-    m_previewSizeSlider = new QSlider(Qt::Horizontal, this);
+    m_previewSizeSlider = new QSlider(Qt::Horizontal);
     m_previewSizeSlider->setPageStep(1);
     m_previewSizeSlider->setTickPosition(QSlider::TicksBelow);
     m_previewSizeSlider->setRange(minRange, maxRange);
     connect(m_previewSizeSlider, &QSlider::valueChanged,
             this, &ViewSettingsTab::slotPreviewSliderMoved);
+    topLayout->addRow(i18nc("@label:listbox", "Preview icon size:"), m_previewSizeSlider);
 
-    QGridLayout* layout = new QGridLayout(iconSizeGroup);
-    layout->addWidget(defaultLabel, 0, 0, Qt::AlignRight);
-    layout->addWidget(m_defaultSizeSlider, 0, 1);
-    layout->addWidget(previewLabel, 1, 0, Qt::AlignRight);
-    layout->addWidget(m_previewSizeSlider, 1, 1);
 
-    // Create "Text" group
-    QGroupBox* textGroup = new QGroupBox(i18nc("@title:group", "Text"), this);
+    topLayout->addItem(new QSpacerItem(0, Dolphin::VERTICAL_SPACER_HEIGHT, QSizePolicy::Fixed, QSizePolicy::Fixed));
 
-    QLabel* fontLabel = new QLabel(i18nc("@label:listbox", "Font:"), textGroup);
-    m_fontRequester = new DolphinFontRequester(textGroup);
 
-    QGridLayout* textGroupLayout = new QGridLayout(textGroup);
-    textGroupLayout->addWidget(fontLabel, 0, 0, Qt::AlignRight);
-    textGroupLayout->addWidget(m_fontRequester, 0, 1);
+    // Create "Label" section
+    m_fontRequester = new DolphinFontRequester(this);
+    topLayout->addRow(i18nc("@label:listbox", "Label font:"), m_fontRequester);
+
 
     switch (m_mode) {
     case IconsMode: {
-        QLabel* widthLabel = new QLabel(i18nc("@label:listbox", "Width:"), textGroup);
-        m_widthBox = new QComboBox(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 QComboBox(textGroup);
+        m_widthBox = new QComboBox();
+        m_widthBox->addItem(i18nc("@item:inlistbox Label width", "Small"));
+        m_widthBox->addItem(i18nc("@item:inlistbox Label width", "Medium"));
+        m_widthBox->addItem(i18nc("@item:inlistbox Label width", "Large"));
+        m_widthBox->addItem(i18nc("@item:inlistbox Label width", "Huge"));
+        topLayout->addRow(i18nc("@label:listbox", "Label width:"), m_widthBox);
+
+        m_maxLinesBox = new QComboBox();
         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);
+        topLayout->addRow(i18nc("@label:listbox", "Maximum lines:"), m_maxLinesBox);
         break;
     }
     case CompactMode: {
-        QLabel* maxWidthLabel = new QLabel(i18nc("@label:listbox", "Maximum width:"), textGroup);
-        m_widthBox = new QComboBox(textGroup);
+        m_widthBox = new QComboBox();
         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);
+        topLayout->addRow(i18nc("@label:listbox", "Maximum width:"), m_widthBox);
         break;
     }
     case DetailsMode:
-        m_expandableFolders = new QCheckBox(i18nc("@option:check", "Expandable folders"), this);
+        m_expandableFolders = new QCheckBox(i18nc("@option:check", "Expandable"));
+        topLayout->addRow(i18nc("@label:checkbox", "Folders:"), m_expandableFolders);
         break;
     default:
         break;
     }
 
-    topLayout->addWidget(iconSizeGroup);
-    topLayout->addWidget(textGroup);
-    if (m_expandableFolders) {
-        topLayout->addWidget(m_expandableFolders);
-    }
-    topLayout->addStretch(1);
-
     loadSettings();
 
     connect(m_defaultSizeSlider, &QSlider::valueChanged, this, &ViewSettingsTab::changed);