]> cloud.milkyroute.net Git - dolphin.git/blob - src/settings/viewmodes/contentdisplaytab.cpp
Merge branch 'master' into kf6
[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
10 #include <KFormat>
11 #include <KLocalizedString>
12
13 #include <QButtonGroup>
14 #include <QFormLayout>
15 #include <QHBoxLayout>
16 #include <QRadioButton>
17 #include <QSpinBox>
18
19 ContentDisplayTab::ContentDisplayTab(QWidget *parent)
20 : SettingsPageBase(parent)
21 , m_numberOfItems(nullptr)
22 , m_sizeOfContents(nullptr)
23 , m_recursiveDirectorySizeLimit(nullptr)
24 , m_useRelatetiveDates(nullptr)
25 , m_useShortDates(nullptr)
26 , m_useSymbolicPermissions(nullptr)
27 , m_useNumericPermissions(nullptr)
28 , m_useCombinedPermissions(nullptr)
29 {
30 QFormLayout *topLayout = new QFormLayout(this);
31
32 #ifndef Q_OS_WIN
33 // Sorting properties
34 m_numberOfItems = new QRadioButton(i18nc("option:radio", "Number of items"));
35 m_sizeOfContents = new QRadioButton(i18nc("option:radio", "Size of contents, up to "));
36
37 QButtonGroup *sortingModeGroup = new QButtonGroup(this);
38 sortingModeGroup->addButton(m_numberOfItems);
39 sortingModeGroup->addButton(m_sizeOfContents);
40
41 m_recursiveDirectorySizeLimit = new QSpinBox();
42 connect(m_recursiveDirectorySizeLimit, &QSpinBox::valueChanged, this, [this](int value) {
43 m_recursiveDirectorySizeLimit->setSuffix(i18np(" level deep", " levels deep", value));
44 });
45 m_recursiveDirectorySizeLimit->setRange(1, 20);
46 m_recursiveDirectorySizeLimit->setSingleStep(1);
47
48 QHBoxLayout *contentsSizeLayout = new QHBoxLayout();
49 contentsSizeLayout->addWidget(m_sizeOfContents);
50 contentsSizeLayout->addWidget(m_recursiveDirectorySizeLimit);
51
52 topLayout->addRow(i18nc("@title:group", "Folder size displays:"), m_numberOfItems);
53 topLayout->addRow(QString(), contentsSizeLayout);
54 #endif
55
56 QDateTime thirtyMinutesAgo = QDateTime::currentDateTime().addSecs(-30 * 60);
57 QLocale local;
58 KFormat formatter(local);
59
60 m_useRelatetiveDates = new QRadioButton(
61 i18nc("option:radio as in relative date", "Relative (e.g. '%1')", formatter.formatRelativeDateTime(thirtyMinutesAgo, QLocale::ShortFormat)));
62 m_useShortDates =
63 new QRadioButton(i18nc("option:radio as in absolute date", "Absolute (e.g. '%1')", local.toString(thirtyMinutesAgo, QLocale::ShortFormat)));
64
65 QButtonGroup *dateFormatGroup = new QButtonGroup(this);
66 dateFormatGroup->addButton(m_useRelatetiveDates);
67 dateFormatGroup->addButton(m_useShortDates);
68
69 topLayout->addRow(i18nc("@title:group", "Date style:"), m_useRelatetiveDates);
70 topLayout->addRow(QString(), m_useShortDates);
71
72 m_useSymbolicPermissions = new QRadioButton(i18nc("option:radio as symbolic style ", "Symbolic (e.g. 'drwxr-xr-x')"));
73 m_useNumericPermissions = new QRadioButton(i18nc("option:radio as numeric style", "Numeric (Octal) (e.g. '755')"));
74 m_useCombinedPermissions = new QRadioButton(i18nc("option:radio as combined style", "Combined (e.g. 'drwxr-xr-x (755)')"));
75
76 topLayout->addRow(i18nc("@title:group", "Permissions style:"), m_useSymbolicPermissions);
77 topLayout->addRow(QString(), m_useNumericPermissions);
78 topLayout->addRow(QString(), m_useCombinedPermissions);
79
80 QButtonGroup *permissionsFormatGroup = new QButtonGroup(this);
81 permissionsFormatGroup->addButton(m_useSymbolicPermissions);
82 permissionsFormatGroup->addButton(m_useNumericPermissions);
83 permissionsFormatGroup->addButton(m_useCombinedPermissions);
84
85 #ifndef Q_OS_WIN
86 connect(m_recursiveDirectorySizeLimit, &QSpinBox::valueChanged, this, &SettingsPageBase::changed);
87 connect(m_numberOfItems, &QRadioButton::toggled, this, &SettingsPageBase::changed);
88 connect(m_sizeOfContents, &QRadioButton::toggled, this, [=]() {
89 m_recursiveDirectorySizeLimit->setEnabled(m_sizeOfContents->isChecked());
90 });
91 #endif
92
93 connect(m_useRelatetiveDates, &QRadioButton::toggled, this, &SettingsPageBase::changed);
94 connect(m_useShortDates, &QRadioButton::toggled, this, &SettingsPageBase::changed);
95 connect(m_useSymbolicPermissions, &QRadioButton::toggled, this, &SettingsPageBase::changed);
96 connect(m_useNumericPermissions, &QRadioButton::toggled, this, &SettingsPageBase::changed);
97 connect(m_useCombinedPermissions, &QRadioButton::toggled, this, &SettingsPageBase::changed);
98
99 loadSettings();
100 }
101
102 void ContentDisplayTab::applySettings()
103 {
104 auto settings = ContentDisplaySettings::self();
105 #ifndef Q_OS_WIN
106 settings->setDirectorySizeCount(m_numberOfItems->isChecked());
107 settings->setRecursiveDirectorySizeLimit(m_recursiveDirectorySizeLimit->value());
108 #endif
109
110 settings->setUseShortRelativeDates(m_useRelatetiveDates->isChecked());
111
112 if (m_useSymbolicPermissions->isChecked()) {
113 settings->setUsePermissionsFormat(ContentDisplaySettings::EnumUsePermissionsFormat::SymbolicFormat);
114 } else if (m_useNumericPermissions->isChecked()) {
115 settings->setUsePermissionsFormat(ContentDisplaySettings::EnumUsePermissionsFormat::NumericFormat);
116 } else if (m_useCombinedPermissions->isChecked()) {
117 settings->setUsePermissionsFormat(ContentDisplaySettings::EnumUsePermissionsFormat::CombinedFormat);
118 }
119 settings->save();
120 }
121
122 void ContentDisplayTab::loadSettings()
123 {
124 auto settings = ContentDisplaySettings::self();
125 #ifndef Q_OS_WIN
126 if (settings->directorySizeCount()) {
127 m_numberOfItems->setChecked(true);
128 m_recursiveDirectorySizeLimit->setEnabled(false);
129 } else {
130 m_sizeOfContents->setChecked(true);
131 m_recursiveDirectorySizeLimit->setEnabled(true);
132 }
133 m_recursiveDirectorySizeLimit->setValue(settings->recursiveDirectorySizeLimit());
134 #endif
135 m_useRelatetiveDates->setChecked(settings->useShortRelativeDates());
136 m_useShortDates->setChecked(!settings->useShortRelativeDates());
137 m_useSymbolicPermissions->setChecked(settings->usePermissionsFormat() == ContentDisplaySettings::EnumUsePermissionsFormat::SymbolicFormat);
138 m_useNumericPermissions->setChecked(settings->usePermissionsFormat() == ContentDisplaySettings::EnumUsePermissionsFormat::NumericFormat);
139 m_useCombinedPermissions->setChecked(settings->usePermissionsFormat() == ContentDisplaySettings::EnumUsePermissionsFormat::CombinedFormat);
140 }
141
142 void ContentDisplayTab::restoreDefaults()
143 {
144 auto settings = ContentDisplaySettings::self();
145 settings->useDefaults(true);
146 loadSettings();
147 settings->useDefaults(false);
148 }
149
150 #include "moc_contentdisplaytab.cpp"