File indexing completed on 2024-05-12 17:18:54
0001 /* 0002 * SPDX-FileCopyrightText: 2023 Méven Car <meven@kde.org> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "contentdisplaytab.h" 0008 #include "dolphin_contentdisplaysettings.h" 0009 #include "dolphin_generalsettings.h" 0010 0011 #include <KFormat> 0012 #include <KLocalizedString> 0013 0014 #include <QButtonGroup> 0015 #include <QFormLayout> 0016 #include <QHBoxLayout> 0017 #include <QRadioButton> 0018 #include <QSpinBox> 0019 0020 ContentDisplayTab::ContentDisplayTab(QWidget *parent) 0021 : SettingsPageBase(parent) 0022 , m_naturalSorting(nullptr) 0023 , m_caseSensitiveSorting(nullptr) 0024 , m_caseInsensitiveSorting(nullptr) 0025 , m_numberOfItems(nullptr) 0026 , m_sizeOfContents(nullptr) 0027 , m_recursiveDirectorySizeLimit(nullptr) 0028 , m_useRelatetiveDates(nullptr) 0029 , m_useShortDates(nullptr) 0030 , m_useSymbolicPermissions(nullptr) 0031 , m_useNumericPermissions(nullptr) 0032 , m_useCombinedPermissions(nullptr) 0033 { 0034 QFormLayout *topLayout = new QFormLayout(this); 0035 0036 // Sorting Order 0037 m_naturalSorting = new QRadioButton(i18nc("option:radio", "Natural")); 0038 m_caseInsensitiveSorting = new QRadioButton(i18nc("option:radio", "Alphabetical, case insensitive")); 0039 m_caseSensitiveSorting = new QRadioButton(i18nc("option:radio", "Alphabetical, case sensitive")); 0040 0041 QButtonGroup *sortingOrderGroup = new QButtonGroup(this); 0042 sortingOrderGroup->addButton(m_naturalSorting); 0043 sortingOrderGroup->addButton(m_caseInsensitiveSorting); 0044 sortingOrderGroup->addButton(m_caseSensitiveSorting); 0045 topLayout->addRow(i18nc("@title:group", "Sorting mode: "), m_naturalSorting); 0046 topLayout->addRow(QString(), m_caseInsensitiveSorting); 0047 topLayout->addRow(QString(), m_caseSensitiveSorting); 0048 0049 #ifndef Q_OS_WIN 0050 // Sorting properties 0051 m_numberOfItems = new QRadioButton(i18nc("option:radio", "Number of items")); 0052 m_sizeOfContents = new QRadioButton(i18nc("option:radio", "Size of contents, up to ")); 0053 0054 QButtonGroup *sortingModeGroup = new QButtonGroup(this); 0055 sortingModeGroup->addButton(m_numberOfItems); 0056 sortingModeGroup->addButton(m_sizeOfContents); 0057 0058 m_recursiveDirectorySizeLimit = new QSpinBox(); 0059 connect(m_recursiveDirectorySizeLimit, &QSpinBox::valueChanged, this, [this](int value) { 0060 m_recursiveDirectorySizeLimit->setSuffix(i18np(" level deep", " levels deep", value)); 0061 }); 0062 m_recursiveDirectorySizeLimit->setRange(1, 20); 0063 m_recursiveDirectorySizeLimit->setSingleStep(1); 0064 0065 QHBoxLayout *contentsSizeLayout = new QHBoxLayout(); 0066 contentsSizeLayout->addWidget(m_sizeOfContents); 0067 contentsSizeLayout->addWidget(m_recursiveDirectorySizeLimit); 0068 0069 topLayout->addRow(i18nc("@title:group", "Folder size displays:"), m_numberOfItems); 0070 topLayout->addRow(QString(), contentsSizeLayout); 0071 #endif 0072 0073 QDateTime thirtyMinutesAgo = QDateTime::currentDateTime().addSecs(-30 * 60); 0074 QLocale local; 0075 KFormat formatter(local); 0076 0077 m_useRelatetiveDates = new QRadioButton( 0078 i18nc("option:radio as in relative date", "Relative (e.g. '%1')", formatter.formatRelativeDateTime(thirtyMinutesAgo, QLocale::ShortFormat))); 0079 m_useShortDates = 0080 new QRadioButton(i18nc("option:radio as in absolute date", "Absolute (e.g. '%1')", local.toString(thirtyMinutesAgo, QLocale::ShortFormat))); 0081 0082 QButtonGroup *dateFormatGroup = new QButtonGroup(this); 0083 dateFormatGroup->addButton(m_useRelatetiveDates); 0084 dateFormatGroup->addButton(m_useShortDates); 0085 0086 topLayout->addRow(i18nc("@title:group", "Date style:"), m_useRelatetiveDates); 0087 topLayout->addRow(QString(), m_useShortDates); 0088 0089 m_useSymbolicPermissions = new QRadioButton(i18nc("option:radio as symbolic style ", "Symbolic (e.g. 'drwxr-xr-x')")); 0090 m_useNumericPermissions = new QRadioButton(i18nc("option:radio as numeric style", "Numeric (Octal) (e.g. '755')")); 0091 m_useCombinedPermissions = new QRadioButton(i18nc("option:radio as combined style", "Combined (e.g. 'drwxr-xr-x (755)')")); 0092 0093 topLayout->addRow(i18nc("@title:group", "Permissions style:"), m_useSymbolicPermissions); 0094 topLayout->addRow(QString(), m_useNumericPermissions); 0095 topLayout->addRow(QString(), m_useCombinedPermissions); 0096 0097 QButtonGroup *permissionsFormatGroup = new QButtonGroup(this); 0098 permissionsFormatGroup->addButton(m_useSymbolicPermissions); 0099 permissionsFormatGroup->addButton(m_useNumericPermissions); 0100 permissionsFormatGroup->addButton(m_useCombinedPermissions); 0101 0102 #ifndef Q_OS_WIN 0103 connect(m_recursiveDirectorySizeLimit, &QSpinBox::valueChanged, this, &SettingsPageBase::changed); 0104 connect(m_numberOfItems, &QRadioButton::toggled, this, &SettingsPageBase::changed); 0105 connect(m_sizeOfContents, &QRadioButton::toggled, this, [=]() { 0106 m_recursiveDirectorySizeLimit->setEnabled(m_sizeOfContents->isChecked()); 0107 }); 0108 #endif 0109 0110 connect(m_useRelatetiveDates, &QRadioButton::toggled, this, &SettingsPageBase::changed); 0111 connect(m_useShortDates, &QRadioButton::toggled, this, &SettingsPageBase::changed); 0112 connect(m_useSymbolicPermissions, &QRadioButton::toggled, this, &SettingsPageBase::changed); 0113 connect(m_useNumericPermissions, &QRadioButton::toggled, this, &SettingsPageBase::changed); 0114 connect(m_useCombinedPermissions, &QRadioButton::toggled, this, &SettingsPageBase::changed); 0115 connect(m_naturalSorting, &QRadioButton::toggled, this, &SettingsPageBase::changed); 0116 connect(m_caseInsensitiveSorting, &QRadioButton::toggled, this, &SettingsPageBase::changed); 0117 connect(m_caseSensitiveSorting, &QRadioButton::toggled, this, &SettingsPageBase::changed); 0118 0119 loadSettings(); 0120 } 0121 0122 void ContentDisplayTab::applySettings() 0123 { 0124 auto settings = ContentDisplaySettings::self(); 0125 #ifndef Q_OS_WIN 0126 settings->setDirectorySizeCount(m_numberOfItems->isChecked()); 0127 settings->setRecursiveDirectorySizeLimit(m_recursiveDirectorySizeLimit->value()); 0128 #endif 0129 setSortingChoiceValue(); 0130 settings->setUseShortRelativeDates(m_useRelatetiveDates->isChecked()); 0131 0132 if (m_useSymbolicPermissions->isChecked()) { 0133 settings->setUsePermissionsFormat(ContentDisplaySettings::EnumUsePermissionsFormat::SymbolicFormat); 0134 } else if (m_useNumericPermissions->isChecked()) { 0135 settings->setUsePermissionsFormat(ContentDisplaySettings::EnumUsePermissionsFormat::NumericFormat); 0136 } else if (m_useCombinedPermissions->isChecked()) { 0137 settings->setUsePermissionsFormat(ContentDisplaySettings::EnumUsePermissionsFormat::CombinedFormat); 0138 } 0139 settings->save(); 0140 } 0141 0142 void ContentDisplayTab::loadSettings() 0143 { 0144 auto settings = ContentDisplaySettings::self(); 0145 #ifndef Q_OS_WIN 0146 if (settings->directorySizeCount()) { 0147 m_numberOfItems->setChecked(true); 0148 m_recursiveDirectorySizeLimit->setEnabled(false); 0149 } else { 0150 m_sizeOfContents->setChecked(true); 0151 m_recursiveDirectorySizeLimit->setEnabled(true); 0152 } 0153 m_recursiveDirectorySizeLimit->setValue(settings->recursiveDirectorySizeLimit()); 0154 #endif 0155 m_useRelatetiveDates->setChecked(settings->useShortRelativeDates()); 0156 m_useShortDates->setChecked(!settings->useShortRelativeDates()); 0157 m_useSymbolicPermissions->setChecked(settings->usePermissionsFormat() == ContentDisplaySettings::EnumUsePermissionsFormat::SymbolicFormat); 0158 m_useNumericPermissions->setChecked(settings->usePermissionsFormat() == ContentDisplaySettings::EnumUsePermissionsFormat::NumericFormat); 0159 m_useCombinedPermissions->setChecked(settings->usePermissionsFormat() == ContentDisplaySettings::EnumUsePermissionsFormat::CombinedFormat); 0160 loadSortingChoiceSettings(); 0161 } 0162 0163 void ContentDisplayTab::setSortingChoiceValue() 0164 { 0165 auto settings = GeneralSettings::self(); 0166 using Choice = GeneralSettings::EnumSortingChoice; 0167 if (m_naturalSorting->isChecked()) { 0168 settings->setSortingChoice(Choice::NaturalSorting); 0169 } else if (m_caseInsensitiveSorting->isChecked()) { 0170 settings->setSortingChoice(Choice::CaseInsensitiveSorting); 0171 } else if (m_caseSensitiveSorting->isChecked()) { 0172 settings->setSortingChoice(Choice::CaseSensitiveSorting); 0173 } 0174 } 0175 0176 void ContentDisplayTab::loadSortingChoiceSettings() 0177 { 0178 using Choice = GeneralSettings::EnumSortingChoice; 0179 switch (GeneralSettings::sortingChoice()) { 0180 case Choice::NaturalSorting: 0181 m_naturalSorting->setChecked(true); 0182 break; 0183 case Choice::CaseInsensitiveSorting: 0184 m_caseInsensitiveSorting->setChecked(true); 0185 break; 0186 case Choice::CaseSensitiveSorting: 0187 m_caseSensitiveSorting->setChecked(true); 0188 break; 0189 default: 0190 Q_UNREACHABLE(); 0191 } 0192 } 0193 0194 void ContentDisplayTab::restoreDefaults() 0195 { 0196 auto settings = ContentDisplaySettings::self(); 0197 settings->useDefaults(true); 0198 loadSettings(); 0199 settings->useDefaults(false); 0200 } 0201 0202 #include "moc_contentdisplaytab.cpp"