File indexing completed on 2024-04-14 15:31:33

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 "keydisplayprovider.h"
0007 #include <QVariantMap>
0008 #include <linux/input-event-codes.h>
0009 #include <KLocalizedString>
0010 
0011 KeyDisplayProvider::KeyDisplayProvider(QObject *parent)
0012     : QObject(parent)
0013 {
0014     m_displayMap.append(QVariantMap({{ "key", KEY_PLAY }, { "text", i18n("Play") }, { "genericIcon", "media-playback-start" }, { "gamePadIcon", "" }, { "psIcon", "" }, { "cecIcon", "" } }));
0015     m_displayMap.append(QVariantMap({{ "key", KEY_STOP }, { "text", i18n("Stop") }, { "genericIcon", "media-playback-stop" }, { "gamePadIcon", "" }, { "psIcon", "" }, { "cecIcon", "" } }));
0016     m_displayMap.append(QVariantMap({{ "key", KEY_PAUSE }, { "text", i18n("Pause") }, { "genericIcon", "media-playback-pause" }, { "gamePadIcon", "media-playback-pause" }, { "psIcon", "" }, { "cecIcon", "" } }));
0017     m_displayMap.append(QVariantMap({{ "key", KEY_REWIND }, { "text", i18n("Rewind") }, { "genericIcon", "media-seek-backward" }, { "gamePadIcon", "media-seek-backward" }, { "psIcon", "" }, { "cecIcon", "" } }));
0018     m_displayMap.append(QVariantMap({{ "key", KEY_FASTFORWARD }, { "text", i18n("Fast Forward") }, { "genericIcon", "media-seek-forward" }, { "gamePadIcon", "" }, { "psIcon", "" }, { "cecIcon", "" } }));
0019     m_displayMap.append(QVariantMap({{ "key", KEY_ENTER }, { "text", i18n("Enter") }, { "genericIcon", "keyboard-enter" }, { "gamePadIcon", "input-gamepad-a" }, { "psIcon", "input-gamepad-playstation-cross" }, { "cecIcon", "input-tvremote-ok" } }));
0020     m_displayMap.append(QVariantMap({{ "key", KEY_UP }, { "text", i18n("Up") }, { "genericIcon", "arrow-up" }, { "gamePadIcon", "input-gamepad-dpad-up" }, { "psIcon", "input-gamepad-playstation-dpad-up" }, { "cecIcon", "input-tvremote-dpad-up" } }));
0021     m_displayMap.append(QVariantMap({{ "key", KEY_DOWN }, { "text", i18n("Down") }, { "genericIcon", "arrow-down" }, { "gamePadIcon", "input-gamepad-dpad-down" }, { "psIcon", "input-gamepad-playstation-dpad-down" }, { "cecIcon", "input-tvremote-dpad-down" } }));
0022     m_displayMap.append(QVariantMap({{ "key", KEY_RIGHT }, { "text", i18n("Right") }, { "genericIcon", "arrow-right" }, { "gamePadIcon", "input-gamepad-dpad-right" }, { "psIcon", "input-gamepad-playstation-dpad-right" }, { "cecIcon", "input-tvremote-dpad-right" } }));
0023     m_displayMap.append(QVariantMap({{ "key", KEY_LEFT }, { "text", i18n("Left") }, { "genericIcon", "arrow-left" }, { "gamePadIcon", "input-gamepad-dpad-left" }, { "psIcon", "input-gamepad-playstation-dpad-left" }, { "cecIcon", "input-tvremote-dpad-left" } }));
0024     m_displayMap.append(QVariantMap({{ "key", KEY_0 }, { "text", i18n("Button 0") }, { "genericIcon", "" }, { "gamePadIcon", "" }, { "psIcon", "" }, { "cecIcon", "" } }));
0025     m_displayMap.append(QVariantMap({{ "key", KEY_1 }, { "text", i18n("Button 1") }, { "genericIcon", "" }, { "gamePadIcon", "" }, { "psIcon", "" }, { "cecIcon", "" } }));
0026     m_displayMap.append(QVariantMap({{ "key", KEY_2 }, { "text", i18n("Button 2") }, { "genericIcon", "" }, { "gamePadIcon", "" }, { "psIcon", "" }, { "cecIcon", "" } }));
0027     m_displayMap.append(QVariantMap({{ "key", KEY_3 }, { "text", i18n("Button 3") }, { "genericIcon", "" }, { "gamePadIcon", "" }, { "psIcon", "" }, { "cecIcon", "" } }));
0028     m_displayMap.append(QVariantMap({{ "key", KEY_4 }, { "text", i18n("Button 4") }, { "genericIcon", "" }, { "gamePadIcon", "" }, { "psIcon", "" }, { "cecIcon", "" } }));
0029     m_displayMap.append(QVariantMap({{ "key", KEY_5 }, { "text", i18n("Button 5") }, { "genericIcon", "" }, { "gamePadIcon", "" }, { "psIcon", "" }, { "cecIcon", "" } }));
0030     m_displayMap.append(QVariantMap({{ "key", KEY_6 }, { "text", i18n("Button 6") }, { "genericIcon", "" }, { "gamePadIcon", "" }, { "psIcon", "" }, { "cecIcon", "" } }));
0031     m_displayMap.append(QVariantMap({{ "key", KEY_7 }, { "text", i18n("Button 7") }, { "genericIcon", "" }, { "gamePadIcon", "" }, { "psIcon", "" }, { "cecIcon", "" } }));
0032     m_displayMap.append(QVariantMap({{ "key", KEY_8 }, { "text", i18n("Button 8") }, { "genericIcon", "" }, { "gamePadIcon", "" }, { "psIcon", "" }, { "cecIcon", "" } }));
0033     m_displayMap.append(QVariantMap({{ "key", KEY_9 }, { "text", i18n("Button 9") }, { "genericIcon", "" }, { "gamePadIcon", "" }, { "psIcon", "" }, { "cecIcon", "" } }));
0034     m_displayMap.append(QVariantMap({{ "key", KEY_BLUE }, { "text", i18n("Button Blue") }, { "genericIcon", "" }, { "gamePadIcon", "" }, { "psIcon", "" }, { "cecIcon", "" } }));
0035     m_displayMap.append(QVariantMap({{ "key", KEY_GREEN }, { "text", i18n("Button Green") }, { "genericIcon", "" }, { "gamePadIcon", "" }, { "psIcon", "" }, { "cecIcon", "" } }));
0036     m_displayMap.append(QVariantMap({{ "key", KEY_YELLOW }, { "text", i18n("Button Yellow") }, { "genericIcon", "" }, { "gamePadIcon", "" }, { "psIcon", "" }, { "cecIcon", "" } }));
0037     m_displayMap.append(QVariantMap({{ "key", KEY_RED }, { "text", i18n("Button Red") }, { "genericIcon", "" }, { "gamePadIcon", "" }, { "psIcon", "" }, { "cecIcon", "" } }));
0038     m_displayMap.append(QVariantMap({{ "key", KEY_CHANNELUP}, { "text", i18n("Channel Up") }, { "genericIcon", "arrow-up-double" }, { "gamePadIcon", "" }, { "psIcon", "" }, { "cecIcon", "" } }));
0039     m_displayMap.append(QVariantMap({{ "key", KEY_CHANNELDOWN}, { "text", i18n("Channel Down") }, { "genericIcon", "arrow-down-double" }, { "gamePadIcon", "" }, { "psIcon", "" }, { "cecIcon", "" } }));
0040     m_displayMap.append(QVariantMap({{ "key", KEY_EXIT }, { "text", i18n("Exit") }, { "genericIcon", "application-exit" }, { "gamePadIcon", "" }, { "psIcon", "" }, { "cecIcon", "" } }));
0041     m_displayMap.append(QVariantMap({{ "key", KEY_BACK }, { "text", i18n("Back") }, { "genericIcon", "go-previous" }, { "gamePadIcon", "input-gamepad-rt" }, { "psIcon", "input-gamepad-playstation-r2" }, { "cecIcon", "input-tvremote-back" } }));
0042     m_displayMap.append(QVariantMap({{ "key", KEY_HOME }, { "text", i18n("Home") }, { "genericIcon", "go-home" }, { "gamePadIcon", "" }, { "psIcon", "" }, { "cecIcon", "input-tvremote-home" } }));
0043     m_displayMap.append(QVariantMap({{ "key", KEY_HOMEPAGE }, { "text", i18n("Home") }, { "genericIcon", "go-home" }, { "gamePadIcon", "" }, { "psIcon", "" }, { "cecIcon", "input-tvremote-home" } }));
0044     m_displayMap.append(QVariantMap({{ "key", KEY_MENU }, { "text", i18n("Menu") }, { "genericIcon", "menu" }, { "gamePadIcon", "input-gamepad-xbox-series-menu" }, { "psIcon", "input-gamepad-playstation-dualsense-options" }, { "cecIcon", "input-tvremote-menu" } }));
0045     m_displayMap.append(QVariantMap({{ "key", KEY_INFO }, { "text", i18n("Info") }, { "genericIcon", "dialog-information" }, { "gamePadIcon", "" }, { "psIcon", "" }, { "cecIcon", "" } }));
0046     m_displayMap.append(QVariantMap({{ "key", KEY_SUBTITLE }, { "text", i18n("Subtitle") }, { "genericIcon", "media-standard-track" }, { "gamePadIcon", "" }, { "psIcon", "" }, { "cecIcon", "" } }));
0047     m_displayMap.append(QVariantMap({{ "key", KEY_LEFTMETA }, { "text", i18n("Left Meta") }, { "genericIcon", "code-function" }, { "gamePadIcon", "input-gamepad-xbox-series-view" }, { "psIcon", "input-gamepad-playstation-dualsense-create" }, { "cecIcon", "" } }));
0048     m_displayMap.append(QVariantMap({{ "key", KEY_GAMES }, { "text", i18n("Games") }, { "genericIcon", "applications-games" }, { "gamePadIcon", "input-gamepad-xbox-360-start" }, { "psIcon", "input-gamepad-playstation-dualshock-3-start" }, { "cecIcon", "" } }));
0049     m_displayMap.append(QVariantMap({{ "key", KEY_CANCEL }, { "text", i18n("Cancel") }, { "genericIcon", "dialog-cancel" }, { "gamePadIcon", "input-gamepad-b" }, { "psIcon", "input-gamepad-circle" }, { "cecIcon", "" } }));
0050 
0051     m_displayMap.append(QVariantMap({{ "key", BTN_MODE }, { "text", i18n("Mode") }, { "genericIcon", "input-mouse" }, { "gamePadIcon", "input-gamepad-xbox-series-view" }, { "psIcon", "input-gamepad-playstation-dualsense-create" }, { "cecIcon", "" } }));
0052     m_displayMap.append(QVariantMap({{ "key", BTN_START }, { "text", i18n("Start") }, { "genericIcon", "media-playback-start" }, { "gamePadIcon", "input-gamepad-xbox-360-start" }, { "psIcon", "input-gamepad-playstation-dualshock-3-start" }, { "cecIcon", "" } }));
0053     m_displayMap.append(QVariantMap({{ "key", BTN_NORTH }, { "text", i18n("Gamepad X / Gamepad Square") }, { "genericIcon", "input-gamepad-x" }, { "gamePadIcon", "input-gamepad-x" }, { "psIcon", "input-gamepad-playstation-square" }, { "cecIcon", "" } }));
0054     m_displayMap.append(QVariantMap({{ "key", BTN_SOUTH }, { "text", i18n("Gamepad A / Gamepad Cross") }, { "genericIcon", "input-gamepad-a" }, { "gamePadIcon", "input-gamepad-a" }, { "psIcon", "input-gamepad-playstation-cross" }, { "cecIcon", "" } }));
0055     m_displayMap.append(QVariantMap({{ "key", BTN_EAST }, { "text", i18n("Gamepad B / Gamepad Circle") }, { "genericIcon", "input-gamepad-b" }, { "gamePadIcon", "input-gamepad-b" }, { "psIcon", "input-gamepad-playstation-circle" }, { "cecIcon", "" } }));
0056     m_displayMap.append(QVariantMap({{ "key", BTN_WEST }, { "text", i18n("Gamepad Y / Gamepad Triangle") }, { "genericIcon", "input-gamepad-y" }, { "gamePadIcon", "input-gamepad-y" }, { "psIcon", "input-gamepad-playstation-triangle" }, { "cecIcon", "" } }));
0057     m_displayMap.append(QVariantMap({{ "key", BTN_TL }, { "text", i18n("Trigger Left-1") }, { "genericIcon", "input-gamepad-lb" }, { "gamePadIcon", "input-gamepad-lb" }, { "psIcon", "input-gamepad-playstation-l1" }, { "cecIcon", "" } }));
0058     m_displayMap.append(QVariantMap({{ "key", BTN_TR }, { "text", i18n("Trigger Right-1") }, { "genericIcon", "input-gamepad-rb" }, { "gamePadIcon", "input-gamepad-rb" }, { "psIcon", "input-gamepad-playstation-r1" }, { "cecIcon", "" } }));
0059     m_displayMap.append(QVariantMap({{ "key", BTN_TL2 }, { "text", i18n("Trigger Left-2") }, { "genericIcon", "input-gamepad-lt" }, { "gamePadIcon", "input-gamepad-lt" }, { "psIcon", "input-gamepad-playstation-l2" }, { "cecIcon", "" } }));
0060     m_displayMap.append(QVariantMap({{ "key", BTN_TR2 }, { "text", i18n("Trigger Right-2") }, { "genericIcon", "input-gamepad-rt" }, { "gamePadIcon", "input-gamepad-rt" }, { "psIcon", "input-gamepad-playstation-r2" }, { "cecIcon", "" } }));
0061     m_displayMap.append(QVariantMap({{ "key", BTN_DPAD_UP }, { "text", i18n("DPad Up") }, { "genericIcon", "input-gamepad-dpad-up" }, { "gamePadIcon", "input-gamepad-dpad-up" }, { "psIcon", "input-gamepad-playstation-dpad-up" }, { "cecIcon", "" } }));
0062     m_displayMap.append(QVariantMap({{ "key", BTN_DPAD_DOWN }, { "text", i18n("DPad Down") }, { "genericIcon", "input-gamepad-dpad-down" }, { "gamePadIcon", "input-gamepad-dpad-down" }, { "psIcon", "input-gamepad-playstation-dpad-down" }, { "cecIcon", "" } }));
0063     m_displayMap.append(QVariantMap({{ "key", BTN_DPAD_LEFT }, { "text", i18n("DPad Left") }, { "genericIcon", "input-gamepad-dpad-left" }, { "gamePadIcon", "input-gamepad-dpad-left" }, { "psIcon", "input-gamepad-playstation-dpad-left" }, { "cecIcon", "" } }));
0064     m_displayMap.append(QVariantMap({{ "key", BTN_DPAD_RIGHT }, { "text", i18n("DPad Right") }, { "genericIcon", "input-gamepad-dpad-right" }, { "gamePadIcon", "input-gamepad-dpad-right" }, { "psIcon", "input-gamepad-playstation-dpad-right" }, { "cecIcon", "" } }));
0065     m_displayMap.append(QVariantMap({{ "key", BTN_SELECT }, { "text", i18n("Select") }, { "genericIcon", "input-gamepad-xbox-series-menu" }, { "gamePadIcon", "input-gamepad-xbox-series-menu" }, { "psIcon", "input-gamepad-playstation-dualsense-options" }, { "cecIcon", "" } }));
0066 }
0067 
0068 KeyDisplayProvider::~KeyDisplayProvider()
0069 {
0070 
0071 }
0072 
0073 QString KeyDisplayProvider::keyDisplay(const int &key) const
0074 {
0075     for (const QVariantMap &map : m_displayMap) {
0076         if (map.value("key") == key) {
0077             return map.value("text").toString();
0078         }
0079     }
0080     return QString();
0081 }
0082 
0083 QString KeyDisplayProvider::keyIcon(const int &key, const QString &deviceType) const
0084 {
0085     for (const QVariantMap &map : m_displayMap) {
0086         if (map.value("key") == key) {
0087             if(deviceType == "Gamepad" || deviceType == "Xbox" || deviceType == "Wii") {
0088                 if(!map.value("gamePadIcon").toString().isEmpty()) {
0089                     return map.value("gamePadIcon").toString();
0090                 } else {
0091                     return map.value("genericIcon").toString();
0092                 }
0093             } else if(deviceType == "playstation") {
0094                 if(!map.value("psIcon").toString().isEmpty()) {
0095                     return map.value("psIcon").toString();
0096                 } else {
0097                     return map.value("genericIcon").toString();
0098                 }
0099             } else if(deviceType == "CEC") {
0100                 if(!map.value("cecIcon").toString().isEmpty()) {
0101                     return map.value("cecIcon").toString();
0102                 } else {
0103                     return map.value("genericIcon").toString();
0104                 }
0105             } else {
0106                 return map.value("genericIcon").toString();
0107             }
0108         }
0109     }
0110     return QString();
0111 }