File indexing completed on 2024-05-12 05:38:47

0001 /*
0002  *  SPDX-FileCopyrightText: 2021 Tomaz Canabrava <tcanabrava@kde.org>
0003  *  SPDX-FileCopyrightText: 2023 Jakob Petsovits <jpetso@petsovits.com>
0004  *
0005  *  SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0006  */
0007 
0008 #pragma once
0009 
0010 #include <powerdevilenums.h>
0011 
0012 #include <QAbstractListModel>
0013 #include <QIcon>
0014 #include <QList>
0015 #include <QString>
0016 
0017 #include "powerdevilconfigcommonprivate_export.h"
0018 
0019 namespace PowerDevil
0020 {
0021 class PowerManagement;
0022 }
0023 
0024 class POWERDEVILCONFIGCOMMONPRIVATE_EXPORT PowerButtonActionModel : public QAbstractListModel
0025 {
0026     Q_OBJECT
0027 
0028 public:
0029     enum { Icon = Qt::DecorationRole, Name = Qt::DisplayRole, Value = Qt::UserRole, IconName = Qt::UserRole + 1 };
0030 
0031     PowerButtonActionModel(QObject *parent,
0032                            PowerDevil::PowerManagement *pm,
0033                            std::initializer_list<PowerDevil::PowerButtonAction> actions = {
0034                                PowerDevil::PowerButtonAction::NoAction,
0035                                PowerDevil::PowerButtonAction::Sleep,
0036                                PowerDevil::PowerButtonAction::Hibernate,
0037                                PowerDevil::PowerButtonAction::Shutdown,
0038                                PowerDevil::PowerButtonAction::PromptLogoutDialog,
0039                                PowerDevil::PowerButtonAction::LockScreen,
0040                                PowerDevil::PowerButtonAction::TurnOffScreen,
0041                                PowerDevil::PowerButtonAction::ToggleScreenOnOff,
0042                            });
0043 
0044     QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
0045     int rowCount(const QModelIndex &parent) const override;
0046     QHash<int, QByteArray> roleNames() const override;
0047 
0048 private:
0049     void appendAction(PowerDevil::PowerButtonAction, PowerDevil::PowerManagement *pm);
0050 
0051 private:
0052     struct Data {
0053         QString name;
0054         QString iconName;
0055         uint value;
0056     };
0057 
0058     QList<Data> m_data;
0059 };