File indexing completed on 2024-04-28 04:32:01

0001 /*
0002  * Copyright (C) 2009-2015 by Stephen Allewell
0003  * steve.allewell@gmail.com
0004  *
0005  * This program is free software; you can redistribute it and/or modify
0006  * it under the terms of the GNU General Public License as published by
0007  * the Free Software Foundation; either version 2 of the License, or
0008  * (at your option) any later version.
0009  */
0010 
0011 #include "KeycodeLineEdit.h"
0012 
0013 #include <QKeyEvent>
0014 
0015 const struct KEYCODE {
0016     int qtKey;
0017     QString qtText;
0018 } keyCodes[] = {
0019     {Qt::Key_Escape, QStringLiteral("Escape")},
0020     {Qt::Key_Tab, QStringLiteral("Tab")},
0021     {Qt::Key_Backtab, QStringLiteral("Backtab")},
0022     // { Qt::Key_Backspace, "Backspace" },
0023     // { Qt::Key_Return, "Return" },
0024     // { Qt::Key_Enter, "Enter" },
0025     {Qt::Key_Insert, QStringLiteral("Insert")},
0026     // { Qt::Key_Delete, "Delete" },
0027     {Qt::Key_Pause, QStringLiteral("Pause")},
0028     {Qt::Key_Print, QStringLiteral("Print")},
0029     {Qt::Key_SysReq, QStringLiteral("SysReq")},
0030     {Qt::Key_Clear, QStringLiteral("Clear")},
0031     {Qt::Key_Home, QStringLiteral("Home")},
0032     {Qt::Key_End, QStringLiteral("End")},
0033     {Qt::Key_Left, QStringLiteral("Left")},
0034     {Qt::Key_Up, QStringLiteral("Up")},
0035     {Qt::Key_Right, QStringLiteral("Right")},
0036     {Qt::Key_Down, QStringLiteral("Down")},
0037     {Qt::Key_PageUp, QStringLiteral("PageUp")},
0038     {Qt::Key_PageDown, QStringLiteral("PageDown")},
0039     {Qt::Key_Shift, QStringLiteral("Shift")},
0040     {Qt::Key_Control, QStringLiteral("Control")},
0041     {Qt::Key_Meta, QStringLiteral("Meta")},
0042     {Qt::Key_Alt, QStringLiteral("Alt")},
0043     // { Qt::Key_AltGr, "AltGr" },
0044     // { Qt::Key_CapsLock, "CapsLock" },
0045     // { Qt::Key_NumLock, "NumLock" },
0046     // { Qt::Key_ScrollLock, "ScrollLock" },
0047     {Qt::Key_F1, QStringLiteral("F1")},
0048     {Qt::Key_F2, QStringLiteral("F2")},
0049     {Qt::Key_F3, QStringLiteral("F3")},
0050     {Qt::Key_F4, QStringLiteral("F4")},
0051     {Qt::Key_F5, QStringLiteral("F5")},
0052     {Qt::Key_F6, QStringLiteral("F6")},
0053     {Qt::Key_F7, QStringLiteral("F7")},
0054     {Qt::Key_F8, QStringLiteral("F8")},
0055     {Qt::Key_F9, QStringLiteral("F9")},
0056     {Qt::Key_F10, QStringLiteral("F10")},
0057     {Qt::Key_F11, QStringLiteral("F11")},
0058     {Qt::Key_F12, QStringLiteral("F12")},
0059     {Qt::Key_F13, QStringLiteral("F13")},
0060     {Qt::Key_F14, QStringLiteral("F14")},
0061     {Qt::Key_F15, QStringLiteral("F15")},
0062     {Qt::Key_F16, QStringLiteral("F16")},
0063     {Qt::Key_F17, QStringLiteral("F17")},
0064     {Qt::Key_F18, QStringLiteral("F18")},
0065     {Qt::Key_F19, QStringLiteral("F19")},
0066     {Qt::Key_F20, QStringLiteral("F20")},
0067     {Qt::Key_F21, QStringLiteral("F21")},
0068     {Qt::Key_F22, QStringLiteral("F22")},
0069     {Qt::Key_F23, QStringLiteral("F23")},
0070     {Qt::Key_F24, QStringLiteral("F24")},
0071     {Qt::Key_F25, QStringLiteral("F25")},
0072     {Qt::Key_F26, QStringLiteral("F26")},
0073     {Qt::Key_F27, QStringLiteral("F27")},
0074     {Qt::Key_F28, QStringLiteral("F28")},
0075     {Qt::Key_F29, QStringLiteral("F29")},
0076     {Qt::Key_F30, QStringLiteral("F30")},
0077     {Qt::Key_F31, QStringLiteral("F31")},
0078     {Qt::Key_F32, QStringLiteral("F32")},
0079     {Qt::Key_F33, QStringLiteral("F33")},
0080     {Qt::Key_F34, QStringLiteral("F34")},
0081     {Qt::Key_F35, QStringLiteral("F35")},
0082     {Qt::Key_Super_L, QStringLiteral("Super_L")},
0083     {Qt::Key_Super_R, QStringLiteral("Super_R")},
0084     {Qt::Key_Menu, QStringLiteral("Menu")},
0085     {Qt::Key_Hyper_L, QStringLiteral("Hyper_L")},
0086     {Qt::Key_Hyper_R, QStringLiteral("Hyper_R")},
0087     {Qt::Key_Help, QStringLiteral("Help")},
0088     {Qt::Key_Direction_L, QStringLiteral("Direction_L")},
0089     {Qt::Key_Direction_R, QStringLiteral("Direction_R")},
0090     {Qt::Key_Space, QStringLiteral("Space")},
0091     {Qt::Key_Any, QStringLiteral("Any")},
0092     {Qt::Key_Exclam, QStringLiteral("Exclam")},
0093     {Qt::Key_QuoteDbl, QStringLiteral("QuoteDbl")},
0094     {Qt::Key_NumberSign, QStringLiteral("NumberSign")},
0095     {Qt::Key_Dollar, QStringLiteral("Dollar")},
0096     {Qt::Key_Percent, QStringLiteral("Percent")},
0097     {Qt::Key_Ampersand, QStringLiteral("Ampersand")},
0098     {Qt::Key_Apostrophe, QStringLiteral("Apostrophe")},
0099     {Qt::Key_ParenLeft, QStringLiteral("ParenLeft")},
0100     {Qt::Key_ParenRight, QStringLiteral("ParenRight")},
0101     {Qt::Key_Asterisk, QStringLiteral("Asterisk")},
0102     {Qt::Key_Plus, QStringLiteral("Plus")},
0103     {Qt::Key_Comma, QStringLiteral("Comma")},
0104     {Qt::Key_Minus, QStringLiteral("Minus")},
0105     {Qt::Key_Period, QStringLiteral("Period")},
0106     {Qt::Key_Slash, QStringLiteral("Slash")},
0107     {Qt::Key_0, QStringLiteral("0")},
0108     {Qt::Key_1, QStringLiteral("1")},
0109     {Qt::Key_2, QStringLiteral("2")},
0110     {Qt::Key_3, QStringLiteral("3")},
0111     {Qt::Key_4, QStringLiteral("4")},
0112     {Qt::Key_5, QStringLiteral("5")},
0113     {Qt::Key_6, QStringLiteral("6")},
0114     {Qt::Key_7, QStringLiteral("7")},
0115     {Qt::Key_8, QStringLiteral("8")},
0116     {Qt::Key_9, QStringLiteral("9")},
0117     {Qt::Key_Colon, QStringLiteral("Colon")},
0118     {Qt::Key_Semicolon, QStringLiteral("Semicolon")},
0119     {Qt::Key_Less, QStringLiteral("Less")},
0120     {Qt::Key_Equal, QStringLiteral("Equal")},
0121     {Qt::Key_Greater, QStringLiteral("Greater")},
0122     {Qt::Key_Question, QStringLiteral("Question")},
0123     {Qt::Key_At, QStringLiteral("At")},
0124     {Qt::Key_A, QStringLiteral("A")},
0125     {Qt::Key_B, QStringLiteral("B")},
0126     {Qt::Key_C, QStringLiteral("C")},
0127     {Qt::Key_D, QStringLiteral("D")},
0128     {Qt::Key_E, QStringLiteral("E")},
0129     {Qt::Key_F, QStringLiteral("F")},
0130     {Qt::Key_G, QStringLiteral("G")},
0131     {Qt::Key_H, QStringLiteral("H")},
0132     {Qt::Key_I, QStringLiteral("I")},
0133     {Qt::Key_J, QStringLiteral("J")},
0134     {Qt::Key_K, QStringLiteral("K")},
0135     {Qt::Key_L, QStringLiteral("L")},
0136     {Qt::Key_M, QStringLiteral("M")},
0137     {Qt::Key_N, QStringLiteral("N")},
0138     {Qt::Key_O, QStringLiteral("O")},
0139     {Qt::Key_P, QStringLiteral("P")},
0140     {Qt::Key_Q, QStringLiteral("Q")},
0141     {Qt::Key_R, QStringLiteral("R")},
0142     {Qt::Key_S, QStringLiteral("S")},
0143     {Qt::Key_T, QStringLiteral("T")},
0144     {Qt::Key_U, QStringLiteral("U")},
0145     {Qt::Key_V, QStringLiteral("V")},
0146     {Qt::Key_W, QStringLiteral("W")},
0147     {Qt::Key_X, QStringLiteral("X")},
0148     {Qt::Key_Y, QStringLiteral("Y")},
0149     {Qt::Key_Z, QStringLiteral("Z")},
0150     {Qt::Key_BracketLeft, QStringLiteral("BracketLeft")},
0151     {Qt::Key_Backslash, QStringLiteral("Backslash")},
0152     {Qt::Key_BracketRight, QStringLiteral("BracketRight")},
0153     {Qt::Key_AsciiCircum, QStringLiteral("AsciiCircum")},
0154     {Qt::Key_Underscore, QStringLiteral("Underscore")},
0155     {Qt::Key_QuoteLeft, QStringLiteral("QuoteLeft")},
0156     {Qt::Key_BraceLeft, QStringLiteral("BraceLeft")},
0157     {Qt::Key_Bar, QStringLiteral("Bar")},
0158     {Qt::Key_BraceRight, QStringLiteral("BraceRight")},
0159     {Qt::Key_AsciiTilde, QStringLiteral("AsciiTilde")},
0160     {Qt::Key_nobreakspace, QStringLiteral("nobreakspace")},
0161     {Qt::Key_exclamdown, QStringLiteral("exclamdown")},
0162     {Qt::Key_cent, QStringLiteral("cent")},
0163     {Qt::Key_sterling, QStringLiteral("sterling")},
0164     {Qt::Key_currency, QStringLiteral("currency")},
0165     {Qt::Key_yen, QStringLiteral("yen")},
0166     {Qt::Key_brokenbar, QStringLiteral("brokenbar")},
0167     {Qt::Key_section, QStringLiteral("section")},
0168     {Qt::Key_diaeresis, QStringLiteral("diaeresis")},
0169     {Qt::Key_copyright, QStringLiteral("copyright")},
0170     {Qt::Key_ordfeminine, QStringLiteral("ordfeminine")},
0171     {Qt::Key_guillemotleft, QStringLiteral("guillemotleft")},
0172     {Qt::Key_notsign, QStringLiteral("notsign")},
0173     {Qt::Key_hyphen, QStringLiteral("hyphen")},
0174     {Qt::Key_registered, QStringLiteral("registered")},
0175     {Qt::Key_macron, QStringLiteral("macron")},
0176     {Qt::Key_degree, QStringLiteral("degree")},
0177     {Qt::Key_plusminus, QStringLiteral("plusminus")},
0178     {Qt::Key_twosuperior, QStringLiteral("twosuperior")},
0179     {Qt::Key_threesuperior, QStringLiteral("threesuperior")},
0180     {Qt::Key_acute, QStringLiteral("acute")},
0181     {Qt::Key_mu, QStringLiteral("mu")},
0182     {Qt::Key_paragraph, QStringLiteral("paragraph")},
0183     {Qt::Key_periodcentered, QStringLiteral("periodcentered")},
0184     {Qt::Key_cedilla, QStringLiteral("cedilla")},
0185     {Qt::Key_onesuperior, QStringLiteral("onesuperior")},
0186     {Qt::Key_masculine, QStringLiteral("masculine")},
0187     {Qt::Key_guillemotright, QStringLiteral("guillemotright")},
0188     {Qt::Key_onequarter, QStringLiteral("onequarter")},
0189     {Qt::Key_onehalf, QStringLiteral("onehalf")},
0190     {Qt::Key_threequarters, QStringLiteral("threequarters")},
0191     {Qt::Key_questiondown, QStringLiteral("questiondown")},
0192     {Qt::Key_Agrave, QStringLiteral("Agrave")},
0193     {Qt::Key_Aacute, QStringLiteral("Aacute")},
0194     {Qt::Key_Acircumflex, QStringLiteral("Acircumflex")},
0195     {Qt::Key_Atilde, QStringLiteral("Atilde")},
0196     {Qt::Key_Adiaeresis, QStringLiteral("Adiaeresis")},
0197     {Qt::Key_Aring, QStringLiteral("Aring")},
0198     {Qt::Key_AE, QStringLiteral("AE")},
0199     {Qt::Key_Ccedilla, QStringLiteral("Ccedilla")},
0200     {Qt::Key_Egrave, QStringLiteral("Egrave")},
0201     {Qt::Key_Eacute, QStringLiteral("Eacute")},
0202     {Qt::Key_Ecircumflex, QStringLiteral("Ecircumflex")},
0203     {Qt::Key_Ediaeresis, QStringLiteral("Ediaeresis")},
0204     {Qt::Key_Igrave, QStringLiteral("Igrave")},
0205     {Qt::Key_Iacute, QStringLiteral("Iacute")},
0206     {Qt::Key_Icircumflex, QStringLiteral("Icircumflex")},
0207     {Qt::Key_Idiaeresis, QStringLiteral("Idiaeresis")},
0208     {Qt::Key_ETH, QStringLiteral("ETH")},
0209     {Qt::Key_Ntilde, QStringLiteral("Ntilde")},
0210     {Qt::Key_Ograve, QStringLiteral("Ograve")},
0211     {Qt::Key_Oacute, QStringLiteral("Oacute")},
0212     {Qt::Key_Ocircumflex, QStringLiteral("Ocircumflex")},
0213     {Qt::Key_Otilde, QStringLiteral("Otilde")},
0214     {Qt::Key_Odiaeresis, QStringLiteral("Odiaeresis")},
0215     {Qt::Key_multiply, QStringLiteral("multiply")},
0216     {Qt::Key_Ooblique, QStringLiteral("Ooblique")},
0217     {Qt::Key_Ugrave, QStringLiteral("Ugrave")},
0218     {Qt::Key_Uacute, QStringLiteral("Uacute")},
0219     {Qt::Key_Ucircumflex, QStringLiteral("Ucircumflex")},
0220     {Qt::Key_Udiaeresis, QStringLiteral("Udiaeresis")},
0221     {Qt::Key_Yacute, QStringLiteral("Yacute")},
0222     {Qt::Key_THORN, QStringLiteral("THORN")},
0223     {Qt::Key_ssharp, QStringLiteral("ssharp")},
0224     {Qt::Key_division, QStringLiteral("division")},
0225     {Qt::Key_ydiaeresis, QStringLiteral("ydiaeresis")},
0226     // { Qt::Key_Multi_key, "Multi_key" },
0227     // { Qt::Key_Codeinput, "Codeinput" },
0228     // { Qt::Key_SingleCandidate, "SingleCandidate" },
0229     // { Qt::Key_MultipleCandidate, "MultipleCandidate" },
0230     // { Qt::Key_PreviousCandidate, "PreviousCandidate" },
0231     // { Qt::Key_Mode_switch, "Mode_switch" },
0232     // { Qt::Key_Kanji, "Kanji" },
0233     // { Qt::Key_Muhenkan, "Muhenkan" },
0234     // { Qt::Key_Henkan, "Henkan" },
0235     // { Qt::Key_Romaji, "Romaji" },
0236     // { Qt::Key_Hiragana, "Hiragana" },
0237     // { Qt::Key_Katakana, "Katakana" },
0238     // { Qt::Key_Hiragana_Katakana, "Hiragana_Katakana" },
0239     // { Qt::Key_Zenkaku, "Zenkaku" },
0240     // { Qt::Key_Hankaku, "Hankaku" },
0241     // { Qt::Key_Zenkaku_Hankaku, "Zenkaku_Hankaku" },
0242     // { Qt::Key_Touroku, "Touroku" },
0243     // { Qt::Key_Massyo, "Massyo" },
0244     // { Qt::Key_Kana_Lock, "Kana_Lock" },
0245     // { Qt::Key_Kana_Shift, "Kana_Shift" },
0246     // { Qt::Key_Eisu_Shift, "Eisu_Shift" },
0247     // { Qt::Key_Eisu_toggle, "Eisu_toggle" },
0248     // { Qt::Key_Hangul, "Hangul" },
0249     // { Qt::Key_Hangul_Start, "Hangul_Start" },
0250     // { Qt::Key_Hangul_End, "Hangul_End" },
0251     // { Qt::Key_Hangul_Hanja, "Hangul_Hanja" },
0252     // { Qt::Key_Hangul_Jamo, "Hangul_Jamo" },
0253     // { Qt::Key_Hangul_Romaja, "Hangul_Romaja" },
0254     // { Qt::Key_Hangul_Jeonja, "Hangul_Jeonja" },
0255     // { Qt::Key_Hangul_Banja, "Hangul_Banja" },
0256     // { Qt::Key_Hangul_PreHanja, "Hangul_PreHanja" },
0257     // { Qt::Key_Hangul_PostHanja, "Hangul_PostHanja" },
0258     // { Qt::Key_Hangul_Special, "Hangul_Special" },
0259     // { Qt::Key_Dead_Grave, "Dead_Grave" },
0260     // { Qt::Key_Dead_Acute, "Dead_Acute" },
0261     // { Qt::Key_Dead_Circumflex, "Dead_Circumflex" },
0262     // { Qt::Key_Dead_Tilde, "Dead_Tilde" },
0263     // { Qt::Key_Dead_Macron, "Dead_Macron" },
0264     // { Qt::Key_Dead_Breve, "Dead_Breve" },
0265     // { Qt::Key_Dead_Abovedot, "Dead_Abovedot" },
0266     // { Qt::Key_Dead_Diaeresis, "Dead_Diaeresis" },
0267     // { Qt::Key_Dead_Abovering, "Dead_Abovering" },
0268     // { Qt::Key_Dead_Doubleacute, "Dead_Doubleacute" },
0269     // { Qt::Key_Dead_Caron, "Dead_Caron" },
0270     // { Qt::Key_Dead_Cedilla, "Dead_Cedilla" },
0271     // { Qt::Key_Dead_Ogonek, "Dead_Ogonek" },
0272     // { Qt::Key_Dead_Iota, "Dead_Iota" },
0273     // { Qt::Key_Dead_Voiced_Sound, "Dead_Voiced_Sound" },
0274     // { Qt::Key_Dead_Semivoiced_Sound, "Dead_Semivoiced_Sound" },
0275     // { Qt::Key_Dead_Belowdot, "Dead_Belowdot" },
0276     // { Qt::Key_Dead_Hook, "Dead_Hook" },
0277     // { Qt::Key_Dead_Horn, "Dead_Horn" },
0278     {Qt::Key_Back, QStringLiteral("Back")},
0279     {Qt::Key_Forward, QStringLiteral("Forward")},
0280     {Qt::Key_Stop, QStringLiteral("Stop")},
0281     {Qt::Key_Refresh, QStringLiteral("Refresh")},
0282     {Qt::Key_VolumeDown, QStringLiteral("VolumeDown")},
0283     {Qt::Key_VolumeMute, QStringLiteral("VolumeMute")},
0284     {Qt::Key_VolumeUp, QStringLiteral("VolumeUp")},
0285     {Qt::Key_BassBoost, QStringLiteral("BassBoost")},
0286     {Qt::Key_BassUp, QStringLiteral("BassUp")},
0287     {Qt::Key_BassDown, QStringLiteral("BassDown")},
0288     {Qt::Key_TrebleUp, QStringLiteral("TrebleUp")},
0289     {Qt::Key_TrebleDown, QStringLiteral("TrebleDown")},
0290     {Qt::Key_MediaPlay, QStringLiteral("MediaPlay")},
0291     {Qt::Key_MediaStop, QStringLiteral("MediaStop")},
0292     // { Qt::Key_MediaPrev, "MediaPrev" },
0293     {Qt::Key_MediaNext, QStringLiteral("MediaNext")},
0294     {Qt::Key_MediaRecord, QStringLiteral("MediaRecord")},
0295     {Qt::Key_HomePage, QStringLiteral("HomePage")},
0296     {Qt::Key_Favorites, QStringLiteral("Favorites")},
0297     {Qt::Key_Search, QStringLiteral("Search")},
0298     {Qt::Key_Standby, QStringLiteral("Standby")},
0299     {Qt::Key_OpenUrl, QStringLiteral("OpenUrl")},
0300     {Qt::Key_LaunchMail, QStringLiteral("LaunchMail")},
0301     {Qt::Key_LaunchMedia, QStringLiteral("LaunchMedia")},
0302     {Qt::Key_Launch0, QStringLiteral("Launch0")},
0303     {Qt::Key_Launch1, QStringLiteral("Launch1")},
0304     {Qt::Key_Launch2, QStringLiteral("Launch2")},
0305     {Qt::Key_Launch3, QStringLiteral("Launch3")},
0306     {Qt::Key_Launch4, QStringLiteral("Launch4")},
0307     {Qt::Key_Launch5, QStringLiteral("Launch5")},
0308     {Qt::Key_Launch6, QStringLiteral("Launch6")},
0309     {Qt::Key_Launch7, QStringLiteral("Launch7")},
0310     {Qt::Key_Launch8, QStringLiteral("Launch8")},
0311     {Qt::Key_Launch9, QStringLiteral("Launch9")},
0312     {Qt::Key_LaunchA, QStringLiteral("LaunchA")},
0313     {Qt::Key_LaunchB, QStringLiteral("LaunchB")},
0314     {Qt::Key_LaunchC, QStringLiteral("LaunchC")},
0315     {Qt::Key_LaunchD, QStringLiteral("LaunchD")},
0316     {Qt::Key_LaunchE, QStringLiteral("LaunchE")},
0317     {Qt::Key_LaunchF, QStringLiteral("LaunchF")},
0318     {Qt::Key_MediaLast, QStringLiteral("MediaLast")},
0319     {Qt::Key_unknown, QStringLiteral("unknown")}
0320     // { Qt::Key_Call, "Call" },
0321     // { Qt::Key_Context1, "Context1" },
0322     // { Qt::Key_Context2, "Context2" },
0323     // { Qt::Key_Context3, "Context3" },
0324     // { Qt::Key_Context4, "Context4" },
0325     // { Qt::Key_Flip, "Flip" },
0326     // { Qt::Key_Hangup, "Hangup" },
0327     // { Qt::Key_No, "No" },
0328     // { Qt::Key_Select, "Select" },
0329     // { Qt::Key_Yes, "Yes" },
0330     // { Qt::Key_Execute, "Execute" },
0331     // { Qt::Key_Printer, "Printer" },
0332     // { Qt::Key_Play, "Play" },
0333     // { Qt::Key_Sleep, "Sleep" },
0334     // { Qt::Key_Zoom, "Zoom" },
0335     // { Qt::Key_Cancel, "Cancel"}
0336 };
0337 
0338 KeycodeLineEdit::KeycodeLineEdit(QWidget *parent)
0339     : KLineEdit(parent)
0340 {
0341 }
0342 
0343 int KeycodeLineEdit::key()
0344 {
0345     return m_key;
0346 }
0347 
0348 Qt::KeyboardModifiers KeycodeLineEdit::modifiers()
0349 {
0350     return m_modifiers;
0351 }
0352 
0353 void KeycodeLineEdit::setKeyModifiers(int key, Qt::KeyboardModifiers modifiers)
0354 {
0355     m_key = key;
0356     m_modifiers = modifiers;
0357 
0358     if (m_key) {
0359         setText(keyString(m_key, m_modifiers));
0360     } else {
0361         clear();
0362     }
0363 }
0364 
0365 void KeycodeLineEdit::keyPressEvent(QKeyEvent *e)
0366 {
0367     if (e->key() == Qt::Key_Backspace || e->key() == Qt::Key_Delete) {
0368         setKeyModifiers(0, Qt::NoModifier);
0369         e->accept();
0370     } else if (!findQtText(e->key()).isEmpty()) {
0371         setKeyModifiers(e->key(), e->modifiers());
0372         e->accept();
0373     } else {
0374         e->ignore();
0375     }
0376 }
0377 
0378 QString KeycodeLineEdit::findQtText(int qtKey)
0379 {
0380     QString string;
0381 
0382     for (unsigned i = 0; i < sizeof(keyCodes) / sizeof(struct KEYCODE); ++i) {
0383         if (keyCodes[i].qtKey == qtKey) {
0384             string = keyCodes[i].qtText;
0385             break;
0386         }
0387     }
0388 
0389     return string;
0390 }
0391 
0392 QString KeycodeLineEdit::keyString(int qtKey, Qt::KeyboardModifiers modifiers)
0393 {
0394     QString string;
0395 
0396     if (modifiers & Qt::ShiftModifier) {
0397         string += QLatin1String("SHIFT+");
0398     }
0399 
0400     if (modifiers & Qt::ControlModifier) {
0401         string += QStringLiteral("CTRL+");
0402     }
0403 
0404     if (modifiers & Qt::AltModifier) {
0405         string += QStringLiteral("ALT+");
0406     }
0407 
0408     if (modifiers & Qt::MetaModifier) {
0409         string += QStringLiteral("META+");
0410     }
0411 
0412     return string += findQtText(qtKey);
0413 }
0414 
0415 #include "moc_KeycodeLineEdit.cpp"