File indexing completed on 2026-06-14 04:35:52

0001 /*
0002    SPDX-FileCopyrightText: 2019-2024 Laurent Montel <montel@kde.org>
0003 
0004    SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "languagetoolconfigwidget.h"
0008 #include "languagetoolcombobox.h"
0009 #include "languagetoolmanager.h"
0010 #include "languagetoolupdatecombobox.h"
0011 // #include "textgrammarcheck_debug.h"
0012 #include <KLocalizedString>
0013 #if QT_VERSION >= QT_VERSION_CHECK(6, 4, 0)
0014 #include <KLineEditEventHandler>
0015 #endif
0016 
0017 #include <QCheckBox>
0018 #include <QLabel>
0019 #include <QLineEdit>
0020 #include <QToolButton>
0021 #include <QVBoxLayout>
0022 using namespace TextGrammarCheck;
0023 LanguageToolConfigWidget::LanguageToolConfigWidget(QWidget *parent)
0024     : QWidget(parent)
0025     , mUseLocalInstance(new QCheckBox(i18n("Use Local Instance"), this))
0026     , mInstancePath(new QLineEdit(this))
0027     , mInstancePathLabel(new QLabel(i18n("Instance Path:"), this))
0028     , mLanguageToolCombobox(new LanguageToolComboBox(this))
0029     , mLanguageToolUpdateCombobox(new LanguageToolUpdateComboBox(this))
0030 {
0031     auto mainLayout = new QVBoxLayout(this);
0032     mainLayout->setObjectName(QStringLiteral("mainlayout"));
0033     mainLayout->setContentsMargins({});
0034 
0035     mUseLocalInstance->setObjectName(QStringLiteral("uselocalinstance"));
0036     mainLayout->addWidget(mUseLocalInstance);
0037 
0038     auto instanceLayout = new QHBoxLayout;
0039     instanceLayout->setObjectName(QStringLiteral("instancelayout"));
0040     instanceLayout->setContentsMargins({});
0041     mInstancePathLabel->setObjectName(QStringLiteral("instancepath"));
0042     mInstancePathLabel->setEnabled(false);
0043     instanceLayout->addWidget(mInstancePathLabel);
0044 
0045     mInstancePath->setObjectName(QStringLiteral("instancepath"));
0046     mInstancePath->setEnabled(false);
0047     mInstancePath->setClearButtonEnabled(true);
0048 #if QT_VERSION >= QT_VERSION_CHECK(6, 4, 0)
0049     KLineEditEventHandler::catchReturnKey(mInstancePath);
0050 #endif
0051     instanceLayout->addWidget(mInstancePath);
0052     mainLayout->addLayout(instanceLayout);
0053 
0054     connect(mUseLocalInstance, &QCheckBox::clicked, this, &LanguageToolConfigWidget::updateWidgets);
0055 
0056     auto languageLayout = new QHBoxLayout;
0057     languageLayout->setObjectName(QStringLiteral("languagelayout"));
0058     auto languageLabel = new QLabel(i18n("Language:"), this);
0059     languageLabel->setObjectName(QStringLiteral("languageLabel"));
0060     languageLayout->addWidget(languageLabel);
0061 
0062     mLanguageToolCombobox->setObjectName(QStringLiteral("languagecombobox"));
0063     languageLayout->addWidget(mLanguageToolCombobox);
0064     mLanguageToolUpdateCombobox->setLanguageToolCombobox(mLanguageToolCombobox);
0065     mLanguageToolUpdateCombobox->setParentWidget(this);
0066 
0067     auto refreshButton = new QToolButton(this);
0068     refreshButton->setObjectName(QStringLiteral("refreshbutton"));
0069     refreshButton->setIcon(QIcon::fromTheme(QStringLiteral("view-refresh")));
0070     refreshButton->setToolTip(i18n("Refresh"));
0071     languageLayout->addWidget(refreshButton);
0072     connect(refreshButton, &QToolButton::clicked, this, [this]() {
0073         if (LanguageToolManager::self()->allowToGetListOfLanguages()) {
0074             mLanguageToolUpdateCombobox->checkListOfLanguagesFromSpecificPath(LanguageToolManager::convertToLanguagePath(mInstancePath->text()));
0075         }
0076     });
0077 
0078     mainLayout->addLayout(languageLayout);
0079 
0080     mainLayout->addStretch(1);
0081     mLanguageToolUpdateCombobox->refreshListOfLanguages();
0082     loadSettings();
0083     updateWidgets(mUseLocalInstance->isChecked());
0084     connect(this, &LanguageToolConfigWidget::resetValue, this, &LanguageToolConfigWidget::slotResetValue);
0085 }
0086 
0087 LanguageToolConfigWidget::~LanguageToolConfigWidget()
0088 {
0089     saveSettings();
0090 }
0091 
0092 void LanguageToolConfigWidget::slotResetValue()
0093 {
0094     mUseLocalInstance->setChecked(false);
0095     mInstancePath->setText(QStringLiteral("https://api.languagetoolplus.com/v2"));
0096     updateWidgets(false);
0097 }
0098 
0099 void LanguageToolConfigWidget::updateWidgets(bool enabled)
0100 {
0101     mInstancePathLabel->setEnabled(enabled);
0102     mInstancePath->setEnabled(enabled);
0103 }
0104 
0105 void LanguageToolConfigWidget::loadSettings()
0106 {
0107     mUseLocalInstance->setChecked(LanguageToolManager::self()->useLocalInstance());
0108     mInstancePath->setText(LanguageToolManager::self()->languageToolPath());
0109     mLanguageToolCombobox->setLanguage(LanguageToolManager::self()->language());
0110 }
0111 
0112 void LanguageToolConfigWidget::saveSettings()
0113 {
0114     LanguageToolManager::self()->setUseLocalInstance(mUseLocalInstance->isChecked());
0115     LanguageToolManager::self()->setLanguageToolPath(mInstancePath->text());
0116     LanguageToolManager::self()->setLanguage(mLanguageToolCombobox->language());
0117     LanguageToolManager::self()->saveSettings();
0118 }
0119 
0120 #include "moc_languagetoolconfigwidget.cpp"