]> cloud.milkyroute.net Git - dolphin.git/blob - src/settings/viewmodes/contentdisplaytab.cpp
Dolphin settings revamp
[dolphin.git] / src / settings / viewmodes / contentdisplaytab.cpp
1 /*
2 * SPDX-FileCopyrightText: 2023 Méven Car <meven@kde.org>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
7 #include "contentdisplaytab.h"
8 #include "dolphin_contentdisplaysettings.h"
9 #include "dolphin_generalsettings.h"
10
11 #include <KFormat>
12 #include <KLocalizedString>
13
14 #include <QButtonGroup>
15 #include <QFormLayout>
16 #include <QHBoxLayout>
17 #include <QRadioButton>
18 #include <QSpinBox>
19
20 ContentDisplayTab::ContentDisplayTab(QWidget *parent)
21 : SettingsPageBase(parent)
22 , m_naturalSorting(nullptr)
23 , m_caseSensitiveSorting(nullptr)
24 , m_caseInsensitiveSorting(nullptr)
25 , m_numberOfItems(nullptr)
26 , m_sizeOfContents(nullptr)
27 , m_recursiveDirectorySizeLimit(nullptr)
28 , m_useRelatetiveDates(nullptr)
29 , m_useShortDates(nullptr)
30 , m_useSymbolicPermissions(nullptr)
31 , m_useNumericPermissions(nullptr)
32 , m_useCombinedPermissions(nullptr)
33 {
34 QFormLayout *topLayout = new QFormLayout(this);
35
36 // Sorting Order
37 m_naturalSorting = new QRadioButton(i18nc("option:radio", "Natural"));
38 m_caseInsensitiveSorting = new QRadioButton(i18nc("option:radio", "Alphabetical, case insensitive"));
39 m_caseSensitiveSorting = new QRadioButton(i18nc("option:radio", "Alphabetical, case sensitive"));
40
41 QButtonGroup *sortingOrderGroup = new QButtonGroup(this);
42 sortingOrderGroup->addButton(m_naturalSorting);
43 sortingOrderGroup->addButton(m_caseInsensitiveSorting);
44 sortingOrderGroup->addButton(m_caseSensitiveSorting);
45 topLayout->addRow(i18nc("@title:group", "Sorting mode: "), m_naturalSorting);
46 topLayout->addRow(QString(), m_caseInsensitiveSorting);
47 topLayout->addRow(QString(), m_caseSensitiveSorting);
48
49 #ifndef Q_OS_WIN
50 // Sorting properties
51 m_numberOfItems = new QRadioButton(i18nc("option:radio", "Number of items"));
52 m_sizeOfContents = new QRadioButton(i18nc("option:radio", "Size of contents, up to "));
53
54 QButtonGroup *sortingModeGroup = new QButtonGroup(this);
55 sortingModeGroup->addButton(m_numberOfItems);
56 sortingModeGroup->addButton(m_sizeOfContents);
57
58 m_recursiveDirectorySizeLimit = new QSpinBox();
59 connect(m_recursiveDirectorySizeLimit, &QSpinBox::valueChanged, this, [this](int value) {
60 m_recursiveDirectorySizeLimit->setSuffix(i18np(" level deep", " levels deep", value));
61 });
62 m_recursiveDirectorySizeLimit->setRange(1, 20);
63 m_recursiveDirectorySizeLimit->setSingleStep(1);
64
65 QHBoxLayout *contentsSizeLayout = new QHBoxLayout();
66 contentsSizeLayout->addWidget(m_sizeOfContents);
67 contentsSizeLayout->addWidget(m_recursiveDirectorySizeLimit);
68
69 topLayout->addRow(i18nc("@title:group", "Folder size displays:"), m_numberOfItems);
70 topLayout->addRow(QString(), contentsSizeLayout);
71 #endif
72
73 QDateTime thirtyMinutesAgo = QDateTime::currentDateTime().addSecs(-30 * 60);
74 QLocale local;
75 KFormat formatter(local);
76
77 m_useRelatetiveDates = new QRadioButton(
78 i18nc("option:radio as in relative date", "Relative (e.g. '%1')", formatter.formatRelativeDateTime(thirtyMinutesAgo, QLocale::ShortFormat)));
79 m_useShortDates =
80 new QRadioButton(i18nc("option:radio as in absolute date", "Absolute (e.g. '%1')", local.toString(thirtyMinutesAgo, QLocale::ShortFormat)));
81
82 QButtonGroup *dateFormatGroup = new QButtonGroup(this);
83 dateFormatGroup->addButton(m_useRelatetiveDates);
84 dateFormatGroup->addButton(m_useShortDates);
85
86 topLayout->addRow(i18nc("@title:group", "Date style:"), m_useRelatetiveDates);
87 topLayout->addRow(QString(), m_useShortDates);
88
89 m_useSymbolicPermissions = new QRadioButton(i18nc("option:radio as symbolic style ", "Symbolic (e.g. 'drwxr-xr-x')"));
90 m_useNumericPermissions = new QRadioButton(i18nc("option:radio as numeric style", "Numeric (Octal) (e.g. '755')"));
91 m_useCombinedPermissions = new QRadioButton(i18nc("option:radio as combined style", "Combined (e.g. 'drwxr-xr-x (755)')"));
92
93 topLayout->addRow(i18nc("@title:group", "Permissions style:"), m_useSymbolicPermissions);
94 topLayout->addRow(QString(), m_useNumericPermissions);
95 topLayout->addRow(QString(), m_useCombinedPermissions);
96
97 QButtonGroup *permissionsFormatGroup = new QButtonGroup(this);
98 permissionsFormatGroup->addButton(m_useSymbolicPermissions);
99 permissionsFormatGroup->addButton(m_useNumericPermissions);
100 permissionsFormatGroup->addButton(m_useCombinedPermissions);
101
102 #ifndef Q_OS_WIN
103 connect(m_recursiveDirectorySizeLimit, &QSpinBox::valueChanged, this, &SettingsPageBase::changed);
104 connect(m_numberOfItems, &QRadioButton::toggled, this, &SettingsPageBase::changed);
105 connect(m_sizeOfContents, &QRadioButton::toggled, this, [=]() {
106 m_recursiveDirectorySizeLimit->setEnabled(m_sizeOfContents->isChecked());
107 });
108 #endif
109
110 connect(m_useRelatetiveDates, &QRadioButton::toggled, this, &SettingsPageBase::changed);
111 connect(m_useShortDates, &QRadioButton::toggled, this, &SettingsPageBase::changed);
112 connect(m_useSymbolicPermissions, &QRadioButton::toggled, this, &SettingsPageBase::changed);
113 connect(m_useNumericPermissions, &QRadioButton::toggled, this, &SettingsPageBase::changed);
114 connect(m_useCombinedPermissions, &QRadioButton::toggled, this, &SettingsPageBase::changed);
115 connect(m_naturalSorting, &QRadioButton::toggled, this, &SettingsPageBase::changed);
116 connect(m_caseInsensitiveSorting, &QRadioButton::toggled, this, &SettingsPageBase::changed);
117 connect(m_caseSensitiveSorting, &QRadioButton::toggled, this, &SettingsPageBase::changed);
118
119 loadSettings();
120 }
121
122 void ContentDisplayTab::applySettings()
123 {
124 auto settings = ContentDisplaySettings::self();
125 #ifndef Q_OS_WIN
126 settings->setDirectorySizeCount(m_numberOfItems->isChecked());
127 settings->setRecursiveDirectorySizeLimit(m_recursiveDirectorySizeLimit->value());
128 #endif
129 setSortingChoiceValue();
130 settings->setUseShortRelativeDates(m_useRelatetiveDates->isChecked());
131
132 if (m_useSymbolicPermissions->isChecked()) {
133 settings->setUsePermissionsFormat(ContentDisplaySettings::EnumUsePermissionsFormat::SymbolicFormat);
134 } else if (m_useNumericPermissions->isChecked()) {
135 settings->setUsePermissionsFormat(ContentDisplaySettings::EnumUsePermissionsFormat::NumericFormat);
136 } else if (m_useCombinedPermissions->isChecked()) {
137 settings->setUsePermissionsFormat(ContentDisplaySettings::EnumUsePermissionsFormat::CombinedFormat);
138 }
139 settings->save();
140 }
141
142 void ContentDisplayTab::loadSettings()
143 {
144 auto settings = ContentDisplaySettings::self();
145 #ifndef Q_OS_WIN
146 if (settings->directorySizeCount()) {
147 m_numberOfItems->setChecked(true);
148 m_recursiveDirectorySizeLimit->setEnabled(false);
149 } else {
150 m_sizeOfContents->setChecked(true);
151 m_recursiveDirectorySizeLimit->setEnabled(true);
152 }
153 m_recursiveDirectorySizeLimit->setValue(settings->recursiveDirectorySizeLimit());
154 #endif
155 m_useRelatetiveDates->setChecked(settings->useShortRelativeDates());
156 m_useShortDates->setChecked(!settings->useShortRelativeDates());
157 m_useSymbolicPermissions->setChecked(settings->usePermissionsFormat() == ContentDisplaySettings::EnumUsePermissionsFormat::SymbolicFormat);
158 m_useNumericPermissions->setChecked(settings->usePermissionsFormat() == ContentDisplaySettings::EnumUsePermissionsFormat::NumericFormat);
159 m_useCombinedPermissions->setChecked(settings->usePermissionsFormat() == ContentDisplaySettings::EnumUsePermissionsFormat::CombinedFormat);
160 loadSortingChoiceSettings();
161 }
162
163 void ContentDisplayTab::setSortingChoiceValue()
164 {
165 auto settings = GeneralSettings::self();
166 using Choice = GeneralSettings::EnumSortingChoice;
167 if (m_naturalSorting->isChecked()) {
168 settings->setSortingChoice(Choice::NaturalSorting);
169 } else if (m_caseInsensitiveSorting->isChecked()) {
170 settings->setSortingChoice(Choice::CaseInsensitiveSorting);
171 } else if (m_caseSensitiveSorting->isChecked()) {
172 settings->setSortingChoice(Choice::CaseSensitiveSorting);
173 }
174 }
175
176 void ContentDisplayTab::loadSortingChoiceSettings()
177 {
178 using Choice = GeneralSettings::EnumSortingChoice;
179 switch (GeneralSettings::sortingChoice()) {
180 case Choice::NaturalSorting:
181 m_naturalSorting->setChecked(true);
182 break;
183 case Choice::CaseInsensitiveSorting:
184 m_caseInsensitiveSorting->setChecked(true);
185 break;
186 case Choice::CaseSensitiveSorting:
187 m_caseSensitiveSorting->setChecked(true);
188 break;
189 default:
190 Q_UNREACHABLE();
191 }
192 }
193
194 void ContentDisplayTab::restoreDefaults()
195 {
196 auto settings = ContentDisplaySettings::self();
197 settings->useDefaults(true);
198 loadSettings();
199 settings->useDefaults(false);
200 }
201
202 #include "moc_contentdisplaytab.cpp"