]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Dolphin settings revamp
authorDimosthenis Krallis <sandboxgamergr@hotmail.com>
Fri, 18 Aug 2023 07:07:48 +0000 (07:07 +0000)
committerMéven Car <meven.car@kdemail.net>
Fri, 18 Aug 2023 07:07:48 +0000 (07:07 +0000)
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.

29 files changed:
src/CMakeLists.txt
src/settings/dolphinsettingsdialog.cpp
src/settings/general/behaviorsettingspage.cpp [deleted file]
src/settings/general/statusbarsettingspage.cpp [deleted file]
src/settings/general/statusbarsettingspage.h [deleted file]
src/settings/interface/configurepreviewplugindialog.cpp [moved from src/settings/general/configurepreviewplugindialog.cpp with 100% similarity]
src/settings/interface/configurepreviewplugindialog.h [moved from src/settings/general/configurepreviewplugindialog.h with 100% similarity]
src/settings/interface/confirmationssettingspage.cpp [moved from src/settings/general/confirmationssettingspage.cpp with 100% similarity]
src/settings/interface/confirmationssettingspage.h [moved from src/settings/general/confirmationssettingspage.h with 100% similarity]
src/settings/interface/folderstabssettingspage.cpp [moved from src/settings/startup/startupsettingspage.cpp with 61% similarity]
src/settings/interface/folderstabssettingspage.h [moved from src/settings/startup/startupsettingspage.h with 66% similarity]
src/settings/interface/interfacesettingspage.cpp [moved from src/settings/general/generalsettingspage.cpp with 51% similarity]
src/settings/interface/interfacesettingspage.h [moved from src/settings/general/generalsettingspage.h with 60% similarity]
src/settings/interface/previewssettingspage.cpp [moved from src/settings/general/previewssettingspage.cpp with 100% similarity]
src/settings/interface/previewssettingspage.h [moved from src/settings/general/previewssettingspage.h with 100% similarity]
src/settings/interface/statusandlocationbarssettingspage.cpp [new file with mode: 0644]
src/settings/interface/statusandlocationbarssettingspage.h [new file with mode: 0644]
src/settings/kcm/kcmdolphingeneral.cpp
src/settings/kcm/kcmdolphinnavigation.cpp [deleted file]
src/settings/kcm/kcmdolphinnavigation.h [deleted file]
src/settings/kcm/kcmdolphinnavigation.json [deleted file]
src/settings/navigation/navigationsettingspage.cpp [deleted file]
src/settings/navigation/navigationsettingspage.h [deleted file]
src/settings/viewmodes/contentdisplaytab.cpp
src/settings/viewmodes/contentdisplaytab.h
src/settings/viewmodes/generalviewsettingspage.cpp [new file with mode: 0644]
src/settings/viewmodes/generalviewsettingspage.h [moved from src/settings/general/behaviorsettingspage.h with 54% similarity]
src/settings/viewmodes/viewsettingspage.cpp
src/settings/viewmodes/viewsettingspage.h

index 62c70ba79abd3f8d1d5f280af003a74490a86969..ce078278aa7f2618668c8f6bdd04d5ab1bd259e9 100644 (file)
@@ -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()
 
