File indexing completed on 2024-05-12 17:07:45

0001 /*
0002  *   SPDX-FileCopyrightText: 2021 Aleix Pol Gonzalez <aleixpol@kde.org>
0003  *
0004  *   SPDX-License-Identifier: LGPL-2.0-or-later
0005  */
0006 
0007 #pragma once
0008 
0009 #include "qqml.h"
0010 #include <QAbstractListModel>
0011 #include <QQmlListProperty>
0012 
0013 class QuickSetting : public QObject
0014 {
0015     Q_OBJECT
0016     Q_PROPERTY(QString text READ text WRITE setText REQUIRED NOTIFY textChanged)
0017     Q_PROPERTY(QString status READ status WRITE setStatus NOTIFY statusChanged) // if no status is explicitly set, On/Off is used by default
0018     Q_PROPERTY(QString icon READ iconName WRITE setIconName REQUIRED NOTIFY iconNameChanged)
0019     Q_PROPERTY(QString settingsCommand READ settingsCommand WRITE setSettingsCommand NOTIFY settingsCommandChanged)
0020     Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled NOTIFY enabledChanged)
0021     Q_PROPERTY(bool available READ isAvailable WRITE setAvailable NOTIFY availableChanged)
0022     Q_PROPERTY(QQmlListProperty<QObject> children READ children CONSTANT)
0023     Q_CLASSINFO("DefaultProperty", "children")
0024     QML_NAMED_ELEMENT("QuickSetting")
0025 public:
0026     QuickSetting(QObject *parent = nullptr);
0027 
0028     QString text() const
0029     {
0030         return m_text;
0031     }
0032     QString status() const
0033     {
0034         return m_status;
0035     }
0036     QString iconName() const
0037     {
0038         return m_iconName;
0039     }
0040     QString settingsCommand() const
0041     {
0042         return m_settingsCommand;
0043     }
0044     bool isEnabled() const
0045     {
0046         return m_enabled;
0047     }
0048     bool isAvailable() const
0049     {
0050         return m_available;
0051     }
0052 
0053     void setText(const QString &text);
0054     void setStatus(const QString &status);
0055     void setIconName(const QString &iconName);
0056     void setSettingsCommand(const QString &settingsCommand);
0057     void setEnabled(bool enabled);
0058     void setAvailable(bool available);
0059     QQmlListProperty<QObject> children();
0060 
0061 Q_SIGNALS:
0062     void enabledChanged(bool enabled);
0063     void availableChanged(bool available);
0064     void textChanged(const QString &text);
0065     void statusChanged(const QString &text);
0066     void iconNameChanged(const QString &icon);
0067     void settingsCommandChanged(const QString &settingsCommand);
0068 
0069 private:
0070     bool m_enabled = true;
0071     bool m_available = true;
0072     QString m_text;
0073     QString m_status;
0074     QString m_iconName;
0075     QString m_settingsCommand;
0076     QList<QObject *> m_children;
0077 };