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"