File indexing completed on 2024-05-12 16:16:03

0001 /*
0002    SPDX-FileCopyrightText: 2019-2023 Laurent Montel <montel@kde.org>
0003 
0004    SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "languagetoolresultwidget.h"
0008 #include "common/grammarresulttextedit.h"
0009 #include "languagetoolcombobox.h"
0010 #include "languagetoolmanager.h"
0011 #include "languagetoolparser.h"
0012 #include "languagetoolresultjob.h"
0013 #include "languagetoolupdatecombobox.h"
0014 
0015 #include <KLocalizedString>
0016 #include <KMessageBox>
0017 
0018 #include <QHBoxLayout>
0019 #include <QJsonDocument>
0020 #include <QToolButton>
0021 using namespace TextGrammarCheck;
0022 LanguageToolResultWidget::LanguageToolResultWidget(QWidget *parent)
0023     : GrammarResultWidget(parent)
0024     , mLanguageToolUpdateCombobox(new LanguageToolUpdateComboBox(this))
0025 {
0026     addExtraWidget();
0027     mLanguageToolUpdateCombobox->setLanguageToolCombobox(mLanguageToolComboBox);
0028     mLanguageToolUpdateCombobox->setParentWidget(this);
0029     if (LanguageToolManager::self()->allowToGetListOfLanguages()) {
0030         mLanguageToolUpdateCombobox->firstRefreshListOfLanguages();
0031     } else {
0032         mLanguageToolComboBox->setLanguage(LanguageToolManager::self()->language());
0033     }
0034 }
0035 
0036 LanguageToolResultWidget::~LanguageToolResultWidget() = default;
0037 
0038 void LanguageToolResultWidget::checkGrammar()
0039 {
0040     auto job = new LanguageToolResultJob(this);
0041     job->setUrl(LanguageToolManager::self()->languageToolCheckPath());
0042     job->setNetworkAccessManager(LanguageToolManager::self()->networkAccessManager());
0043     job->setText(mResult->toPlainText());
0044     job->setLanguage(/*LanguageToolManager::self()->language()*/ mLanguageToolComboBox->language());
0045     connect(job, &LanguageToolResultJob::finished, this, &LanguageToolResultWidget::slotCheckGrammarFinished);
0046     connect(job, &LanguageToolResultJob::error, this, &LanguageToolResultWidget::slotError);
0047     job->start();
0048 }
0049 
0050 void LanguageToolResultWidget::slotCheckGrammarFinished(const QString &result)
0051 {
0052     LanguageToolParser parser;
0053     const QJsonDocument doc = QJsonDocument::fromJson(result.toUtf8());
0054     const QJsonObject fields = doc.object();
0055     applyGrammarResult(parser.parseResult(fields));
0056 }
0057 
0058 void LanguageToolResultWidget::slotError(const QString &str)
0059 {
0060     KMessageBox::error(this, i18n("An error was reported: %1", str), i18n("Failed to check grammar."));
0061 }
0062 
0063 void LanguageToolResultWidget::addExtraWidget()
0064 {
0065     auto extraWidgetLayout = new QHBoxLayout;
0066     extraWidgetLayout->setObjectName(QStringLiteral("extraWidgetLayout"));
0067     extraWidgetLayout->setContentsMargins({});
0068     mLanguageToolComboBox = new LanguageToolComboBox(this);
0069     mLanguageToolComboBox->setObjectName(QStringLiteral("languagetoolcombobox"));
0070     extraWidgetLayout->addWidget(mLanguageToolComboBox);
0071 
0072     auto recheckBtn = new QToolButton(this);
0073     recheckBtn->setObjectName(QStringLiteral("recheck-button"));
0074     recheckBtn->setIcon(QIcon::fromTheme(QStringLiteral("view-refresh")));
0075     recheckBtn->setIconSize(QSize(16, 16));
0076     recheckBtn->setToolTip(i18n("Check"));
0077     recheckBtn->setAutoRaise(true);
0078     extraWidgetLayout->addWidget(recheckBtn);
0079 
0080     mExtraWidgetLayout->addLayout(extraWidgetLayout);
0081     connect(recheckBtn, &QToolButton::clicked, this, &LanguageToolResultWidget::checkAgain);
0082 }
0083 
0084 #include "moc_languagetoolresultwidget.cpp"