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