File indexing completed on 2024-05-05 05:49:28
0001 /* 0002 SPDX-FileCopyrightText: 2010 Volker Lanz <vl@fidra.de> 0003 SPDX-FileCopyrightText: 2014-2020 Andrius Štikonas <andrius@stikonas.eu> 0004 0005 SPDX-License-Identifier: GPL-3.0-or-later 0006 */ 0007 0008 #include "config/configureoptionsdialog.h" 0009 #include "config/generalpagewidget.h" 0010 #include "config/filesystemcolorspagewidget.h" 0011 #include "config/advancedpagewidget.h" 0012 0013 #include <backend/corebackendmanager.h> 0014 0015 #include <core/operationstack.h> 0016 0017 #include <fs/filesystem.h> 0018 #include <fs/filesystemfactory.h> 0019 0020 #include <util/helpers.h> 0021 #include "util/guihelpers.h" 0022 0023 #include "ui_configurepagefilesystemcolors.h" 0024 0025 #include <KLocalizedString> 0026 #include <KMessageBox> 0027 0028 #include <QtGlobal> 0029 #include <QIcon> 0030 0031 #include <config.h> 0032 0033 ConfigureOptionsDialog::ConfigureOptionsDialog(QWidget* parent, const OperationStack& ostack, const QString& name) : 0034 KConfigDialog(parent, name, Config::self()), 0035 m_GeneralPageWidget(new GeneralPageWidget(this)), 0036 m_FileSystemColorsPageWidget(new FileSystemColorsPageWidget(this)), 0037 m_AdvancedPageWidget(new AdvancedPageWidget(this)), 0038 m_OperationStack(ostack) 0039 { 0040 setFaceType(List); 0041 0042 addPage(&generalPageWidget(), xi18nc("@title:tab general application settings", "General"), QStringLiteral("partitionmanager"), i18n("General Settings")); 0043 0044 connect(&generalPageWidget().comboDefaultFileSystem(), &QComboBox::activated, this, &ConfigureOptionsDialog::onComboDefaultFileSystemActivated); 0045 connect(generalPageWidget().radioButton, &QRadioButton::toggled, this, &ConfigureOptionsDialog::onShredSourceActivated); 0046 0047 addPage(&fileSystemColorsPageWidget(), xi18nc("@title:tab", "File System Colors"), QStringLiteral("preferences-desktop-color"), i18n("File System Color Settings")); 0048 0049 addPage(&advancedPageWidget(), xi18nc("@title:tab advanced application settings", "Advanced"), QStringLiteral("preferences-other"), i18n("Advanced Settings")); 0050 0051 connect(&advancedPageWidget().comboBackend(), &QComboBox::activated, this, &ConfigureOptionsDialog::onComboDefaultFileSystemActivated); 0052 0053 KConfigGroup kcg(KSharedConfig::openConfig(), QStringLiteral("configureOptionsDialogs")); 0054 restoreGeometry(kcg.readEntry<QByteArray>("Geometry", QByteArray())); 0055 } 0056 0057 /** Destroys a ConfigureOptionsDialog instance */ 0058 ConfigureOptionsDialog::~ConfigureOptionsDialog() 0059 { 0060 KConfigGroup kcg(KSharedConfig::openConfig(), QStringLiteral("configureOptionsDialog")); 0061 kcg.writeEntry("Geometry", saveGeometry()); 0062 } 0063 0064 void ConfigureOptionsDialog::updateSettings() 0065 { 0066 KConfigDialog::updateSettings(); 0067 0068 bool changed = false; 0069 0070 if (generalPageWidget().defaultFileSystem() != static_cast<FileSystem::Type>(Config::defaultFileSystem())) { 0071 Config::setDefaultFileSystem(static_cast<int>(generalPageWidget().defaultFileSystem())); 0072 changed = true; 0073 } 0074 0075 if (generalPageWidget().radioButton->isChecked() != (Config::shredSource() == Config::EnumShredSource::random)) { 0076 qDebug() << "updateSettings: " << generalPageWidget().kcfg_shredSource->checkedId(); 0077 Config::setShredSource(generalPageWidget().kcfg_shredSource->checkedId()); 0078 changed = true; 0079 } 0080 0081 if (advancedPageWidget().backend() != Config::backend()) { 0082 Config::setBackend(advancedPageWidget().backend()); 0083 changed = true; 0084 } 0085 0086 if (changed) 0087 Q_EMIT KConfigDialog::settingsChanged(i18n("General Settings")); 0088 } 0089 0090 bool ConfigureOptionsDialog::hasChanged() 0091 { 0092 bool result = KConfigDialog::hasChanged(); 0093 0094 KConfigSkeletonItem* kcItem = Config::self()->findItem(QStringLiteral("defaultFileSystem")); 0095 result = result || !kcItem->isEqual(static_cast<int>(generalPageWidget().defaultFileSystem())); 0096 result = result || (generalPageWidget().kcfg_shredSource->checkedId() != Config::shredSource()); 0097 0098 if (advancedPageWidget().isVisible()) { 0099 kcItem = Config::self()->findItem(QStringLiteral("backend")); 0100 result = result || !kcItem->isEqual(advancedPageWidget().backend()); 0101 } 0102 0103 return result; 0104 } 0105 0106 bool ConfigureOptionsDialog::isDefault() 0107 { 0108 bool result = KConfigDialog::isDefault(); 0109 0110 if (result) { 0111 const bool useDefaults = Config::self()->useDefaults(true); 0112 result = !hasChanged(); 0113 Config::self()->useDefaults(useDefaults); 0114 } 0115 0116 return result; 0117 } 0118 0119 void ConfigureOptionsDialog::updateWidgetsDefault() 0120 { 0121 bool useDefaults = Config::self()->useDefaults(true); 0122 generalPageWidget().setDefaultFileSystem(GuiHelpers::defaultFileSystem()); 0123 generalPageWidget().radioButton->setChecked(true); 0124 0125 if (advancedPageWidget().isVisible()) 0126 advancedPageWidget().setBackend(CoreBackendManager::defaultBackendName()); 0127 0128 Config::self()->useDefaults(useDefaults); 0129 } 0130 0131 void ConfigureOptionsDialog::onComboBackendActivated(int) 0132 { 0133 Q_ASSERT(advancedPageWidget().isVisible()); 0134 0135 if (operationStack().size() == 0 || KMessageBox::warningContinueCancel(this, 0136 xi18nc("@info", 0137 "<para>Do you really want to change the backend?</para>" 0138 "<para><warning>This will also rescan devices and thus clear the list of pending operations.</warning></para>"), 0139 xi18nc("@title:window", "Really Change Backend?"), 0140 KGuiItem(xi18nc("@action:button", "Change the Backend"), QStringLiteral("arrow-right")), 0141 KGuiItem(xi18nc("@action:button", "Do Not Change the Backend"), QStringLiteral("dialog-cancel")), QStringLiteral("reallyChangeBackend")) == KMessageBox::Continue) { 0142 settingsChangedSlot(); 0143 } else 0144 advancedPageWidget().setBackend(CoreBackendManager::defaultBackendName()); 0145 }