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

0001 /* SPDX-FileCopyrightText: 2010 Anton Kreuzkamp <akreuzkamp@web.de>
0002  * SPDX-FileCopyrightText: 2020 Alexander Lohnau <alexander.lohnau@gmx.de>
0003  *
0004  * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0005  */
0006 
0007 #include "charrunner_config.h"
0008 #include "config_keys.h"
0009 
0010 // KF
0011 #include <KConfigGroup>
0012 #include <KLocalizedString>
0013 #include <KMessageWidget>
0014 #include <KRunner/AbstractRunner>
0015 #include <KSharedConfig>
0016 
0017 CharacterRunnerConfigForm::CharacterRunnerConfigForm(QWidget *parent)
0018     : QWidget(parent)
0019 {
0020     setupUi(this);
0021 }
0022 
0023 CharacterRunnerConfig::CharacterRunnerConfig(QWidget *parent, const QVariantList &args)
0024     : KCModule(parent, args)
0025 {
0026     m_ui = new CharacterRunnerConfigForm(this);
0027 
0028     QGridLayout *layout = new QGridLayout(this);
0029     layout->addWidget(m_ui, 0, 0);
0030 
0031     connect(m_ui->edit_trigger, &QLineEdit::textChanged, this, &CharacterRunnerConfig::markAsChanged);
0032     connect(m_ui->addItem, &QPushButton::clicked, this, &CharacterRunnerConfig::addItem);
0033     connect(m_ui->addItem, &QPushButton::clicked, this, &CharacterRunnerConfig::markAsChanged);
0034     connect(m_ui->deleteItem, &QPushButton::clicked, this, &CharacterRunnerConfig::deleteItem);
0035     connect(m_ui->deleteItem, &QPushButton::clicked, this, &CharacterRunnerConfig::markAsChanged);
0036     connect(m_ui->list, &QTreeWidget::itemSelectionChanged, this, &CharacterRunnerConfig::validateDeleteButton);
0037     connect(m_ui->edit_alias, &QLineEdit::textChanged, this, &CharacterRunnerConfig::validateAddButton);
0038     connect(m_ui->edit_hex, &QLineEdit::textChanged, this, &CharacterRunnerConfig::validateAddButton);
0039 }
0040 
0041 void CharacterRunnerConfig::load()
0042 {
0043     KCModule::load();
0044 
0045     KSharedConfig::Ptr cfg = KSharedConfig::openConfig(QStringLiteral("krunnerrc"));
0046     KConfigGroup grp = cfg->group("Runners").group("CharacterRunner");
0047 
0048     m_ui->edit_trigger->setText(grp.readEntry(CONFIG_TRIGGERWORD, DEFAULT_TRIGGERWORD.toString()));
0049     const auto aliasList = grp.readEntry(CONFIG_ALIASES, QStringList());
0050     const auto codeList = grp.readEntry(CONFIG_CODES, QStringList());
0051     if (aliasList.size() == codeList.size()) {
0052         for (int i = 0; i < aliasList.size(); ++i) {
0053             QTreeWidgetItem *item = new QTreeWidgetItem(m_ui->list, 2);
0054             item->setText(0, aliasList[i]);
0055             item->setText(1, codeList[i]);
0056             m_ui->list->addTopLevelItem(item);
0057         }
0058     } else {
0059         const auto msg = new KMessageWidget(i18nc("Message that config is corrupted", //
0060                                                   "Config entries for alias list and code list have different sizes, ignoring all."),
0061                                             this);
0062         m_ui->verticalLayout->insertWidget(0, msg);
0063     }
0064 }
0065 
0066 void CharacterRunnerConfig::save()
0067 {
0068     KCModule::save();
0069 
0070     KSharedConfig::Ptr cfg = KSharedConfig::openConfig(QStringLiteral("krunnerrc"));
0071     KConfigGroup grp = cfg->group("Runners").group("CharacterRunner");
0072 
0073     grp.writeEntry(CONFIG_TRIGGERWORD, m_ui->edit_trigger->text().isEmpty() ? DEFAULT_TRIGGERWORD.toString() : m_ui->edit_trigger->text());
0074 
0075     QList<QString> aliasList;
0076     QList<QString> codeList;
0077     for (int i = 0; i < m_ui->list->topLevelItemCount(); ++i) {
0078         aliasList.append(m_ui->list->topLevelItem(i)->text(0));
0079         codeList.append(m_ui->list->topLevelItem(i)->text(1));
0080     }
0081     grp.writeEntry(CONFIG_ALIASES, aliasList);
0082     grp.writeEntry(CONFIG_CODES, codeList);
0083     grp.sync();
0084 }
0085 
0086 void CharacterRunnerConfig::defaults()
0087 {
0088     KCModule::defaults();
0089 
0090     m_ui->edit_trigger->setText(DEFAULT_TRIGGERWORD.toString());
0091     m_ui->list->clear();
0092 
0093     markAsChanged();
0094 }
0095 
0096 void CharacterRunnerConfig::addItem()
0097 {
0098     QTreeWidgetItem *item = new QTreeWidgetItem(m_ui->list, 2);
0099     item->setText(0, m_ui->edit_alias->text());
0100     item->setText(1, m_ui->edit_hex->text());
0101     m_ui->list->addTopLevelItem(item);
0102     m_ui->edit_alias->clear();
0103     m_ui->edit_hex->clear();
0104 }
0105 
0106 void CharacterRunnerConfig::deleteItem()
0107 {
0108     m_ui->list->takeTopLevelItem(m_ui->list->indexOfTopLevelItem(m_ui->list->currentItem()));
0109 }
0110 
0111 void CharacterRunnerConfig::validateAddButton()
0112 {
0113     m_ui->addItem->setDisabled(m_ui->edit_alias->text().isEmpty() || m_ui->edit_hex->text().isEmpty());
0114 }
0115 
0116 void CharacterRunnerConfig::validateDeleteButton()
0117 {
0118     m_ui->deleteItem->setDisabled(!m_ui->list->selectedItems().count());
0119 }
0120 
0121 K_PLUGIN_FACTORY(CharacterRunnerConfigFactory, registerPlugin<CharacterRunnerConfig>();)
0122 
0123 #include "charrunner_config.moc"