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"