Warning, file /frameworks/sonnet/src/ui/configwidget.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

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 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()
0090 {
0091     delete d;
0092 }
0093 
0094 void ConfigWidget::slotUpdateButton(const QString &text)
0095 {
0096     d->ui.addButton->setEnabled(!text.isEmpty());
0097 }
0098 
0099 void ConfigWidget::slotSelectionChanged()
0100 {
0101     d->ui.removeButton->setEnabled(!d->ui.ignoreListWidget->selectedItems().isEmpty());
0102 }
0103 
0104 void ConfigWidget::save()
0105 {
0106     setFromGui();
0107 }
0108 
0109 void ConfigWidget::setFromGui()
0110 {
0111     if (d->ui.m_langCombo->count()) {
0112         d->settings->setDefaultLanguage(d->ui.m_langCombo->currentDictionary());
0113     }
0114 
0115     QStringList preferredLanguages;
0116     for (int i = 0; i < d->ui.languageList->count(); i++) {
0117         if (d->ui.languageList->item(i)->checkState() == Qt::Unchecked) {
0118             continue;
0119         }
0120         preferredLanguages << d->ui.languageList->item(i)->data(Qt::UserRole).toString();
0121     }
0122     d->settings->setPreferredLanguages(preferredLanguages);
0123 
0124     d->settings->setSkipUppercase(d->ui.kcfg_skipUppercase->isChecked());
0125     d->settings->setSkipRunTogether(d->ui.kcfg_skipRunTogether->isChecked());
0126     d->settings->setBackgroundCheckerEnabled(d->ui.kcfg_backgroundCheckerEnabled->isChecked());
0127     d->settings->setCheckerEnabledByDefault(d->ui.kcfg_checkerEnabledByDefault->isChecked());
0128     d->settings->setAutodetectLanguage(d->ui.kcfg_autodetectLanguage->isChecked());
0129 
0130     if (d->settings->modified()) {
0131         d->settings->save();
0132     }
0133 }
0134 
0135 void ConfigWidget::slotIgnoreWordAdded()
0136 {
0137     QStringList ignoreList = d->settings->currentIgnoreList();
0138     QString newWord = d->ui.newIgnoreEdit->text();
0139     d->ui.newIgnoreEdit->clear();
0140     if (newWord.isEmpty() || ignoreList.contains(newWord)) {
0141         return;
0142     }
0143     ignoreList.append(newWord);
0144     d->settings->setCurrentIgnoreList(ignoreList);
0145 
0146     d->ui.ignoreListWidget->clear();
0147     d->ui.ignoreListWidget->addItems(ignoreList);
0148 
0149     Q_EMIT configChanged();
0150 }
0151 
0152 void ConfigWidget::slotIgnoreWordRemoved()
0153 {
0154     QStringList ignoreList = d->settings->currentIgnoreList();
0155     const QList<QListWidgetItem *> selectedItems = d->ui.ignoreListWidget->selectedItems();
0156     for (const QListWidgetItem *item : selectedItems) {
0157         ignoreList.removeAll(item->text());
0158     }
0159     d->settings->setCurrentIgnoreList(ignoreList);
0160 
0161     d->ui.ignoreListWidget->clear();
0162     d->ui.ignoreListWidget->addItems(ignoreList);
0163 
0164     Q_EMIT configChanged();
0165 }
0166 
0167 void ConfigWidget::setBackgroundCheckingButtonShown(bool b)
0168 {
0169     d->ui.kcfg_backgroundCheckerEnabled->setVisible(b);
0170 }
0171 
0172 bool ConfigWidget::backgroundCheckingButtonShown() const
0173 {
0174     return !d->ui.kcfg_backgroundCheckerEnabled->isHidden();
0175 }
0176 
0177 void ConfigWidget::slotDefault()
0178 {
0179     d->ui.kcfg_autodetectLanguage->setChecked(Settings::defaultAutodetectLanguage());
0180     d->ui.kcfg_skipUppercase->setChecked(Settings::defaultSkipUppercase());
0181     d->ui.kcfg_skipRunTogether->setChecked(Settings::defauktSkipRunTogether());
0182     d->ui.kcfg_checkerEnabledByDefault->setChecked(Settings::defaultCheckerEnabledByDefault());
0183     d->ui.kcfg_backgroundCheckerEnabled->setChecked(Settings::defaultBackgroundCheckerEnabled());
0184     d->ui.ignoreListWidget->clear();
0185     d->ui.m_langCombo->setCurrentByDictionary(d->settings->defaultLanguage());
0186 }
0187 
0188 void ConfigWidget::setLanguage(const QString &language)
0189 {
0190     d->ui.m_langCombo->setCurrentByDictionary(language);
0191 }
0192 
0193 QString ConfigWidget::language() const
0194 {
0195     if (d->ui.m_langCombo->count()) {
0196         return d->ui.m_langCombo->currentDictionary();
0197     } else {
0198         return QString();
0199     }
0200 }
0201 
0202 #include "moc_configwidget.cpp"