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
);
61 topLayout
->addItem(new QSpacerItem(0, Dolphin::VERTICAL_SPACER_HEIGHT
, QSizePolicy::Fixed
, QSizePolicy::Fixed
));
65 m_showToolTips
= new QCheckBox(i18nc("@option:check", "Show tooltips"));
66 topLayout
->addRow(i18nc("@title:group", "Miscellaneous: "), m_showToolTips
);
69 // 'Show selection marker'
70 m_showSelectionToggle
= new QCheckBox(i18nc("@option:check", "Show selection marker"));
72 topLayout
->addRow(QString(), m_showSelectionToggle
);
74 topLayout
->addRow(i18nc("@title:group", "Miscellaneous: "), m_showSelectionToggle
);
77 // 'Inline renaming of items'
78 m_renameInline
= new QCheckBox(i18nc("option:check", "Rename inline"));
79 topLayout
->addRow(QString(), m_renameInline
);
81 // 'Switch between panes of split views with tab key'
82 m_useTabForSplitViewSwitch
= new QCheckBox(i18nc("option:check", "Switch between split views panes with tab key"));
83 topLayout
->addRow(QString(), m_useTabForSplitViewSwitch
);
85 // 'Close active pane when turning off split view'
86 m_closeActiveSplitView
= new QCheckBox(i18nc("option:check", "Turning off split view closes active pane"));
87 topLayout
->addRow(QString(), m_closeActiveSplitView
);
88 m_closeActiveSplitView
->setToolTip(i18n("When deactivated, turning off split view will close the inactive pane"));
92 connect(m_localViewProps
, &QRadioButton::toggled
, this, &BehaviorSettingsPage::changed
);
93 connect(m_globalViewProps
, &QRadioButton::toggled
, this, &BehaviorSettingsPage::changed
);
95 connect(m_showToolTips
, &QCheckBox::toggled
, this, &BehaviorSettingsPage::changed
);
97 connect(m_showSelectionToggle
, &QCheckBox::toggled
, this, &BehaviorSettingsPage::changed
);
98 connect(m_naturalSorting
, &QRadioButton::toggled
, this, &BehaviorSettingsPage::changed
);
99 connect(m_caseInsensitiveSorting
, &QRadioButton::toggled
, this, &BehaviorSettingsPage::changed
);
100 connect(m_caseSensitiveSorting
, &QRadioButton::toggled
, this, &BehaviorSettingsPage::changed
);
101 connect(m_renameInline
, &QCheckBox::toggled
, this, &BehaviorSettingsPage::changed
);
102 connect(m_useTabForSplitViewSwitch
, &QCheckBox::toggled
, this, &BehaviorSettingsPage::changed
);
103 connect(m_closeActiveSplitView
, &QCheckBox::toggled
, this, &BehaviorSettingsPage::changed
);
106 BehaviorSettingsPage::~BehaviorSettingsPage()
110 void BehaviorSettingsPage::applySettings()
112 GeneralSettings
*settings
= GeneralSettings::self();
113 ViewProperties
props(m_url
); // read current view properties
115 const bool useGlobalViewProps
= m_globalViewProps
->isChecked();
116 settings
->setGlobalViewProps(useGlobalViewProps
);
118 settings
->setShowToolTips(m_showToolTips
->isChecked());
120 settings
->setShowSelectionToggle(m_showSelectionToggle
->isChecked());
121 setSortingChoiceValue(settings
);
122 settings
->setRenameInline(m_renameInline
->isChecked());
123 settings
->setUseTabForSwitchingSplitView(m_useTabForSplitViewSwitch
->isChecked());
124 settings
->setCloseActiveSplitView(m_closeActiveSplitView
->isChecked());
127 if (useGlobalViewProps
) {
128 // Remember the global view properties by applying the current view properties.
129 // It is important that GeneralSettings::globalViewProps() is set before
130 // the class ViewProperties is used, as ViewProperties uses this setting
131 // to find the destination folder for storing the view properties.
132 ViewProperties
globalProps(m_url
);
133 globalProps
.setDirProperties(props
);
137 void BehaviorSettingsPage::restoreDefaults()
139 GeneralSettings
*settings
= GeneralSettings::self();
140 settings
->useDefaults(true);
142 settings
->useDefaults(false);
145 void BehaviorSettingsPage::loadSettings()
147 const bool useGlobalViewProps
= GeneralSettings::globalViewProps();
148 m_localViewProps
->setChecked(!useGlobalViewProps
);
149 m_globalViewProps
->setChecked(useGlobalViewProps
);
152 m_showToolTips
->setChecked(GeneralSettings::showToolTips());
154 m_showSelectionToggle
->setChecked(GeneralSettings::showSelectionToggle());
155 m_renameInline
->setChecked(GeneralSettings::renameInline());
156 m_useTabForSplitViewSwitch
->setChecked(GeneralSettings::useTabForSwitchingSplitView());
157 m_closeActiveSplitView
->setChecked(GeneralSettings::closeActiveSplitView());
159 loadSortingChoiceSettings();
162 void BehaviorSettingsPage::setSortingChoiceValue(GeneralSettings
*settings
)
164 using Choice
= GeneralSettings::EnumSortingChoice
;
165 if (m_naturalSorting
->isChecked()) {
166 settings
->setSortingChoice(Choice::NaturalSorting
);
167 } else if (m_caseInsensitiveSorting
->isChecked()) {
168 settings
->setSortingChoice(Choice::CaseInsensitiveSorting
);
169 } else if (m_caseSensitiveSorting
->isChecked()) {
170 settings
->setSortingChoice(Choice::CaseSensitiveSorting
);
174 void BehaviorSettingsPage::loadSortingChoiceSettings()
176 using Choice
= GeneralSettings::EnumSortingChoice
;
177 switch (GeneralSettings::sortingChoice()) {
178 case Choice::NaturalSorting
:
179 m_naturalSorting
->setChecked(true);
181 case Choice::CaseInsensitiveSorting
:
182 m_caseInsensitiveSorting
->setChecked(true);
184 case Choice::CaseSensitiveSorting
:
185 m_caseSensitiveSorting
->setChecked(true);