/* SPDX-FileCopyrightText: 2025 Vlad Zahorodnii SPDX-License-Identifier: GPL-2.0-or-later */ #include "lookandfeelmodel.h" #include #include LookAndFeelModel::LookAndFeelModel(QObject *parent) : QAbstractListModel(parent) { } void LookAndFeelModel::classBegin() { } void LookAndFeelModel::componentComplete() { m_complete = true; reload(); } QHash LookAndFeelModel::roleNames() const { QHash names = QAbstractListModel::roleNames(); names.insert(Role::PackageId, QByteArrayLiteral("packageId")); names.insert(Role::Name, QByteArrayLiteral("name")); names.insert(Role::Preview, QByteArrayLiteral("preview")); return names; } QVariant LookAndFeelModel::data(const QModelIndex &modelIndex, int role) const { const int index = modelIndex.row(); if (index >= m_lnfs.size()) { return QVariant(); } const auto &lnf = m_lnfs[index]; switch (role) { case Role::PackageId: return lnf.id; case Role::Name: return lnf.name; case Role::Preview: return lnf.preview; default: return QVariant(); } } int LookAndFeelModel::rowCount(const QModelIndex &parent) const { return parent.isValid() ? 0 : m_lnfs.size(); } KLookAndFeel::Variant LookAndFeelModel::variant() const { return m_variant; } void LookAndFeelModel::setVariant(KLookAndFeel::Variant variant) { if (m_variant != variant) { m_variant = variant; if (m_complete) { reload(); } Q_EMIT variantChanged(); } } int LookAndFeelModel::indexOf(const QString &packageId) const { for (int i = 0; i < m_lnfs.size(); ++i) { if (m_lnfs[i].id == packageId) { return i; } } return -1; } void LookAndFeelModel::reload() { const QList packagesMetaData = KPackage::PackageLoader::self()->listPackages(QStringLiteral("Plasma/LookAndFeel")); QList lnfs; lnfs.reserve(packagesMetaData.count()); for (const KPluginMetaData &metadata : packagesMetaData) { const KPackage::Package pkg = KPackage::PackageLoader::self()->loadPackage(QStringLiteral("Plasma/LookAndFeel"), metadata.pluginId()); const auto variant = KLookAndFeel::colorSchemeVariant(pkg); if (variant != KLookAndFeel::Variant::Unknown && variant != m_variant) { continue; } lnfs.append({ .id = metadata.pluginId(), .name = metadata.name(), .preview = pkg.fileUrl("preview"), }); } std::sort(lnfs.begin(), lnfs.end(), [](const auto &a, const auto &b) { return a.name < b.name; }); beginResetModel(); m_lnfs = lnfs; endResetModel(); } #include "moc_lookandfeelmodel.cpp"