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"