File indexing completed on 2024-04-21 05:46:23

0001 /*
0002     SPDX-FileCopyrightText: 2007 Nicolas Ternisien <nicolas.ternisien@gmail.com>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "configurationDialog.h"
0008 
0009 #include <QPushButton>
0010 
0011 #include <KLocalizedString>
0012 
0013 #include "generalConfigurationWidget.h"
0014 
0015 #include "logModeConfigurationWidget.h"
0016 
0017 #include "mainWindow.h"
0018 
0019 #include "globals.h"
0020 #include "ksystemlogConfig.h"
0021 
0022 #include "defaults.h"
0023 #include "ksystemlog_debug.h"
0024 
0025 ConfigurationDialog::ConfigurationDialog(QWidget *parent)
0026     : KConfigDialog(parent, i18n("Settings"), KSystemLogConfig::self())
0027 {
0028     setupGeneralConfiguration();
0029 
0030     setupLogModeConfigurations();
0031 }
0032 
0033 ConfigurationDialog::~ConfigurationDialog()
0034 {
0035 }
0036 
0037 void ConfigurationDialog::setupLogModeConfigurations()
0038 {
0039     qCDebug(KSYSTEMLOG) << "Setup Log Mode Configurations...";
0040 
0041     const auto logModes = Globals::instance().logModes();
0042     for (LogMode *logMode : logModes) {
0043         // Some Log mode does not need a configuration widget
0044         if (!logMode->logModeConfigurationWidget()) {
0045             continue;
0046         }
0047 
0048         // The configuration widget could be shared between Log Modes
0049         if (mLogModeConfigurations.contains(logMode->logModeConfigurationWidget())) {
0050             continue;
0051         }
0052 
0053         mLogModeConfigurations.append(logMode->logModeConfigurationWidget());
0054     }
0055 
0056     for (LogModeConfigurationWidget *logModeConfigurationWidget : std::as_const(mLogModeConfigurations)) {
0057         qCDebug(KSYSTEMLOG) << "Adding " << logModeConfigurationWidget->itemName() << " configuration...";
0058 
0059         addPage(logModeConfigurationWidget,
0060                 logModeConfigurationWidget->itemName(),
0061                 logModeConfigurationWidget->iconName(),
0062                 logModeConfigurationWidget->header(),
0063                 false);
0064 
0065         connect(logModeConfigurationWidget, &LogModeConfigurationWidget::configurationChanged, this, &ConfigurationDialog::updateConfiguration);
0066     }
0067 }
0068 
0069 void ConfigurationDialog::showConfiguration()
0070 {
0071     qCDebug(KSYSTEMLOG) << "Showing Configuration dialog...";
0072 
0073     show();
0074 }
0075 
0076 void ConfigurationDialog::setupGeneralConfiguration()
0077 {
0078     mGeneralConfiguration = new GeneralConfigurationWidget();
0079 
0080     addPage(mGeneralConfiguration, i18n("General"), QStringLiteral("utilities-log-viewer"), i18n("General"), false);
0081 
0082     connect(mGeneralConfiguration, &GeneralConfigurationWidget::configurationChanged, this, &ConfigurationDialog::updateConfiguration);
0083 }
0084 
0085 void ConfigurationDialog::updateSettings()
0086 {
0087     qCDebug(KSYSTEMLOG) << "Saving configuration...";
0088 
0089     mChanged = false;
0090 
0091     mGeneralConfiguration->saveConfig();
0092 
0093     for (LogModeConfigurationWidget *logModeConfigurationWidget : std::as_const(mLogModeConfigurations)) {
0094         logModeConfigurationWidget->saveConfig();
0095     }
0096 
0097     KSystemLogConfig::self()->save();
0098 
0099     Q_EMIT configurationSaved();
0100 
0101     qCDebug(KSYSTEMLOG) << "Configuration saved";
0102 }
0103 
0104 bool ConfigurationDialog::hasChanged()
0105 {
0106     qCDebug(KSYSTEMLOG) << "Current change status : " << mChanged;
0107     return mChanged;
0108 }
0109 
0110 void ConfigurationDialog::updateConfiguration()
0111 {
0112     qCDebug(KSYSTEMLOG) << "Updating configuration...";
0113 
0114     bool valid = mGeneralConfiguration->isValid();
0115     if (valid) {
0116         for (LogModeConfigurationWidget *logModeConfigurationWidget : std::as_const(mLogModeConfigurations)) {
0117             if (!logModeConfigurationWidget->isValid()) {
0118                 valid = false;
0119                 break;
0120             }
0121         }
0122     }
0123 
0124     if (valid) {
0125         buttonBox()->button(QDialogButtonBox::Ok)->setEnabled(true);
0126 
0127         updateButtons();
0128     } else {
0129         buttonBox()->button(QDialogButtonBox::Ok)->setEnabled(false);
0130         buttonBox()->button(QDialogButtonBox::Apply)->setEnabled(false);
0131     }
0132 }
0133 
0134 void ConfigurationDialog::updateButtons()
0135 {
0136     qCDebug(KSYSTEMLOG) << "Updating configuration buttons...";
0137 
0138     mChanged = true;
0139 }
0140 
0141 void ConfigurationDialog::updateWidgets()
0142 {
0143     qCDebug(KSYSTEMLOG) << "Reading configuration...";
0144 
0145     mGeneralConfiguration->readConfig();
0146     for (LogModeConfigurationWidget *logModeConfigurationWidget : std::as_const(mLogModeConfigurations)) {
0147         logModeConfigurationWidget->readConfig();
0148     }
0149 
0150     mChanged = false;
0151 }
0152 
0153 void ConfigurationDialog::updateWidgetsDefault()
0154 {
0155     qCDebug(KSYSTEMLOG) << "Loading default configuration...";
0156 
0157     mGeneralConfiguration->defaultConfig();
0158     for (LogModeConfigurationWidget *logModeConfigurationWidget : std::as_const(mLogModeConfigurations)) {
0159         logModeConfigurationWidget->defaultConfig();
0160     }
0161 
0162     mChanged = false;
0163 }
0164 
0165 bool ConfigurationDialog::isDefault()
0166 {
0167     /**
0168      * TODO Set this to true and find a way to retrieve defaults value
0169      * of the configuration (see defaultConfig() methods of LogModeConfigurations)
0170      */
0171 
0172     return true;
0173 }
0174 
0175 #include "moc_configurationDialog.cpp"