File indexing completed on 2024-04-28 13:18:39
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 }