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 #include "PowerButtonActionModel.h" 0009 0010 #include <powerdevilenums.h> 0011 #include <powerdevilpowermanagement.h> 0012 0013 #include <KLocalizedString> 0014 0015 #include <type_traits> // std::is_same_v, std::underlying_type_t 0016 0017 PowerButtonActionModel::PowerButtonActionModel(QObject *parent, PowerDevil::PowerManagement *pm, std::initializer_list<PowerDevil::PowerButtonAction> actions) 0018 : QAbstractListModel(parent) 0019 { 0020 for (PowerDevil::PowerButtonAction action : actions) { 0021 appendAction(action, pm); 0022 } 0023 } 0024 0025 void PowerButtonActionModel::appendAction(PowerDevil::PowerButtonAction action, PowerDevil::PowerManagement *pm) 0026 { 0027 switch (action) { 0028 case PowerDevil::PowerButtonAction::NoAction: 0029 m_data.append(Data{ 0030 .name = i18n("Do nothing"), 0031 .iconName = "dialog-cancel-symbolic", 0032 .value = qToUnderlying(PowerDevil::PowerButtonAction::NoAction), 0033 }); 0034 break; 0035 0036 case PowerDevil::PowerButtonAction::Sleep: 0037 if (pm->canSuspend()) { 0038 m_data.append(Data{ 0039 .name = i18nc("Suspend to RAM", "Sleep"), 0040 .iconName = "system-suspend-symbolic", 0041 .value = qToUnderlying(PowerDevil::PowerButtonAction::Sleep), 0042 }); 0043 } 0044 break; 0045 0046 case PowerDevil::PowerButtonAction::Hibernate: 0047 if (pm->canHibernate()) { 0048 m_data.append(Data{ 0049 .name = i18n("Hibernate"), 0050 .iconName = "system-suspend-hibernate-symbolic", 0051 .value = qToUnderlying(PowerDevil::PowerButtonAction::Hibernate), 0052 }); 0053 } 0054 break; 0055 0056 case PowerDevil::PowerButtonAction::Shutdown: 0057 m_data.append(Data{ 0058 .name = i18nc("Power down the computer", "Shut down"), 0059 .iconName = "system-shutdown-symbolic", 0060 .value = qToUnderlying(PowerDevil::PowerButtonAction::Shutdown), 0061 }); 0062 break; 0063 0064 case PowerDevil::PowerButtonAction::LockScreen: 0065 m_data.append(Data{ 0066 .name = i18n("Lock screen"), 0067 .iconName = "system-lock-screen-symbolic", 0068 .value = qToUnderlying(PowerDevil::PowerButtonAction::LockScreen), 0069 }); 0070 break; 0071 0072 case PowerDevil::PowerButtonAction::PromptLogoutDialog: 0073 m_data.append(Data{ 0074 .name = i18n("Show logout screen"), 0075 .iconName = "system-log-out-symbolic", 0076 .value = qToUnderlying(PowerDevil::PowerButtonAction::PromptLogoutDialog), 0077 }); 0078 break; 0079 0080 case PowerDevil::PowerButtonAction::TurnOffScreen: 0081 m_data.append(Data{ 0082 .name = i18n("Turn off screen"), 0083 .iconName = "preferences-desktop-screensaver-symbolic", 0084 .value = qToUnderlying(PowerDevil::PowerButtonAction::TurnOffScreen), 0085 }); 0086 break; 0087 0088 case PowerDevil::PowerButtonAction::ToggleScreenOnOff: 0089 m_data.append(Data{ 0090 .name = i18n("Toggle screen on/off"), 0091 .iconName = "osd-shutd-screen-symbolic", 0092 .value = qToUnderlying(PowerDevil::PowerButtonAction::TurnOffScreen), 0093 }); 0094 break; 0095 } 0096 } 0097 0098 QVariant PowerButtonActionModel::data(const QModelIndex &index, int role) const 0099 { 0100 if (index.row() > m_data.size()) { 0101 return {}; 0102 } 0103 0104 switch (role) { 0105 case Icon: 0106 return QIcon::fromTheme(m_data[index.row()].iconName); 0107 case Name: 0108 return m_data[index.row()].name; 0109 case Value: 0110 static_assert(std::is_same_v<decltype(Data::value), std::underlying_type_t<PowerDevil::PowerButtonAction>>); 0111 return m_data[index.row()].value; 0112 case IconName: 0113 return m_data[index.row()].iconName; 0114 default: 0115 return {}; 0116 } 0117 } 0118 0119 int PowerButtonActionModel::rowCount(const QModelIndex &parent) const 0120 { 0121 Q_UNUSED(parent); 0122 return static_cast<int>(m_data.size()); 0123 } 0124 0125 QHash<int, QByteArray> PowerButtonActionModel::roleNames() const 0126 { 0127 return QHash<int, QByteArray>{{Icon, "icon"}, {Name, "name"}, {Value, "value"}, {IconName, "iconName"}}; 0128 }