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"