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"