KTextAddons

translatorconfigurelistswidget.cpp
1/*
2 SPDX-FileCopyrightText: 2022-2025 Laurent Montel <montel@kde.org>
3
4 SPDX-License-Identifier: LGPL-2.0-or-later
5*/
6
7#include "translatorconfigurelistswidget.h"
8#include "translator/misc/translatorutil.h"
9#include "translator/translatorengineloader.h"
10#include "translatorconfigurecombowidget.h"
11#include "translatorconfigurelanguagelistwidget.h"
12#include "translatorconfigurelistswidget.h"
13#include <KConfigGroup>
14#include <KLocalizedString>
15#include <KSharedConfig>
16#include <QLabel>
17#include <QVBoxLayout>
18using namespace TextTranslator;
19class Q_DECL_HIDDEN TextTranslator::TranslatorConfigureListsWidget::TranslatorConfigureListsWidgetPrivate
20{
21public:
22 TranslatorConfigureListsWidgetPrivate(TranslatorConfigureListsWidget *parent)
23 : mEngineConfigureComboWidget(new TranslatorConfigureComboWidget(parent))
24 , mFromLanguageWidget(new TranslatorConfigureLanguageListWidget(i18n("From:"), parent))
25 , mToLanguageWidget(new TranslatorConfigureLanguageListWidget(i18n("To:"), parent))
26 {
27 }
28 bool mLanguageListLoaded = false;
29 TranslatorConfigureComboWidget *const mEngineConfigureComboWidget;
30 TextTranslator::TranslatorConfigureLanguageListWidget *const mFromLanguageWidget;
31 TextTranslator::TranslatorConfigureLanguageListWidget *const mToLanguageWidget;
32};
33
34TranslatorConfigureListsWidget::TranslatorConfigureListsWidget(QWidget *parent)
35 : QWidget{parent}
36 , d(new TranslatorConfigureListsWidgetPrivate(this))
37{
38 auto mainLayout = new QVBoxLayout(this);
39 mainLayout->setObjectName(QStringLiteral("mainLayout"));
40 d->mEngineConfigureComboWidget->setObjectName(QStringLiteral("mEngineConfigureComboWidget"));
41 connect(d->mEngineConfigureComboWidget,
42 &TranslatorConfigureComboWidget::configureChanged,
43 this,
44 &TranslatorConfigureListsWidget::slotEngineSettingsChanged);
45
46 auto hboxLayout = new QHBoxLayout;
47 hboxLayout->setObjectName(QStringLiteral("hboxLayout"));
48 hboxLayout->setContentsMargins({});
49 mainLayout->addLayout(hboxLayout);
50
51 auto label = new QLabel(i18nc("@label:textbox", "Engine:"), this);
52 label->setObjectName(QStringLiteral("label"));
53 label->setTextFormat(Qt::PlainText);
54 hboxLayout->addWidget(label);
55 hboxLayout->addWidget(d->mEngineConfigureComboWidget);
56 hboxLayout->addStretch(0);
57
58 auto hLanguageListboxLayout = new QHBoxLayout;
59 hLanguageListboxLayout->setObjectName(QStringLiteral("hLanguageListboxLayout"));
60 hLanguageListboxLayout->setContentsMargins({});
61 mainLayout->addLayout(hLanguageListboxLayout);
62
63 d->mFromLanguageWidget->setObjectName(QStringLiteral("mFromLanguageWidget"));
64 d->mToLanguageWidget->setObjectName(QStringLiteral("mToLanguageWidget"));
65 hLanguageListboxLayout->addWidget(d->mFromLanguageWidget);
66 hLanguageListboxLayout->addWidget(d->mToLanguageWidget);
67
68 connect(d->mEngineConfigureComboWidget, &TranslatorConfigureComboWidget::engineChanged, this, &TranslatorConfigureListsWidget::slotEngineChanged);
69}
70
71TranslatorConfigureListsWidget::~TranslatorConfigureListsWidget() = default;
72
73void TranslatorConfigureListsWidget::save()
74{
75 KConfigGroup groupTranslate(KSharedConfig::openConfig(), TranslatorUtil::groupTranslateName());
76 groupTranslate.writeEntry(QStringLiteral("From"), d->mFromLanguageWidget->selectedLanguages());
77 groupTranslate.writeEntry(QStringLiteral("To"), d->mToLanguageWidget->selectedLanguages());
78 d->mEngineConfigureComboWidget->save();
79}
80
81void TranslatorConfigureListsWidget::load()
82{
83 d->mEngineConfigureComboWidget->load();
84}
85
86void TranslatorConfigureListsWidget::slotEngineSettingsChanged(const QString &engineName)
87{
88 slotEngineChanged(engineName);
89}
90
91void TranslatorConfigureListsWidget::loadLanguagesList()
92{
93 KConfigGroup groupTranslate(KSharedConfig::openConfig(), TranslatorUtil::groupTranslateName());
94 const auto fromLanguages = groupTranslate.readEntry(QStringLiteral("From"), QStringList());
95 const auto toLanguages = groupTranslate.readEntry(QStringLiteral("To"), QStringList());
96 d->mFromLanguageWidget->setSelectedLanguages(fromLanguages);
97 d->mToLanguageWidget->setSelectedLanguages(toLanguages);
98}
99
100void TranslatorConfigureListsWidget::fillFromToLanguages(const QMap<TextTranslator::TranslatorUtil::Language, QString> &listFromLanguage,
101 const QMap<TextTranslator::TranslatorUtil::Language, QString> &listToLanguage)
102{
103 QMapIterator<TranslatorUtil::Language, QString> i(listFromLanguage);
104 TranslatorUtil translatorUtil;
105 while (i.hasNext()) {
106 i.next();
107 const QString languageCode = TranslatorUtil::languageCode(i.key());
108 d->mFromLanguageWidget->addItem(i.value(), languageCode);
109 }
110
111 QMapIterator<TranslatorUtil::Language, QString> toLangIt(listToLanguage);
112 while (toLangIt.hasNext()) {
113 toLangIt.next();
114 const QString languageCode = TranslatorUtil::languageCode(toLangIt.key());
115 d->mToLanguageWidget->addItem(toLangIt.value(), languageCode);
116 }
117}
118
119void TranslatorConfigureListsWidget::fillLanguages(const QMap<TextTranslator::TranslatorUtil::Language, QString> &listLanguage)
120{
121 QMapIterator<TranslatorUtil::Language, QString> i(listLanguage);
122 TranslatorUtil translatorUtil;
123 while (i.hasNext()) {
124 i.next();
125 const QString languageCode = TranslatorUtil::languageCode(i.key());
126 d->mFromLanguageWidget->addItem(i.value(), languageCode);
127 if ((i.key() != TranslatorUtil::automatic)) {
128 d->mToLanguageWidget->addItem(i.value(), languageCode);
129 }
130 }
131}
132
133void TranslatorConfigureListsWidget::slotEngineChanged(const QString &engine)
134{
135 const QMap<TextTranslator::TranslatorUtil::Language, QString> listFromLanguage =
136 TextTranslator::TranslatorEngineLoader::self()->supportedFromLanguages(engine);
137 const QMap<TextTranslator::TranslatorUtil::Language, QString> listToLanguage = TextTranslator::TranslatorEngineLoader::self()->supportedToLanguages(engine);
138
139 if (!d->mLanguageListLoaded) {
140 fillLanguages(listFromLanguage);
141 loadLanguagesList();
142 d->mLanguageListLoaded = true;
143 } else {
144 const QStringList fromLanguages = d->mFromLanguageWidget->selectedLanguages();
145 const QStringList toLanguages = d->mToLanguageWidget->selectedLanguages();
146
147 d->mFromLanguageWidget->clear();
148 d->mToLanguageWidget->clear();
149 if (listFromLanguage != listToLanguage) {
150 fillFromToLanguages(listFromLanguage, listToLanguage);
151 } else {
152 fillLanguages(listFromLanguage);
153 }
154
155 // Restore if possible
156 d->mFromLanguageWidget->setSelectedLanguages(fromLanguages);
157 d->mToLanguageWidget->setSelectedLanguages(toLanguages);
158 }
159}
160
161#include "moc_translatorconfigurelistswidget.cpp"
static KSharedConfig::Ptr openConfig(const QString &fileName=QString(), OpenFlags mode=FullConfig, QStandardPaths::StandardLocation type=QStandardPaths::GenericConfigLocation)
QString i18nc(const char *context, const char *text, const TYPE &arg...)
QString i18n(const char *text, const TYPE &arg...)
QString label(StandardShortcut id)
void setObjectName(QAnyStringView name)
PlainText
QFuture< ArgsType< Signal > > connect(Sender *sender, Signal signal)
This file is part of the KDE documentation.
Documentation copyright © 1996-2025 The KDE developers.
Generated on Fri Mar 28 2025 11:48:40 by doxygen 1.13.2 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.