Modernize Settings window

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
This commit is contained in:
Nathaniel Graham 2018-07-05 21:24:27 -06:00
parent 85d7a8a2f6
commit 02c94b228a
7 changed files with 108 additions and 139 deletions

View 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

View 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"));

View file

@ -20,14 +20,16 @@
#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"));
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);
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);
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);
m_renameInline = new QCheckBox(i18nc("option:check", "Rename inline"));
topLayout->addRow(QString(), m_renameInline);
// '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();
// '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();

View 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();

View file

@ -29,10 +29,10 @@
#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);
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);
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);
// 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);
loadSettings();

View file

@ -21,26 +21,15 @@
#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();

View 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>
@ -30,10 +31,8 @@
#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"));
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);
QLabel* maxLinesLabel = new QLabel(i18nc("@label:listbox", "Maximum lines:"), textGroup);
m_maxLinesBox = new QComboBox(textGroup);
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);