File indexing completed on 2024-05-12 04:47:03
0001 #include "keyshelper.h" 0002 #include <QCoreApplication> 0003 #include <QDebug> 0004 #include <QKeyEvent> 0005 0006 #include <KI18n/KLocalizedString> 0007 0008 KeysHelper::KeysHelper(QObject *parent) 0009 : QAbstractListModel(parent) 0010 { 0011 this->setKeys(); 0012 } 0013 0014 int KeysHelper::rowCount(const QModelIndex &) const 0015 { 0016 return this->m_keys.count(); 0017 } 0018 0019 QVariant KeysHelper::data(const QModelIndex &index, int role) const 0020 { 0021 const auto key = this->m_keys.at(index.row()); 0022 0023 switch (role) { 0024 case ROLES::KEY: 0025 return key.key; 0026 case ROLES::LABEL: 0027 return key.label; 0028 case ROLES::ICON_NAME: 0029 return key.iconName; 0030 case ROLES::MODIFIER: 0031 return key.modifier; 0032 case ROLES::ITEM: 0033 return QVariant::fromValue(key); 0034 default: 0035 return QVariant(); 0036 } 0037 } 0038 0039 KeysHelper::Group KeysHelper::group() const 0040 { 0041 return m_group; 0042 } 0043 0044 QVariantList KeysHelper::signalsGroup() const 0045 { 0046 auto insert = [](const QString &label, const int &signal) -> QVariantMap 0047 { 0048 return QVariantMap{{"label", label}, {"signal", signal}}; 0049 }; 0050 0051 QVariantList res; 0052 0053 int i = 1; 0054 res << insert("SIGHUP", i++); 0055 res << insert("SIGINT", i++); 0056 res << insert("SIGQUIT", i++); 0057 res << insert("SIGILL", i++); 0058 res << insert("SIGTRAP", i++); 0059 res << insert("SIGABRT", i++); 0060 //// res << insert("SIGIOT", i++); 0061 res << insert("SIGBUS", i++); 0062 res << insert("SIGFPE", i++); 0063 res << insert("SIGKILL", i++); 0064 res << insert("SIGUSR1", i++); 0065 res << insert("SIGEGV", i++); 0066 res << insert("SIGUSR2", i++); 0067 res << insert("SIGPIPE", i++); 0068 res << insert("SIGALRM", i++); 0069 res << insert("SIGTERM", i++); 0070 res << insert("SIGSTKFLT", i++); 0071 res << insert("SIGCHLD", i++); 0072 res << insert("SIGCONT", i++); 0073 res << insert("SIGSTOP", i++); 0074 res << insert("SIGTSTP", i++); 0075 res << insert("SIGTTIN", i++); 0076 res << insert("SIGTTOU", i++); 0077 res << insert("SIGTSTP", i++); 0078 res << insert("SIGURG", i++); 0079 0080 return res; 0081 } 0082 0083 QHash<int, QByteArray> KeysHelper::roleNames() const 0084 { 0085 static QHash<int, QByteArray> roles; 0086 roles[ROLES::ITEM] = "item"; 0087 roles[ROLES::KEY] = "key"; 0088 roles[ROLES::LABEL] = "label"; 0089 roles[ROLES::ICON_NAME] = "iconName"; 0090 roles[ROLES::MODIFIER] = "modifier"; 0091 return roles; 0092 } 0093 0094 void KeysHelper::setKeys() 0095 { 0096 Q_EMIT this->beginResetModel(); 0097 0098 switch (m_group) { 0099 case Group::FN_GROUP: { 0100 this->m_keys = fnKeys(); 0101 break; 0102 } 0103 case Group::NAV_GROUP: { 0104 this->m_keys = navKeys(); 0105 break; 0106 } 0107 case Group::CTRL_GROUP: { 0108 this->m_keys = ctrlKeys(); 0109 break; 0110 } 0111 case Group::NANO_GROUP: { 0112 this->m_keys = nanoKeys(); 0113 break; 0114 } 0115 case Group::DEFAULT_GROUP: { 0116 this->m_keys = defaultKeys(); 0117 break; 0118 } 0119 case Group::SIGNALS_GROUP: { 0120 this->m_keys = signalKeys(); 0121 break; 0122 } 0123 default: { 0124 this->m_keys = defaultKeys(); 0125 } 0126 } 0127 0128 qDebug() << "FINISHED EMITTIGN KEYS" << this->m_keys.count(); 0129 0130 Q_EMIT this->endResetModel(); 0131 } 0132 0133 QVector<Key> KeysHelper::ctrlKeys() 0134 { 0135 QVector<Key> res; 0136 res.append({Qt::Key::Key_C, "Ctrl+C", "", Qt::Modifier::CTRL}); 0137 res.append({Qt::Key::Key_V, "Ctrl+V", "", Qt::Modifier::CTRL}); 0138 res.append({Qt::Key::Key_M, "Ctrl+M", "", Qt::Modifier::CTRL}); 0139 res.append({Qt::Key::Key_F, "Ctrl+F", "", Qt::Modifier::CTRL}); 0140 res.append({Qt::Key::Key_X, "Ctrl+X", "", Qt::Modifier::CTRL}); 0141 0142 return res; 0143 } 0144 0145 QVector<Key> KeysHelper::fnKeys() 0146 { 0147 QVector<Key> res; 0148 res.append({Qt::Key::Key_F1, "F1"}); 0149 res.append({Qt::Key::Key_F2, "F2"}); 0150 res.append({Qt::Key::Key_F3, "F3"}); 0151 res.append({Qt::Key::Key_F4, "F4"}); 0152 res.append({Qt::Key::Key_F5, "F5"}); 0153 res.append({Qt::Key::Key_F6, "F6"}); 0154 res.append({Qt::Key::Key_F7, "F7"}); 0155 res.append({Qt::Key::Key_F8, "F8"}); 0156 res.append({Qt::Key::Key_F9, "F10"}); 0157 res.append({Qt::Key::Key_F10, "F10"}); 0158 res.append({Qt::Key::Key_F11, "F11"}); 0159 res.append({Qt::Key::Key_F12, "F12"}); 0160 0161 return res; 0162 } 0163 0164 QVector<Key> KeysHelper::navKeys() 0165 { 0166 QVector<Key> res; 0167 res.append({Qt::Key::Key_Up, "↑", "go-up"}); 0168 res.append({Qt::Key::Key_Down, "↓", "go-down"}); 0169 res.append({Qt::Key::Key_Left, "←", "go-previous"}); 0170 res.append({Qt::Key::Key_Right, "→", "go-next"}); 0171 0172 return res; 0173 } 0174 0175 QVector<Key> KeysHelper::nanoKeys() 0176 { 0177 QVector<Key> res; 0178 res.append({Qt::Key::Key_Up, "↑", "go-up"}); 0179 res.append({Qt::Key::Key_Down, "↓", "go-down"}); 0180 0181 res.append({Qt::Key::Key_Left, "←", "go-previous"}); 0182 res.append({Qt::Key::Key_Right, "→", "go-next"}); 0183 0184 res.append({Qt::Key::Key_G, "Ctrl+G", "", Qt::Modifier::CTRL}); 0185 res.append({Qt::Key::Key_X, "Ctrl+X", "", Qt::Modifier::CTRL}); 0186 res.append({Qt::Key::Key_O, "Ctrl+O", "", Qt::Modifier::CTRL}); 0187 res.append({Qt::Key::Key_R, "Ctrl+R", "", Qt::Modifier::CTRL}); 0188 res.append({Qt::Key::Key_W, "Ctrl+W", "", Qt::Modifier::CTRL}); 0189 res.append({Qt::Key::Key_K, "Ctrl+K", "", Qt::Modifier::CTRL}); 0190 res.append({Qt::Key::Key_T, "Ctrl+T", "", Qt::Modifier::CTRL}); 0191 res.append({Qt::Key::Key_C, "Ctrl+C", "", Qt::Modifier::CTRL}); 0192 0193 return res; 0194 } 0195 0196 QVector<Key> KeysHelper::defaultKeys() 0197 { 0198 QVector<Key> res; 0199 res.append({Qt::Key::Key_Up, "↑"}); 0200 res.append({Qt::Key::Key_Down, "↓"}); 0201 res.append({Qt::Key::Key_Tab, "Tab"}); 0202 res.append({Qt::Key::Key_Escape, "Esc"}); 0203 res.append({Qt::Key::Key_Control, "Ctrl"}); 0204 res.append({Qt::Key::Key_Alt, "Alt"}); 0205 res.append({Qt::Key::Key_C, "Ctrl+C", "", Qt::Modifier::CTRL}); 0206 0207 return res; 0208 } 0209 0210 QVector<Key> KeysHelper::signalKeys() 0211 { 0212 QVector<Key> res; 0213 0214 res.append({Qt::Key::Key_Z, i18n("Pause"), "", Qt::Modifier::CTRL}); 0215 res.append({Qt::Key::Key_C, i18n("Interrupt"), "", Qt::Modifier::CTRL}); 0216 res.append({Qt::Key::Key_Backslash, i18n("Kill"), "", Qt::Modifier::CTRL}); 0217 0218 return res; 0219 } 0220 0221 void KeysHelper::sendKey(const int &index, QObject *object) 0222 { 0223 if (index > this->m_keys.count() && index < 0) 0224 return; 0225 0226 const auto key = this->m_keys.at(index); 0227 QKeyEvent *event = new QKeyEvent(QEvent::KeyPress, key.key, {key.modifier}); 0228 QCoreApplication::postEvent(object, event); 0229 } 0230 0231 void KeysHelper::setGroup(Group group) 0232 { 0233 if (m_group == group) 0234 return; 0235 0236 m_group = group; 0237 this->setKeys(); 0238 Q_EMIT groupChanged(); 0239 }