/* * SPDX-FileCopyrightText: 2021 Aleix Pol Gonzalez * * SPDX-License-Identifier: LGPL-2.0-or-later */ #include "quicksettingsmodel.h" #include #include #include #include using namespace MobileShell; QuickSettingsModel::QuickSettingsModel(QObject *parent) : QAbstractListModel(parent) { } QHash QuickSettingsModel::roleNames() const { return {{Qt::UserRole, "modelData"}}; } QQmlListProperty QuickSettingsModel::children() { return QQmlListProperty(this, &m_children); } int QuickSettingsModel::rowCount(const QModelIndex &parent) const { if (parent.isValid()) return 0; return m_children.count() + m_external.count(); } QVariant QuickSettingsModel::data(const QModelIndex &index, int role) const { if (!index.isValid() || index.row() >= rowCount({}) || role != Qt::UserRole) { return {}; } QObject *obj = nullptr; if (index.row() < m_children.count()) { obj = m_children[index.row()]; } else { obj = m_external[index.row() - m_children.count()]; } return QVariant::fromValue(obj); } void QuickSettingsModel::classBegin() { QQmlEngine *engine = qmlEngine(this); const auto packages = KPackage::PackageLoader::self()->listPackages(QStringLiteral("KPackage/GenericQML"), "plasma/quicksettings"); auto c = new QQmlComponent(engine, this); for (const auto &metaData : packages) { KPackage::Package package = KPackage::PackageLoader::self()->loadPackage("KPackage/GenericQML", QFileInfo(metaData.fileName()).path()); if (!package.isValid()) { qWarning() << "Could not load" << metaData.fileName(); continue; } c->loadUrl(package.fileUrl("mainscript"), QQmlComponent::PreferSynchronous); auto created = c->create(engine->rootContext()); auto createdSetting = qobject_cast(created); if (!createdSetting) { qWarning() << "Could not load" << metaData.fileName() << created; delete created; continue; } m_external += createdSetting; } delete c; } void QuickSettingsModel::componentComplete() { } void QuickSettingsModel::include(QuickSetting *item) { const int c = m_children.count() + m_external.count(); beginInsertRows({}, c, c); m_external.append(item); endInsertRows(); }