diff --git a/CMakeLists.txt b/CMakeLists.txt index 19b42ba1..1cf926d6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -49,6 +49,7 @@ include(CheckIncludeFiles) plasma_install_package(look-and-feel org.kde.plasma.phone look-and-feel) plasma_install_package(shell org.kde.plasma.phoneshell shells) +plasma_install_package(quicksettings/nightcolor org.kde.plasma.nightcolor quicksettings) install(FILES plasma_phone_components.notifyrc DESTINATION ${KNOTIFYRC_INSTALL_DIR}) diff --git a/components/mobilehomescreencomponents/quicksettingsmodel.cpp b/components/mobilehomescreencomponents/quicksettingsmodel.cpp index 71e6f171..4e406253 100644 --- a/components/mobilehomescreencomponents/quicksettingsmodel.cpp +++ b/components/mobilehomescreencomponents/quicksettingsmodel.cpp @@ -6,6 +6,11 @@ #include "quicksettingsmodel.h" +#include +#include +#include +#include + QuickSettingsModel::QuickSettingsModel(QObject *parent) : QAbstractListModel(parent) { @@ -38,6 +43,36 @@ QVariant QuickSettingsModel::data(const QModelIndex &index, int role) const return QVariant::fromValue(m_children[index.row()]); } +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; + } + include(createdSetting); + } + delete c; +} + +void QuickSettingsModel::componentComplete() +{ +} + //////////////////////// QuickSetting::QuickSetting(QObject *parent) diff --git a/components/mobilehomescreencomponents/quicksettingsmodel.h b/components/mobilehomescreencomponents/quicksettingsmodel.h index 7a07c885..441f3d0c 100644 --- a/components/mobilehomescreencomponents/quicksettingsmodel.h +++ b/components/mobilehomescreencomponents/quicksettingsmodel.h @@ -61,9 +61,10 @@ private: QList m_children; }; -class QuickSettingsModel : public QAbstractListModel +class QuickSettingsModel : public QAbstractListModel, public QQmlParserStatus { Q_OBJECT + Q_INTERFACES(QQmlParserStatus) Q_PROPERTY(QQmlListProperty children READ children NOTIFY childrenChanged) Q_CLASSINFO("DefaultProperty", "children") QML_ELEMENT @@ -77,6 +78,8 @@ public: QQmlListProperty children(); + void classBegin() override; + void componentComplete() override; Q_SCRIPTABLE void include(QuickSetting *item); Q_SIGNALS: diff --git a/containments/panel/package/contents/ui/quicksettings/SettingsModel.qml b/containments/panel/package/contents/ui/quicksettings/SettingsModel.qml index 2b596a65..46e7506d 100644 --- a/containments/panel/package/contents/ui/quicksettings/SettingsModel.qml +++ b/containments/panel/package/contents/ui/quicksettings/SettingsModel.qml @@ -13,7 +13,6 @@ import org.kde.plasma.core 2.0 as PlasmaCore import org.kde.plasma.components 2.0 as PlasmaComponents import org.kde.plasma.networkmanagement 0.2 as PlasmaNM import org.kde.bluezqt 1.0 as BluezQt -import org.kde.colorcorrect 0.1 as CC import org.kde.plasma.private.nanoshell 2.0 as NanoShell import org.kde.plasma.private.mobilehomescreencomponents 0.1 as HomeScreenComponents @@ -116,24 +115,4 @@ HomeScreenComponents.QuickSettingsModel plasmoid.nativeInterface.autoRotateEnabled = !enabled } } - HomeScreenComponents.QuickSetting { - text: i18n("Night Color") - icon: "redshift-status-on" - enabled: compositorAdaptor.active - settingsCommand: "plasma-settings -m kcm_nightcolor" - - CC.CompositorAdaptor { - id: compositorAdaptor - } - function toggle() { - if (compositorAdaptor.active) { - compositorAdaptor.activeStaged = false; - } else { - compositorAdaptor.activeStaged = true; - compositorAdaptor.modeStaged = 3; // always on - } - compositorAdaptor.sendConfigurationAll(); - enabled = compositorAdaptor.active; - } - } } diff --git a/quicksettings/nightcolor/contents/ui/main.qml b/quicksettings/nightcolor/contents/ui/main.qml new file mode 100644 index 00000000..8cd53421 --- /dev/null +++ b/quicksettings/nightcolor/contents/ui/main.qml @@ -0,0 +1,31 @@ +/* + * SPDX-FileCopyrightText: 2015 Marco Martin + * SPDX-FileCopyrightText: 2021 Devin Lin + * SPDX-FileCopyrightText: 2021 Aleix Pol Gonzalez + * + * SPDX-License-Identifier: LGPL-2.0-or-later + */ + +import org.kde.colorcorrect 0.1 as CC +import org.kde.plasma.private.mobilehomescreencomponents 0.1 as HomeScreenComponents + +HomeScreenComponents.QuickSetting { + text: i18n("Night Color") + icon: "redshift-status-on" + enabled: compositorAdaptor.active + settingsCommand: "plasma-settings -m kcm_nightcolor" + + CC.CompositorAdaptor { + id: compositorAdaptor + } + function toggle() { + if (compositorAdaptor.active) { + compositorAdaptor.activeStaged = false; + } else { + compositorAdaptor.activeStaged = true; + compositorAdaptor.modeStaged = 3; // always on + } + compositorAdaptor.sendConfigurationAll(); + enabled = compositorAdaptor.active; + } +} diff --git a/quicksettings/nightcolor/metadata.desktop b/quicksettings/nightcolor/metadata.desktop new file mode 100644 index 00000000..99f1273f --- /dev/null +++ b/quicksettings/nightcolor/metadata.desktop @@ -0,0 +1,14 @@ +[Desktop Entry] +Name=Night Color +Icon=redshift-status-on + +Type=Service +X-KDE-ServiceTypes=KPackage/GenericQML + +X-KDE-PluginInfo-Author=Aleix Pol +X-KDE-PluginInfo-Email=aleixpol@kde.org +X-KDE-PluginInfo-Name=org.kde.plasma.nightcolor +X-KDE-PluginInfo-Version=0.1 +X-KDE-PluginInfo-Website=https://kde.org +X-KDE-PluginInfo-License=GPL +