File indexing completed on 2024-06-23 04:40:33

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 "translatorconfigurelanguagelistwidget.h"
0008 #include <KLocalizedString>
0009 #include <QLabel>
0010 #include <QLineEdit>
0011 #include <QListView>
0012 #include <QSortFilterProxyModel>
0013 #include <QStandardItemModel>
0014 #include <QVBoxLayout>
0015 #if QT_VERSION < QT_VERSION_CHECK(6, 4, 0)
0016 #include <TextAddonsWidgets/LineEditCatchReturnKey>
0017 #else
0018 #include <KLineEditEventHandler>
0019 #endif
0020 using namespace TextTranslator;
0021 
0022 TranslatorConfigureLanguageListWidget::TranslatorConfigureLanguageListWidget(const QString &labelText, QWidget *parent)
0023     : QWidget{parent}
0024     , mLanguageListWidget(new QListView(this))
0025     , mListSearchLine(new QLineEdit(this))
0026     , mLabel(new QLabel(labelText, this))
0027     , mModel(new QStandardItemModel(this))
0028 {
0029     auto mainLayout = new QVBoxLayout(this);
0030     mainLayout->setContentsMargins({});
0031     mainLayout->setObjectName(QStringLiteral("mainLayout"));
0032 
0033     mLabel->setObjectName(QStringLiteral("mLabel"));
0034     mainLayout->addWidget(mLabel);
0035 
0036     mModel->setObjectName(QStringLiteral("mModel"));
0037 
0038     mListSearchLine->setObjectName(QStringLiteral("mListSearchLine"));
0039     mainLayout->addWidget(mListSearchLine);
0040     mListSearchLine->setPlaceholderText(i18n("Search..."));
0041     auto filterProxyModel = new QSortFilterProxyModel(this);
0042     filterProxyModel->setSortCaseSensitivity(Qt::CaseInsensitive);
0043     filterProxyModel->setSourceModel(mModel);
0044     connect(mListSearchLine, &QLineEdit::textChanged, this, [filterProxyModel](const QString &str) {
0045         filterProxyModel->setFilterFixedString(str);
0046     });
0047 
0048     mLanguageListWidget->setObjectName(QStringLiteral("mLanguageListWidget"));
0049     mainLayout->addWidget(mLanguageListWidget);
0050     mLanguageListWidget->setModel(filterProxyModel);
0051 #if QT_VERSION < QT_VERSION_CHECK(6, 4, 0)
0052     new TextAddonsWidgets::LineEditCatchReturnKey(mListSearchLine, this);
0053 #else
0054     KLineEditEventHandler::catchReturnKey(mListSearchLine);
0055 #endif
0056 }
0057 
0058 TranslatorConfigureLanguageListWidget::~TranslatorConfigureLanguageListWidget() = default;
0059 
0060 void TranslatorConfigureLanguageListWidget::clear()
0061 {
0062     mModel->clear();
0063 }
0064 
0065 void TranslatorConfigureLanguageListWidget::addItem(const QString &translatedStr, const QString &languageCode)
0066 {
0067     QStandardItem *item = new QStandardItem();
0068     item->setText(translatedStr);
0069     item->setData(languageCode, LanguageCode);
0070     item->setFlags(item->flags() | Qt::ItemIsUserCheckable);
0071     item->setEditable(false);
0072     item->setCheckState(Qt::Unchecked);
0073     mModel->appendRow(item);
0074 }
0075 
0076 QStringList TranslatorConfigureLanguageListWidget::selectedLanguages() const
0077 {
0078     QStringList langs;
0079     for (int i = 0; i < mModel->rowCount(); ++i) {
0080         const auto item = mModel->item(i);
0081         if (item->checkState() == Qt::Checked) {
0082             langs.append(item->data(LanguageCode).toString());
0083         }
0084     }
0085     return langs;
0086 }
0087 
0088 void TranslatorConfigureLanguageListWidget::setSelectedLanguages(const QStringList &list)
0089 {
0090     for (int i = 0, total = mModel->rowCount(); i < total; ++i) {
0091         const auto item = mModel->item(i);
0092         item->setCheckState(list.contains(item->data(LanguageCode).toString()) ? Qt::Checked : Qt::Unchecked);
0093     }
0094 }
0095 
0096 #include "moc_translatorconfigurelanguagelistwidget.cpp"