File indexing completed on 2024-04-14 05:39: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 "generalConfigurationWidget.h"
0008 
0009 #include <QButtonGroup>
0010 #include <QCheckBox>
0011 #include <QPushButton>
0012 
0013 #include <KLocalizedString>
0014 #include <KMessageWidget>
0015 #include <QIcon>
0016 
0017 #include "defaults.h"
0018 #include "globals.h"
0019 #include "ksystemlogConfig.h"
0020 #include "ksystemlog_debug.h"
0021 
0022 GeneralConfigurationWidget::GeneralConfigurationWidget()
0023     : QWidget()
0024 {
0025     setupUi(this);
0026 
0027     mWarningBox = new KMessageWidget(this);
0028     mWarningBox->setVisible(false);
0029     mWarningBox->setMessageType(KMessageWidget::Warning);
0030     mWarningBox->setText(i18n("This mode is unavailable because its log files do not exist."));
0031     mWarningBox->setCloseButtonVisible(false);
0032     mWarningBox->setIcon(QIcon::fromTheme(QStringLiteral("dialog-warning")));
0033     startupModeVerticalLayout->addWidget(mWarningBox);
0034 
0035     startupLogMode->addItem(QIcon::fromTheme(QStringLiteral(NO_MODE_ICON)), i18n("No Log Mode"), QVariant(QLatin1String("")));
0036     const auto logModes = Globals::instance().logModes();
0037     for (LogMode *logMode : logModes) {
0038         // Ignore this special case
0039         if (logMode->id() == QLatin1String("openLogMode")) {
0040             continue;
0041         }
0042 
0043         startupLogMode->addItem(logMode->icon(), logMode->name(), QVariant(logMode->id()));
0044     }
0045     connect(startupLogMode, &QComboBox::currentIndexChanged, this, &GeneralConfigurationWidget::configurationChanged);
0046     connect(maxLines, &QSpinBox::valueChanged, this, &GeneralConfigurationWidget::configurationChanged);
0047 
0048     connect(deleteDuplicatedLines, &QAbstractButton::clicked, this, &GeneralConfigurationWidget::configurationChanged);
0049 
0050     connect(deleteProcessId, &QAbstractButton::clicked, this, &GeneralConfigurationWidget::configurationChanged);
0051 
0052     connect(colorizeLogLines, &QAbstractButton::clicked, this, &GeneralConfigurationWidget::configurationChanged);
0053 
0054     mDateFormatGroup = new QButtonGroup(this);
0055     mDateFormatGroup->addButton(formatLongDate, Globals::LongFormat);
0056     mDateFormatGroup->addButton(formatShortDate, Globals::ShortFormat);
0057     mDateFormatGroup->addButton(formatPreciseDate, Globals::PreciseFormat);
0058 
0059     connect(mDateFormatGroup, &QButtonGroup::buttonClicked, this, &GeneralConfigurationWidget::configurationChanged);
0060 
0061     addDateFormatExample();
0062 }
0063 
0064 GeneralConfigurationWidget::~GeneralConfigurationWidget()
0065 {
0066 }
0067 
0068 void GeneralConfigurationWidget::addDateFormatExample()
0069 {
0070     const auto buttons = mDateFormatGroup->buttons();
0071     for (QAbstractButton *button : buttons) {
0072         const auto currentButtonFormat = static_cast<Globals::DateFormat>(mDateFormatGroup->id(button));
0073         const QString formattedDate = Globals::instance().formatDate(currentButtonFormat, QDateTime().currentDateTime());
0074         button->setText(i18nc("Date format option (date example)", "%1 (%2)", button->text(), formattedDate));
0075     }
0076 }
0077 
0078 void GeneralConfigurationWidget::readConfig()
0079 {
0080     for (int i = 0, total = startupLogMode->count(); i < total; ++i) {
0081         if (KSystemLogConfig::startupLogMode() == startupLogMode->itemData(i)) {
0082             startupLogMode->setCurrentIndex(i);
0083             break;
0084         }
0085     }
0086 
0087     maxLines->setValue(KSystemLogConfig::maxLines());
0088 
0089     deleteDuplicatedLines->setChecked(KSystemLogConfig::deleteDuplicatedLines());
0090 
0091     deleteProcessId->setChecked(KSystemLogConfig::deleteProcessIdentifier());
0092 
0093     colorizeLogLines->setChecked(KSystemLogConfig::colorizeLogLines());
0094 
0095     // KLocale::DateFormat dateFormat = (KLocale::DateFormat) KSystemLogConfig::dateFormat();
0096     const auto dateFormat = (QLocale::FormatType)KSystemLogConfig::dateFormat();
0097     QAbstractButton *selectedButton = mDateFormatGroup->button(dateFormat);
0098     selectedButton->setChecked(true);
0099 }
0100 
0101 void GeneralConfigurationWidget::saveConfig() const
0102 {
0103     qCDebug(KSYSTEMLOG) << "Save config from General preferences";
0104 
0105     KSystemLogConfig::setStartupLogMode(startupLogMode->itemData(startupLogMode->currentIndex()).toString());
0106 
0107     KSystemLogConfig::setMaxLines(maxLines->value());
0108     KSystemLogConfig::setDeleteDuplicatedLines(deleteDuplicatedLines->isChecked());
0109     KSystemLogConfig::setDeleteProcessIdentifier(deleteProcessId->isChecked());
0110     KSystemLogConfig::setColorizeLogLines(colorizeLogLines->isChecked());
0111 
0112     KSystemLogConfig::setDateFormat(mDateFormatGroup->checkedId());
0113 }
0114 
0115 void GeneralConfigurationWidget::defaultConfig()
0116 {
0117     // TODO Find a way to read the configuration per default
0118     readConfig();
0119 }
0120 
0121 bool GeneralConfigurationWidget::isValid() const
0122 {
0123     if (maxLines->value() > 0) {
0124         // Check if log files exist for selected mode.
0125         const QVariant modeID = startupLogMode->currentData();
0126         if (!modeID.isNull()) {
0127             const QString modeString = modeID.toString();
0128             LogMode *mode = Globals::instance().findLogMode(modeString);
0129             if (mode) {
0130                 if (!mode->filesExist()) {
0131                     qCDebug(KSYSTEMLOG) << "Log files are missing for mode" << mode->name();
0132                     mWarningBox->setVisible(true);
0133                 } else {
0134                     qCDebug(KSYSTEMLOG) << "General configuration is valid";
0135                     mWarningBox->setVisible(false);
0136                     return true;
0137                 }
0138             } else {
0139                 // Empty log mode is selected.
0140                 mWarningBox->setVisible(false);
0141                 return true;
0142             }
0143         }
0144     }
0145 
0146     qCDebug(KSYSTEMLOG) << "General configuration is not valid";
0147     return false;
0148 }
0149 
0150 #include "moc_generalConfigurationWidget.cpp"