KTextAddons

translatorconfigurelanguagelistwidget.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 "translatorconfigurelanguagelistwidget.h"
8#include <KLineEditEventHandler>
9#include <KLocalizedString>
10#include <QLabel>
11#include <QLineEdit>
12#include <QListView>
13#include <QSortFilterProxyModel>
14#include <QStandardItemModel>
15#include <QVBoxLayout>
16using namespace TextTranslator;
17
18TranslatorConfigureLanguageListWidget::TranslatorConfigureLanguageListWidget(const QString &labelText, QWidget *parent)
19 : QWidget{parent}
20 , mLanguageListWidget(new QListView(this))
21 , mListSearchLine(new QLineEdit(this))
22 , mLabel(new QLabel(labelText, this))
23 , mModel(new QStandardItemModel(this))
24{
25 auto mainLayout = new QVBoxLayout(this);
26 mainLayout->setContentsMargins({});
27 mainLayout->setObjectName(QStringLiteral("mainLayout"));
28
29 mLabel->setObjectName(QStringLiteral("mLabel"));
30 mainLayout->addWidget(mLabel);
31
32 mModel->setObjectName(QStringLiteral("mModel"));
33
34 mListSearchLine->setObjectName(QStringLiteral("mListSearchLine"));
35 mainLayout->addWidget(mListSearchLine);
36 mListSearchLine->setPlaceholderText(i18nc("@info:placeholder", "Search…"));
37 auto filterProxyModel = new QSortFilterProxyModel(this);
38 filterProxyModel->setSortCaseSensitivity(Qt::CaseInsensitive);
39 filterProxyModel->setFilterCaseSensitivity(Qt::CaseInsensitive);
40 filterProxyModel->setSourceModel(mModel);
41 connect(mListSearchLine, &QLineEdit::textChanged, this, [filterProxyModel](const QString &str) {
42 filterProxyModel->setFilterFixedString(str);
43 });
44
45 mLanguageListWidget->setObjectName(QStringLiteral("mLanguageListWidget"));
46 mainLayout->addWidget(mLanguageListWidget);
47 mLanguageListWidget->setModel(filterProxyModel);
49}
50
51TranslatorConfigureLanguageListWidget::~TranslatorConfigureLanguageListWidget() = default;
52
53void TranslatorConfigureLanguageListWidget::clear()
54{
55 mModel->clear();
56}
57
58void TranslatorConfigureLanguageListWidget::addItem(const QString &translatedStr, const QString &languageCode)
59{
60 QStandardItem *item = new QStandardItem();
61 item->setText(translatedStr);
62 item->setData(languageCode, LanguageCode);
63 item->setFlags(item->flags() | Qt::ItemIsUserCheckable);
64 item->setEditable(false);
66 mModel->appendRow(item);
67}
68
69QStringList TranslatorConfigureLanguageListWidget::selectedLanguages() const
70{
71 QStringList langs;
72 for (int i = 0; i < mModel->rowCount(); ++i) {
73 const auto item = mModel->item(i);
74 if (item->checkState() == Qt::Checked) {
75 langs.append(item->data(LanguageCode).toString());
76 }
77 }
78 return langs;
79}
80
81void TranslatorConfigureLanguageListWidget::setSelectedLanguages(const QStringList &list)
82{
83 for (int i = 0, total = mModel->rowCount(); i < total; ++i) {
84 const auto item = mModel->item(i);
85 item->setCheckState(list.contains(item->data(LanguageCode).toString()) ? Qt::Checked : Qt::Unchecked);
86 }
87}
88
89#include "moc_translatorconfigurelanguagelistwidget.cpp"
QString i18nc(const char *context, const char *text, const TYPE &arg...)
void catchReturnKey(QObject *lineEdit)
KIOCORE_EXPORT QStringList list(const QString &fileClass)
void textChanged(const QString &text)
void append(QList< T > &&value)
Qt::CheckState checkState() const const
virtual QVariant data(int role) const const
Qt::ItemFlags flags() const const
void setCheckState(Qt::CheckState state)
virtual void setData(const QVariant &value, int role)
void setEditable(bool editable)
void setFlags(Qt::ItemFlags flags)
void setText(const QString &text)
bool contains(QLatin1StringView str, Qt::CaseSensitivity cs) const const
CaseInsensitive
Unchecked
ItemIsUserCheckable
QFuture< ArgsType< Signal > > connect(Sender *sender, Signal signal)
QString toString() const const
This file is part of the KDE documentation.
Documentation copyright © 1996-2025 The KDE developers.
Generated on Fri Apr 25 2025 12:06:14 by doxygen 1.13.2 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.