File indexing completed on 2024-04-21 05:25:19

0001 /*
0002     SPDX-FileCopyrightText: 2022 Aditya Mehra <aix.m@outlook.com>
0003     SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0004 */
0005 
0006 #include <keymapmodel.h>
0007 #include <KSharedConfig>
0008 #include <KConfigGroup>
0009 #include <KLocalizedString>
0010 
0011 KeyMapModel::KeyMapModel(QObject *parent)
0012     : QAbstractListModel(parent)
0013 {
0014     m_keyDisplayProvider = new KeyDisplayProvider();
0015     m_roleNames[DeviceTypeRole] = "deviceType";
0016     m_roleNames[ButtonDisplayRole] = "buttonDisplay";
0017     m_roleNames[ButtonTypeRole] = "buttonType";
0018     m_roleNames[ObjectNameRole] = "objectName";
0019     m_roleNames[AssignedKeyRole] = "assignedKey";
0020     m_roleNames[AssignedKeyDisplayRole] = "assignedKeyDisplay";
0021     m_roleNames[AssignedKeyIconRole] = "assignedKeyIcon";
0022     load();
0023 }
0024 
0025 KeyMapModel::~KeyMapModel()
0026 {
0027 }
0028 
0029 QHash<int, QByteArray> KeyMapModel::roleNames() const
0030 {
0031     return m_roleNames;
0032 }
0033 
0034 int KeyMapModel::count() const
0035 {
0036     return m_keyMap.count();
0037 }
0038 
0039 int KeyMapModel::rowCount(const QModelIndex &) const
0040 {
0041     return m_keyMap.size();
0042 }
0043 
0044 void KeyMapModel::load()
0045 {
0046     static KSharedConfigPtr config = KSharedConfig::openConfig(QLatin1String("plasma-remotecontrollersrc"));
0047     static KConfigGroup group_cec (config, QLatin1String("General"));
0048     static KConfigGroup group_gamepad (config, QLatin1String("Gamepad"));
0049 
0050     QVariantMap map;
0051     // CEC
0052     map.insert("DeviceTypeRole", "CEC");
0053     map.insert("ButtonDisplayRole", i18n("Button Left"));
0054     map.insert("ButtonTypeRole", QStringLiteral("ButtonLeft"));
0055     map.insert("ObjectNameRole", QStringLiteral("buttonLeftConfigValue"));
0056     map.insert("AssignedKeyRole", group_cec.readEntry(QStringLiteral("ButtonLeft"), QString()));
0057     map.insert("AssignedKeyDisplayRole", m_keyDisplayProvider->keyDisplay(map.value("AssignedKeyRole").toInt()));
0058     map.insert("AssignedKeyIconRole", m_keyDisplayProvider->keyIcon(map.value("AssignedKeyRole").toInt(), QStringLiteral("CEC")));
0059     m_keyMap.append(map);
0060     map.clear();
0061 
0062     map.insert("DeviceTypeRole", "CEC");
0063     map.insert("ButtonDisplayRole", i18n("Button Right"));
0064     map.insert("ButtonTypeRole", QStringLiteral("ButtonRight"));
0065     map.insert("ObjectNameRole", QStringLiteral("buttonRightConfigValue"));
0066     map.insert("AssignedKeyRole", group_cec.readEntry(QStringLiteral("ButtonRight"), QString()));
0067     map.insert("AssignedKeyDisplayRole", m_keyDisplayProvider->keyDisplay(map.value("AssignedKeyRole").toInt()));
0068     map.insert("AssignedKeyIconRole", m_keyDisplayProvider->keyIcon(map.value("AssignedKeyRole").toInt(), QStringLiteral("CEC")));
0069     m_keyMap.append(map);
0070     map.clear();
0071 
0072     map.insert("DeviceTypeRole", "CEC");
0073     map.insert("ButtonDisplayRole", i18n("Button Up"));
0074     map.insert("ButtonTypeRole", QStringLiteral("ButtonUp"));
0075     map.insert("ObjectNameRole", QStringLiteral("buttonUpConfigValue"));
0076     map.insert("AssignedKeyRole", group_cec.readEntry(QStringLiteral("ButtonUp"), QString()));
0077     map.insert("AssignedKeyDisplayRole", m_keyDisplayProvider->keyDisplay(map.value("AssignedKeyRole").toInt()));
0078     map.insert("AssignedKeyIconRole", m_keyDisplayProvider->keyIcon(map.value("AssignedKeyRole").toInt(), QStringLiteral("CEC")));
0079     m_keyMap.append(map);
0080     map.clear();
0081     
0082     map.insert("DeviceTypeRole", "CEC");
0083     map.insert("ButtonDisplayRole", i18n("Button Down"));
0084     map.insert("ButtonTypeRole", QStringLiteral("ButtonDown"));
0085     map.insert("ObjectNameRole", QStringLiteral("buttonDownConfigValue"));
0086     map.insert("AssignedKeyRole", group_cec.readEntry(QStringLiteral("ButtonDown"), QString()));
0087     map.insert("AssignedKeyDisplayRole", m_keyDisplayProvider->keyDisplay(map.value("AssignedKeyRole").toInt()));
0088     map.insert("AssignedKeyIconRole", m_keyDisplayProvider->keyIcon(map.value("AssignedKeyRole").toInt(), QStringLiteral("CEC")));
0089     m_keyMap.append(map);
0090     map.clear();
0091 
0092     map.insert("DeviceTypeRole", "CEC");
0093     map.insert("ButtonDisplayRole", i18n("Button Enter"));
0094     map.insert("ButtonTypeRole", QStringLiteral("ButtonEnter"));
0095     map.insert("ObjectNameRole", QStringLiteral("buttonEnterConfigValue"));
0096     map.insert("AssignedKeyRole", group_cec.readEntry(QStringLiteral("ButtonEnter"), QString()));
0097     map.insert("AssignedKeyDisplayRole", m_keyDisplayProvider->keyDisplay(map.value("AssignedKeyRole").toInt()));
0098     map.insert("AssignedKeyIconRole", m_keyDisplayProvider->keyIcon(map.value("AssignedKeyRole").toInt(), QStringLiteral("CEC")));
0099     m_keyMap.append(map);
0100     map.clear();
0101 
0102     map.insert("DeviceTypeRole", "CEC");
0103     map.insert("ButtonDisplayRole", i18n("Button Back"));
0104     map.insert("ButtonTypeRole", QStringLiteral("ButtonBack"));
0105     map.insert("ObjectNameRole", QStringLiteral("buttonBackConfigValue"));
0106     map.insert("AssignedKeyRole", group_cec.readEntry(QStringLiteral("ButtonBack"), QString()));
0107     map.insert("AssignedKeyDisplayRole", m_keyDisplayProvider->keyDisplay(map.value("AssignedKeyRole").toInt()));
0108     map.insert("AssignedKeyIconRole", m_keyDisplayProvider->keyIcon(map.value("AssignedKeyRole").toInt(), QStringLiteral("CEC")));
0109     m_keyMap.append(map);
0110     map.clear();
0111 
0112     map.insert("DeviceTypeRole", "CEC");
0113     map.insert("ButtonDisplayRole", i18n("Button Home"));
0114     map.insert("ButtonTypeRole", QStringLiteral("ButtonHomepage"));
0115     map.insert("ObjectNameRole", QStringLiteral("buttonHomepageConfigValue"));
0116     map.insert("AssignedKeyRole", group_cec.readEntry(QStringLiteral("ButtonHomepage"), QString()));
0117     map.insert("AssignedKeyDisplayRole", m_keyDisplayProvider->keyDisplay(map.value("AssignedKeyRole").toInt()));
0118     map.insert("AssignedKeyIconRole", m_keyDisplayProvider->keyIcon(map.value("AssignedKeyRole").toInt(), QStringLiteral("CEC")));
0119     m_keyMap.append(map);
0120     map.clear();
0121 
0122     // Gamepad
0123     map.insert("DeviceTypeRole", "GAMEPAD");
0124     map.insert("ButtonDisplayRole", i18n("Button Left"));
0125     map.insert("ButtonTypeRole", QStringLiteral("ButtonLeft"));
0126     map.insert("ObjectNameRole", QStringLiteral("buttonLeftConfigValue"));
0127     map.insert("AssignedKeyRole", group_gamepad.readEntry(QStringLiteral("ButtonLeft"), QString()));
0128     map.insert("AssignedKeyDisplayRole", m_keyDisplayProvider->keyDisplay(map.value("AssignedKeyRole").toInt()));
0129     map.insert("AssignedKeyIconRole", m_keyDisplayProvider->keyIcon(map.value("AssignedKeyRole").toInt(), QStringLiteral("Gamepad")));
0130     m_keyMap.append(map);
0131     map.clear();
0132 
0133     map.insert("DeviceTypeRole", "GAMEPAD");
0134     map.insert("ButtonDisplayRole", i18n("Button Right"));
0135     map.insert("ButtonTypeRole", QStringLiteral("ButtonRight"));
0136     map.insert("ObjectNameRole", QStringLiteral("buttonRightConfigValue"));
0137     map.insert("AssignedKeyRole", group_gamepad.readEntry(QStringLiteral("ButtonRight"), QString()));
0138     map.insert("AssignedKeyDisplayRole", m_keyDisplayProvider->keyDisplay(map.value("AssignedKeyRole").toInt()));
0139     map.insert("AssignedKeyIconRole", m_keyDisplayProvider->keyIcon(map.value("AssignedKeyRole").toInt(), QStringLiteral("Gamepad")));
0140     m_keyMap.append(map);
0141     map.clear();
0142 
0143     map.insert("DeviceTypeRole", "GAMEPAD");
0144     map.insert("ButtonDisplayRole", i18n("Button Up"));
0145     map.insert("ButtonTypeRole", QStringLiteral("ButtonUp"));
0146     map.insert("ObjectNameRole", QStringLiteral("buttonUpConfigValue"));
0147     map.insert("AssignedKeyRole", group_gamepad.readEntry(QStringLiteral("ButtonUp"), QString()));
0148     map.insert("AssignedKeyDisplayRole", m_keyDisplayProvider->keyDisplay(map.value("AssignedKeyRole").toInt()));
0149     map.insert("AssignedKeyIconRole", m_keyDisplayProvider->keyIcon(map.value("AssignedKeyRole").toInt(), QStringLiteral("Gamepad")));
0150     m_keyMap.append(map);
0151     map.clear();
0152 
0153     map.insert("DeviceTypeRole", "GAMEPAD");    
0154     map.insert("ButtonDisplayRole", i18n("Button Down"));
0155     map.insert("ButtonTypeRole", QStringLiteral("ButtonDown"));
0156     map.insert("ObjectNameRole", QStringLiteral("buttonDownConfigValue"));
0157     map.insert("AssignedKeyRole", group_gamepad.readEntry(QStringLiteral("ButtonDown"), QString()));
0158     map.insert("AssignedKeyDisplayRole", m_keyDisplayProvider->keyDisplay(map.value("AssignedKeyRole").toInt()));
0159     map.insert("AssignedKeyIconRole", m_keyDisplayProvider->keyIcon(map.value("AssignedKeyRole").toInt(), QStringLiteral("Gamepad")));
0160     m_keyMap.append(map);
0161     map.clear();
0162 
0163     map.insert("DeviceTypeRole", "GAMEPAD");
0164     map.insert("ButtonDisplayRole", i18n("Button Enter"));
0165     map.insert("ButtonTypeRole", QStringLiteral("ButtonEnter"));
0166     map.insert("ObjectNameRole", QStringLiteral("buttonEnterConfigValue"));
0167     map.insert("AssignedKeyRole", group_gamepad.readEntry(QStringLiteral("ButtonEnter"), QString()));
0168     map.insert("AssignedKeyDisplayRole", m_keyDisplayProvider->keyDisplay(map.value("AssignedKeyRole").toInt()));
0169     map.insert("AssignedKeyIconRole", m_keyDisplayProvider->keyIcon(map.value("AssignedKeyRole").toInt(), QStringLiteral("Gamepad")));
0170     m_keyMap.append(map);
0171     map.clear();
0172 
0173     map.insert("DeviceTypeRole", "GAMEPAD");
0174     map.insert("ButtonDisplayRole", i18n("Button Back"));
0175     map.insert("ButtonTypeRole", QStringLiteral("ButtonBack"));
0176     map.insert("ObjectNameRole", QStringLiteral("buttonBackConfigValue"));
0177     map.insert("AssignedKeyRole", group_gamepad.readEntry(QStringLiteral("ButtonBack"), QString()));
0178     map.insert("AssignedKeyDisplayRole", m_keyDisplayProvider->keyDisplay(map.value("AssignedKeyRole").toInt()));
0179     map.insert("AssignedKeyIconRole", m_keyDisplayProvider->keyIcon(map.value("AssignedKeyRole").toInt(), QStringLiteral("Gamepad")));
0180     m_keyMap.append(map);
0181     map.clear();
0182 
0183     map.insert("DeviceTypeRole", "GAMEPAD");
0184     map.insert("ButtonDisplayRole", i18n("Button Home"));
0185     map.insert("ButtonTypeRole", QStringLiteral("ButtonHomepage"));
0186     map.insert("ObjectNameRole", QStringLiteral("buttonHomepageConfigValue"));
0187     map.insert("AssignedKeyRole", group_gamepad.readEntry(QStringLiteral("ButtonHomepage"), QString()));
0188     map.insert("AssignedKeyDisplayRole", m_keyDisplayProvider->keyDisplay(map.value("AssignedKeyRole").toInt()));
0189     map.insert("AssignedKeyIconRole", m_keyDisplayProvider->keyIcon(map.value("AssignedKeyRole").toInt(), QStringLiteral("Gamepad")));
0190     m_keyMap.append(map);
0191     map.clear();
0192 }
0193 
0194 QVariant KeyMapModel::data(const QModelIndex &index, int role) const
0195 {
0196     if (!index.isValid()) {
0197         return QVariant();
0198     }
0199     if (index.row() >= m_keyMap.count()) {
0200         return QVariant();
0201     }
0202 
0203     QVariantMap map = m_keyMap[index.row()];
0204     switch (role) {
0205         case DeviceTypeRole:
0206             return map.value("DeviceTypeRole");
0207         case ButtonDisplayRole:
0208             return map.value("ButtonDisplayRole");
0209         case ButtonTypeRole:
0210             return map.value("ButtonTypeRole");
0211         case ObjectNameRole:
0212             return map.value("ObjectNameRole");
0213         case AssignedKeyRole:
0214             return map.value("AssignedKeyRole");
0215         case AssignedKeyDisplayRole:
0216             return map.value("AssignedKeyDisplayRole");
0217         case AssignedKeyIconRole:
0218             return map.value("AssignedKeyIconRole");
0219         default:
0220             return QVariant();
0221     }
0222 
0223     return QVariant();
0224 }
0225 
0226 QVariantMap KeyMapModel::get(int index) const
0227 {
0228     if (index >= m_keyMap.count()) {
0229         return QVariantMap();
0230     }
0231     return m_keyMap.at(index);
0232 }
0233 
0234 void KeyMapModel::refresh()
0235 {
0236     beginResetModel();
0237     m_keyMap.clear();
0238     load();
0239     endResetModel();
0240 }
0241 
0242 #include "moc_keymapmodel.cpp"