diff --git a/main_menu.cpp b/main_menu.cpp index bb149ff..5613d09 100644 --- a/main_menu.cpp +++ b/main_menu.cpp @@ -1,6 +1,6 @@ #include "menu.hh" -class KeyboardTypingListener : public StringListener +class KeyboardTypingListener : public KeyboardListener { virtual void stringCallback(const char *str) { @@ -8,10 +8,15 @@ class KeyboardTypingListener : public StringListener /* Remove thyself! */ delete this; } + + virtual void keyCallback(bool shift, const char *str) + { + printf("Vobb: %d: %s\n", shift, str); + } }; class MainView; -class MainMenu : public Menu, KeyListener +class MainMenu : public Menu { friend class MainView; @@ -84,9 +89,7 @@ public: case 4: Gui::gui->pushView(Gui::gui->kv); Gui::gui->kv->activate(); - Gui::gui->kv->registerKeyListener(this); - if (this->p_submenus[2].sel == 0) - Gui::gui->kv->registerStringListener(new KeyboardTypingListener()); + Gui::gui->kv->registerListener(new KeyboardTypingListener()); break; case 11: @@ -98,11 +101,6 @@ public: } } - virtual void keyCallback(bool shift, const char *str) - { - printf("Vobb: %d: %s\n", shift, str); - } - virtual void hoverCallback(int which) { this->help->updateHelpMessage(which); diff --git a/virtual_keyboard.cpp b/virtual_keyboard.cpp index d191f12..55f1614 100644 --- a/virtual_keyboard.cpp +++ b/virtual_keyboard.cpp @@ -82,8 +82,7 @@ VirtualKeyboard::VirtualKeyboard(Font *font) : GuiView() this->buf_head = 0; memset(this->buf, 0, sizeof(this->buf)); - memset(this->stringListeners, 0, sizeof(this->stringListeners)); - memset(this->keyListeners, 0, sizeof(this->keyListeners)); + this->flushListeners(); } void VirtualKeyboard::draw(SDL_Surface *where, int x_base, int y_base, int w, int h) @@ -221,52 +220,29 @@ const char VirtualKeyboard::keycodeToChar(int kc) return s[0]; } -void VirtualKeyboard::registerKeyListener(KeyListener *kl) +void VirtualKeyboard::registerListener(KeyboardListener *kl) { - int n_listeners = sizeof(this->keyListeners) / sizeof(*this->keyListeners); + int n_listeners = sizeof(this->listeners) / sizeof(*this->listeners); int i; for (i = 0; i < n_listeners; i++) - if (!this->keyListeners[i]) - break; - panic_if(i == n_listeners, - "No free listeners!\n"); - this->keyListeners[i] = kl; -} - -/* Templates FTW! */ -void VirtualKeyboard::registerStringListener(StringListener *sl) -{ - int n_listeners = sizeof(this->stringListeners) / sizeof(*this->stringListeners); - int i; - - for (i = 0; i < n_listeners; i++) - if (!this->stringListeners[i]) - break; - panic_if(i == n_listeners, - "No free listeners!\n"); - this->stringListeners[i] = sl; -} - -void VirtualKeyboard::unregisterKeyListener(KeyListener *kl) -{ - int n_listeners = sizeof(this->keyListeners) / sizeof(*this->keyListeners); - - for (int i = 0; i < n_listeners; i++) { - if (this->keyListeners[i] == kl) - this->keyListeners[i] = NULL; + if (!this->listeners[i]) + break; } + panic_if(i == n_listeners, + "No free listeners!\n"); + this->listeners[i] = kl; } -void VirtualKeyboard::unregisterStringListener(StringListener *sl) +void VirtualKeyboard::unregisterListener(KeyboardListener *kl) { - int n_listeners = sizeof(this->stringListeners) / sizeof(*this->stringListeners); + int n_listeners = sizeof(this->listeners) / sizeof(*this->listeners); for (int i = 0; i < n_listeners; i++) { - if (this->stringListeners[i] == sl) - this->stringListeners[i] = NULL; + if (this->listeners[i] == kl) + this->listeners[i] = NULL; } } @@ -310,12 +286,12 @@ void VirtualKeyboard::runLogic() this->toggleShift(); else if (key->is_done) { - int n_listeners = sizeof(this->stringListeners) / sizeof(*this->stringListeners); + int n_listeners = sizeof(this->listeners) / sizeof(*this->listeners); for (int i = 0; i < n_listeners; i++) { - if (this->stringListeners[i]) - this->stringListeners[i]->stringCallback(this->buf); + if (this->listeners[i]) + this->listeners[i]->stringCallback(this->buf); } /* We're done! */ this->deactivate(); @@ -330,7 +306,7 @@ void VirtualKeyboard::runLogic() } else { - int n_listeners = sizeof(this->keyListeners) / sizeof(*this->keyListeners); + int n_listeners = sizeof(this->listeners) / sizeof(*this->listeners); char c; /* Add to buf */ @@ -343,24 +319,23 @@ void VirtualKeyboard::runLogic() this->buf_head = 0; /* OK, not good, but well... */ for (int i = 0; i < n_listeners; i++) { - if (this->keyListeners[i]) - this->keyListeners[i]->keyCallback(this->shift_on, + if (this->listeners[i]) + this->listeners[i]->keyCallback(this->shift_on, key->name); } } } } -void VirtualKeyboard::flushKeyListeners() +void VirtualKeyboard::flushListeners() { - memset(this->keyListeners, 0, sizeof(this->keyListeners)); - memset(this->stringListeners, 0, sizeof(this->stringListeners)); + memset(this->listeners, 0, sizeof(this->listeners)); } void VirtualKeyboard::deactivate() { this->is_active = false; - this->flushKeyListeners(); + this->flushListeners(); Gui::gui->popView(); } @@ -378,12 +353,7 @@ void VirtualKeyboard::updateTheme() VirtualKeyboard *VirtualKeyboard::kbd; -KeyListener::~KeyListener() +KeyboardListener::~KeyboardListener() { - VirtualKeyboard::kbd->unregisterKeyListener(this); -} - -StringListener::~StringListener() -{ - VirtualKeyboard::kbd->unregisterStringListener(this); + VirtualKeyboard::kbd->unregisterListener(this); } diff --git a/virtual_keyboard.hh b/virtual_keyboard.hh index ce0eb45..fa20c23 100644 --- a/virtual_keyboard.hh +++ b/virtual_keyboard.hh @@ -20,21 +20,19 @@ struct virtkey; -class KeyListener +class KeyboardListener { public: - ~KeyListener(); + ~KeyboardListener(); /* Each key is a string */ - virtual void keyCallback(bool shift, const char *str) = 0; -}; + virtual void keyCallback(bool shift, const char *str) + { + } -class StringListener -{ -public: - ~StringListener(); - - virtual void stringCallback(const char *str) = 0; + virtual void stringCallback(const char *str) + { + } }; class VirtualKeyboard : public GuiView @@ -42,10 +40,8 @@ class VirtualKeyboard : public GuiView public: VirtualKeyboard(Font *font); - void registerKeyListener(KeyListener *kl); - void registerStringListener(StringListener *sl); - void unregisterKeyListener(KeyListener *kl); - void unregisterStringListener(StringListener *sl); + void registerListener(KeyboardListener *kl); + void unregisterListener(KeyboardListener *kl); /* Conversions */ const char *keycodeToString(int kc); @@ -78,13 +74,12 @@ public: /* Singleton object */ static VirtualKeyboard *kbd; private: - KeyListener *keyListeners[8]; - StringListener *stringListeners[8]; + KeyboardListener *listeners[8]; void selectNext(int dx, int dy); void toggleShift(); - void flushKeyListeners(); + void flushListeners(); Font *font; int sel_x;