diff --git a/src/global.h b/src/global.h --- a/src/global.h +++ b/src/global.h @@ -41,6 +41,11 @@ * Opens a new Dolphin window */ void openNewWindow(const QList &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 diff --git a/src/settings/dolphinsettingsdialog.cpp b/src/settings/dolphinsettingsdialog.cpp --- a/src/settings/dolphinsettingsdialog.cpp +++ b/src/settings/dolphinsettingsdialog.cpp @@ -41,7 +41,7 @@ { const QSize minSize = minimumSize(); - setMinimumSize(QSize(512, minSize.height())); + setMinimumSize(QSize(540, minSize.height())); setFaceType(List); setWindowTitle(i18nc("@title:window", "Dolphin Preferences")); diff --git a/src/settings/general/behaviorsettingspage.cpp b/src/settings/general/behaviorsettingspage.cpp --- a/src/settings/general/behaviorsettingspage.cpp +++ b/src/settings/general/behaviorsettingspage.cpp @@ -20,14 +20,16 @@ #include "behaviorsettingspage.h" +#include "global.h" #include "views/viewproperties.h" #include +#include #include -#include +#include #include -#include +#include BehaviorSettingsPage::BehaviorSettingsPage(const QUrl& url, QWidget* parent) : SettingsPageBase(parent), @@ -42,51 +44,55 @@ 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(); diff --git a/src/settings/general/confirmationssettingspage.cpp b/src/settings/general/confirmationssettingspage.cpp --- a/src/settings/general/confirmationssettingspage.cpp +++ b/src/settings/general/confirmationssettingspage.cpp @@ -20,6 +20,7 @@ #include "confirmationssettingspage.h" #include "dolphin_generalsettings.h" +#include "global.h" #include @@ -55,17 +56,18 @@ 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(); diff --git a/src/settings/startup/startupsettingspage.cpp b/src/settings/startup/startupsettingspage.cpp --- a/src/settings/startup/startupsettingspage.cpp +++ b/src/settings/startup/startupsettingspage.cpp @@ -29,10 +29,10 @@ #include #include -#include -#include #include #include +#include +#include #include StartupSettingsPage::StartupSettingsPage(const QUrl& url, QWidget* parent) : @@ -45,27 +45,18 @@ 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 @@ 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(); diff --git a/src/settings/trash/trashsettingspage.cpp b/src/settings/trash/trashsettingspage.cpp --- a/src/settings/trash/trashsettingspage.cpp +++ b/src/settings/trash/trashsettingspage.cpp @@ -21,26 +21,15 @@ #include -#include +#include 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(); diff --git a/src/settings/viewmodes/viewsettingstab.cpp b/src/settings/viewmodes/viewsettingstab.cpp --- a/src/settings/viewmodes/viewsettingstab.cpp +++ b/src/settings/viewmodes/viewsettingstab.cpp @@ -23,17 +23,16 @@ #include "dolphin_detailsmodesettings.h" #include "dolphin_iconsmodesettings.h" #include "dolphinfontrequester.h" +#include "global.h" #include "views/zoomlevelinfo.h" #include #include #include #include -#include #include -#include -#include +#include ViewSettingsTab::ViewSettingsTab(Mode mode, QWidget* parent) : QWidget(parent), @@ -45,97 +44,74 @@ 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);