index 8c200c747ddc046be77c2b491d945e4a3ac77574..45aa7b65a0723e5685008f8e4cddaddbde4ba464 100644 (file)
@@ -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);
-
-    // 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"));
+    // 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);
+
+    // 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 (file)
index 662fcc2..0000000
+++ /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 <KLocalizedString>
-
-#include <QButtonGroup>
-#include <QCheckBox>
-#include <QFormLayout>
-#include <QRadioButton>
-#include <QSpacerItem>
-
-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 (file)
index 40e34e4..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * SPDX-FileCopyrightText: 2009 Peter Penz <peter.penz19@gmail.com>
- *
- * SPDX-License-Identifier: GPL-2.0-or-later
- */
-
-#include "statusbarsettingspage.h"
-
-#include "dolphin_generalsettings.h"
-
-#include <KLocalizedString>
-
-#include <QCheckBox>
-#include <QVBoxLayout>
-
-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 (file)
index adff05d..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * SPDX-FileCopyrightText: 2009 Peter Penz <peter.penz19@gmail.com>
- *
- * 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
similarity index 61%
rename from src/settings/startup/startupsettingspage.cpp
rename to src/settings/interface/folderstabssettingspage.cpp
index dc15ee39a01b97df34a2306f65fba992b465a5e3..d71ad2d96b01922c960ba400e22d1d787b235ba2 100644 (file)
@@ -1,12 +1,10 @@
 /*
- * SPDX-FileCopyrightText: 2008 Peter Penz <peter.penz19@gmail.com>
+ * 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"
 #include <QLineEdit>
 #include <QPushButton>
 #include <QRadioButton>
+#include <QSpacerItem>
 
-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, &FoldersTabsSettingsPage::slotSettingsChanged);
+    connect(m_filterBar, &QCheckBox::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_openExternallyCalledFolderInNewTab, &QCheckBox::toggled, this, &FoldersTabsSettingsPage::slotSettingsChanged);
+    connect(m_showFullPathInTitlebar, &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_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"
similarity index 66%
rename from src/settings/startup/startupsettingspage.h
rename to src/settings/interface/folderstabssettingspage.h
index b1cf387fa9ec938e82092f79e63f6be105ed1677..89e5c0982962995d235d433ef0a56fb3931b1772 100644 (file)
@@ -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 <QUrl>
+#include <qobject.h>
 
 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
similarity index 51%
rename from src/settings/general/generalsettingspage.cpp
rename to src/settings/interface/interfacesettingspage.cpp
index 61c2e3adc3261f993419528942708c0f99a354e8..e941cf46786f973da208e0a9fca0c417953f863e 100644 (file)
@@ -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 <KLocalizedString>
 
 #include <QTabWidget>
 #include <QVBoxLayout>
 
-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"
similarity index 60%
rename from src/settings/general/generalsettingspage.h
rename to src/settings/interface/interfacesettingspage.h
index bb9099af057af732b04be57f9b5335bc37e19a1a..1faee1afb5ae6af743c5f10cdb8a51f29ad06cad 100644 (file)
@@ -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/interface/statusandlocationbarssettingspage.cpp b/src/settings/interface/statusandlocationbarssettingspage.cpp
new file mode 100644 (file)
index 0000000..5e0536a
--- /dev/null
@@ -0,0 +1,128 @@
+/*
+ * SPDX-FileCopyrightText: 2023 Dimosthenis Krallis <dimosthenis.krallis@outlook.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+#include "statusandlocationbarssettingspage.h"
+#include "dolphinmainwindow.h"
+#include "dolphinviewcontainer.h"
+#include "settings/interface/folderstabssettingspage.h"
+
+#include <KLocalizedString>
+
+#include <QCheckBox>
+#include <QFormLayout>
+
+#include <QRadioButton>
+#include <QSpacerItem>
+
+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 (file)
index 0000000..c22ff20
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+ * SPDX-FileCopyrightText: 2009 Peter Penz <peter.penz19@gmail.com>
+ *
+ * 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 <QUrl>
+
+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
index c002da9262035ac3036ee7d22c46cdcebf4982da..32241d1123a38f8fac9088247ab0f54418631858 100644 (file)
@@ -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 <KLocalizedString>
 #include <KPluginFactory>
@@ -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 (file)
index dd4756d..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * SPDX-FileCopyrightText: 2009 Peter Penz <peter.penz19@gmail.com>
- *
- * SPDX-License-Identifier: GPL-2.0-or-later
- */
-
-#include "kcmdolphinnavigation.h"
-
-#include "settings/navigation/navigationsettingspage.h"
-#include <kconfigwidgets_version.h>
-
-#include <KPluginFactory>
-
-#include <QVBoxLayout>
-
-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 (file)
index 97d7bff..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * SPDX-FileCopyrightText: 2009 Peter Penz <peter.penz19@gmail.com>
- *
- * SPDX-License-Identifier: GPL-2.0-or-later
- */
-
-#ifndef KCMDOLPHINNAVIGATION_H
-#define KCMDOLPHINNAVIGATION_H
-
-#include <KCModule>
-
-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 (file)
index 8bf2cbf..0000000
+++ /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 (file)
index 3b38e52..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * SPDX-FileCopyrightText: 2009 Peter Penz <peter.penz19@gmail.com>
- *
- * SPDX-License-Identifier: GPL-2.0-or-later
- */
-
-#include "navigationsettingspage.h"
-
-#include "dolphin_generalsettings.h"
-#include "global.h"
-
-#include <KLocalizedString>
-
-#include <QButtonGroup>
-#include <QCheckBox>
-#include <QFormLayout>
-#include <QRadioButton>
-
-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 (file)
index e0f9288..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * SPDX-FileCopyrightText: 2009 Peter Penz <peter.penz19@gmail.com>
- *
- * 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
index aa320b79e9f6b87f98194e5b12873d61a2716dcc..f674e194e69e9d828e719d8986d163312415ef72 100644 (file)
@@ -6,6 +6,7 @@
 
 #include "contentdisplaytab.h"
 #include "dolphin_contentdisplaysettings.h"
+#include "dolphin_generalsettings.h"
 
 #include <KFormat>
 #include <KLocalizedString>
@@ -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()
index 5484bf4132bf9d4b5abe6a0e660deb6fc6eed586..3550569fd82668fd5f050a987b68c403ba4359b6 100644 (file)
@@ -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 (file)
index 0000000..0b2a96c
--- /dev/null
@@ -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 <KLocalizedString>
+
+#include <QButtonGroup>
+#include <QCheckBox>
+#include <QFormLayout>
+#include <QVBoxLayout>
+
+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"
similarity index 54%
rename from src/settings/general/behaviorsettingspage.h
rename to src/settings/viewmodes/generalviewsettingspage.h
index ba8ce6384343e90d3f9ec82750f71cc72d71256c..47838b9394092678d7ceaee92ce377700066bdd0 100644 (file)
@@ -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 <qradiobutton.h>
 
 #include <QUrl>
 
@@ -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
index 0d4d4277bb133d6d822765bd9d7502fb35de0214..8e101c3d2a2a038f0537d778af979bbb9600d1c8 100644 (file)
@@ -7,14 +7,14 @@
 #include "viewsettingspage.h"
 
 #include "contentdisplaytab.h"
+#include "generalviewsettingspage.h"
 #include "viewsettingstab.h"
-
 #include <KLocalizedString>
 
 #include <QTabWidget>
 #include <QVBoxLayout>
 
-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,
index e52f6b2c09196c9b72fb0ddd676857a9b57d056c..76743252b6ce86931366d4c2be9abac54b385de2 100644 (file)
@@ -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() */