File indexing completed on 2024-03-24 04:03:43
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 Sonnet::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() = default; 0126 0127 void ConfigView::setNoBackendFoundVisible(bool show) 0128 { 0129 d->ui.nobackendfound->setVisible(show); 0130 } 0131 0132 bool ConfigView::noBackendFoundVisible() const 0133 { 0134 return d->ui.nobackendfound->isVisible(); 0135 } 0136 0137 void ConfigView::setBackgroundCheckingButtonShown(bool b) 0138 { 0139 d->ui.kcfg_backgroundCheckerEnabled->setVisible(b); 0140 } 0141 0142 bool ConfigView::backgroundCheckingButtonShown() const 0143 { 0144 return !d->ui.kcfg_backgroundCheckerEnabled->isHidden(); 0145 } 0146 0147 void ConfigView::setLanguage(const QString &language) 0148 { 0149 d->ui.m_langCombo->setCurrentByDictionary(language); 0150 } 0151 0152 QString ConfigView::language() const 0153 { 0154 if (d->ui.m_langCombo->count()) { 0155 return d->ui.m_langCombo->currentDictionary(); 0156 } else { 0157 return QString(); 0158 } 0159 } 0160 0161 void ConfigView::setPreferredLanguages(const QStringList &preferredLanguages) 0162 { 0163 for (int i = 0; i < d->ui.languageList->count(); ++i) { 0164 QListWidgetItem *item = d->ui.languageList->item(i); 0165 QString tag = item->data(Qt::UserRole).toString(); 0166 if (preferredLanguages.contains(tag)) { 0167 item->setCheckState(Qt::Checked); 0168 } else { 0169 item->setCheckState(Qt::Unchecked); 0170 } 0171 } 0172 Q_EMIT configChanged(); 0173 } 0174 0175 QStringList ConfigView::preferredLanguages() const 0176 { 0177 QStringList preferredLanguages; 0178 for (int i = 0; i < d->ui.languageList->count(); i++) { 0179 if (d->ui.languageList->item(i)->checkState() == Qt::Unchecked) { 0180 continue; 0181 } 0182 preferredLanguages << d->ui.languageList->item(i)->data(Qt::UserRole).toString(); 0183 } 0184 return preferredLanguages; 0185 } 0186 0187 void ConfigView::setIgnoreList(const QStringList &ignoreList) 0188 { 0189 d->ignoreList = ignoreList; 0190 d->ignoreList.sort(); 0191 d->ui.ignoreListWidget->clear(); 0192 d->ui.ignoreListWidget->addItems(d->ignoreList); 0193 Q_EMIT configChanged(); 0194 } 0195 0196 QStringList ConfigView::ignoreList() const 0197 { 0198 return d->ignoreList; 0199 } 0200 0201 #include "moc_configview.cpp"