File indexing completed on 2024-04-21 04:00:57
0001 /* 0002 * configwidget.cpp 0003 * 0004 * SPDX-FileCopyrightText: 2004 Zack Rusin <zack@kde.org> 0005 * 0006 * SPDX-License-Identifier: LGPL-2.1-or-later 0007 */ 0008 #include "configwidget.h" 0009 #include "ui_configui.h" 0010 0011 #include "loader_p.h" 0012 #include "settings.h" 0013 #include "settingsimpl_p.h" 0014 0015 #include "ui_debug.h" 0016 0017 #include <QCheckBox> 0018 #include <QLineEdit> 0019 #include <QListWidget> 0020 #include <QListWidgetItem> 0021 0022 using namespace Sonnet; 0023 0024 class Sonnet::ConfigWidgetPrivate 0025 { 0026 public: 0027 Ui_SonnetConfigUI ui; 0028 Settings *settings = nullptr; 0029 QWidget *wdg = nullptr; 0030 }; 0031 0032 ConfigWidget::ConfigWidget(QWidget *parent) 0033 : QWidget(parent) 0034 , d(new ConfigWidgetPrivate) 0035 { 0036 d->settings = new Settings(this); 0037 QVBoxLayout *layout = new QVBoxLayout(this); 0038 layout->setContentsMargins(0, 0, 0, 0); 0039 layout->setObjectName(QStringLiteral("SonnetConfigUILayout")); 0040 d->wdg = new QWidget(this); 0041 d->ui.setupUi(d->wdg); 0042 0043 d->ui.m_langCombo->setCurrentByDictionary(d->settings->defaultLanguage()); 0044 0045 QStringList preferredLanguages = d->settings->preferredLanguages(); 0046 for (int i = 0; i < d->ui.m_langCombo->count(); i++) { 0047 const QString tag = d->ui.m_langCombo->itemData(i).toString(); 0048 if (tag.isEmpty()) { // skip separator 0049 continue; 0050 } 0051 0052 QListWidgetItem *item = new QListWidgetItem(d->ui.m_langCombo->itemText(i), d->ui.languageList); 0053 item->setData(Qt::UserRole, tag); 0054 if (preferredLanguages.contains(tag)) { 0055 item->setCheckState(Qt::Checked); 0056 } else { 0057 item->setCheckState(Qt::Unchecked); 0058 } 0059 } 0060 0061 d->ui.kcfg_skipUppercase->setChecked(d->settings->skipUppercase()); 0062 d->ui.kcfg_skipRunTogether->setChecked(d->settings->skipRunTogether()); 0063 d->ui.kcfg_checkerEnabledByDefault->setChecked(d->settings->checkerEnabledByDefault()); 0064 d->ui.kcfg_autodetectLanguage->setChecked(d->settings->autodetectLanguage()); 0065 QStringList ignoreList = d->settings->currentIgnoreList(); 0066 ignoreList.sort(); 0067 d->ui.ignoreListWidget->addItems(ignoreList); 0068 d->ui.kcfg_backgroundCheckerEnabled->setChecked(d->settings->backgroundCheckerEnabled()); 0069 d->ui.kcfg_backgroundCheckerEnabled->hide(); // hidden by default 0070 connect(d->ui.addButton, &QAbstractButton::clicked, this, &ConfigWidget::slotIgnoreWordAdded); 0071 connect(d->ui.removeButton, &QAbstractButton::clicked, this, &ConfigWidget::slotIgnoreWordRemoved); 0072 0073 layout->addWidget(d->wdg); 0074 connect(d->ui.m_langCombo, &DictionaryComboBox::dictionaryChanged, this, &ConfigWidget::configChanged); 0075 connect(d->ui.languageList, &QListWidget::itemChanged, this, &ConfigWidget::configChanged); 0076 0077 connect(d->ui.kcfg_backgroundCheckerEnabled, &QAbstractButton::clicked, this, &ConfigWidget::configChanged); 0078 connect(d->ui.kcfg_skipUppercase, &QAbstractButton::clicked, this, &ConfigWidget::configChanged); 0079 connect(d->ui.kcfg_skipRunTogether, &QAbstractButton::clicked, this, &ConfigWidget::configChanged); 0080 connect(d->ui.kcfg_checkerEnabledByDefault, &QAbstractButton::clicked, this, &ConfigWidget::configChanged); 0081 connect(d->ui.kcfg_autodetectLanguage, &QAbstractButton::clicked, this, &ConfigWidget::configChanged); 0082 connect(d->ui.newIgnoreEdit, &QLineEdit::textChanged, this, &ConfigWidget::slotUpdateButton); 0083 connect(d->ui.ignoreListWidget, &QListWidget::itemSelectionChanged, this, &ConfigWidget::slotSelectionChanged); 0084 d->ui.nobackendfound->setVisible(d->settings->clients().isEmpty()); 0085 d->ui.addButton->setEnabled(false); 0086 d->ui.removeButton->setEnabled(false); 0087 } 0088 0089 ConfigWidget::~ConfigWidget() = default; 0090 0091 void ConfigWidget::slotUpdateButton(const QString &text) 0092 { 0093 d->ui.addButton->setEnabled(!text.isEmpty()); 0094 } 0095 0096 void ConfigWidget::slotSelectionChanged() 0097 { 0098 d->ui.removeButton->setEnabled(!d->ui.ignoreListWidget->selectedItems().isEmpty()); 0099 } 0100 0101 void ConfigWidget::save() 0102 { 0103 setFromGui(); 0104 } 0105 0106 void ConfigWidget::setFromGui() 0107 { 0108 if (d->ui.m_langCombo->count()) { 0109 d->settings->setDefaultLanguage(d->ui.m_langCombo->currentDictionary()); 0110 } 0111 0112 QStringList preferredLanguages; 0113 for (int i = 0; i < d->ui.languageList->count(); i++) { 0114 if (d->ui.languageList->item(i)->checkState() == Qt::Unchecked) { 0115 continue; 0116 } 0117 preferredLanguages << d->ui.languageList->item(i)->data(Qt::UserRole).toString(); 0118 } 0119 d->settings->setPreferredLanguages(preferredLanguages); 0120 0121 d->settings->setSkipUppercase(d->ui.kcfg_skipUppercase->isChecked()); 0122 d->settings->setSkipRunTogether(d->ui.kcfg_skipRunTogether->isChecked()); 0123 d->settings->setBackgroundCheckerEnabled(d->ui.kcfg_backgroundCheckerEnabled->isChecked()); 0124 d->settings->setCheckerEnabledByDefault(d->ui.kcfg_checkerEnabledByDefault->isChecked()); 0125 d->settings->setAutodetectLanguage(d->ui.kcfg_autodetectLanguage->isChecked()); 0126 0127 if (d->settings->modified()) { 0128 d->settings->save(); 0129 } 0130 } 0131 0132 void ConfigWidget::slotIgnoreWordAdded() 0133 { 0134 QStringList ignoreList = d->settings->currentIgnoreList(); 0135 QString newWord = d->ui.newIgnoreEdit->text(); 0136 d->ui.newIgnoreEdit->clear(); 0137 if (newWord.isEmpty() || ignoreList.contains(newWord)) { 0138 return; 0139 } 0140 ignoreList.append(newWord); 0141 d->settings->setCurrentIgnoreList(ignoreList); 0142 0143 d->ui.ignoreListWidget->clear(); 0144 d->ui.ignoreListWidget->addItems(ignoreList); 0145 0146 Q_EMIT configChanged(); 0147 } 0148 0149 void ConfigWidget::slotIgnoreWordRemoved() 0150 { 0151 QStringList ignoreList = d->settings->currentIgnoreList(); 0152 const QList<QListWidgetItem *> selectedItems = d->ui.ignoreListWidget->selectedItems(); 0153 for (const QListWidgetItem *item : selectedItems) { 0154 ignoreList.removeAll(item->text()); 0155 } 0156 d->settings->setCurrentIgnoreList(ignoreList); 0157 0158 d->ui.ignoreListWidget->clear(); 0159 d->ui.ignoreListWidget->addItems(ignoreList); 0160 0161 Q_EMIT configChanged(); 0162 } 0163 0164 void ConfigWidget::setBackgroundCheckingButtonShown(bool b) 0165 { 0166 d->ui.kcfg_backgroundCheckerEnabled->setVisible(b); 0167 } 0168 0169 bool ConfigWidget::backgroundCheckingButtonShown() const 0170 { 0171 return !d->ui.kcfg_backgroundCheckerEnabled->isHidden(); 0172 } 0173 0174 void ConfigWidget::slotDefault() 0175 { 0176 d->ui.kcfg_autodetectLanguage->setChecked(Settings::defaultAutodetectLanguage()); 0177 d->ui.kcfg_skipUppercase->setChecked(Settings::defaultSkipUppercase()); 0178 d->ui.kcfg_skipRunTogether->setChecked(Settings::defauktSkipRunTogether()); 0179 d->ui.kcfg_checkerEnabledByDefault->setChecked(Settings::defaultCheckerEnabledByDefault()); 0180 d->ui.kcfg_backgroundCheckerEnabled->setChecked(Settings::defaultBackgroundCheckerEnabled()); 0181 d->ui.ignoreListWidget->clear(); 0182 d->ui.m_langCombo->setCurrentByDictionary(d->settings->defaultLanguage()); 0183 } 0184 0185 void ConfigWidget::setLanguage(const QString &language) 0186 { 0187 d->ui.m_langCombo->setCurrentByDictionary(language); 0188 } 0189 0190 QString ConfigWidget::language() const 0191 { 0192 if (d->ui.m_langCombo->count()) { 0193 return d->ui.m_langCombo->currentDictionary(); 0194 } else { 0195 return QString(); 0196 } 0197 } 0198 0199 #include "moc_configwidget.cpp"