Sonnet

configwidget.cpp
1/*
2 * configwidget.cpp
3 *
4 * SPDX-FileCopyrightText: 2004 Zack Rusin <zack@kde.org>
5 *
6 * SPDX-License-Identifier: LGPL-2.1-or-later
7 */
8#include "configwidget.h"
9#include "ui_configui.h"
10
11#include "loader_p.h"
12#include "settings.h"
13#include "settingsimpl_p.h"
14
15#include "ui_debug.h"
16
17#include <QCheckBox>
18#include <QLineEdit>
19#include <QListWidget>
20#include <QListWidgetItem>
21
22using namespace Sonnet;
23
24class Sonnet::ConfigWidgetPrivate
25{
26public:
27 Ui_SonnetConfigUI ui;
28 Settings *settings = nullptr;
29 QWidget *wdg = nullptr;
30};
31
32ConfigWidget::ConfigWidget(QWidget *parent)
33 : QWidget(parent)
34 , d(new ConfigWidgetPrivate)
35{
36 d->settings = new Settings(this);
37 QVBoxLayout *layout = new QVBoxLayout(this);
38 layout->setContentsMargins(0, 0, 0, 0);
39 layout->setObjectName(QStringLiteral("SonnetConfigUILayout"));
40 d->wdg = new QWidget(this);
41 d->ui.setupUi(d->wdg);
42
43 d->ui.m_langCombo->setCurrentByDictionary(d->settings->defaultLanguage());
44
45 QStringList preferredLanguages = d->settings->preferredLanguages();
46 for (int i = 0; i < d->ui.m_langCombo->count(); i++) {
47 const QString tag = d->ui.m_langCombo->itemData(i).toString();
48 if (tag.isEmpty()) { // skip separator
49 continue;
50 }
51
52 QListWidgetItem *item = new QListWidgetItem(d->ui.m_langCombo->itemText(i), d->ui.languageList);
53 item->setData(Qt::UserRole, tag);
54 if (preferredLanguages.contains(tag)) {
56 } else {
58 }
59 }
60
61 d->ui.kcfg_skipUppercase->setChecked(d->settings->skipUppercase());
62 d->ui.kcfg_skipRunTogether->setChecked(d->settings->skipRunTogether());
63 d->ui.kcfg_checkerEnabledByDefault->setChecked(d->settings->checkerEnabledByDefault());
64 d->ui.kcfg_autodetectLanguage->setChecked(d->settings->autodetectLanguage());
65 QStringList ignoreList = d->settings->currentIgnoreList();
66 ignoreList.sort();
67 d->ui.ignoreListWidget->addItems(ignoreList);
68 d->ui.kcfg_backgroundCheckerEnabled->setChecked(d->settings->backgroundCheckerEnabled());
69 d->ui.kcfg_backgroundCheckerEnabled->hide(); // hidden by default
70 connect(d->ui.addButton, &QAbstractButton::clicked, this, &ConfigWidget::slotIgnoreWordAdded);
71 connect(d->ui.removeButton, &QAbstractButton::clicked, this, &ConfigWidget::slotIgnoreWordRemoved);
72
73 layout->addWidget(d->wdg);
76
77 connect(d->ui.kcfg_backgroundCheckerEnabled, &QAbstractButton::clicked, this, &ConfigWidget::configChanged);
78 connect(d->ui.kcfg_skipUppercase, &QAbstractButton::clicked, this, &ConfigWidget::configChanged);
79 connect(d->ui.kcfg_skipRunTogether, &QAbstractButton::clicked, this, &ConfigWidget::configChanged);
80 connect(d->ui.kcfg_checkerEnabledByDefault, &QAbstractButton::clicked, this, &ConfigWidget::configChanged);
81 connect(d->ui.kcfg_autodetectLanguage, &QAbstractButton::clicked, this, &ConfigWidget::configChanged);
82 connect(d->ui.newIgnoreEdit, &QLineEdit::textChanged, this, &ConfigWidget::slotUpdateButton);
83 connect(d->ui.ignoreListWidget, &QListWidget::itemSelectionChanged, this, &ConfigWidget::slotSelectionChanged);
84 d->ui.nobackendfound->setVisible(d->settings->clients().isEmpty());
85 d->ui.addButton->setEnabled(false);
86 d->ui.removeButton->setEnabled(false);
87}
88
89ConfigWidget::~ConfigWidget() = default;
90
91void ConfigWidget::slotUpdateButton(const QString &text)
92{
93 d->ui.addButton->setEnabled(!text.isEmpty());
94}
95
96void ConfigWidget::slotSelectionChanged()
97{
98 d->ui.removeButton->setEnabled(!d->ui.ignoreListWidget->selectedItems().isEmpty());
99}
100
101void ConfigWidget::save()
102{
103 setFromGui();
104}
105
106void ConfigWidget::setFromGui()
107{
108 if (d->ui.m_langCombo->count()) {
109 d->settings->setDefaultLanguage(d->ui.m_langCombo->currentDictionary());
110 }
111
112 QStringList preferredLanguages;
113 for (int i = 0; i < d->ui.languageList->count(); i++) {
114 if (d->ui.languageList->item(i)->checkState() == Qt::Unchecked) {
115 continue;
116 }
117 preferredLanguages << d->ui.languageList->item(i)->data(Qt::UserRole).toString();
118 }
119 d->settings->setPreferredLanguages(preferredLanguages);
120
121 d->settings->setSkipUppercase(d->ui.kcfg_skipUppercase->isChecked());
122 d->settings->setSkipRunTogether(d->ui.kcfg_skipRunTogether->isChecked());
123 d->settings->setBackgroundCheckerEnabled(d->ui.kcfg_backgroundCheckerEnabled->isChecked());
124 d->settings->setCheckerEnabledByDefault(d->ui.kcfg_checkerEnabledByDefault->isChecked());
125 d->settings->setAutodetectLanguage(d->ui.kcfg_autodetectLanguage->isChecked());
126
127 if (d->settings->modified()) {
128 d->settings->save();
129 }
130}
131
132void ConfigWidget::slotIgnoreWordAdded()
133{
134 QStringList ignoreList = d->settings->currentIgnoreList();
135 QString newWord = d->ui.newIgnoreEdit->text();
136 d->ui.newIgnoreEdit->clear();
137 if (newWord.isEmpty() || ignoreList.contains(newWord)) {
138 return;
139 }
140 ignoreList.append(newWord);
141 d->settings->setCurrentIgnoreList(ignoreList);
142
143 d->ui.ignoreListWidget->clear();
144 d->ui.ignoreListWidget->addItems(ignoreList);
145
147}
148
149void ConfigWidget::slotIgnoreWordRemoved()
150{
151 QStringList ignoreList = d->settings->currentIgnoreList();
152 const QList<QListWidgetItem *> selectedItems = d->ui.ignoreListWidget->selectedItems();
153 for (const QListWidgetItem *item : selectedItems) {
154 ignoreList.removeAll(item->text());
155 }
156 d->settings->setCurrentIgnoreList(ignoreList);
157
158 d->ui.ignoreListWidget->clear();
159 d->ui.ignoreListWidget->addItems(ignoreList);
160
162}
163
164void ConfigWidget::setBackgroundCheckingButtonShown(bool b)
165{
166 d->ui.kcfg_backgroundCheckerEnabled->setVisible(b);
167}
168
169bool ConfigWidget::backgroundCheckingButtonShown() const
170{
171 return !d->ui.kcfg_backgroundCheckerEnabled->isHidden();
172}
173
174void ConfigWidget::slotDefault()
175{
176 d->ui.kcfg_autodetectLanguage->setChecked(Settings::defaultAutodetectLanguage());
177 d->ui.kcfg_skipUppercase->setChecked(Settings::defaultSkipUppercase());
178 d->ui.kcfg_skipRunTogether->setChecked(Settings::defauktSkipRunTogether());
179 d->ui.kcfg_checkerEnabledByDefault->setChecked(Settings::defaultCheckerEnabledByDefault());
180 d->ui.kcfg_backgroundCheckerEnabled->setChecked(Settings::defaultBackgroundCheckerEnabled());
181 d->ui.ignoreListWidget->clear();
182 d->ui.m_langCombo->setCurrentByDictionary(d->settings->defaultLanguage());
183}
184
186{
187 d->ui.m_langCombo->setCurrentByDictionary(language);
188}
189
191{
192 if (d->ui.m_langCombo->count()) {
193 return d->ui.m_langCombo->currentDictionary();
194 } else {
195 return QString();
196 }
197}
198
199#include "moc_configwidget.cpp"
void configChanged()
Signal sends when config was changed.
void setLanguage(const QString &language)
Sets the language/dictionary that will be selected by default in this config widget.
QString language() const
Get the currently selected language for spell checking.
void dictionaryChanged(const QString &dictionary)
Emitted whenever the current dictionary changes.
The sonnet namespace.
void clicked(bool checked)
void addWidget(QWidget *widget, int stretch, Qt::Alignment alignment)
void setContentsMargins(const QMargins &margins)
void textChanged(const QString &text)
void append(QList< T > &&value)
qsizetype removeAll(const AT &t)
void itemChanged(QListWidgetItem *item)
void itemSelectionChanged()
void setCheckState(Qt::CheckState state)
virtual void setData(int role, const QVariant &value)
QString text() const const
Q_EMITQ_EMIT
T qobject_cast(QObject *object)
void setObjectName(QAnyStringView name)
bool isEmpty() const const
bool contains(QLatin1StringView str, Qt::CaseSensitivity cs) const const
void sort(Qt::CaseSensitivity cs)
UserRole
QFuture< ArgsType< Signal > > connect(Sender *sender, Signal signal)
This file is part of the KDE documentation.
Documentation copyright © 1996-2024 The KDE developers.
Generated on Tue Mar 26 2024 11:15:10 by doxygen 1.10.0 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.