|
|
|
@ -117,18 +117,239 @@ public:
|
|
|
|
|
Qt::Key_Meta,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
static const QSet<quint32> characterKeys = {
|
|
|
|
|
Qt::Key_Any,
|
|
|
|
|
Qt::Key_Space,
|
|
|
|
|
Qt::Key_Exclam,
|
|
|
|
|
Qt::Key_QuoteDbl,
|
|
|
|
|
Qt::Key_NumberSign,
|
|
|
|
|
Qt::Key_Dollar,
|
|
|
|
|
Qt::Key_Percent,
|
|
|
|
|
Qt::Key_Ampersand,
|
|
|
|
|
Qt::Key_Apostrophe,
|
|
|
|
|
Qt::Key_ParenLeft,
|
|
|
|
|
Qt::Key_ParenRight,
|
|
|
|
|
Qt::Key_Asterisk,
|
|
|
|
|
Qt::Key_Plus,
|
|
|
|
|
Qt::Key_Comma,
|
|
|
|
|
Qt::Key_Minus,
|
|
|
|
|
Qt::Key_Period,
|
|
|
|
|
Qt::Key_Slash,
|
|
|
|
|
Qt::Key_0,
|
|
|
|
|
Qt::Key_1,
|
|
|
|
|
Qt::Key_2,
|
|
|
|
|
Qt::Key_3,
|
|
|
|
|
Qt::Key_4,
|
|
|
|
|
Qt::Key_5,
|
|
|
|
|
Qt::Key_6,
|
|
|
|
|
Qt::Key_7,
|
|
|
|
|
Qt::Key_8,
|
|
|
|
|
Qt::Key_9,
|
|
|
|
|
Qt::Key_Colon,
|
|
|
|
|
Qt::Key_Semicolon,
|
|
|
|
|
Qt::Key_Less,
|
|
|
|
|
Qt::Key_Equal,
|
|
|
|
|
Qt::Key_Greater,
|
|
|
|
|
Qt::Key_Question,
|
|
|
|
|
Qt::Key_At,
|
|
|
|
|
Qt::Key_A,
|
|
|
|
|
Qt::Key_B,
|
|
|
|
|
Qt::Key_C,
|
|
|
|
|
Qt::Key_D,
|
|
|
|
|
Qt::Key_E,
|
|
|
|
|
Qt::Key_F,
|
|
|
|
|
Qt::Key_G,
|
|
|
|
|
Qt::Key_H,
|
|
|
|
|
Qt::Key_I,
|
|
|
|
|
Qt::Key_J,
|
|
|
|
|
Qt::Key_K,
|
|
|
|
|
Qt::Key_L,
|
|
|
|
|
Qt::Key_M,
|
|
|
|
|
Qt::Key_N,
|
|
|
|
|
Qt::Key_O,
|
|
|
|
|
Qt::Key_P,
|
|
|
|
|
Qt::Key_Q,
|
|
|
|
|
Qt::Key_R,
|
|
|
|
|
Qt::Key_S,
|
|
|
|
|
Qt::Key_T,
|
|
|
|
|
Qt::Key_U,
|
|
|
|
|
Qt::Key_V,
|
|
|
|
|
Qt::Key_W,
|
|
|
|
|
Qt::Key_X,
|
|
|
|
|
Qt::Key_Y,
|
|
|
|
|
Qt::Key_Z,
|
|
|
|
|
Qt::Key_BracketLeft,
|
|
|
|
|
Qt::Key_Backslash,
|
|
|
|
|
Qt::Key_BracketRight,
|
|
|
|
|
Qt::Key_AsciiCircum,
|
|
|
|
|
Qt::Key_Underscore,
|
|
|
|
|
Qt::Key_QuoteLeft,
|
|
|
|
|
Qt::Key_BraceLeft,
|
|
|
|
|
Qt::Key_Bar,
|
|
|
|
|
Qt::Key_BraceRight,
|
|
|
|
|
Qt::Key_AsciiTilde,
|
|
|
|
|
Qt::Key_nobreakspace,
|
|
|
|
|
Qt::Key_exclamdown,
|
|
|
|
|
Qt::Key_cent,
|
|
|
|
|
Qt::Key_sterling,
|
|
|
|
|
Qt::Key_currency,
|
|
|
|
|
Qt::Key_yen,
|
|
|
|
|
Qt::Key_brokenbar,
|
|
|
|
|
Qt::Key_section,
|
|
|
|
|
Qt::Key_diaeresis,
|
|
|
|
|
Qt::Key_copyright,
|
|
|
|
|
Qt::Key_ordfeminine,
|
|
|
|
|
Qt::Key_guillemotleft,
|
|
|
|
|
Qt::Key_notsign,
|
|
|
|
|
Qt::Key_hyphen,
|
|
|
|
|
Qt::Key_registered,
|
|
|
|
|
Qt::Key_macron,
|
|
|
|
|
Qt::Key_degree,
|
|
|
|
|
Qt::Key_plusminus,
|
|
|
|
|
Qt::Key_twosuperior,
|
|
|
|
|
Qt::Key_threesuperior,
|
|
|
|
|
Qt::Key_acute,
|
|
|
|
|
Qt::Key_mu,
|
|
|
|
|
Qt::Key_paragraph,
|
|
|
|
|
Qt::Key_periodcentered,
|
|
|
|
|
Qt::Key_cedilla,
|
|
|
|
|
Qt::Key_onesuperior,
|
|
|
|
|
Qt::Key_masculine,
|
|
|
|
|
Qt::Key_guillemotright,
|
|
|
|
|
Qt::Key_onequarter,
|
|
|
|
|
Qt::Key_onehalf,
|
|
|
|
|
Qt::Key_threequarters,
|
|
|
|
|
Qt::Key_questiondown,
|
|
|
|
|
Qt::Key_Agrave,
|
|
|
|
|
Qt::Key_Aacute,
|
|
|
|
|
Qt::Key_Acircumflex,
|
|
|
|
|
Qt::Key_Atilde,
|
|
|
|
|
Qt::Key_Adiaeresis,
|
|
|
|
|
Qt::Key_Aring,
|
|
|
|
|
Qt::Key_AE,
|
|
|
|
|
Qt::Key_Ccedilla,
|
|
|
|
|
Qt::Key_Egrave,
|
|
|
|
|
Qt::Key_Eacute,
|
|
|
|
|
Qt::Key_Ecircumflex,
|
|
|
|
|
Qt::Key_Ediaeresis,
|
|
|
|
|
Qt::Key_Igrave,
|
|
|
|
|
Qt::Key_Iacute,
|
|
|
|
|
Qt::Key_Icircumflex,
|
|
|
|
|
Qt::Key_Idiaeresis,
|
|
|
|
|
Qt::Key_ETH,
|
|
|
|
|
Qt::Key_Ntilde,
|
|
|
|
|
Qt::Key_Ograve,
|
|
|
|
|
Qt::Key_Oacute,
|
|
|
|
|
Qt::Key_Ocircumflex,
|
|
|
|
|
Qt::Key_Otilde,
|
|
|
|
|
Qt::Key_Odiaeresis,
|
|
|
|
|
Qt::Key_multiply,
|
|
|
|
|
Qt::Key_Ooblique,
|
|
|
|
|
Qt::Key_Ugrave,
|
|
|
|
|
Qt::Key_Uacute,
|
|
|
|
|
Qt::Key_Ucircumflex,
|
|
|
|
|
Qt::Key_Udiaeresis,
|
|
|
|
|
Qt::Key_Yacute,
|
|
|
|
|
Qt::Key_THORN,
|
|
|
|
|
Qt::Key_ssharp,
|
|
|
|
|
Qt::Key_division,
|
|
|
|
|
Qt::Key_ydiaeresis,
|
|
|
|
|
Qt::Key_Multi_key,
|
|
|
|
|
Qt::Key_Codeinput,
|
|
|
|
|
Qt::Key_SingleCandidate,
|
|
|
|
|
Qt::Key_MultipleCandidate,
|
|
|
|
|
Qt::Key_PreviousCandidate,
|
|
|
|
|
Qt::Key_Mode_switch,
|
|
|
|
|
Qt::Key_Kanji,
|
|
|
|
|
Qt::Key_Muhenkan,
|
|
|
|
|
Qt::Key_Henkan,
|
|
|
|
|
Qt::Key_Romaji,
|
|
|
|
|
Qt::Key_Hiragana,
|
|
|
|
|
Qt::Key_Katakana,
|
|
|
|
|
Qt::Key_Hiragana_Katakana,
|
|
|
|
|
Qt::Key_Zenkaku,
|
|
|
|
|
Qt::Key_Hankaku,
|
|
|
|
|
Qt::Key_Zenkaku_Hankaku,
|
|
|
|
|
Qt::Key_Touroku,
|
|
|
|
|
Qt::Key_Massyo,
|
|
|
|
|
Qt::Key_Kana_Lock,
|
|
|
|
|
Qt::Key_Kana_Shift,
|
|
|
|
|
Qt::Key_Eisu_Shift,
|
|
|
|
|
Qt::Key_Eisu_toggle,
|
|
|
|
|
Qt::Key_Hangul,
|
|
|
|
|
Qt::Key_Hangul_Start,
|
|
|
|
|
Qt::Key_Hangul_End,
|
|
|
|
|
Qt::Key_Hangul_Hanja,
|
|
|
|
|
Qt::Key_Hangul_Jamo,
|
|
|
|
|
Qt::Key_Hangul_Romaja,
|
|
|
|
|
Qt::Key_Hangul_Jeonja,
|
|
|
|
|
Qt::Key_Hangul_Banja,
|
|
|
|
|
Qt::Key_Hangul_PreHanja,
|
|
|
|
|
Qt::Key_Hangul_PostHanja,
|
|
|
|
|
Qt::Key_Hangul_Special,
|
|
|
|
|
Qt::Key_Dead_Grave,
|
|
|
|
|
Qt::Key_Dead_Acute,
|
|
|
|
|
Qt::Key_Dead_Circumflex,
|
|
|
|
|
Qt::Key_Dead_Tilde,
|
|
|
|
|
Qt::Key_Dead_Macron,
|
|
|
|
|
Qt::Key_Dead_Breve,
|
|
|
|
|
Qt::Key_Dead_Abovedot,
|
|
|
|
|
Qt::Key_Dead_Diaeresis,
|
|
|
|
|
Qt::Key_Dead_Abovering,
|
|
|
|
|
Qt::Key_Dead_Doubleacute,
|
|
|
|
|
Qt::Key_Dead_Caron,
|
|
|
|
|
Qt::Key_Dead_Cedilla,
|
|
|
|
|
Qt::Key_Dead_Ogonek,
|
|
|
|
|
Qt::Key_Dead_Iota,
|
|
|
|
|
Qt::Key_Dead_Voiced_Sound,
|
|
|
|
|
Qt::Key_Dead_Semivoiced_Sound,
|
|
|
|
|
Qt::Key_Dead_Belowdot,
|
|
|
|
|
Qt::Key_Dead_Hook,
|
|
|
|
|
Qt::Key_Dead_Horn,
|
|
|
|
|
Qt::Key_Dead_Stroke,
|
|
|
|
|
Qt::Key_Dead_Abovecomma,
|
|
|
|
|
Qt::Key_Dead_Abovereversedcomma,
|
|
|
|
|
Qt::Key_Dead_Doublegrave,
|
|
|
|
|
Qt::Key_Dead_Belowring,
|
|
|
|
|
Qt::Key_Dead_Belowmacron,
|
|
|
|
|
Qt::Key_Dead_Belowcircumflex,
|
|
|
|
|
Qt::Key_Dead_Belowtilde,
|
|
|
|
|
Qt::Key_Dead_Belowbreve,
|
|
|
|
|
Qt::Key_Dead_Belowdiaeresis,
|
|
|
|
|
Qt::Key_Dead_Invertedbreve,
|
|
|
|
|
Qt::Key_Dead_Belowcomma,
|
|
|
|
|
Qt::Key_Dead_Currency,
|
|
|
|
|
Qt::Key_Dead_a,
|
|
|
|
|
Qt::Key_Dead_A,
|
|
|
|
|
Qt::Key_Dead_e,
|
|
|
|
|
Qt::Key_Dead_E,
|
|
|
|
|
Qt::Key_Dead_i,
|
|
|
|
|
Qt::Key_Dead_I,
|
|
|
|
|
Qt::Key_Dead_o,
|
|
|
|
|
Qt::Key_Dead_O,
|
|
|
|
|
Qt::Key_Dead_u,
|
|
|
|
|
Qt::Key_Dead_U,
|
|
|
|
|
Qt::Key_Dead_Small_Schwa,
|
|
|
|
|
Qt::Key_Dead_Capital_Schwa,
|
|
|
|
|
Qt::Key_Dead_Greek,
|
|
|
|
|
Qt::Key_Dead_Lowline,
|
|
|
|
|
Qt::Key_Dead_Aboveverticalline,
|
|
|
|
|
Qt::Key_Dead_Belowverticalline};
|
|
|
|
|
|
|
|
|
|
switch (mode) {
|
|
|
|
|
case None:
|
|
|
|
|
m_filter = {};
|
|
|
|
|
break;
|
|
|
|
|
case Modifiers:
|
|
|
|
|
case NonCharacterKeys:
|
|
|
|
|
m_filter = [](int key, Qt::KeyboardModifiers) {
|
|
|
|
|
return modifierKeys.contains(key);
|
|
|
|
|
return !characterKeys.contains(key);
|
|
|
|
|
};
|
|
|
|
|
break;
|
|
|
|
|
case Combinations:
|
|
|
|
|
case AllKeysWithModifier:
|
|
|
|
|
m_filter = [](int key, Qt::KeyboardModifiers m) {
|
|
|
|
|
return m != Qt::NoModifier || modifierKeys.contains(key);
|
|
|
|
|
return m != Qt::NoModifier
|
|
|
|
|
|| modifierKeys.contains(key)
|
|
|
|
|
|| !characterKeys.contains(key);
|
|
|
|
|
};
|
|
|
|
|
break;
|
|
|
|
|
case All:
|
|
|
|
|