2 * SPDX-FileCopyrightText: 2006 Peter Penz (peter.penz@gmx.at) and Patrice Tremblay
4 * SPDX-License-Identifier: GPL-2.0-or-later
7 #include "behaviorsettingspage.h"
10 #include "views/viewproperties.h"
12 #include <KLocalizedString>
14 #include <QButtonGroup>
16 #include <QFormLayout>
17 #include <QRadioButton>
18 #include <QSpacerItem>
20 BehaviorSettingsPage::BehaviorSettingsPage(const QUrl
&url
, QWidget
*parent
)
21 : SettingsPageBase(parent
)
23 , m_localViewProps(nullptr)
24 , m_globalViewProps(nullptr)
25 , m_showToolTips(nullptr)
26 , m_showSelectionToggle(nullptr)
27 , m_naturalSorting(nullptr)
28 , m_caseSensitiveSorting(nullptr)
29 , m_caseInsensitiveSorting(nullptr)
30 , m_renameInline(nullptr)
31 , m_useTabForSplitViewSwitch(nullptr)
33 QFormLayout
*topLayout
= new QFormLayout(this);
36 m_globalViewProps
= new QRadioButton(i18nc("@option:radio", "Use common display style for all folders"));
37 m_localViewProps
= new QRadioButton(i18nc("@option:radio", "Remember display style for each folder"));
38 m_localViewProps
->setToolTip(i18nc("@info", "Dolphin will create a hidden .directory file in each folder you change view properties for."));
40 QButtonGroup
*viewGroup
= new QButtonGroup(this);
41 viewGroup
->addButton(m_globalViewProps
);
42 viewGroup
->addButton(m_localViewProps
);
43 topLayout
->addRow(i18nc("@title:group", "View: "), m_globalViewProps
);
44 topLayout
->addRow(QString(), m_localViewProps
);
46 topLayout
->addItem(new QSpacerItem(0, Dolphin::VERTICAL_SPACER_HEIGHT
, QSizePolicy::Fixed
, QSizePolicy::Fixed
));
49 m_naturalSorting
= new QRadioButton(i18nc("option:radio", "Natural"));
50 m_caseInsensitiveSorting
= new QRadioButton(i18nc("option:radio", "Alphabetical, case insensitive"));
51 m_caseSensitiveSorting
= new QRadioButton(i18nc("option:radio", "Alphabetical, case sensitive"));
53 QButtonGroup
*sortingModeGroup
= new QButtonGroup(this);
54 sortingModeGroup
->addButton(m_naturalSorting
);
55 sortingModeGroup
->addButton(m_caseInsensitiveSorting
);
56 sortingModeGroup
->addButton(m_caseSensitiveSorting
);
57 topLayout
->addRow(i18nc("@title:group", "Sorting mode: "), m_naturalSorting
);
58 topLayout
->addRow(QString(), m_caseInsensitiveSorting
);
59 topLayout
->addRow(QString(), m_caseSensitiveSorting
);
62 topLayout
->addItem(new QSpacerItem(0, Dolphin::VERTICAL_SPACER_HEIGHT
, QSizePolicy::Fixed
, QSizePolicy::Fixed
));
64 // 'Switch between panes of split views with tab key'
65 m_useTabForSplitViewSwitch
= new QCheckBox(i18nc("option:check split view panes", "Switch between panes with Tab key"));
66 topLayout
->addRow(i18nc("@title:group", "Split view: "), m_useTabForSplitViewSwitch
);
68 // 'Close active pane when turning off split view'
69 m_closeActiveSplitView
= new QCheckBox(i18nc("option:check", "Turning off split view closes active pane"));
70 topLayout
->addRow(QString(), m_closeActiveSplitView
);
71 m_closeActiveSplitView
->setToolTip(i18n("When deactivated, turning off split view will close the inactive pane"));
73 topLayout
->addItem(new QSpacerItem(0, Dolphin::VERTICAL_SPACER_HEIGHT
, QSizePolicy::Fixed
, QSizePolicy::Fixed
));
77 m_showToolTips
= new QCheckBox(i18nc("@option:check", "Show tooltips"));
78 topLayout
->addRow(i18nc("@title:group", "Miscellaneous: "), m_showToolTips
);
81 // 'Show selection marker'
82 m_showSelectionToggle
= new QCheckBox(i18nc("@option:check", "Show selection marker"));
84 topLayout
->addRow(QString(), m_showSelectionToggle
);
86 topLayout
->addRow(i18nc("@title:group", "Miscellaneous: "), m_showSelectionToggle
);
89 // 'Inline renaming of items'
90 m_renameInline
= new QCheckBox(i18nc("option:check", "Rename inline"));
91 topLayout
->addRow(QString(), m_renameInline
);
95 connect(m_localViewProps
, &QRadioButton::toggled
, this, &BehaviorSettingsPage::changed
);
96 connect(m_globalViewProps
, &QRadioButton::toggled
, this, &BehaviorSettingsPage::changed
);
98 connect(m_showToolTips
, &QCheckBox::toggled
, this, &BehaviorSettingsPage::changed
);
100 connect(m_showSelectionToggle
, &QCheckBox::toggled
, this, &BehaviorSettingsPage::changed
);
101 connect(m_naturalSorting
, &QRadioButton::toggled
, this, &BehaviorSettingsPage::changed
);
102 connect(m_caseInsensitiveSorting
, &QRadioButton::toggled
, this, &BehaviorSettingsPage::changed
);
103 connect(m_caseSensitiveSorting
, &QRadioButton::toggled
, this, &BehaviorSettingsPage::changed
);
104 connect(m_renameInline
, &QCheckBox::toggled
, this, &BehaviorSettingsPage::changed
);
105 connect(m_useTabForSplitViewSwitch
, &QCheckBox::toggled
, this, &BehaviorSettingsPage::changed
);
106 connect(m_closeActiveSplitView
, &QCheckBox::toggled
, this, &BehaviorSettingsPage::changed
);
109 BehaviorSettingsPage::~BehaviorSettingsPage()
113 void BehaviorSettingsPage::applySettings()
115 GeneralSettings
*settings
= GeneralSettings::self();
116 ViewProperties
props(m_url
); // read current view properties
118 const bool useGlobalViewProps
= m_globalViewProps
->isChecked();
119 settings
->setGlobalViewProps(useGlobalViewProps
);
121 settings
->setShowToolTips(m_showToolTips
->isChecked());
123 settings
->setShowSelectionToggle(m_showSelectionToggle
->isChecked());
124 setSortingChoiceValue(settings
);
125 settings
->setRenameInline(m_renameInline
->isChecked());
126 settings
->setUseTabForSwitchingSplitView(m_useTabForSplitViewSwitch
->isChecked());
127 settings
->setCloseActiveSplitView(m_closeActiveSplitView
->isChecked());
130 if (useGlobalViewProps
) {
131 // Remember the global view properties by applying the current view properties.
132 // It is important that GeneralSettings::globalViewProps() is set before
133 // the class ViewProperties is used, as ViewProperties uses this setting
134 // to find the destination folder for storing the view properties.
135 ViewProperties
globalProps(m_url
);
136 globalProps
.setDirProperties(props
);
140 void BehaviorSettingsPage::restoreDefaults()
142 GeneralSettings
*settings
= GeneralSettings::self();
143 settings
->useDefaults(true);
145 settings
->useDefaults(false);
148 void BehaviorSettingsPage::loadSettings()
150 const bool useGlobalViewProps
= GeneralSettings::globalViewProps();
151 m_localViewProps
->setChecked(!useGlobalViewProps
);
152 m_globalViewProps
->setChecked(useGlobalViewProps
);
155 m_showToolTips
->setChecked(GeneralSettings::showToolTips());
157 m_showSelectionToggle
->setChecked(GeneralSettings::showSelectionToggle());
158 m_renameInline
->setChecked(GeneralSettings::renameInline());
159 m_useTabForSplitViewSwitch
->setChecked(GeneralSettings::useTabForSwitchingSplitView());
160 m_closeActiveSplitView
->setChecked(GeneralSettings::closeActiveSplitView());
162 loadSortingChoiceSettings();
165 void BehaviorSettingsPage::setSortingChoiceValue(GeneralSettings
*settings
)
167 using Choice
= GeneralSettings::EnumSortingChoice
;
168 if (m_naturalSorting
->isChecked()) {
169 settings
->setSortingChoice(Choice::NaturalSorting
);
170 } else if (m_caseInsensitiveSorting
->isChecked()) {
171 settings
->setSortingChoice(Choice::CaseInsensitiveSorting
);
172 } else if (m_caseSensitiveSorting
->isChecked()) {
173 settings
->setSortingChoice(Choice::CaseSensitiveSorting
);
177 void BehaviorSettingsPage::loadSortingChoiceSettings()
179 using Choice
= GeneralSettings::EnumSortingChoice
;
180 switch (GeneralSettings::sortingChoice()) {
181 case Choice::NaturalSorting
:
182 m_naturalSorting
->setChecked(true);
184 case Choice::CaseInsensitiveSorting
:
185 m_caseInsensitiveSorting
->setChecked(true);
187 case Choice::CaseSensitiveSorting
:
188 m_caseSensitiveSorting
->setChecked(true);