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"