File indexing completed on 2024-05-26 04:47:03

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 "translatorconfigurelistswidget.h"
0008 #include "translator/misc/translatorutil.h"
0009 #include "translator/translatorengineloader.h"
0010 #include "translatorconfigurecombowidget.h"
0011 #include "translatorconfigurelanguagelistwidget.h"
0012 #include "translatorconfigurelistswidget.h"
0013 #include <KConfigGroup>
0014 #include <KLocalizedString>
0015 #include <KSharedConfig>
0016 #include <QLabel>
0017 #include <QVBoxLayout>
0018 using namespace TextTranslator;
0019 class Q_DECL_HIDDEN TextTranslator::TranslatorConfigureListsWidget::TranslatorConfigureListsWidgetPrivate
0020 {
0021 public:
0022     TranslatorConfigureListsWidgetPrivate(TranslatorConfigureListsWidget *parent)
0023         : mEngineConfigureComboWidget(new TranslatorConfigureComboWidget(parent))
0024         , mFromLanguageWidget(new TranslatorConfigureLanguageListWidget(i18n("From:"), parent))
0025         , mToLanguageWidget(new TranslatorConfigureLanguageListWidget(i18n("To:"), parent))
0026     {
0027     }
0028     bool mLanguageListLoaded = false;
0029     TranslatorConfigureComboWidget *const mEngineConfigureComboWidget;
0030     TextTranslator::TranslatorConfigureLanguageListWidget *const mFromLanguageWidget;
0031     TextTranslator::TranslatorConfigureLanguageListWidget *const mToLanguageWidget;
0032 };
0033 
0034 TranslatorConfigureListsWidget::TranslatorConfigureListsWidget(QWidget *parent)
0035     : QWidget{parent}
0036     , d(new TranslatorConfigureListsWidgetPrivate(this))
0037 {
0038     auto mainLayout = new QVBoxLayout(this);
0039     mainLayout->setObjectName(QStringLiteral("mainLayout"));
0040     d->mEngineConfigureComboWidget->setObjectName(QStringLiteral("mEngineConfigureComboWidget"));
0041     connect(d->mEngineConfigureComboWidget,
0042             &TranslatorConfigureComboWidget::configureChanged,
0043             this,
0044             &TranslatorConfigureListsWidget::slotEngineSettingsChanged);
0045 
0046     auto hboxLayout = new QHBoxLayout;
0047     hboxLayout->setObjectName(QStringLiteral("hboxLayout"));
0048     hboxLayout->setContentsMargins({});
0049     mainLayout->addLayout(hboxLayout);
0050 
0051     auto label = new QLabel(i18n("Engine:"), this);
0052     label->setObjectName(QStringLiteral("label"));
0053     hboxLayout->addWidget(label);
0054     hboxLayout->addWidget(d->mEngineConfigureComboWidget);
0055     hboxLayout->addStretch(0);
0056 
0057     auto hLanguageListboxLayout = new QHBoxLayout;
0058     hLanguageListboxLayout->setObjectName(QStringLiteral("hLanguageListboxLayout"));
0059     hLanguageListboxLayout->setContentsMargins({});
0060     mainLayout->addLayout(hLanguageListboxLayout);
0061 
0062     d->mFromLanguageWidget->setObjectName(QStringLiteral("mFromLanguageWidget"));
0063     d->mToLanguageWidget->setObjectName(QStringLiteral("mToLanguageWidget"));
0064     hLanguageListboxLayout->addWidget(d->mFromLanguageWidget);
0065     hLanguageListboxLayout->addWidget(d->mToLanguageWidget);
0066 
0067     connect(d->mEngineConfigureComboWidget, &TranslatorConfigureComboWidget::engineChanged, this, &TranslatorConfigureListsWidget::slotEngineChanged);
0068 }
0069 
0070 TranslatorConfigureListsWidget::~TranslatorConfigureListsWidget() = default;
0071 
0072 void TranslatorConfigureListsWidget::save()
0073 {
0074     KConfigGroup groupTranslate(KSharedConfig::openConfig(), TranslatorUtil::groupTranslateName());
0075     groupTranslate.writeEntry(QStringLiteral("From"), d->mFromLanguageWidget->selectedLanguages());
0076     groupTranslate.writeEntry(QStringLiteral("To"), d->mToLanguageWidget->selectedLanguages());
0077     d->mEngineConfigureComboWidget->save();
0078 }
0079 
0080 void TranslatorConfigureListsWidget::load()
0081 {
0082     d->mEngineConfigureComboWidget->load();
0083 }
0084 
0085 void TranslatorConfigureListsWidget::slotEngineSettingsChanged(const QString &engineName)
0086 {
0087     slotEngineChanged(engineName);
0088 }
0089 
0090 void TranslatorConfigureListsWidget::loadLanguagesList()
0091 {
0092     KConfigGroup groupTranslate(KSharedConfig::openConfig(), TranslatorUtil::groupTranslateName());
0093     const auto fromLanguages = groupTranslate.readEntry(QStringLiteral("From"), QStringList());
0094     const auto toLanguages = groupTranslate.readEntry(QStringLiteral("To"), QStringList());
0095     d->mFromLanguageWidget->setSelectedLanguages(fromLanguages);
0096     d->mToLanguageWidget->setSelectedLanguages(toLanguages);
0097 }
0098 
0099 void TranslatorConfigureListsWidget::fillFromToLanguages(const QMap<TextTranslator::TranslatorUtil::Language, QString> &listFromLanguage,
0100                                                          const QMap<TextTranslator::TranslatorUtil::Language, QString> &listToLanguage)
0101 {
0102     QMapIterator<TranslatorUtil::Language, QString> i(listFromLanguage);
0103     TranslatorUtil translatorUtil;
0104     while (i.hasNext()) {
0105         i.next();
0106         const QString languageCode = TranslatorUtil::languageCode(i.key());
0107         d->mFromLanguageWidget->addItem(i.value(), languageCode);
0108     }
0109 
0110     QMapIterator<TranslatorUtil::Language, QString> toLangIt(listToLanguage);
0111     while (toLangIt.hasNext()) {
0112         toLangIt.next();
0113         const QString languageCode = TranslatorUtil::languageCode(toLangIt.key());
0114         d->mToLanguageWidget->addItem(toLangIt.value(), languageCode);
0115     }
0116 }
0117 
0118 void TranslatorConfigureListsWidget::fillLanguages(const QMap<TextTranslator::TranslatorUtil::Language, QString> &listLanguage)
0119 {
0120     QMapIterator<TranslatorUtil::Language, QString> i(listLanguage);
0121     TranslatorUtil translatorUtil;
0122     while (i.hasNext()) {
0123         i.next();
0124         const QString languageCode = TranslatorUtil::languageCode(i.key());
0125         d->mFromLanguageWidget->addItem(i.value(), languageCode);
0126         if ((i.key() != TranslatorUtil::automatic)) {
0127             d->mToLanguageWidget->addItem(i.value(), languageCode);
0128         }
0129     }
0130 }
0131 
0132 void TranslatorConfigureListsWidget::slotEngineChanged(const QString &engine)
0133 {
0134     const QMap<TextTranslator::TranslatorUtil::Language, QString> listFromLanguage =
0135         TextTranslator::TranslatorEngineLoader::self()->supportedFromLanguages(engine);
0136     const QMap<TextTranslator::TranslatorUtil::Language, QString> listToLanguage = TextTranslator::TranslatorEngineLoader::self()->supportedToLanguages(engine);
0137 
0138     if (!d->mLanguageListLoaded) {
0139         fillLanguages(listFromLanguage);
0140         loadLanguagesList();
0141         d->mLanguageListLoaded = true;
0142     } else {
0143         const QStringList fromLanguages = d->mFromLanguageWidget->selectedLanguages();
0144         const QStringList toLanguages = d->mToLanguageWidget->selectedLanguages();
0145 
0146         d->mFromLanguageWidget->clear();
0147         d->mToLanguageWidget->clear();
0148         if (listFromLanguage != listToLanguage) {
0149             fillFromToLanguages(listFromLanguage, listToLanguage);
0150         } else {
0151             fillLanguages(listFromLanguage);
0152         }
0153 
0154         // Restore if possible
0155         d->mFromLanguageWidget->setSelectedLanguages(fromLanguages);
0156         d->mToLanguageWidget->setSelectedLanguages(toLanguages);
0157     }
0158 }
0159 
0160 #include "moc_translatorconfigurelistswidget.cpp"