1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
|
/*
* SPDX-FileCopyrightText: 2021 Tomaz Canabrava <tcanabrava@kde.org>
* SPDX-FileCopyrightText: 2023 Jakob Petsovits <jpetso@petsovits.com>
*
* SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
*/
#include "PowerButtonActionModel.h"
#include <powerdevilenums.h>
#include <powerdevilpowermanagement.h>
#include <KLocalizedString>
#include <type_traits> // std::is_same_v, std::underlying_type_t
using namespace Qt::StringLiterals;
PowerButtonActionModel::PowerButtonActionModel(QObject *parent, PowerDevil::PowerManagement *pm, std::initializer_list<PowerDevil::PowerButtonAction> actions)
: QAbstractListModel(parent)
{
for (PowerDevil::PowerButtonAction action : actions) {
appendAction(action, pm);
}
}
void PowerButtonActionModel::appendAction(PowerDevil::PowerButtonAction action, PowerDevil::PowerManagement *pm)
{
switch (action) {
case PowerDevil::PowerButtonAction::NoAction:
m_data.append(Data{
.name = i18n("Do nothing"),
.iconName = u"dialog-cancel-symbolic"_s,
.value = qToUnderlying(PowerDevil::PowerButtonAction::NoAction),
});
break;
case PowerDevil::PowerButtonAction::Sleep:
if (pm->canSuspend()) {
m_data.append(Data{
.name = i18nc("Suspend to RAM", "Sleep"),
.iconName = u"system-suspend-symbolic"_s,
.value = qToUnderlying(PowerDevil::PowerButtonAction::Sleep),
});
}
break;
case PowerDevil::PowerButtonAction::Hibernate:
if (pm->canHibernate()) {
m_data.append(Data{
.name = i18n("Hibernate"),
.iconName = u"system-suspend-hibernate-symbolic"_s,
.value = qToUnderlying(PowerDevil::PowerButtonAction::Hibernate),
});
}
break;
case PowerDevil::PowerButtonAction::Shutdown:
m_data.append(Data{
.name = i18nc("Power down the computer", "Shut down"),
.iconName = u"system-shutdown-symbolic"_s,
.value = qToUnderlying(PowerDevil::PowerButtonAction::Shutdown),
});
break;
case PowerDevil::PowerButtonAction::LockScreen:
m_data.append(Data{
.name = i18n("Lock screen"),
.iconName = u"system-lock-screen-symbolic"_s,
.value = qToUnderlying(PowerDevil::PowerButtonAction::LockScreen),
});
break;
case PowerDevil::PowerButtonAction::PromptLogoutDialog:
m_data.append(Data{
.name = i18n("Show logout screen"),
.iconName = u"system-log-out-symbolic"_s,
.value = qToUnderlying(PowerDevil::PowerButtonAction::PromptLogoutDialog),
});
break;
case PowerDevil::PowerButtonAction::TurnOffScreen:
m_data.append(Data{
.name = i18n("Turn off screen"),
.iconName = u"preferences-desktop-screensaver-symbolic"_s,
.value = qToUnderlying(PowerDevil::PowerButtonAction::TurnOffScreen),
});
break;
case PowerDevil::PowerButtonAction::ToggleScreenOnOff:
m_data.append(Data{
.name = i18n("Toggle screen on/off"),
.iconName = u"osd-shutd-screen-symbolic"_s,
.value = qToUnderlying(PowerDevil::PowerButtonAction::TurnOffScreen),
});
break;
}
}
QVariant PowerButtonActionModel::data(const QModelIndex &index, int role) const
{
if (index.row() < 0 || index.row() >= m_data.size()) {
return {};
}
switch (role) {
case Icon:
return QIcon::fromTheme(m_data[index.row()].iconName);
case Name:
return m_data[index.row()].name;
case Value:
static_assert(std::is_same_v<decltype(Data::value), std::underlying_type_t<PowerDevil::PowerButtonAction>>);
return m_data[index.row()].value;
case IconName:
return m_data[index.row()].iconName;
default:
return {};
}
}
int PowerButtonActionModel::rowCount(const QModelIndex &parent) const
{
Q_UNUSED(parent);
return static_cast<int>(m_data.size());
}
QHash<int, QByteArray> PowerButtonActionModel::roleNames() const
{
return QHash<int, QByteArray>{{Icon, "icon"_ba}, {Name, "name"_ba}, {Value, "value"_ba}, {IconName, "iconName"_ba}};
}
#include "moc_PowerButtonActionModel.cpp"
|