From 5e2ea6ee32cfcae6f7142d74665f3e8832cd49d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9a=20Saviot?= Date: Mon, 7 Jan 2019 17:45:34 +0100 Subject: [PATCH] [simulator] Process letter keyboard events --- ion/src/simulator/keyboard/fltkkbd.cpp | 47 ++++++++++++++++++++++++-- ion/src/simulator/keyboard/fltkkbd.h | 2 ++ 2 files changed, 47 insertions(+), 2 deletions(-) diff --git a/ion/src/simulator/keyboard/fltkkbd.cpp b/ion/src/simulator/keyboard/fltkkbd.cpp index c08b71322..2a7cd3a85 100644 --- a/ion/src/simulator/keyboard/fltkkbd.cpp +++ b/ion/src/simulator/keyboard/fltkkbd.cpp @@ -22,8 +22,8 @@ static const char* kCharForKey[Ion::Keyboard::NumberOfKeys] = { static const int kShortcutForKey[Ion::Keyboard::NumberOfKeys] = { FL_Left, FL_Up, FL_Down, FL_Right, FL_Enter, FL_Escape, FL_Home, 0, 0, 0, 0, 0, - 0, 0, 'x', 0, 0, FL_BackSpace, - 0, 0, 0, 'i', ',', 0, + 0, 0, 0, 0, 0, FL_BackSpace, + 0, 0, 0, 0, ',', 0, 0, 0, 0, 0, 0, 0, FL_SHIFT | '7', FL_SHIFT | '8', FL_SHIFT | '9', '(',')', 0, FL_SHIFT | '4', FL_SHIFT | '5', FL_SHIFT | '6', '*', '/', 0, @@ -44,6 +44,31 @@ static void keyHandler(Fl_Widget *, long key) { } } +static void alphabetEventHandler(Fl_Widget *, long c) { + static Ion::Events::Event lowerEvents[FltkKbd::sNumberOfLettersInAlphabet] = { + Ion::Events::LowerA, Ion::Events::LowerB, Ion::Events::LowerC, Ion::Events::LowerD, Ion::Events::LowerE, + Ion::Events::LowerF, Ion::Events::LowerG, Ion::Events::LowerH, Ion::Events::LowerI, Ion::Events::LowerJ, + Ion::Events::LowerK, Ion::Events::LowerL, Ion::Events::LowerM, Ion::Events::LowerN, Ion::Events::LowerO, + Ion::Events::LowerP, Ion::Events::LowerQ, Ion::Events::LowerR, Ion::Events::LowerS, Ion::Events::LowerT, + Ion::Events::LowerU, Ion::Events::LowerV, Ion::Events::LowerW, Ion::Events::LowerX, Ion::Events::LowerY, + Ion::Events::LowerZ }; + static Ion::Events::Event upperEvents[FltkKbd::sNumberOfLettersInAlphabet] = { + Ion::Events::UpperA, Ion::Events::UpperB, Ion::Events::UpperC, Ion::Events::UpperD, Ion::Events::UpperE, + Ion::Events::UpperF, Ion::Events::UpperG, Ion::Events::UpperH, Ion::Events::UpperI, Ion::Events::UpperJ, + Ion::Events::UpperK, Ion::Events::UpperL, Ion::Events::UpperM, Ion::Events::UpperN, Ion::Events::UpperO, + Ion::Events::UpperP, Ion::Events::UpperQ, Ion::Events::UpperR, Ion::Events::UpperS, Ion::Events::UpperT, + Ion::Events::UpperU, Ion::Events::UpperV, Ion::Events::UpperW, Ion::Events::UpperX, Ion::Events::UpperY, + Ion::Events::UpperZ + }; + if (currentEvent == Ion::Events::None) { + if (c >= 'a' && c <= 'z') { + currentEvent = lowerEvents[c - 'a']; + } else if (c >= 'A' && c <= 'Z') { + currentEvent = upperEvents[c - 'A']; + } + } +} + FltkKbd::FltkKbd(int x, int y, int w, int h) : Fl_Group(x, y, w, h) { assert(KeyboardRows*KeyboardColumns == Ion::Keyboard::NumberOfKeys); int key_width = w/KeyboardColumns; @@ -69,6 +94,24 @@ FltkKbd::FltkKbd(int x, int y, int w, int h) : Fl_Group(x, y, w, h) { } m_buttons[k]->clear_visible_focus(); } + + // Get keyboard letters event + for (int k = 0; k < sNumberOfLettersInAlphabet; k++) { + char l = 'a' + k; + m_alphabetShortcuts[k] = new Fl_Button(0, 0, 0, 0, ""); + m_alphabetShortcuts[k]->callback(alphabetEventHandler,l); + m_alphabetShortcuts[k]->shortcut(l); + m_alphabetShortcuts[k]->clear_visible_focus(); + } + for (int k = 0; k < sNumberOfLettersInAlphabet; k++) { + char l = 'A' + k; + int index = sNumberOfLettersInAlphabet + k; + m_alphabetShortcuts[index] = new Fl_Button(0, 0, 0, 0, ""); + m_alphabetShortcuts[index]->callback(alphabetEventHandler, l); + m_alphabetShortcuts[index]->shortcut(FL_SHIFT | ('a' + k)); + m_alphabetShortcuts[index]->clear_visible_focus(); + } + end(); } diff --git a/ion/src/simulator/keyboard/fltkkbd.h b/ion/src/simulator/keyboard/fltkkbd.h index 3ff1673f4..dc30a76d3 100644 --- a/ion/src/simulator/keyboard/fltkkbd.h +++ b/ion/src/simulator/keyboard/fltkkbd.h @@ -7,10 +7,12 @@ class FltkKbd : public Fl_Group { public: + constexpr static int sNumberOfLettersInAlphabet = 26; FltkKbd(int x, int y, int w, int h); bool key_down(Ion::Keyboard::Key key); private: Fl_Button * m_buttons[Ion::Keyboard::NumberOfKeys]; + Fl_Button * m_alphabetShortcuts[2*sNumberOfLettersInAlphabet]; }; #endif