File indexing completed on 2024-04-28 16:44:44

0001 /*
0002     SPDX-FileCopyrightText: 2008 Ryan P. Bitanga <ryan.bitanga@gmail.com>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 
0007 #include "spellcheck_config.h"
0008 
0009 #include <QGridLayout>
0010 #include <QProcess>
0011 
0012 #include <KConfigGroup>
0013 #include <KPluginFactory>
0014 #include <KSharedConfig>
0015 
0016 // For the macro
0017 #include <KRunner/AbstractRunner>
0018 
0019 SpellCheckConfigForm::SpellCheckConfigForm(QWidget *parent)
0020     : QWidget(parent)
0021 {
0022     setupUi(this);
0023 }
0024 
0025 SpellCheckConfig::SpellCheckConfig(QWidget *parent, const QVariantList &args)
0026     : KCModule(parent, args)
0027 {
0028     m_ui = new SpellCheckConfigForm(this);
0029 
0030     QGridLayout *layout = new QGridLayout(this);
0031 
0032     layout->addWidget(m_ui, 0, 0);
0033 
0034     connect(m_ui->m_requireTriggerWord, &QCheckBox::stateChanged, this, &SpellCheckConfig::markAsChanged);
0035     connect(m_ui->m_requireTriggerWord, &QCheckBox::stateChanged, this, &SpellCheckConfig::toggleTriggerWord);
0036     connect(m_ui->m_triggerWord, &QLineEdit::textChanged, this, &SpellCheckConfig::markAsChanged);
0037     connect(m_ui->m_openKcmButton, &QPushButton::clicked, this, &SpellCheckConfig::openKcm);
0038 
0039     m_ui->m_openKcmButton->setIcon(QIcon::fromTheme(QStringLiteral("tools-check-spelling")));
0040 }
0041 
0042 SpellCheckConfig::~SpellCheckConfig()
0043 {
0044 }
0045 
0046 void SpellCheckConfig::toggleTriggerWord(int state)
0047 {
0048     m_ui->m_triggerWord->setEnabled(state == Qt::Checked);
0049 }
0050 
0051 void SpellCheckConfig::openKcm()
0052 {
0053     QProcess::startDetached(QStringLiteral("kcmshell5"), {QStringLiteral("spellchecking")});
0054 }
0055 
0056 void SpellCheckConfig::load()
0057 {
0058     KCModule::load();
0059 
0060     // FIXME: This shouldn't be hardcoded!
0061     const KSharedConfig::Ptr cfg = KSharedConfig::openConfig(QStringLiteral("krunnerrc"));
0062     const KConfigGroup grp = cfg->group("Runners").group(KRUNNER_PLUGIN_NAME);
0063 
0064     const bool requireTrigger = grp.readEntry("requireTriggerWord", true);
0065     const QString trigger = grp.readEntry("trigger", i18n("spell"));
0066 
0067     if (!requireTrigger) {
0068         m_ui->m_triggerWord->setEnabled(false);
0069     }
0070 
0071     m_ui->m_requireTriggerWord->setCheckState((requireTrigger) ? Qt::Checked : Qt::Unchecked);
0072     m_ui->m_triggerWord->setText(trigger);
0073 
0074     Q_EMIT changed(false);
0075 }
0076 
0077 void SpellCheckConfig::save()
0078 {
0079     // FIXME: This shouldn't be hardcoded!
0080     KSharedConfig::Ptr cfg = KSharedConfig::openConfig(QStringLiteral("krunnerrc"));
0081     KConfigGroup grp = cfg->group("Runners").group(KRUNNER_PLUGIN_NAME);
0082 
0083     bool requireTrigger = m_ui->m_requireTriggerWord->checkState() == Qt::Checked;
0084     if (requireTrigger) {
0085         grp.writeEntry("trigger", m_ui->m_triggerWord->text());
0086     }
0087     grp.writeEntry("requireTriggerWord", requireTrigger);
0088     grp.sync();
0089 
0090     Q_EMIT changed(false);
0091 }
0092 
0093 void SpellCheckConfig::defaults()
0094 {
0095     m_ui->m_requireTriggerWord->setCheckState(Qt::Checked);
0096     m_ui->m_triggerWord->setText(i18n("spell"));
0097     Q_EMIT changed(true);
0098 }
0099 
0100 K_PLUGIN_FACTORY(SpellCheckConfigFactory, registerPlugin<SpellCheckConfig>();)
0101 
0102 #include "spellcheck_config.moc"