File indexing completed on 2024-06-16 04:28:07

0001 /*
0002    SPDX-FileCopyrightText: 2022-2024 Laurent Montel <montel@kde.org>
0003 
0004    SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "translatormenu.h"
0008 #include "texttranslator_debug.h"
0009 #include "translator/misc/translatorutil.h"
0010 #include "translator/translatorengineloader.h"
0011 
0012 #include <KConfigGroup>
0013 #include <KLocalizedString>
0014 #include <KSharedConfig>
0015 #include <QMenu>
0016 
0017 using namespace TextTranslator;
0018 TranslatorMenu::TranslatorMenu(QObject *parent)
0019     : QObject(parent)
0020     , mMenu(new QMenu)
0021 {
0022     mMenu->setObjectName(QStringLiteral("menu"));
0023     mMenu->setTitle(i18n("Translate..."));
0024     mMenu->setIcon(QIcon::fromTheme(QStringLiteral("preferences-desktop-locale")));
0025     updateMenu();
0026 }
0027 
0028 TranslatorMenu::~TranslatorMenu()
0029 {
0030     delete mMenu;
0031 }
0032 
0033 bool TranslatorMenu::isEmpty() const
0034 {
0035     return mMenu->isEmpty();
0036 }
0037 
0038 void TranslatorMenu::updateMenu()
0039 {
0040     mMenu->clear();
0041     KConfigGroup groupTranslate(KSharedConfig::openConfig(), QStringLiteral("Translate"));
0042     const QString engine = groupTranslate.readEntry(QStringLiteral("engine"), QStringLiteral("google")); // Google by default
0043     // qDebug() << " engine " << engine;
0044     const QString currentPluginName = TextTranslator::TranslatorEngineLoader::self()->currentPluginName(engine);
0045     QString actionText;
0046     if (!currentPluginName.isEmpty()) {
0047         actionText = QStringLiteral("[%1] ").arg(currentPluginName);
0048     }
0049     const auto fromList = groupTranslate.readEntry(QStringLiteral("From"), QStringList());
0050     const auto toList = groupTranslate.readEntry(QStringLiteral("To"), QStringList());
0051     for (const auto &fromLang : fromList) {
0052         const QString fromLangI18n = TextTranslator::TranslatorUtil::searchI18nFromLanguage(fromLang);
0053         if (fromLangI18n.isEmpty()) {
0054             qCWarning(TEXTTRANSLATOR_LOG) << "Impossible to find \"from\" language " << fromLangI18n;
0055         } else {
0056             for (const auto &toLang : toList) {
0057                 const QString toLangI18n = TextTranslator::TranslatorUtil::searchI18nFromLanguage(toLang);
0058                 if (toLangI18n.isEmpty()) {
0059                     qCWarning(TEXTTRANSLATOR_LOG) << "Impossible to find \"to\" language " << fromLangI18n;
0060                 } else {
0061                     if (fromLangI18n != toLangI18n) {
0062                         auto action = new QAction(mMenu);
0063                         action->setText(QStringLiteral("%1%2 -> %3").arg(actionText, fromLangI18n, toLangI18n));
0064                         connect(action, &QAction::triggered, this, [this, fromLang, toLang]() {
0065                             Q_EMIT translate(fromLang, toLang, mModelIndex);
0066                         });
0067                         mMenu->addAction(action);
0068                     }
0069                 }
0070             }
0071         }
0072     }
0073 }
0074 
0075 const QPersistentModelIndex &TranslatorMenu::modelIndex() const
0076 {
0077     return mModelIndex;
0078 }
0079 
0080 void TranslatorMenu::setModelIndex(const QPersistentModelIndex &newModelIndex)
0081 {
0082     mModelIndex = newModelIndex;
0083 }
0084 
0085 QMenu *TranslatorMenu::menu() const
0086 {
0087     return mMenu;
0088 }
0089 
0090 #include "moc_translatormenu.cpp"