From 489b56b68bb29e81337e115c490eea4403001b71 Mon Sep 17 00:00:00 2001 From: Dimosthenis Krallis Date: Fri, 18 Aug 2023 07:07:48 +0000 Subject: [PATCH] Dolphin settings revamp It includes a move of the settings in the Navigation and Startup sections to the Interface (formerly Behavior) section. It also includes a new tab in the View (formerly View Mode) section, called General where some settings regarding Display style, Browsing and Miscellaneous settings The Interface section has new tabs named Folders & Tabs and Status & Location bars respectively where most of the Startup and Navigation settings moved. The `dolphin/kcms/kcm_dolphinnavigation` kcm is removed. --- src/CMakeLists.txt | 75 ++++--- src/settings/dolphinsettingsdialog.cpp | 36 +--- src/settings/general/behaviorsettingspage.cpp | 195 ------------------ .../general/statusbarsettingspage.cpp | 77 ------- src/settings/general/statusbarsettingspage.h | 40 ---- .../configurepreviewplugindialog.cpp | 0 .../configurepreviewplugindialog.h | 0 .../confirmationssettingspage.cpp | 0 .../confirmationssettingspage.h | 0 .../folderstabssettingspage.cpp} | 130 +++++++----- .../folderstabssettingspage.h} | 33 +-- .../interfacesettingspage.cpp} | 40 ++-- .../interfacesettingspage.h} | 17 +- .../previewssettingspage.cpp | 0 .../previewssettingspage.h | 0 .../statusandlocationbarssettingspage.cpp | 128 ++++++++++++ .../statusandlocationbarssettingspage.h | 55 +++++ src/settings/kcm/kcmdolphingeneral.cpp | 17 +- src/settings/kcm/kcmdolphinnavigation.cpp | 48 ----- src/settings/kcm/kcmdolphinnavigation.h | 32 --- src/settings/kcm/kcmdolphinnavigation.json | 63 ------ .../navigation/navigationsettingspage.cpp | 82 -------- .../navigation/navigationsettingspage.h | 41 ---- src/settings/viewmodes/contentdisplaytab.cpp | 54 ++++- src/settings/viewmodes/contentdisplaytab.h | 8 + .../viewmodes/generalviewsettingspage.cpp | 133 ++++++++++++ .../generalviewsettingspage.h} | 27 +-- src/settings/viewmodes/viewsettingspage.cpp | 9 +- src/settings/viewmodes/viewsettingspage.h | 2 +- 29 files changed, 576 insertions(+), 766 deletions(-) delete mode 100644 src/settings/general/behaviorsettingspage.cpp delete mode 100644 src/settings/general/statusbarsettingspage.cpp delete mode 100644 src/settings/general/statusbarsettingspage.h rename src/settings/{general => interface}/configurepreviewplugindialog.cpp (100%) rename src/settings/{general => interface}/configurepreviewplugindialog.h (100%) rename src/settings/{general => interface}/confirmationssettingspage.cpp (100%) rename src/settings/{general => interface}/confirmationssettingspage.h (100%) rename src/settings/{startup/startupsettingspage.cpp => interface/folderstabssettingspage.cpp} (61%) rename src/settings/{startup/startupsettingspage.h => interface/folderstabssettingspage.h} (66%) rename src/settings/{general/generalsettingspage.cpp => interface/interfacesettingspage.cpp} (51%) rename src/settings/{general/generalsettingspage.h => interface/interfacesettingspage.h} (60%) rename src/settings/{general => interface}/previewssettingspage.cpp (100%) rename src/settings/{general => interface}/previewssettingspage.h (100%) create mode 100644 src/settings/interface/statusandlocationbarssettingspage.cpp create mode 100644 src/settings/interface/statusandlocationbarssettingspage.h delete mode 100644 src/settings/kcm/kcmdolphinnavigation.cpp delete mode 100644 src/settings/kcm/kcmdolphinnavigation.h delete mode 100644 src/settings/kcm/kcmdolphinnavigation.json delete mode 100644 src/settings/navigation/navigationsettingspage.cpp delete mode 100644 src/settings/navigation/navigationsettingspage.h create mode 100644 src/settings/viewmodes/generalviewsettingspage.cpp rename src/settings/{general/behaviorsettingspage.h => viewmodes/generalviewsettingspage.h} (54%) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 62c70ba79a..ce078278aa 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -288,25 +288,24 @@ target_sources(dolphinstatic PRIVATE selectionmode/bottombar.cpp selectionmode/bottombarcontentscontainer.cpp selectionmode/topbar.cpp - settings/general/behaviorsettingspage.cpp - settings/general/configurepreviewplugindialog.cpp - settings/general/confirmationssettingspage.cpp - settings/general/generalsettingspage.cpp - settings/general/previewssettingspage.cpp - settings/general/statusbarsettingspage.cpp + settings/interface/folderstabssettingspage.cpp + settings/interface/statusandlocationbarssettingspage.cpp + settings/interface/configurepreviewplugindialog.cpp + settings/interface/confirmationssettingspage.cpp + settings/interface/interfacesettingspage.cpp + settings/interface/previewssettingspage.cpp settings/dolphinsettingsdialog.cpp - settings/navigation/navigationsettingspage.cpp settings/contextmenu/contextmenusettingspage.cpp settings/settingspagebase.cpp settings/serviceitemdelegate.cpp settings/servicemodel.cpp - settings/startup/startupsettingspage.cpp settings/trash/trashsettingspage.cpp settings/viewmodes/dolphinfontrequester.cpp settings/viewmodes/viewsettingspage.cpp settings/viewmodes/viewmodesettings.cpp settings/viewmodes/viewsettingstab.cpp settings/viewmodes/contentdisplaytab.cpp + settings/viewmodes/generalviewsettingspage.cpp statusbar/dolphinstatusbar.cpp statusbar/mountpointobserver.cpp statusbar/mountpointobservercache.cpp @@ -348,25 +347,24 @@ target_sources(dolphinstatic PRIVATE selectionmode/bottombar.h selectionmode/bottombarcontentscontainer.h selectionmode/topbar.h - settings/general/behaviorsettingspage.h - settings/general/configurepreviewplugindialog.h - settings/general/confirmationssettingspage.h - settings/general/generalsettingspage.h - settings/general/previewssettingspage.h - settings/general/statusbarsettingspage.h + settings/interface/folderstabssettingspage.h + settings/interface/statusandlocationbarssettingspage.h + settings/interface/configurepreviewplugindialog.h + settings/interface/confirmationssettingspage.h + settings/interface/interfacesettingspage.h + settings/interface/previewssettingspage.h settings/dolphinsettingsdialog.h - settings/navigation/navigationsettingspage.h settings/contextmenu/contextmenusettingspage.h settings/settingspagebase.h settings/serviceitemdelegate.h settings/servicemodel.h - settings/startup/startupsettingspage.h settings/trash/trashsettingspage.h settings/viewmodes/dolphinfontrequester.h settings/viewmodes/viewsettingspage.h settings/viewmodes/viewmodesettings.h settings/viewmodes/viewsettingstab.h settings/viewmodes/contentdisplaytab.h + settings/viewmodes/generalviewsettingspage.h statusbar/dolphinstatusbar.h statusbar/mountpointobserver.h statusbar/mountpointobservercache.h @@ -500,7 +498,6 @@ install(TARGETS dolphin ${KDE_INSTALL_TARGETS_DEFAULT_ARGS}) if(NOT WIN32) # The settings are still accessible from the hamburger menu add_library(kcm_dolphinviewmodes MODULE) - add_library(kcm_dolphinnavigation MODULE) add_library(kcm_dolphingeneral MODULE) target_sources(kcm_dolphinviewmodes PRIVATE @@ -515,32 +512,37 @@ if(NOT WIN32) settings/viewmodes/viewsettingstab.h views/zoomlevelinfo.h) - target_sources(kcm_dolphinnavigation PRIVATE - settings/kcm/kcmdolphinnavigation.cpp - settings/navigation/navigationsettingspage.cpp - settings/settingspagebase.cpp - settings/kcm/kcmdolphinnavigation.h - settings/navigation/navigationsettingspage.h - settings/settingspagebase.h - ) - target_sources(kcm_dolphingeneral PRIVATE settings/kcm/kcmdolphingeneral.cpp - settings/general/behaviorsettingspage.cpp - settings/general/previewssettingspage.cpp - settings/general/configurepreviewplugindialog.cpp - settings/general/confirmationssettingspage.cpp + settings/interface/folderstabssettingspage.cpp + settings/interface/statusandlocationbarssettingspage.cpp + settings/interface/previewssettingspage.cpp + settings/interface/configurepreviewplugindialog.cpp + settings/interface/confirmationssettingspage.cpp settings/settingspagebase.cpp settings/serviceitemdelegate.cpp settings/servicemodel.cpp + dolphin_generalsettings.cpp + dolphindebug.cpp + dolphinmainwindowinterface.cpp + views/viewproperties.cpp + dolphin_directoryviewpropertysettings.cpp + global.cpp settings/kcm/kcmdolphingeneral.h - settings/general/behaviorsettingspage.h - settings/general/previewssettingspage.h - settings/general/configurepreviewplugindialog.h - settings/general/confirmationssettingspage.h + settings/interface/folderstabssettingspage.h + settings/interface/statusandlocationbarssettingspage.h + settings/interface/previewssettingspage.h + settings/interface/configurepreviewplugindialog.h + settings/interface/confirmationssettingspage.h settings/settingspagebase.h settings/serviceitemdelegate.h settings/servicemodel.h + dolphin_generalsettings.h + dolphindebug.h + dolphinmainwindowinterface.h + views/viewproperties.h + dolphin_directoryviewpropertysettings.h + global.h ) kconfig_add_kcfg_files(kcm_dolphinviewmodes @@ -553,20 +555,15 @@ if(NOT WIN32) settings/dolphin_versioncontrolsettings.kcfgc ) - kconfig_add_kcfg_files(kcm_dolphinnavigation - settings/dolphin_generalsettings.kcfgc) - kconfig_add_kcfg_files(kcm_dolphingeneral settings/dolphin_generalsettings.kcfgc) target_link_libraries(kcm_dolphinviewmodes dolphinprivate) - target_link_libraries(kcm_dolphinnavigation dolphinprivate) target_link_libraries(kcm_dolphingeneral dolphinprivate) install( FILES org.kde.dolphin.appdata.xml DESTINATION ${KDE_INSTALL_METAINFODIR} ) install(TARGETS kcm_dolphinviewmodes DESTINATION ${KDE_INSTALL_PLUGINDIR}/dolphin/kcms ) - install(TARGETS kcm_dolphinnavigation DESTINATION ${KDE_INSTALL_PLUGINDIR}/dolphin/kcms ) install(TARGETS kcm_dolphingeneral DESTINATION ${KDE_INSTALL_PLUGINDIR}/dolphin/kcms ) endif() diff --git a/src/settings/dolphinsettingsdialog.cpp b/src/settings/dolphinsettingsdialog.cpp index 8c200c747d..45aa7b65a0 100644 --- a/src/settings/dolphinsettingsdialog.cpp +++ b/src/settings/dolphinsettingsdialog.cpp @@ -10,9 +10,7 @@ #include "contextmenu/contextmenusettingspage.h" #include "dolphin_generalsettings.h" #include "dolphinmainwindow.h" -#include "general/generalsettingspage.h" -#include "navigation/navigationsettingspage.h" -#include "startup/startupsettingspage.h" +#include "interface/interfacesettingspage.h" #include "trash/trashsettingspage.h" #include "viewmodes/viewsettingspage.h" #if HAVE_KUSERFEEDBACK @@ -50,30 +48,18 @@ DolphinSettingsDialog::DolphinSettingsDialog(const QUrl &url, QWidget *parent, K connect(box->button(QDialogButtonBox::Apply), &QAbstractButton::clicked, this, &DolphinSettingsDialog::applySettings); connect(box->button(QDialogButtonBox::RestoreDefaults), &QAbstractButton::clicked, this, &DolphinSettingsDialog::restoreDefaults); - // General - GeneralSettingsPage *generalSettingsPage = new GeneralSettingsPage(url, this); - KPageWidgetItem *generalSettingsFrame = addPage(generalSettingsPage, i18nc("@title:group General settings", "General")); - generalSettingsFrame->setIcon(QIcon::fromTheme(QStringLiteral("system-file-manager"))); - connect(generalSettingsPage, &GeneralSettingsPage::changed, this, &DolphinSettingsDialog::enableApply); + // Interface + InterfaceSettingsPage *interfaceSettingsPage = new InterfaceSettingsPage(this); + KPageWidgetItem *interfaceSettingsFrame = addPage(interfaceSettingsPage, i18nc("@title:group Interface settings", "Interface")); + interfaceSettingsFrame->setIcon(QIcon::fromTheme(QStringLiteral("system-file-manager"))); + connect(interfaceSettingsPage, &InterfaceSettingsPage::changed, this, &DolphinSettingsDialog::enableApply); - // Startup - StartupSettingsPage *startupSettingsPage = new StartupSettingsPage(url, this); - KPageWidgetItem *startupSettingsFrame = addPage(startupSettingsPage, i18nc("@title:group", "Startup")); - startupSettingsFrame->setIcon(QIcon::fromTheme(QStringLiteral("preferences-desktop-launch-feedback"))); - connect(startupSettingsPage, &StartupSettingsPage::changed, this, &DolphinSettingsDialog::enableApply); - - // View Modes - ViewSettingsPage *viewSettingsPage = new ViewSettingsPage(this); - KPageWidgetItem *viewSettingsFrame = addPage(viewSettingsPage, i18nc("@title:group", "View Modes")); + // View + ViewSettingsPage *viewSettingsPage = new ViewSettingsPage(url, this); + KPageWidgetItem *viewSettingsFrame = addPage(viewSettingsPage, i18nc("@title:group", "View")); viewSettingsFrame->setIcon(QIcon::fromTheme(QStringLiteral("preferences-desktop-icons"))); connect(viewSettingsPage, &ViewSettingsPage::changed, this, &DolphinSettingsDialog::enableApply); - // Navigation - NavigationSettingsPage *navigationSettingsPage = new NavigationSettingsPage(this); - KPageWidgetItem *navigationSettingsFrame = addPage(navigationSettingsPage, i18nc("@title:group", "Navigation")); - navigationSettingsFrame->setIcon(QIcon::fromTheme(QStringLiteral("preferences-desktop-navigation"))); - connect(navigationSettingsPage, &NavigationSettingsPage::changed, this, &DolphinSettingsDialog::enableApply); - // Context Menu auto contextMenuSettingsPage = new ContextMenuSettingsPage(this, actions, @@ -113,10 +99,8 @@ DolphinSettingsDialog::DolphinSettingsDialog(const QUrl &url, QWidget *parent, K } #endif - m_pages.append(generalSettingsPage); - m_pages.append(startupSettingsPage); + m_pages.append(interfaceSettingsPage); m_pages.append(viewSettingsPage); - m_pages.append(navigationSettingsPage); m_pages.append(contextMenuSettingsPage); if (trashSettingsPage) { m_pages.append(trashSettingsPage); diff --git a/src/settings/general/behaviorsettingspage.cpp b/src/settings/general/behaviorsettingspage.cpp deleted file mode 100644 index 662fcc26a8..0000000000 --- a/src/settings/general/behaviorsettingspage.cpp +++ /dev/null @@ -1,195 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2006 Peter Penz (peter.penz@gmx.at) and Patrice Tremblay - * - * SPDX-License-Identifier: GPL-2.0-or-later - */ - -#include "behaviorsettingspage.h" - -#include "global.h" -#include "views/viewproperties.h" - -#include - -#include -#include -#include -#include -#include - -BehaviorSettingsPage::BehaviorSettingsPage(const QUrl &url, QWidget *parent) - : SettingsPageBase(parent) - , m_url(url) - , m_localViewProps(nullptr) - , m_globalViewProps(nullptr) - , m_showToolTips(nullptr) - , m_showSelectionToggle(nullptr) - , m_naturalSorting(nullptr) - , m_caseSensitiveSorting(nullptr) - , m_caseInsensitiveSorting(nullptr) - , m_renameInline(nullptr) - , m_useTabForSplitViewSwitch(nullptr) -{ - QFormLayout *topLayout = new QFormLayout(this); - - // View properties - m_globalViewProps = new QRadioButton(i18nc("@option:radio", "Use common display style for all folders")); - m_localViewProps = new QRadioButton(i18nc("@option:radio", "Remember display style for each folder")); - m_localViewProps->setToolTip(i18nc("@info", "Dolphin will create a hidden .directory file in each folder you change view properties for.")); - - QButtonGroup *viewGroup = new QButtonGroup(this); - viewGroup->addButton(m_globalViewProps); - viewGroup->addButton(m_localViewProps); - topLayout->addRow(i18nc("@title:group", "View: "), m_globalViewProps); - topLayout->addRow(QString(), m_localViewProps); - - topLayout->addItem(new QSpacerItem(0, Dolphin::VERTICAL_SPACER_HEIGHT, QSizePolicy::Fixed, QSizePolicy::Fixed)); - - // Sorting properties - 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")); - - 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); - - // Split Views - topLayout->addItem(new QSpacerItem(0, Dolphin::VERTICAL_SPACER_HEIGHT, QSizePolicy::Fixed, QSizePolicy::Fixed)); - - // 'Switch between panes of split views with tab key' - m_useTabForSplitViewSwitch = new QCheckBox(i18nc("option:check split view panes", "Switch between panes with Tab key")); - topLayout->addRow(i18nc("@title:group", "Split view: "), m_useTabForSplitViewSwitch); - - // 'Close active pane when turning off split view' - m_closeActiveSplitView = new QCheckBox(i18nc("option:check", "Turning off split view closes active pane")); - topLayout->addRow(QString(), m_closeActiveSplitView); - m_closeActiveSplitView->setToolTip(i18n("When deactivated, turning off split view will close the inactive pane")); - - topLayout->addItem(new QSpacerItem(0, Dolphin::VERTICAL_SPACER_HEIGHT, QSizePolicy::Fixed, QSizePolicy::Fixed)); - -#if HAVE_BALOO - // 'Show tooltips' - m_showToolTips = new QCheckBox(i18nc("@option:check", "Show tooltips")); - topLayout->addRow(i18nc("@title:group", "Miscellaneous: "), m_showToolTips); -#endif - - // 'Show selection marker' - m_showSelectionToggle = new QCheckBox(i18nc("@option:check", "Show selection marker")); -#if HAVE_BALOO - topLayout->addRow(QString(), m_showSelectionToggle); -#else - topLayout->addRow(i18nc("@title:group", "Miscellaneous: "), m_showSelectionToggle); -#endif - - // 'Inline renaming of items' - m_renameInline = new QCheckBox(i18nc("option:check", "Rename inline")); - topLayout->addRow(QString(), m_renameInline); - - loadSettings(); - - connect(m_localViewProps, &QRadioButton::toggled, this, &BehaviorSettingsPage::changed); - connect(m_globalViewProps, &QRadioButton::toggled, this, &BehaviorSettingsPage::changed); -#if HAVE_BALOO - connect(m_showToolTips, &QCheckBox::toggled, this, &BehaviorSettingsPage::changed); -#endif - connect(m_showSelectionToggle, &QCheckBox::toggled, this, &BehaviorSettingsPage::changed); - connect(m_naturalSorting, &QRadioButton::toggled, this, &BehaviorSettingsPage::changed); - connect(m_caseInsensitiveSorting, &QRadioButton::toggled, this, &BehaviorSettingsPage::changed); - connect(m_caseSensitiveSorting, &QRadioButton::toggled, this, &BehaviorSettingsPage::changed); - connect(m_renameInline, &QCheckBox::toggled, this, &BehaviorSettingsPage::changed); - connect(m_useTabForSplitViewSwitch, &QCheckBox::toggled, this, &BehaviorSettingsPage::changed); - connect(m_closeActiveSplitView, &QCheckBox::toggled, this, &BehaviorSettingsPage::changed); -} - -BehaviorSettingsPage::~BehaviorSettingsPage() -{ -} - -void BehaviorSettingsPage::applySettings() -{ - GeneralSettings *settings = GeneralSettings::self(); - ViewProperties props(m_url); // read current view properties - - const bool useGlobalViewProps = m_globalViewProps->isChecked(); - settings->setGlobalViewProps(useGlobalViewProps); -#if HAVE_BALOO - settings->setShowToolTips(m_showToolTips->isChecked()); -#endif - settings->setShowSelectionToggle(m_showSelectionToggle->isChecked()); - setSortingChoiceValue(settings); - settings->setRenameInline(m_renameInline->isChecked()); - settings->setUseTabForSwitchingSplitView(m_useTabForSplitViewSwitch->isChecked()); - settings->setCloseActiveSplitView(m_closeActiveSplitView->isChecked()); - settings->save(); - - if (useGlobalViewProps) { - // Remember the global view properties by applying the current view properties. - // It is important that GeneralSettings::globalViewProps() is set before - // the class ViewProperties is used, as ViewProperties uses this setting - // to find the destination folder for storing the view properties. - ViewProperties globalProps(m_url); - globalProps.setDirProperties(props); - } -} - -void BehaviorSettingsPage::restoreDefaults() -{ - GeneralSettings *settings = GeneralSettings::self(); - settings->useDefaults(true); - loadSettings(); - settings->useDefaults(false); -} - -void BehaviorSettingsPage::loadSettings() -{ - const bool useGlobalViewProps = GeneralSettings::globalViewProps(); - m_localViewProps->setChecked(!useGlobalViewProps); - m_globalViewProps->setChecked(useGlobalViewProps); - -#if HAVE_BALOO - m_showToolTips->setChecked(GeneralSettings::showToolTips()); -#endif - m_showSelectionToggle->setChecked(GeneralSettings::showSelectionToggle()); - m_renameInline->setChecked(GeneralSettings::renameInline()); - m_useTabForSplitViewSwitch->setChecked(GeneralSettings::useTabForSwitchingSplitView()); - m_closeActiveSplitView->setChecked(GeneralSettings::closeActiveSplitView()); - - loadSortingChoiceSettings(); -} - -void BehaviorSettingsPage::setSortingChoiceValue(GeneralSettings *settings) -{ - using Choice = GeneralSettings::EnumSortingChoice; - if (m_naturalSorting->isChecked()) { - settings->setSortingChoice(Choice::NaturalSorting); - } else if (m_caseInsensitiveSorting->isChecked()) { - settings->setSortingChoice(Choice::CaseInsensitiveSorting); - } else if (m_caseSensitiveSorting->isChecked()) { - settings->setSortingChoice(Choice::CaseSensitiveSorting); - } -} - -void BehaviorSettingsPage::loadSortingChoiceSettings() -{ - using Choice = GeneralSettings::EnumSortingChoice; - switch (GeneralSettings::sortingChoice()) { - case Choice::NaturalSorting: - m_naturalSorting->setChecked(true); - break; - case Choice::CaseInsensitiveSorting: - m_caseInsensitiveSorting->setChecked(true); - break; - case Choice::CaseSensitiveSorting: - m_caseSensitiveSorting->setChecked(true); - break; - default: - Q_UNREACHABLE(); - } -} - -#include "moc_behaviorsettingspage.cpp" diff --git a/src/settings/general/statusbarsettingspage.cpp b/src/settings/general/statusbarsettingspage.cpp deleted file mode 100644 index 40e34e4f67..0000000000 --- a/src/settings/general/statusbarsettingspage.cpp +++ /dev/null @@ -1,77 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2009 Peter Penz - * - * SPDX-License-Identifier: GPL-2.0-or-later - */ - -#include "statusbarsettingspage.h" - -#include "dolphin_generalsettings.h" - -#include - -#include -#include - -StatusBarSettingsPage::StatusBarSettingsPage(QWidget *parent) - : SettingsPageBase(parent) - , m_showStatusBar(nullptr) - , m_showZoomSlider(nullptr) - , m_showSpaceInfo(nullptr) -{ - m_showStatusBar = new QCheckBox(i18nc("@option:check", "Show status bar"), this); - m_showZoomSlider = new QCheckBox(i18nc("@option:check", "Show zoom slider"), this); - m_showSpaceInfo = new QCheckBox(i18nc("@option:check", "Show space information"), this); - - QVBoxLayout *topLayout = new QVBoxLayout(this); - topLayout->addWidget(m_showStatusBar); - topLayout->addWidget(m_showZoomSlider); - topLayout->addWidget(m_showSpaceInfo); - topLayout->addStretch(); - - loadSettings(); - - connect(m_showStatusBar, &QCheckBox::toggled, this, &StatusBarSettingsPage::changed); - connect(m_showStatusBar, &QCheckBox::toggled, this, &StatusBarSettingsPage::onShowStatusBarToggled); - connect(m_showZoomSlider, &QCheckBox::toggled, this, &StatusBarSettingsPage::changed); - connect(m_showSpaceInfo, &QCheckBox::toggled, this, &StatusBarSettingsPage::changed); -} - -StatusBarSettingsPage::~StatusBarSettingsPage() -{ -} - -void StatusBarSettingsPage::onShowStatusBarToggled() -{ - const bool checked = m_showStatusBar->isChecked(); - m_showZoomSlider->setEnabled(checked); - m_showSpaceInfo->setEnabled(checked); -} - -void StatusBarSettingsPage::applySettings() -{ - GeneralSettings *settings = GeneralSettings::self(); - settings->setShowStatusBar(m_showStatusBar->isChecked()); - settings->setShowZoomSlider(m_showZoomSlider->isChecked()); - settings->setShowSpaceInfo(m_showSpaceInfo->isChecked()); - settings->save(); -} - -void StatusBarSettingsPage::restoreDefaults() -{ - GeneralSettings *settings = GeneralSettings::self(); - settings->useDefaults(true); - loadSettings(); - settings->useDefaults(false); -} - -void StatusBarSettingsPage::loadSettings() -{ - m_showStatusBar->setChecked(GeneralSettings::showStatusBar()); - m_showZoomSlider->setChecked(GeneralSettings::showZoomSlider()); - m_showSpaceInfo->setChecked(GeneralSettings::showSpaceInfo()); - - onShowStatusBarToggled(); -} - -#include "moc_statusbarsettingspage.cpp" diff --git a/src/settings/general/statusbarsettingspage.h b/src/settings/general/statusbarsettingspage.h deleted file mode 100644 index adff05dc14..0000000000 --- a/src/settings/general/statusbarsettingspage.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2009 Peter Penz - * - * SPDX-License-Identifier: GPL-2.0-or-later - */ -#ifndef STATUSBARSETTINGSPAGE_H -#define STATUSBARSETTINGSPAGE_H - -#include "settings/settingspagebase.h" - -class QCheckBox; - -/** - * @brief Tab page for the 'Status Bar' settings of the Dolphin settings dialog. - */ -class StatusBarSettingsPage : public SettingsPageBase -{ - Q_OBJECT - -public: - explicit StatusBarSettingsPage(QWidget *parent); - ~StatusBarSettingsPage() override; - - /** @see SettingsPageBase::applySettings() */ - void applySettings() override; - - /** @see SettingsPageBase::restoreDefaults() */ - void restoreDefaults() override; - -private: - void loadSettings(); - void onShowStatusBarToggled(); - -private: - QCheckBox *m_showStatusBar; - QCheckBox *m_showZoomSlider; - QCheckBox *m_showSpaceInfo; -}; - -#endif diff --git a/src/settings/general/configurepreviewplugindialog.cpp b/src/settings/interface/configurepreviewplugindialog.cpp similarity index 100% rename from src/settings/general/configurepreviewplugindialog.cpp rename to src/settings/interface/configurepreviewplugindialog.cpp diff --git a/src/settings/general/configurepreviewplugindialog.h b/src/settings/interface/configurepreviewplugindialog.h similarity index 100% rename from src/settings/general/configurepreviewplugindialog.h rename to src/settings/interface/configurepreviewplugindialog.h diff --git a/src/settings/general/confirmationssettingspage.cpp b/src/settings/interface/confirmationssettingspage.cpp similarity index 100% rename from src/settings/general/confirmationssettingspage.cpp rename to src/settings/interface/confirmationssettingspage.cpp diff --git a/src/settings/general/confirmationssettingspage.h b/src/settings/interface/confirmationssettingspage.h similarity index 100% rename from src/settings/general/confirmationssettingspage.h rename to src/settings/interface/confirmationssettingspage.h diff --git a/src/settings/startup/startupsettingspage.cpp b/src/settings/interface/folderstabssettingspage.cpp similarity index 61% rename from src/settings/startup/startupsettingspage.cpp rename to src/settings/interface/folderstabssettingspage.cpp index dc15ee39a0..d71ad2d96b 100644 --- a/src/settings/startup/startupsettingspage.cpp +++ b/src/settings/interface/folderstabssettingspage.cpp @@ -1,12 +1,10 @@ /* - * SPDX-FileCopyrightText: 2008 Peter Penz + * SPDX-FileCopyrightText: 2006 Peter Penz (peter.penz@gmx.at) and Patrice Tremblay * * SPDX-License-Identifier: GPL-2.0-or-later */ -#include "startupsettingspage.h" - -#include "dolphin_generalsettings.h" +#include "folderstabssettingspage.h" #include "dolphinmainwindow.h" #include "dolphinviewcontainer.h" #include "global.h" @@ -24,25 +22,27 @@ #include #include #include +#include -StartupSettingsPage::StartupSettingsPage(const QUrl &url, QWidget *parent) +FoldersTabsSettingsPage::FoldersTabsSettingsPage(QWidget *parent) : SettingsPageBase(parent) - , m_url(url) - , m_homeUrl(nullptr) , m_homeUrlBoxLayoutContainer(nullptr) , m_buttonBoxLayoutContainer(nullptr) - , m_rememberOpenedTabsRadioButton(nullptr) , m_homeUrlRadioButton(nullptr) + , m_homeUrl(nullptr) + , m_rememberOpenedTabsRadioButton(nullptr) + , m_openNewTabAfterLastTab(nullptr) + , m_openNewTabAfterCurrentTab(nullptr) , m_splitView(nullptr) - , m_editableUrl(nullptr) - , m_showFullPath(nullptr) , m_filterBar(nullptr) , m_showFullPathInTitlebar(nullptr) , m_openExternallyCalledFolderInNewTab(nullptr) + , m_useTabForSplitViewSwitch(nullptr) { QFormLayout *topLayout = new QFormLayout(this); - m_rememberOpenedTabsRadioButton = new QRadioButton(i18nc("@option:radio Startup Settings", "Folders, tabs, and window state from last time")); + // Show on startup + m_rememberOpenedTabsRadioButton = new QRadioButton(i18nc("@option:radio Show on startup", "Folders, tabs, and window state from last time")); m_homeUrlRadioButton = new QRadioButton(); // HACK: otherwise the radio button has too much spacing in a grid layout m_homeUrlRadioButton->setMaximumWidth(24); @@ -67,7 +67,7 @@ StartupSettingsPage::StartupSettingsPage(const QUrl &url, QWidget *parent) selectHomeUrlButton->setAccessibleName(i18nc("@action:button", "Select Home Location")); #endif - connect(selectHomeUrlButton, &QPushButton::clicked, this, &StartupSettingsPage::selectHomeUrl); + connect(selectHomeUrlButton, &QPushButton::clicked, this, &FoldersTabsSettingsPage::selectHomeUrl); m_buttonBoxLayoutContainer = new QWidget(this); QHBoxLayout *buttonBoxLayout = new QHBoxLayout(m_buttonBoxLayoutContainer); @@ -75,10 +75,10 @@ StartupSettingsPage::StartupSettingsPage(const QUrl &url, QWidget *parent) QPushButton *useCurrentButton = new QPushButton(i18nc("@action:button", "Use Current Location")); buttonBoxLayout->addWidget(useCurrentButton); - connect(useCurrentButton, &QPushButton::clicked, this, &StartupSettingsPage::useCurrentLocation); + connect(useCurrentButton, &QPushButton::clicked, this, &FoldersTabsSettingsPage::useCurrentLocation); QPushButton *useDefaultButton = new QPushButton(i18nc("@action:button", "Use Default Location")); buttonBoxLayout->addWidget(useDefaultButton); - connect(useDefaultButton, &QPushButton::clicked, this, &StartupSettingsPage::useDefaultLocation); + connect(useDefaultButton, &QPushButton::clicked, this, &FoldersTabsSettingsPage::useDefaultLocation); QGridLayout *startInLocationLayout = new QGridLayout(); startInLocationLayout->setHorizontalSpacing(0); @@ -91,48 +91,73 @@ StartupSettingsPage::StartupSettingsPage(const QUrl &url, QWidget *parent) topLayout->addRow(QString(), startInLocationLayout); topLayout->addItem(new QSpacerItem(0, Dolphin::VERTICAL_SPACER_HEIGHT, QSizePolicy::Fixed, QSizePolicy::Fixed)); - - m_splitView = new QCheckBox(i18nc("@option:check Startup Settings", "Begin in split view mode")); - topLayout->addRow(i18n("New windows:"), m_splitView); - m_filterBar = new QCheckBox(i18nc("@option:check Startup Settings", "Show filter bar")); + // Opening Folders + m_openExternallyCalledFolderInNewTab = new QCheckBox(i18nc("@option:check Opening Folders", "Keep a single Dolphin window, opening new folders in tabs")); + topLayout->addRow(i18nc("@label:checkbox", "Opening Folders:"), m_openExternallyCalledFolderInNewTab); + // Window + m_showFullPathInTitlebar = new QCheckBox(i18nc("@option:check Startup Settings", "Show full path in title bar")); + topLayout->addRow(i18nc("@label:checkbox", "Window:"), m_showFullPathInTitlebar); + m_filterBar = new QCheckBox(i18nc("@option:check Window Startup Settings", "Show filter bar")); topLayout->addRow(QString(), m_filterBar); - m_editableUrl = new QCheckBox(i18nc("@option:check Startup Settings", "Make location bar editable")); - topLayout->addRow(QString(), m_editableUrl); topLayout->addItem(new QSpacerItem(0, Dolphin::VERTICAL_SPACER_HEIGHT, QSizePolicy::Fixed, QSizePolicy::Fixed)); - m_openExternallyCalledFolderInNewTab = new QCheckBox(i18nc("@option:check Startup Settings", "Open new folders in tabs")); - topLayout->addRow(i18nc("@label:checkbox", "General:"), m_openExternallyCalledFolderInNewTab); - m_showFullPath = new QCheckBox(i18nc("@option:check Startup Settings", "Show full path inside location bar")); - topLayout->addRow(QString(), m_showFullPath); - m_showFullPathInTitlebar = new QCheckBox(i18nc("@option:check Startup Settings", "Show full path in title bar")); - topLayout->addRow(QString(), m_showFullPathInTitlebar); + // Tabs properties + m_openNewTabAfterCurrentTab = new QRadioButton(i18nc("option:radio", "After current tab")); + m_openNewTabAfterLastTab = new QRadioButton(i18nc("option:radio", "At end of tab bar")); + QButtonGroup *tabsBehaviorGroup = new QButtonGroup(this); + tabsBehaviorGroup->addButton(m_openNewTabAfterCurrentTab); + tabsBehaviorGroup->addButton(m_openNewTabAfterLastTab); + topLayout->addRow(i18nc("@title:group", "Open new tabs: "), m_openNewTabAfterCurrentTab); + topLayout->addRow(QString(), m_openNewTabAfterLastTab); + + // Split Views + topLayout->addItem(new QSpacerItem(0, Dolphin::VERTICAL_SPACER_HEIGHT, QSizePolicy::Fixed, QSizePolicy::Fixed)); + + // 'Switch between panes of split views with tab key' + m_useTabForSplitViewSwitch = new QCheckBox(i18nc("option:check split view panes", "Switch between panes with Tab key")); + topLayout->addRow(i18nc("@title:group", "Split view: "), m_useTabForSplitViewSwitch); + + // 'Close active pane when turning off split view' + m_closeActiveSplitView = new QCheckBox(i18nc("option:check", "Turning off split view closes active pane")); + topLayout->addRow(QString(), m_closeActiveSplitView); + m_closeActiveSplitView->setToolTip(i18n("When deactivated, turning off split view will close the inactive pane")); + + // 'Begin in split view mode' + m_splitView = new QCheckBox(i18nc("@option:check Startup Settings", "Begin in split view mode")); + topLayout->addRow(i18n("New windows:"), m_splitView); loadSettings(); updateInitialViewOptions(); - connect(m_homeUrl, &QLineEdit::textChanged, this, &StartupSettingsPage::slotSettingsChanged); - connect(m_rememberOpenedTabsRadioButton, &QRadioButton::toggled, this, &StartupSettingsPage::slotSettingsChanged); - connect(m_homeUrlRadioButton, &QRadioButton::toggled, this, &StartupSettingsPage::slotSettingsChanged); + connect(m_homeUrl, &QLineEdit::textChanged, this, &FoldersTabsSettingsPage::slotSettingsChanged); + connect(m_rememberOpenedTabsRadioButton, &QRadioButton::toggled, this, &FoldersTabsSettingsPage::slotSettingsChanged); + connect(m_homeUrlRadioButton, &QRadioButton::toggled, this, &FoldersTabsSettingsPage::slotSettingsChanged); - connect(m_splitView, &QCheckBox::toggled, this, &StartupSettingsPage::slotSettingsChanged); - connect(m_editableUrl, &QCheckBox::toggled, this, &StartupSettingsPage::slotSettingsChanged); - connect(m_filterBar, &QCheckBox::toggled, this, &StartupSettingsPage::slotSettingsChanged); + connect(m_splitView, &QCheckBox::toggled, this, &FoldersTabsSettingsPage::slotSettingsChanged); + connect(m_filterBar, &QCheckBox::toggled, this, &FoldersTabsSettingsPage::slotSettingsChanged); - connect(m_openExternallyCalledFolderInNewTab, &QCheckBox::toggled, this, &StartupSettingsPage::slotSettingsChanged); - connect(m_showFullPath, &QCheckBox::toggled, this, &StartupSettingsPage::slotSettingsChanged); - connect(m_showFullPathInTitlebar, &QCheckBox::toggled, this, &StartupSettingsPage::slotSettingsChanged); + connect(m_openExternallyCalledFolderInNewTab, &QCheckBox::toggled, this, &FoldersTabsSettingsPage::slotSettingsChanged); + connect(m_showFullPathInTitlebar, &QCheckBox::toggled, this, &FoldersTabsSettingsPage::slotSettingsChanged); + + connect(m_useTabForSplitViewSwitch, &QCheckBox::toggled, this, &FoldersTabsSettingsPage::changed); + connect(m_closeActiveSplitView, &QCheckBox::toggled, this, &FoldersTabsSettingsPage::changed); + + connect(m_openNewTabAfterCurrentTab, &QRadioButton::toggled, this, &FoldersTabsSettingsPage::changed); + connect(m_openNewTabAfterLastTab, &QRadioButton::toggled, this, &FoldersTabsSettingsPage::changed); } -StartupSettingsPage::~StartupSettingsPage() +FoldersTabsSettingsPage::~FoldersTabsSettingsPage() { } -void StartupSettingsPage::applySettings() +void FoldersTabsSettingsPage::applySettings() { GeneralSettings *settings = GeneralSettings::self(); + settings->setUseTabForSwitchingSplitView(m_useTabForSplitViewSwitch->isChecked()); + settings->setCloseActiveSplitView(m_closeActiveSplitView->isChecked()); const QUrl url(QUrl::fromUserInput(m_homeUrl->text(), QString(), QUrl::AssumeLocalFile)); if (url.isValid() && KProtocolManager::supportsListing(url)) { KIO::StatJob *job = KIO::statDetails(url, KIO::StatJob::SourceSide, KIO::StatDetail::StatBasic, KIO::JobFlag::HideProgressInfo); @@ -157,15 +182,16 @@ void StartupSettingsPage::applySettings() settings->setRememberOpenedTabs(m_rememberOpenedTabsRadioButton->isChecked()); settings->setSplitView(m_splitView->isChecked()); - settings->setEditableUrl(m_editableUrl->isChecked()); settings->setFilterBar(m_filterBar->isChecked()); settings->setOpenExternallyCalledFolderInNewTab(m_openExternallyCalledFolderInNewTab->isChecked()); - settings->setShowFullPath(m_showFullPath->isChecked()); settings->setShowFullPathInTitlebar(m_showFullPathInTitlebar->isChecked()); + + settings->setOpenNewTabAfterLastTab(m_openNewTabAfterLastTab->isChecked()); + settings->save(); } -void StartupSettingsPage::restoreDefaults() +void FoldersTabsSettingsPage::restoreDefaults() { GeneralSettings *settings = GeneralSettings::self(); settings->useDefaults(true); @@ -173,7 +199,7 @@ void StartupSettingsPage::restoreDefaults() settings->useDefaults(false); } -void StartupSettingsPage::slotSettingsChanged() +void FoldersTabsSettingsPage::slotSettingsChanged() { // Provide a hint that the startup settings have been changed. This allows the views // to apply the startup settings only if they have been explicitly changed by the user @@ -185,13 +211,13 @@ void StartupSettingsPage::slotSettingsChanged() Q_EMIT changed(); } -void StartupSettingsPage::updateInitialViewOptions() +void FoldersTabsSettingsPage::updateInitialViewOptions() { m_homeUrlBoxLayoutContainer->setEnabled(m_homeUrlRadioButton->isChecked()); m_buttonBoxLayoutContainer->setEnabled(m_homeUrlRadioButton->isChecked()); } -void StartupSettingsPage::selectHomeUrl() +void FoldersTabsSettingsPage::selectHomeUrl() { const QUrl homeUrl(QUrl::fromUserInput(m_homeUrl->text(), QString(), QUrl::AssumeLocalFile)); QUrl url = QFileDialog::getExistingDirectoryUrl(this, QString(), homeUrl); @@ -201,33 +227,37 @@ void StartupSettingsPage::selectHomeUrl() } } -void StartupSettingsPage::useCurrentLocation() +void FoldersTabsSettingsPage::useCurrentLocation() { m_homeUrl->setText(m_url.toDisplayString(QUrl::PreferLocalFile)); } -void StartupSettingsPage::useDefaultLocation() +void FoldersTabsSettingsPage::useDefaultLocation() { m_homeUrl->setText(QDir::homePath()); } -void StartupSettingsPage::loadSettings() +void FoldersTabsSettingsPage::loadSettings() { const QUrl url(Dolphin::homeUrl()); m_homeUrl->setText(url.toDisplayString(QUrl::PreferLocalFile)); m_rememberOpenedTabsRadioButton->setChecked(GeneralSettings::rememberOpenedTabs()); m_homeUrlRadioButton->setChecked(!GeneralSettings::rememberOpenedTabs()); m_splitView->setChecked(GeneralSettings::splitView()); - m_editableUrl->setChecked(GeneralSettings::editableUrl()); - m_showFullPath->setChecked(GeneralSettings::showFullPath()); m_filterBar->setChecked(GeneralSettings::filterBar()); m_showFullPathInTitlebar->setChecked(GeneralSettings::showFullPathInTitlebar()); m_openExternallyCalledFolderInNewTab->setChecked(GeneralSettings::openExternallyCalledFolderInNewTab()); + + m_useTabForSplitViewSwitch->setChecked(GeneralSettings::useTabForSwitchingSplitView()); + m_closeActiveSplitView->setChecked(GeneralSettings::closeActiveSplitView()); + + m_openNewTabAfterLastTab->setChecked(GeneralSettings::openNewTabAfterLastTab()); + m_openNewTabAfterCurrentTab->setChecked(!m_openNewTabAfterLastTab->isChecked()); } -void StartupSettingsPage::showSetDefaultDirectoryError() +void FoldersTabsSettingsPage::showSetDefaultDirectoryError() { KMessageBox::error(this, i18nc("@info", "The location for the home folder is invalid or does not exist, it will not be applied.")); } -#include "moc_startupsettingspage.cpp" +#include "moc_folderstabssettingspage.cpp" diff --git a/src/settings/startup/startupsettingspage.h b/src/settings/interface/folderstabssettingspage.h similarity index 66% rename from src/settings/startup/startupsettingspage.h rename to src/settings/interface/folderstabssettingspage.h index b1cf387fa9..89e5c09829 100644 --- a/src/settings/startup/startupsettingspage.h +++ b/src/settings/interface/folderstabssettingspage.h @@ -3,30 +3,30 @@ * * SPDX-License-Identifier: GPL-2.0-or-later */ -#ifndef STARTUPSETTINGSPAGE_H -#define STARTUPSETTINGSPAGE_H +#ifndef FOLDERSTABSSETTINGSPAGE_H +#define FOLDERSTABSSETTINGSPAGE_H +#include "dolphin_generalsettings.h" #include "settings/settingspagebase.h" #include +#include class QCheckBox; class QLineEdit; +class QLabel; class QRadioButton; /** - * @brief Page for the 'Startup' settings of the Dolphin settings dialog. - * - * The startup settings allow to set the home URL and to configure the - * state of the view mode, split mode and the filter bar when starting Dolphin. + * @brief Tab page for the 'Behavior' settings of the Dolphin settings dialog. */ -class StartupSettingsPage : public SettingsPageBase +class FoldersTabsSettingsPage : public SettingsPageBase { Q_OBJECT public: - StartupSettingsPage(const QUrl &url, QWidget *parent); - ~StartupSettingsPage() override; + FoldersTabsSettingsPage(QWidget *parent); + ~FoldersTabsSettingsPage() override; /** @see SettingsPageBase::applySettings() */ void applySettings() override; @@ -34,6 +34,11 @@ public: /** @see SettingsPageBase::restoreDefaults() */ void restoreDefaults() override; +public: + QWidget *m_homeUrlBoxLayoutContainer; + QWidget *m_buttonBoxLayoutContainer; + QRadioButton *m_homeUrlRadioButton; + private Q_SLOTS: void slotSettingsChanged(); void updateInitialViewOptions(); @@ -48,17 +53,17 @@ private: private: QUrl m_url; QLineEdit *m_homeUrl; - QWidget *m_homeUrlBoxLayoutContainer; - QWidget *m_buttonBoxLayoutContainer; QRadioButton *m_rememberOpenedTabsRadioButton; - QRadioButton *m_homeUrlRadioButton; + + QRadioButton *m_openNewTabAfterLastTab; + QRadioButton *m_openNewTabAfterCurrentTab; QCheckBox *m_splitView; - QCheckBox *m_editableUrl; - QCheckBox *m_showFullPath; QCheckBox *m_filterBar; QCheckBox *m_showFullPathInTitlebar; QCheckBox *m_openExternallyCalledFolderInNewTab; + QCheckBox *m_useTabForSplitViewSwitch; + QCheckBox *m_closeActiveSplitView; }; #endif diff --git a/src/settings/general/generalsettingspage.cpp b/src/settings/interface/interfacesettingspage.cpp similarity index 51% rename from src/settings/general/generalsettingspage.cpp rename to src/settings/interface/interfacesettingspage.cpp index 61c2e3adc3..e941cf4678 100644 --- a/src/settings/general/generalsettingspage.cpp +++ b/src/settings/interface/interfacesettingspage.cpp @@ -4,19 +4,19 @@ * SPDX-License-Identifier: GPL-2.0-or-later */ -#include "generalsettingspage.h" +#include "interfacesettingspage.h" -#include "behaviorsettingspage.h" #include "confirmationssettingspage.h" +#include "folderstabssettingspage.h" #include "previewssettingspage.h" -#include "statusbarsettingspage.h" +#include "statusandlocationbarssettingspage.h" #include #include #include -GeneralSettingsPage::GeneralSettingsPage(const QUrl &url, QWidget *parent) +InterfaceSettingsPage::InterfaceSettingsPage(QWidget *parent) : SettingsPageBase(parent) , m_pages() { @@ -25,50 +25,50 @@ GeneralSettingsPage::GeneralSettingsPage(const QUrl &url, QWidget *parent) QTabWidget *tabWidget = new QTabWidget(this); - // initialize 'Behavior' tab - BehaviorSettingsPage *behaviorPage = new BehaviorSettingsPage(url, tabWidget); - tabWidget->addTab(behaviorPage, i18nc("@title:tab Behavior settings", "Behavior")); - connect(behaviorPage, &BehaviorSettingsPage::changed, this, &GeneralSettingsPage::changed); + // initialize 'Folders & Tabs' tab + FoldersTabsSettingsPage *foldersTabsPage = new FoldersTabsSettingsPage(tabWidget); + tabWidget->addTab(foldersTabsPage, i18nc("@title:tab Folders & Tabs settings", "Folders && Tabs")); + connect(foldersTabsPage, &FoldersTabsSettingsPage::changed, this, &InterfaceSettingsPage::changed); // initialize 'Previews' tab PreviewsSettingsPage *previewsPage = new PreviewsSettingsPage(tabWidget); tabWidget->addTab(previewsPage, i18nc("@title:tab Previews settings", "Previews")); - connect(previewsPage, &PreviewsSettingsPage::changed, this, &GeneralSettingsPage::changed); + connect(previewsPage, &PreviewsSettingsPage::changed, this, &InterfaceSettingsPage::changed); // initialize 'Context Menu' tab ConfirmationsSettingsPage *confirmationsPage = new ConfirmationsSettingsPage(tabWidget); tabWidget->addTab(confirmationsPage, i18nc("@title:tab Confirmations settings", "Confirmations")); - connect(confirmationsPage, &ConfirmationsSettingsPage::changed, this, &GeneralSettingsPage::changed); + connect(confirmationsPage, &ConfirmationsSettingsPage::changed, this, &InterfaceSettingsPage::changed); - // initialize 'Status Bar' tab - StatusBarSettingsPage *statusBarPage = new StatusBarSettingsPage(tabWidget); - tabWidget->addTab(statusBarPage, i18nc("@title:tab Status Bar settings", "Status Bar")); - connect(statusBarPage, &StatusBarSettingsPage::changed, this, &GeneralSettingsPage::changed); + // initialize 'Status & location bars' tab + StatusAndLocationBarsSettingsPage *statusAndLocationBarsPage = new StatusAndLocationBarsSettingsPage(tabWidget, foldersTabsPage); + tabWidget->addTab(statusAndLocationBarsPage, i18nc("@title:tab Status & Location bars settings", "Status && Location bars")); + connect(statusAndLocationBarsPage, &StatusAndLocationBarsSettingsPage::changed, this, &InterfaceSettingsPage::changed); - m_pages.append(behaviorPage); + m_pages.append(foldersTabsPage); m_pages.append(previewsPage); m_pages.append(confirmationsPage); - m_pages.append(statusBarPage); + m_pages.append(statusAndLocationBarsPage); topLayout->addWidget(tabWidget, 0, {}); } -GeneralSettingsPage::~GeneralSettingsPage() +InterfaceSettingsPage::~InterfaceSettingsPage() { } -void GeneralSettingsPage::applySettings() +void InterfaceSettingsPage::applySettings() { for (SettingsPageBase *page : qAsConst(m_pages)) { page->applySettings(); } } -void GeneralSettingsPage::restoreDefaults() +void InterfaceSettingsPage::restoreDefaults() { for (SettingsPageBase *page : qAsConst(m_pages)) { page->restoreDefaults(); } } -#include "moc_generalsettingspage.cpp" +#include "moc_interfacesettingspage.cpp" diff --git a/src/settings/general/generalsettingspage.h b/src/settings/interface/interfacesettingspage.h similarity index 60% rename from src/settings/general/generalsettingspage.h rename to src/settings/interface/interfacesettingspage.h index bb9099af05..1faee1afb5 100644 --- a/src/settings/general/generalsettingspage.h +++ b/src/settings/interface/interfacesettingspage.h @@ -3,8 +3,8 @@ * * SPDX-License-Identifier: GPL-2.0-or-later */ -#ifndef GENERALSETTINGSPAGE_H -#define GENERALSETTINGSPAGE_H +#ifndef INTERFACESETTINGSPAGE_H +#define INTERFACESETTINGSPAGE_H #include "settings/settingspagebase.h" @@ -14,21 +14,20 @@ class QUrl; class SettingsPageBase; /** - * @brief Page for the 'General' settings of the Dolphin settings dialog. + * @brief Page for the 'Interface' settings of the Dolphin settings dialog. * - * The general settings include: - * - Behavior + * The interface settings include: + * - Folders & Tabs * - Previews * - Context Menu - * - Status Bar */ -class GeneralSettingsPage : public SettingsPageBase +class InterfaceSettingsPage : public SettingsPageBase { Q_OBJECT public: - GeneralSettingsPage(const QUrl &url, QWidget *parent); - ~GeneralSettingsPage() override; + InterfaceSettingsPage(QWidget *parent); + ~InterfaceSettingsPage() override; /** @see SettingsPageBase::applySettings() */ void applySettings() override; diff --git a/src/settings/general/previewssettingspage.cpp b/src/settings/interface/previewssettingspage.cpp similarity index 100% rename from src/settings/general/previewssettingspage.cpp rename to src/settings/interface/previewssettingspage.cpp diff --git a/src/settings/general/previewssettingspage.h b/src/settings/interface/previewssettingspage.h similarity index 100% rename from src/settings/general/previewssettingspage.h rename to src/settings/interface/previewssettingspage.h diff --git a/src/settings/interface/statusandlocationbarssettingspage.cpp b/src/settings/interface/statusandlocationbarssettingspage.cpp new file mode 100644 index 0000000000..5e0536a6e7 --- /dev/null +++ b/src/settings/interface/statusandlocationbarssettingspage.cpp @@ -0,0 +1,128 @@ +/* + * SPDX-FileCopyrightText: 2023 Dimosthenis Krallis + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "statusandlocationbarssettingspage.h" +#include "dolphinmainwindow.h" +#include "dolphinviewcontainer.h" +#include "settings/interface/folderstabssettingspage.h" + +#include + +#include +#include + +#include +#include + +StatusAndLocationBarsSettingsPage::StatusAndLocationBarsSettingsPage(QWidget *parent, FoldersTabsSettingsPage *foldersPage) + : SettingsPageBase(parent) + , m_editableUrl(nullptr) + , m_showFullPath(nullptr) + , m_showStatusBar(nullptr) + , m_showZoomSlider(nullptr) + , m_showSpaceInfo(nullptr) +{ + // We need to update some urls at the Folders & Tabs tab. We get that from foldersPage and set it on a private attribute + // foldersTabsPage. That way, we can modify the necessary stuff from here. Specifically, any changes on locationUpdateInitialViewOptions() + // which is a copy of updateInitialViewOptions() on Folders & Tabs. + foldersTabsPage = foldersPage; + + QFormLayout *topLayout = new QFormLayout(this); + + // Status bar + m_showStatusBar = new QCheckBox(i18nc("@option:check", "Show status bar"), this); + m_showZoomSlider = new QCheckBox(i18nc("@option:check", "Show zoom slider"), this); + m_showSpaceInfo = new QCheckBox(i18nc("@option:check", "Show space information"), this); + + topLayout->addRow(i18nc("@title:group", "Status Bar: "), m_showStatusBar); + topLayout->addRow(QString(), m_showZoomSlider); + topLayout->addRow(QString(), m_showSpaceInfo); + + topLayout->addItem(new QSpacerItem(0, Dolphin::VERTICAL_SPACER_HEIGHT, QSizePolicy::Fixed, QSizePolicy::Fixed)); + + // Location bar + m_editableUrl = new QCheckBox(i18nc("@option:check Startup Settings", "Make location bar editable")); + topLayout->addRow(i18n("Location bar:"), m_editableUrl); + + m_showFullPath = new QCheckBox(i18nc("@option:check Startup Settings", "Show full path inside location bar")); + topLayout->addRow(QString(), m_showFullPath); + + loadSettings(); + + locationUpdateInitialViewOptions(); + + connect(m_editableUrl, &QCheckBox::toggled, this, &StatusAndLocationBarsSettingsPage::locationSlotSettingsChanged); + connect(m_showFullPath, &QCheckBox::toggled, this, &StatusAndLocationBarsSettingsPage::locationSlotSettingsChanged); + + connect(m_showStatusBar, &QCheckBox::toggled, this, &StatusAndLocationBarsSettingsPage::changed); + connect(m_showStatusBar, &QCheckBox::toggled, this, &StatusAndLocationBarsSettingsPage::onShowStatusBarToggled); + connect(m_showZoomSlider, &QCheckBox::toggled, this, &StatusAndLocationBarsSettingsPage::changed); + connect(m_showSpaceInfo, &QCheckBox::toggled, this, &StatusAndLocationBarsSettingsPage::changed); +} + +StatusAndLocationBarsSettingsPage::~StatusAndLocationBarsSettingsPage() +{ +} + +void StatusAndLocationBarsSettingsPage::applySettings() +{ + GeneralSettings *settings = GeneralSettings::self(); + + settings->setEditableUrl(m_editableUrl->isChecked()); + settings->setShowFullPath(m_showFullPath->isChecked()); + + settings->setShowStatusBar(m_showStatusBar->isChecked()); + settings->setShowZoomSlider(m_showZoomSlider->isChecked()); + settings->setShowSpaceInfo(m_showSpaceInfo->isChecked()); + + settings->save(); +} + +void StatusAndLocationBarsSettingsPage::onShowStatusBarToggled() +{ + const bool checked = m_showStatusBar->isChecked(); + m_showZoomSlider->setEnabled(checked); + m_showSpaceInfo->setEnabled(checked); +} + +void StatusAndLocationBarsSettingsPage::restoreDefaults() +{ + GeneralSettings *settings = GeneralSettings::self(); + settings->useDefaults(true); + loadSettings(); + settings->useDefaults(false); +} + +void StatusAndLocationBarsSettingsPage::locationSlotSettingsChanged() +{ + // Provide a hint that the startup settings have been changed. This allows the views + // to apply the startup settings only if they have been explicitly changed by the user + // (see bug #254947). + GeneralSettings::setModifiedStartupSettings(true); + + // Enable and disable home URL controls appropriately + locationUpdateInitialViewOptions(); + Q_EMIT changed(); +} + +void StatusAndLocationBarsSettingsPage::locationUpdateInitialViewOptions() +{ + foldersTabsPage->m_homeUrlBoxLayoutContainer->setEnabled(foldersTabsPage->m_homeUrlRadioButton->isChecked()); + foldersTabsPage->m_buttonBoxLayoutContainer->setEnabled(foldersTabsPage->m_homeUrlRadioButton->isChecked()); +} + +void StatusAndLocationBarsSettingsPage::loadSettings() +{ + m_editableUrl->setChecked(GeneralSettings::editableUrl()); + m_showFullPath->setChecked(GeneralSettings::showFullPath()); + m_showStatusBar->setChecked(GeneralSettings::showStatusBar()); + m_showZoomSlider->setChecked(GeneralSettings::showZoomSlider()); + m_showSpaceInfo->setChecked(GeneralSettings::showSpaceInfo()); + + onShowStatusBarToggled(); +} + +#include "moc_statusandlocationbarssettingspage.cpp" diff --git a/src/settings/interface/statusandlocationbarssettingspage.h b/src/settings/interface/statusandlocationbarssettingspage.h new file mode 100644 index 0000000000..c22ff2041d --- /dev/null +++ b/src/settings/interface/statusandlocationbarssettingspage.h @@ -0,0 +1,55 @@ +/* + * SPDX-FileCopyrightText: 2009 Peter Penz + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ +#ifndef STATUSANDLOCATIONBARSSETTINGSPAGE_H +#define STATUSANDLOCATIONBARSSETTINGSPAGE_H + +#include "dolphin_generalsettings.h" +#include "folderstabssettingspage.h" +#include "settings/settingspagebase.h" + +#include + +class QCheckBox; +class QLineEdit; +class QLabel; +class QRadioButton; + +/** + * @brief Tab page for the 'Behavior' settings of the Dolphin settings dialog. + */ +class StatusAndLocationBarsSettingsPage : public SettingsPageBase +{ + Q_OBJECT + +public: + StatusAndLocationBarsSettingsPage(QWidget *parent, FoldersTabsSettingsPage *foldersPage); + ~StatusAndLocationBarsSettingsPage() override; + + /** @see SettingsPageBase::applySettings() */ + void applySettings() override; + + /** @see SettingsPageBase::restoreDefaults() */ + void restoreDefaults() override; + +private Q_SLOTS: + void locationSlotSettingsChanged(); + void locationUpdateInitialViewOptions(); + +private: + void loadSettings(); + void onShowStatusBarToggled(); + +private: + FoldersTabsSettingsPage *foldersTabsPage; + QCheckBox *m_editableUrl; + QCheckBox *m_showFullPath; + + QCheckBox *m_showStatusBar; + QCheckBox *m_showZoomSlider; + QCheckBox *m_showSpaceInfo; +}; + +#endif diff --git a/src/settings/kcm/kcmdolphingeneral.cpp b/src/settings/kcm/kcmdolphingeneral.cpp index c002da9262..32241d1123 100644 --- a/src/settings/kcm/kcmdolphingeneral.cpp +++ b/src/settings/kcm/kcmdolphingeneral.cpp @@ -6,9 +6,10 @@ #include "kcmdolphingeneral.h" -#include "settings/general/behaviorsettingspage.h" -#include "settings/general/confirmationssettingspage.h" -#include "settings/general/previewssettingspage.h" +#include "settings/interface/confirmationssettingspage.h" +#include "settings/interface/folderstabssettingspage.h" +#include "settings/interface/interfacesettingspage.h" +#include "settings/interface/previewssettingspage.h" #include #include @@ -30,10 +31,10 @@ DolphinGeneralConfigModule::DolphinGeneralConfigModule(QWidget *parent, const QV QTabWidget *tabWidget = new QTabWidget(this); - // initialize 'Behavior' tab - BehaviorSettingsPage *behaviorPage = new BehaviorSettingsPage(QUrl::fromLocalFile(QDir::homePath()), tabWidget); - tabWidget->addTab(behaviorPage, i18nc("@title:tab Behavior settings", "Behavior")); - connect(behaviorPage, &BehaviorSettingsPage::changed, this, &DolphinGeneralConfigModule::markAsChanged); + // initialize 'Folders & Tabs' tab + FoldersTabsSettingsPage *foldersTabsPage = new FoldersTabsSettingsPage(tabWidget); + tabWidget->addTab(foldersTabsPage, i18nc("@title:tab Behavior settings", "Behavior")); + connect(foldersTabsPage, &FoldersTabsSettingsPage::changed, this, &DolphinGeneralConfigModule::markAsChanged); // initialize 'Previews' tab PreviewsSettingsPage *previewsPage = new PreviewsSettingsPage(tabWidget); @@ -44,7 +45,7 @@ DolphinGeneralConfigModule::DolphinGeneralConfigModule(QWidget *parent, const QV ConfirmationsSettingsPage *confirmationsPage = new ConfirmationsSettingsPage(tabWidget); tabWidget->addTab(confirmationsPage, i18nc("@title:tab Confirmations settings", "Confirmations")); connect(confirmationsPage, &ConfirmationsSettingsPage::changed, this, &DolphinGeneralConfigModule::markAsChanged); - m_pages.append(behaviorPage); + m_pages.append(foldersTabsPage); m_pages.append(previewsPage); m_pages.append(confirmationsPage); diff --git a/src/settings/kcm/kcmdolphinnavigation.cpp b/src/settings/kcm/kcmdolphinnavigation.cpp deleted file mode 100644 index dd4756d8b1..0000000000 --- a/src/settings/kcm/kcmdolphinnavigation.cpp +++ /dev/null @@ -1,48 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2009 Peter Penz - * - * SPDX-License-Identifier: GPL-2.0-or-later - */ - -#include "kcmdolphinnavigation.h" - -#include "settings/navigation/navigationsettingspage.h" -#include - -#include - -#include - -K_PLUGIN_CLASS_WITH_JSON(DolphinNavigationConfigModule, "kcmdolphinnavigation.json") - -DolphinNavigationConfigModule::DolphinNavigationConfigModule(QWidget *parent, const QVariantList &args) - : KCModule(parent, args) - , m_navigation(nullptr) -{ - setButtons(KCModule::Default | KCModule::Help | KCModule::Apply); - - QVBoxLayout *topLayout = new QVBoxLayout(this); - topLayout->setContentsMargins(0, 0, 0, 0); - - m_navigation = new NavigationSettingsPage(this); - connect(m_navigation, &NavigationSettingsPage::changed, this, &DolphinNavigationConfigModule::markAsChanged); - topLayout->addWidget(m_navigation, 0, {}); -} - -DolphinNavigationConfigModule::~DolphinNavigationConfigModule() -{ -} - -void DolphinNavigationConfigModule::save() -{ - m_navigation->applySettings(); -} - -void DolphinNavigationConfigModule::defaults() -{ - m_navigation->restoreDefaults(); -} - -#include "kcmdolphinnavigation.moc" - -#include "moc_kcmdolphinnavigation.cpp" diff --git a/src/settings/kcm/kcmdolphinnavigation.h b/src/settings/kcm/kcmdolphinnavigation.h deleted file mode 100644 index 97d7bff85a..0000000000 --- a/src/settings/kcm/kcmdolphinnavigation.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2009 Peter Penz - * - * SPDX-License-Identifier: GPL-2.0-or-later - */ - -#ifndef KCMDOLPHINNAVIGATION_H -#define KCMDOLPHINNAVIGATION_H - -#include - -class NavigationSettingsPage; - -/** - * @brief Allow to configure the Dolphin navigation. - */ -class DolphinNavigationConfigModule : public KCModule -{ - Q_OBJECT - -public: - DolphinNavigationConfigModule(QWidget *parent, const QVariantList &args); - ~DolphinNavigationConfigModule() override; - - void save() override; - void defaults() override; - -private: - NavigationSettingsPage *m_navigation; -}; - -#endif diff --git a/src/settings/kcm/kcmdolphinnavigation.json b/src/settings/kcm/kcmdolphinnavigation.json deleted file mode 100644 index 8bf2cbfd84..0000000000 --- a/src/settings/kcm/kcmdolphinnavigation.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "KPlugin": { - "Icon": "preferences-desktop-navigation", - "Name": "Navigation", - "Name[ar]": "التّنقّل", - "Name[az]": "Naviqasiya", - "Name[be]": "Навігацыя", - "Name[bg]": "Навигация", - "Name[ca@valencia]": "Navegació", - "Name[ca]": "Navegació", - "Name[cs]": "Navigace", - "Name[da]": "Navigation", - "Name[de]": "Navigation", - "Name[en_GB]": "Navigation", - "Name[eo]": "Navigado", - "Name[es]": "Navegación", - "Name[et]": "Liikumine", - "Name[eu]": "Nabigatzea", - "Name[fi]": "Selaus", - "Name[fr]": "Navigation", - "Name[gl]": "Navegación", - "Name[he]": "ניווט", - "Name[hi]": "संचालन", - "Name[hu]": "Navigálás", - "Name[ia]": "Navigation", - "Name[id]": "Navigasi", - "Name[ie]": "Navigation", - "Name[is]": "Skoðun", - "Name[it]": "Navigazione", - "Name[ja]": "ナビゲーション", - "Name[ka]": "ნავიგაცია", - "Name[ko]": "탐색", - "Name[lt]": "Naršymas", - "Name[lv]": "Navigācija", - "Name[ml]": "നാവിഗേഷന്‍", - "Name[my]": "လမ်းညွှန်", - "Name[nb]": "Navigasjon", - "Name[nl]": "Navigatie", - "Name[nn]": "Navigasjon", - "Name[pa]": "ਨੇਵੀਗੇਸ਼ਨ", - "Name[pl]": "Poruszanie się", - "Name[pt]": "Navegação", - "Name[pt_BR]": "Navegação", - "Name[ro]": "Navigare", - "Name[ru]": "Навигация", - "Name[se]": "Navigašuvdna", - "Name[sk]": "Navigácia", - "Name[sl]": "Krmarjenje", - "Name[sr@ijekavian]": "Навигација", - "Name[sr@ijekavianlatin]": "Navigacija", - "Name[sr@latin]": "Navigacija", - "Name[sr]": "Навигација", - "Name[sv]": "Navigering", - "Name[ta]": "உலாவல்", - "Name[tr]": "Dolaşım", - "Name[uk]": "Навігація", - "Name[vi]": "Điều hướng", - "Name[x-test]": "xxNavigationxx", - "Name[zh_CN]": "导航", - "Name[zh_TW]": "導覽" - }, - "X-DocPath": "dolphin/configuring-dolphin.html#preferences-dialog-navigation" -} diff --git a/src/settings/navigation/navigationsettingspage.cpp b/src/settings/navigation/navigationsettingspage.cpp deleted file mode 100644 index 3b38e52e77..0000000000 --- a/src/settings/navigation/navigationsettingspage.cpp +++ /dev/null @@ -1,82 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2009 Peter Penz - * - * SPDX-License-Identifier: GPL-2.0-or-later - */ - -#include "navigationsettingspage.h" - -#include "dolphin_generalsettings.h" -#include "global.h" - -#include - -#include -#include -#include -#include - -NavigationSettingsPage::NavigationSettingsPage(QWidget *parent) - : SettingsPageBase(parent) - , m_openArchivesAsFolder(nullptr) - , m_autoExpandFolders(nullptr) - , m_openNewTabAfterLastTab(nullptr) - , m_openNewTabAfterCurrentTab(nullptr) -{ - QFormLayout *topLayout = new QFormLayout(this); - - // Tabs properties - m_openNewTabAfterCurrentTab = new QRadioButton(i18nc("option:radio", "After current tab")); - m_openNewTabAfterLastTab = new QRadioButton(i18nc("option:radio", "At end of tab bar")); - QButtonGroup *tabsBehaviorGroup = new QButtonGroup(this); - tabsBehaviorGroup->addButton(m_openNewTabAfterCurrentTab); - tabsBehaviorGroup->addButton(m_openNewTabAfterLastTab); - topLayout->addRow(i18nc("@title:group", "Open new tabs: "), m_openNewTabAfterCurrentTab); - topLayout->addRow(QString(), m_openNewTabAfterLastTab); - - topLayout->addItem(new QSpacerItem(0, Dolphin::VERTICAL_SPACER_HEIGHT, QSizePolicy::Fixed, QSizePolicy::Fixed)); - - m_openArchivesAsFolder = new QCheckBox(i18nc("@option:check", "Open archives as folder")); - m_autoExpandFolders = new QCheckBox(i18nc("option:check", "Open folders during drag operations")); - topLayout->addRow(i18nc("@title:group", "General: "), m_openArchivesAsFolder); - topLayout->addRow(QString(), m_autoExpandFolders); - - loadSettings(); - - connect(m_openArchivesAsFolder, &QCheckBox::toggled, this, &NavigationSettingsPage::changed); - connect(m_autoExpandFolders, &QCheckBox::toggled, this, &NavigationSettingsPage::changed); - connect(m_openNewTabAfterCurrentTab, &QRadioButton::toggled, this, &NavigationSettingsPage::changed); - connect(m_openNewTabAfterLastTab, &QRadioButton::toggled, this, &NavigationSettingsPage::changed); -} - -NavigationSettingsPage::~NavigationSettingsPage() -{ -} - -void NavigationSettingsPage::applySettings() -{ - GeneralSettings *settings = GeneralSettings::self(); - settings->setBrowseThroughArchives(m_openArchivesAsFolder->isChecked()); - settings->setAutoExpandFolders(m_autoExpandFolders->isChecked()); - settings->setOpenNewTabAfterLastTab(m_openNewTabAfterLastTab->isChecked()); - - settings->save(); -} - -void NavigationSettingsPage::restoreDefaults() -{ - GeneralSettings *settings = GeneralSettings::self(); - settings->useDefaults(true); - loadSettings(); - settings->useDefaults(false); -} - -void NavigationSettingsPage::loadSettings() -{ - m_openArchivesAsFolder->setChecked(GeneralSettings::browseThroughArchives()); - m_autoExpandFolders->setChecked(GeneralSettings::autoExpandFolders()); - m_openNewTabAfterLastTab->setChecked(GeneralSettings::openNewTabAfterLastTab()); - m_openNewTabAfterCurrentTab->setChecked(!m_openNewTabAfterLastTab->isChecked()); -} - -#include "moc_navigationsettingspage.cpp" diff --git a/src/settings/navigation/navigationsettingspage.h b/src/settings/navigation/navigationsettingspage.h deleted file mode 100644 index e0f92884fb..0000000000 --- a/src/settings/navigation/navigationsettingspage.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2009 Peter Penz - * - * SPDX-License-Identifier: GPL-2.0-or-later - */ -#ifndef NAVIGATIONSETTINGSPAGE_H -#define NAVIGATIONSETTINGSPAGE_H - -#include "settings/settingspagebase.h" - -class QCheckBox; -class QRadioButton; - -/** - * @brief Page for the 'Navigation' settings of the Dolphin settings dialog. - */ -class NavigationSettingsPage : public SettingsPageBase -{ - Q_OBJECT - -public: - explicit NavigationSettingsPage(QWidget *parent); - ~NavigationSettingsPage() override; - - /** @see SettingsPageBase::applySettings() */ - void applySettings() override; - - /** @see SettingsPageBase::restoreDefaults() */ - void restoreDefaults() override; - -private: - void loadSettings(); - -private: - QCheckBox *m_openArchivesAsFolder; - QCheckBox *m_autoExpandFolders; - QRadioButton *m_openNewTabAfterLastTab; - QRadioButton *m_openNewTabAfterCurrentTab; -}; - -#endif diff --git a/src/settings/viewmodes/contentdisplaytab.cpp b/src/settings/viewmodes/contentdisplaytab.cpp index aa320b79e9..f674e194e6 100644 --- a/src/settings/viewmodes/contentdisplaytab.cpp +++ b/src/settings/viewmodes/contentdisplaytab.cpp @@ -6,6 +6,7 @@ #include "contentdisplaytab.h" #include "dolphin_contentdisplaysettings.h" +#include "dolphin_generalsettings.h" #include #include @@ -18,6 +19,9 @@ ContentDisplayTab::ContentDisplayTab(QWidget *parent) : SettingsPageBase(parent) + , m_naturalSorting(nullptr) + , m_caseSensitiveSorting(nullptr) + , m_caseInsensitiveSorting(nullptr) , m_numberOfItems(nullptr) , m_sizeOfContents(nullptr) , m_recursiveDirectorySizeLimit(nullptr) @@ -29,6 +33,19 @@ ContentDisplayTab::ContentDisplayTab(QWidget *parent) { QFormLayout *topLayout = new QFormLayout(this); + // Sorting Order + 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")); + + QButtonGroup *sortingOrderGroup = new QButtonGroup(this); + sortingOrderGroup->addButton(m_naturalSorting); + sortingOrderGroup->addButton(m_caseInsensitiveSorting); + sortingOrderGroup->addButton(m_caseSensitiveSorting); + topLayout->addRow(i18nc("@title:group", "Sorting mode: "), m_naturalSorting); + topLayout->addRow(QString(), m_caseInsensitiveSorting); + topLayout->addRow(QString(), m_caseSensitiveSorting); + #ifndef Q_OS_WIN // Sorting properties m_numberOfItems = new QRadioButton(i18nc("option:radio", "Number of items")); @@ -95,6 +112,9 @@ ContentDisplayTab::ContentDisplayTab(QWidget *parent) connect(m_useSymbolicPermissions, &QRadioButton::toggled, this, &SettingsPageBase::changed); connect(m_useNumericPermissions, &QRadioButton::toggled, this, &SettingsPageBase::changed); connect(m_useCombinedPermissions, &QRadioButton::toggled, this, &SettingsPageBase::changed); + connect(m_naturalSorting, &QRadioButton::toggled, this, &SettingsPageBase::changed); + connect(m_caseInsensitiveSorting, &QRadioButton::toggled, this, &SettingsPageBase::changed); + connect(m_caseSensitiveSorting, &QRadioButton::toggled, this, &SettingsPageBase::changed); loadSettings(); } @@ -106,7 +126,7 @@ void ContentDisplayTab::applySettings() settings->setDirectorySizeCount(m_numberOfItems->isChecked()); settings->setRecursiveDirectorySizeLimit(m_recursiveDirectorySizeLimit->value()); #endif - + setSortingChoiceValue(); settings->setUseShortRelativeDates(m_useRelatetiveDates->isChecked()); if (m_useSymbolicPermissions->isChecked()) { @@ -137,6 +157,38 @@ void ContentDisplayTab::loadSettings() m_useSymbolicPermissions->setChecked(settings->usePermissionsFormat() == ContentDisplaySettings::EnumUsePermissionsFormat::SymbolicFormat); m_useNumericPermissions->setChecked(settings->usePermissionsFormat() == ContentDisplaySettings::EnumUsePermissionsFormat::NumericFormat); m_useCombinedPermissions->setChecked(settings->usePermissionsFormat() == ContentDisplaySettings::EnumUsePermissionsFormat::CombinedFormat); + loadSortingChoiceSettings(); +} + +void ContentDisplayTab::setSortingChoiceValue() +{ + auto settings = GeneralSettings::self(); + using Choice = GeneralSettings::EnumSortingChoice; + if (m_naturalSorting->isChecked()) { + settings->setSortingChoice(Choice::NaturalSorting); + } else if (m_caseInsensitiveSorting->isChecked()) { + settings->setSortingChoice(Choice::CaseInsensitiveSorting); + } else if (m_caseSensitiveSorting->isChecked()) { + settings->setSortingChoice(Choice::CaseSensitiveSorting); + } +} + +void ContentDisplayTab::loadSortingChoiceSettings() +{ + using Choice = GeneralSettings::EnumSortingChoice; + switch (GeneralSettings::sortingChoice()) { + case Choice::NaturalSorting: + m_naturalSorting->setChecked(true); + break; + case Choice::CaseInsensitiveSorting: + m_caseInsensitiveSorting->setChecked(true); + break; + case Choice::CaseSensitiveSorting: + m_caseSensitiveSorting->setChecked(true); + break; + default: + Q_UNREACHABLE(); + } } void ContentDisplayTab::restoreDefaults() diff --git a/src/settings/viewmodes/contentdisplaytab.h b/src/settings/viewmodes/contentdisplaytab.h index 5484bf4132..3550569fd8 100644 --- a/src/settings/viewmodes/contentdisplaytab.h +++ b/src/settings/viewmodes/contentdisplaytab.h @@ -6,6 +6,8 @@ #ifndef GENERALTAB_H #define GENERALTAB_H +#include "dolphin_contentdisplaysettings.h" +#include "dolphin_generalsettings.h" #include "settings/settingspagebase.h" class QRadioButton; @@ -25,6 +27,12 @@ public: private: void loadSettings(); + void setSortingChoiceValue(); + void loadSortingChoiceSettings(); + + QRadioButton *m_naturalSorting; + QRadioButton *m_caseSensitiveSorting; + QRadioButton *m_caseInsensitiveSorting; QRadioButton *m_numberOfItems; QRadioButton *m_sizeOfContents; diff --git a/src/settings/viewmodes/generalviewsettingspage.cpp b/src/settings/viewmodes/generalviewsettingspage.cpp new file mode 100644 index 0000000000..0b2a96cb59 --- /dev/null +++ b/src/settings/viewmodes/generalviewsettingspage.cpp @@ -0,0 +1,133 @@ +/* + * SPDX-FileCopyrightText: 2006 Peter Penz (peter.penz@gmx.at) and Patrice Tremblay + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "generalviewsettingspage.h" +#include "dolphin_generalsettings.h" +#include "dolphinmainwindow.h" +#include "views/viewproperties.h" + +#include + +#include +#include +#include +#include + +GeneralViewSettingsPage::GeneralViewSettingsPage(const QUrl &url, QWidget *parent) + : SettingsPageBase(parent) + , m_url(url) + , m_localViewProps(nullptr) + , m_globalViewProps(nullptr) + , m_showToolTips(nullptr) + , m_showSelectionToggle(nullptr) + , m_renameInline(nullptr) +{ + QFormLayout *topLayout = new QFormLayout(this); + + // Display style + m_globalViewProps = new QRadioButton(i18nc("@option:radio", "Use common display style for all folders")); + m_localViewProps = new QRadioButton(i18nc("@option:radio", "Remember display style for each folder")); + m_localViewProps->setToolTip(i18nc("@info", "Dolphin will create a hidden .directory file in each folder you change view properties for.")); + + QButtonGroup *viewGroup = new QButtonGroup(this); + viewGroup->addButton(m_globalViewProps); + viewGroup->addButton(m_localViewProps); + topLayout->addRow(i18nc("@title:group", "Display style: "), m_globalViewProps); + topLayout->addRow(QString(), m_localViewProps); + + topLayout->addItem(new QSpacerItem(0, Dolphin::VERTICAL_SPACER_HEIGHT, QSizePolicy::Fixed, QSizePolicy::Fixed)); + + // Browsing + m_openArchivesAsFolder = new QCheckBox(i18nc("@option:check", "Open archives as folder")); + m_autoExpandFolders = new QCheckBox(i18nc("option:check", "Open folders during drag operations")); + topLayout->addRow(i18nc("@title:group", "Browsing: "), m_openArchivesAsFolder); + topLayout->addRow(QString(), m_autoExpandFolders); + + topLayout->addItem(new QSpacerItem(0, Dolphin::VERTICAL_SPACER_HEIGHT, QSizePolicy::Fixed, QSizePolicy::Fixed)); + +#if HAVE_BALOO + // 'Show tooltips' + m_showToolTips = new QCheckBox(i18nc("@option:check", "Show tooltips")); + topLayout->addRow(i18nc("@title:group", "Miscellaneous: "), m_showToolTips); +#endif + + // 'Show selection marker' + m_showSelectionToggle = new QCheckBox(i18nc("@option:check", "Show selection marker")); +#if HAVE_BALOO + topLayout->addRow(QString(), m_showSelectionToggle); +#else + topLayout->addRow(i18nc("@title:group", "Miscellaneous: "), m_showSelectionToggle); +#endif + + // 'Inline renaming of items' + m_renameInline = new QCheckBox(i18nc("option:check", "Rename inline")); + topLayout->addRow(QString(), m_renameInline); + + loadSettings(); + + connect(m_localViewProps, &QRadioButton::toggled, this, &GeneralViewSettingsPage::changed); + connect(m_globalViewProps, &QRadioButton::toggled, this, &GeneralViewSettingsPage::changed); + + connect(m_openArchivesAsFolder, &QCheckBox::toggled, this, &GeneralViewSettingsPage::changed); + connect(m_autoExpandFolders, &QCheckBox::toggled, this, &GeneralViewSettingsPage::changed); +#if HAVE_BALOO + connect(m_showToolTips, &QCheckBox::toggled, this, &GeneralViewSettingsPage::changed); +#endif + connect(m_showSelectionToggle, &QCheckBox::toggled, this, &GeneralViewSettingsPage::changed); + connect(m_renameInline, &QCheckBox::toggled, this, &GeneralViewSettingsPage::changed); +} + +GeneralViewSettingsPage::~GeneralViewSettingsPage() +{ +} + +void GeneralViewSettingsPage::applySettings() +{ + GeneralSettings *settings = GeneralSettings::self(); + ViewProperties props(m_url); // read current view properties + const bool useGlobalViewProps = m_globalViewProps->isChecked(); + settings->setGlobalViewProps(useGlobalViewProps); +#if HAVE_BALOO + settings->setShowToolTips(m_showToolTips->isChecked()); +#endif + settings->setShowSelectionToggle(m_showSelectionToggle->isChecked()); + settings->setRenameInline(m_renameInline->isChecked()); + settings->setAutoExpandFolders(m_autoExpandFolders->isChecked()); + settings->save(); + if (useGlobalViewProps) { + // Remember the global view properties by applying the current view properties. + // It is important that GeneralSettings::globalViewProps() is set before + // the class ViewProperties is used, as ViewProperties uses this setting + // to find the destination folder for storing the view properties. + ViewProperties globalProps(m_url); + globalProps.setDirProperties(props); + } +} + +void GeneralViewSettingsPage::restoreDefaults() +{ + GeneralSettings *settings = GeneralSettings::self(); + settings->useDefaults(true); + loadSettings(); + settings->useDefaults(false); +} + +void GeneralViewSettingsPage::loadSettings() +{ + const bool useGlobalViewProps = GeneralSettings::globalViewProps(); + m_openArchivesAsFolder->setChecked(GeneralSettings::browseThroughArchives()); + m_autoExpandFolders->setChecked(GeneralSettings::autoExpandFolders()); +#if HAVE_BALOO + m_showToolTips->setChecked(GeneralSettings::showToolTips()); +#endif + m_showSelectionToggle->setChecked(GeneralSettings::showSelectionToggle()); + m_renameInline->setChecked(GeneralSettings::renameInline()); + + m_localViewProps->setChecked(!useGlobalViewProps); + m_globalViewProps->setChecked(useGlobalViewProps); +} + +#include "moc_generalviewsettingspage.cpp" diff --git a/src/settings/general/behaviorsettingspage.h b/src/settings/viewmodes/generalviewsettingspage.h similarity index 54% rename from src/settings/general/behaviorsettingspage.h rename to src/settings/viewmodes/generalviewsettingspage.h index ba8ce63843..47838b9394 100644 --- a/src/settings/general/behaviorsettingspage.h +++ b/src/settings/viewmodes/generalviewsettingspage.h @@ -3,11 +3,11 @@ * * SPDX-License-Identifier: GPL-2.0-or-later */ -#ifndef BEHAVIORSETTINGSPAGE_H -#define BEHAVIORSETTINGSPAGE_H +#ifndef GENERALVIEWSETTINGSPAGE_H +#define GENERALVIEWSETTINGSPAGE_H -#include "dolphin_generalsettings.h" #include "settings/settingspagebase.h" +#include #include @@ -16,15 +16,15 @@ class QLabel; class QRadioButton; /** - * @brief Tab page for the 'Behavior' settings of the Dolphin settings dialog. + * @brief Tab page for the 'View tab' settings of the Dolphin settings dialog. */ -class BehaviorSettingsPage : public SettingsPageBase +class GeneralViewSettingsPage : public SettingsPageBase { Q_OBJECT public: - BehaviorSettingsPage(const QUrl &url, QWidget *parent); - ~BehaviorSettingsPage() override; + explicit GeneralViewSettingsPage(const QUrl &url, QWidget *parent); + ~GeneralViewSettingsPage() override; /** @see SettingsPageBase::applySettings() */ void applySettings() override; @@ -34,26 +34,17 @@ public: private: void loadSettings(); - void setSortingChoiceValue(GeneralSettings *settings); - void loadSortingChoiceSettings(); private: QUrl m_url; - QRadioButton *m_localViewProps; QRadioButton *m_globalViewProps; - QCheckBox *m_showToolTips; QLabel *m_configureToolTips; QCheckBox *m_showSelectionToggle; - - QRadioButton *m_naturalSorting; - QRadioButton *m_caseSensitiveSorting; - QRadioButton *m_caseInsensitiveSorting; - QCheckBox *m_renameInline; - QCheckBox *m_useTabForSplitViewSwitch; - QCheckBox *m_closeActiveSplitView; + QCheckBox *m_openArchivesAsFolder; + QCheckBox *m_autoExpandFolders; }; #endif diff --git a/src/settings/viewmodes/viewsettingspage.cpp b/src/settings/viewmodes/viewsettingspage.cpp index 0d4d4277bb..8e101c3d2a 100644 --- a/src/settings/viewmodes/viewsettingspage.cpp +++ b/src/settings/viewmodes/viewsettingspage.cpp @@ -7,14 +7,14 @@ #include "viewsettingspage.h" #include "contentdisplaytab.h" +#include "generalviewsettingspage.h" #include "viewsettingstab.h" - #include #include #include -ViewSettingsPage::ViewSettingsPage(QWidget *parent) +ViewSettingsPage::ViewSettingsPage(const QUrl &url, QWidget *parent) : SettingsPageBase(parent) , m_tabs() { @@ -23,6 +23,11 @@ ViewSettingsPage::ViewSettingsPage(QWidget *parent) tabWidget = new QTabWidget(this); + // General View tab + GeneralViewSettingsPage *generalViewPage = new GeneralViewSettingsPage(url, tabWidget); + tabWidget->addTab(generalViewPage, QIcon::fromTheme(QStringLiteral("description")), i18nc("@title:tab General View settings", "General")); + connect(generalViewPage, &GeneralViewSettingsPage::changed, this, &ViewSettingsPage::changed); + // Content Display Tab contentDisplayTab = new ContentDisplayTab(tabWidget); tabWidget->addTab(contentDisplayTab, diff --git a/src/settings/viewmodes/viewsettingspage.h b/src/settings/viewmodes/viewsettingspage.h index e52f6b2c09..76743252b6 100644 --- a/src/settings/viewmodes/viewsettingspage.h +++ b/src/settings/viewmodes/viewsettingspage.h @@ -24,7 +24,7 @@ class ViewSettingsPage : public SettingsPageBase Q_OBJECT public: - explicit ViewSettingsPage(QWidget *parent); + explicit ViewSettingsPage(const QUrl &url, QWidget *parent); ~ViewSettingsPage() override; /** @see SettingsPageBase::applySettings() */