File indexing completed on 2024-06-23 05:14:07

0001 /*
0002     kwatchgnupgconfig.cpp
0003 
0004     This file is part of Kleopatra, the KDE keymanager
0005     SPDX-FileCopyrightText: 2001, 2002, 2004 Klarälvdalens Datakonsult AB
0006 
0007     SPDX-License-Identifier: GPL-2.0-or-later
0008 */
0009 
0010 #include <config-kleopatra.h>
0011 
0012 #include "kwatchgnupgconfig.h"
0013 
0014 #include "kwatchgnupg.h"
0015 
0016 #include <Libkleo/FileNameRequester>
0017 
0018 #include <KConfig>
0019 #include <KLocalizedString>
0020 #include <KPluralHandlingSpinBox>
0021 
0022 #include <KConfigGroup>
0023 #include <KSharedConfig>
0024 #include <QCheckBox>
0025 #include <QComboBox>
0026 #include <QDialogButtonBox>
0027 #include <QGroupBox>
0028 #include <QLabel>
0029 #include <QPushButton>
0030 #include <QVBoxLayout>
0031 
0032 static const char *log_levels[] = {"none", "basic", "advanced", "expert", "guru"};
0033 
0034 static int log_level_to_int(const QString &loglevel)
0035 {
0036     if (loglevel == QLatin1StringView("none")) {
0037         return 0;
0038     } else if (loglevel == QLatin1StringView("basic")) {
0039         return 1;
0040     } else if (loglevel == QLatin1StringView("advanced")) {
0041         return 2;
0042     } else if (loglevel == QLatin1StringView("expert")) {
0043         return 3;
0044     } else if (loglevel == QLatin1StringView("guru")) {
0045         return 4;
0046     } else {
0047         // default
0048         return 1;
0049     }
0050 }
0051 
0052 KWatchGnuPGConfig::KWatchGnuPGConfig(QWidget *parent)
0053     : QDialog(parent)
0054 {
0055     setWindowTitle(i18nc("@title:window", "Configure KWatchGnuPG"));
0056     auto mainLayout = new QVBoxLayout(this);
0057 
0058     mButtonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, this);
0059     QPushButton *okButton = mButtonBox->button(QDialogButtonBox::Ok);
0060     okButton->setDefault(true);
0061     okButton->setShortcut(Qt::CTRL | Qt::Key_Return);
0062     connect(mButtonBox, &QDialogButtonBox::rejected, this, &KWatchGnuPGConfig::reject);
0063 
0064     auto top = new QWidget;
0065     mainLayout->addWidget(top);
0066     mainLayout->addWidget(mButtonBox);
0067 
0068     auto vlay = new QVBoxLayout(top);
0069     vlay->setContentsMargins(0, 0, 0, 0);
0070 
0071     auto group = new QGroupBox(i18n("WatchGnuPG"), top);
0072     vlay->addWidget(group);
0073 
0074     auto glay = new QGridLayout(group);
0075     glay->setColumnStretch(1, 1);
0076 
0077     int row = -1;
0078 
0079     ++row;
0080     mExeED = new Kleo::FileNameRequester(group);
0081     auto label = new QLabel(i18n("&Executable:"), group);
0082     label->setBuddy(mExeED);
0083     glay->addWidget(label, row, 0);
0084     glay->addWidget(mExeED, row, 1);
0085 
0086     connect(mExeED, &Kleo::FileNameRequester::fileNameChanged, this, &KWatchGnuPGConfig::slotChanged);
0087 
0088     ++row;
0089     mSocketED = new Kleo::FileNameRequester(group);
0090     label = new QLabel(i18n("&Socket:"), group);
0091     label->setBuddy(mSocketED);
0092     glay->addWidget(label, row, 0);
0093     glay->addWidget(mSocketED, row, 1);
0094 
0095     connect(mSocketED, &Kleo::FileNameRequester::fileNameChanged, this, &KWatchGnuPGConfig::slotChanged);
0096 
0097     ++row;
0098     mLogLevelCB = new QComboBox(group);
0099     mLogLevelCB->addItem(i18n("None"));
0100     mLogLevelCB->addItem(i18n("Basic"));
0101     mLogLevelCB->addItem(i18n("Advanced"));
0102     mLogLevelCB->addItem(i18n("Expert"));
0103     mLogLevelCB->addItem(i18n("Guru"));
0104     label = new QLabel(i18n("Default &log level:"), group);
0105     label->setBuddy(mLogLevelCB);
0106     glay->addWidget(label, row, 0);
0107     glay->addWidget(mLogLevelCB, row, 1);
0108 
0109     connect(mLogLevelCB, &QComboBox::activated, this, &KWatchGnuPGConfig::slotChanged);
0110 
0111     /******************* Log Window group *******************/
0112     group = new QGroupBox(i18n("Log Window"), top);
0113     vlay->addWidget(group);
0114 
0115     glay = new QGridLayout(group);
0116     glay->setColumnStretch(1, 1);
0117 
0118     row = -1;
0119 
0120     ++row;
0121     mLoglenSB = new KPluralHandlingSpinBox(group);
0122     mLoglenSB->setRange(0, 1000000);
0123     mLoglenSB->setSingleStep(100);
0124     mLoglenSB->setSuffix(ki18ncp("history size spinbox suffix", " line", " lines"));
0125     mLoglenSB->setSpecialValueText(i18n("unlimited"));
0126     label = new QLabel(i18n("&History size:"), group);
0127     label->setBuddy(mLoglenSB);
0128     glay->addWidget(label, row, 0);
0129     glay->addWidget(mLoglenSB, row, 1);
0130     auto button = new QPushButton(i18n("Set &Unlimited"), group);
0131     glay->addWidget(button, row, 2);
0132 
0133     connect(mLoglenSB, &QSpinBox::valueChanged, this, &KWatchGnuPGConfig::slotChanged);
0134     connect(button, &QPushButton::clicked, this, &KWatchGnuPGConfig::slotSetHistorySizeUnlimited);
0135 
0136     ++row;
0137     mWordWrapCB = new QCheckBox(i18n("Enable &word wrapping"), group);
0138     mWordWrapCB->hide(); // QTextEdit doesn't support word wrapping in LogText mode
0139     glay->addWidget(mWordWrapCB, row, 0, 1, 3);
0140 
0141     connect(mWordWrapCB, &QCheckBox::clicked, this, &KWatchGnuPGConfig::slotChanged);
0142 
0143     vlay->addStretch(1);
0144 
0145     connect(okButton, &QPushButton::clicked, this, &KWatchGnuPGConfig::slotSave);
0146 }
0147 
0148 KWatchGnuPGConfig::~KWatchGnuPGConfig()
0149 {
0150 }
0151 
0152 void KWatchGnuPGConfig::slotSetHistorySizeUnlimited()
0153 {
0154     mLoglenSB->setValue(0);
0155 }
0156 
0157 void KWatchGnuPGConfig::loadConfig()
0158 {
0159     const KConfigGroup watchGnuPG(KSharedConfig::openConfig(), QStringLiteral("WatchGnuPG"));
0160     mExeED->setFileName(watchGnuPG.readEntry("Executable", WATCHGNUPGBINARY));
0161     mSocketED->setFileName(watchGnuPG.readEntry("Socket", WATCHGNUPGSOCKET));
0162     mLogLevelCB->setCurrentIndex(log_level_to_int(watchGnuPG.readEntry("LogLevel", "basic")));
0163 
0164     const KConfigGroup logWindow(KSharedConfig::openConfig(), QStringLiteral("LogWindow"));
0165     mLoglenSB->setValue(logWindow.readEntry("MaxLogLen", 10000));
0166     mWordWrapCB->setChecked(logWindow.readEntry("WordWrap", false));
0167 
0168     mButtonBox->button(QDialogButtonBox::Ok)->setEnabled(false);
0169 }
0170 
0171 void KWatchGnuPGConfig::saveConfig()
0172 {
0173     KConfigGroup watchGnuPG(KSharedConfig::openConfig(), QStringLiteral("WatchGnuPG"));
0174     watchGnuPG.writeEntry("Executable", mExeED->fileName());
0175     watchGnuPG.writeEntry("Socket", mSocketED->fileName());
0176     watchGnuPG.writeEntry("LogLevel", log_levels[mLogLevelCB->currentIndex()]);
0177 
0178     KConfigGroup logWindow(KSharedConfig::openConfig(), QStringLiteral("LogWindow"));
0179     logWindow.writeEntry("MaxLogLen", mLoglenSB->value());
0180     logWindow.writeEntry("WordWrap", mWordWrapCB->isChecked());
0181 
0182     KSharedConfig::openConfig()->sync();
0183 
0184     mButtonBox->button(QDialogButtonBox::Ok)->setEnabled(false);
0185 }
0186 
0187 void KWatchGnuPGConfig::slotChanged()
0188 {
0189     mButtonBox->button(QDialogButtonBox::Ok)->setEnabled(true);
0190 }
0191 
0192 void KWatchGnuPGConfig::slotSave()
0193 {
0194     saveConfig();
0195     Q_EMIT reconfigure();
0196     accept();
0197 }
0198 
0199 #include "moc_kwatchgnupgconfig.cpp"