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"