From 95a3a31ee110df758317944b477d202d77384f42 Mon Sep 17 00:00:00 2001 From: Eugene Sandulenko Date: Tue, 2 Feb 2016 20:21:19 +0100 Subject: WAGE: Initial code for shortcuts --- engines/wage/gui.cpp | 5 +++++ engines/wage/gui.h | 1 + engines/wage/menu.cpp | 17 +++++++++++++++++ engines/wage/menu.h | 1 + engines/wage/wage.cpp | 6 ++++-- 5 files changed, 28 insertions(+), 2 deletions(-) (limited to 'engines') diff --git a/engines/wage/gui.cpp b/engines/wage/gui.cpp index ad212f2166..6285c487b2 100644 --- a/engines/wage/gui.cpp +++ b/engines/wage/gui.cpp @@ -588,6 +588,11 @@ void Gui::regenWeaponsMenu() { _menu->regenWeaponsMenu(); } +void Gui::processMenuShortCut(byte flags, uint16 ascii) { + _menu->processMenuShortCut(flags, ascii); +} + + void Gui::mouseMove(int x, int y) { if (_menu->_menuActivated) { if (_menu->mouseMove(x, y)) diff --git a/engines/wage/gui.h b/engines/wage/gui.h index 5f15067063..b5f84e0c80 100644 --- a/engines/wage/gui.h +++ b/engines/wage/gui.h @@ -100,6 +100,7 @@ public: const Graphics::Font *getFont(const char *name, Graphics::FontManager::FontUsage fallback); void regenCommandsMenu(); void regenWeaponsMenu(); + void processMenuShortCut(byte flags, uint16 ascii); private: void paintBorder(Graphics::Surface *g, Common::Rect &r, WindowType windowType); diff --git a/engines/wage/menu.cpp b/engines/wage/menu.cpp index a0d5dcd46b..5fc51bcf8f 100644 --- a/engines/wage/menu.cpp +++ b/engines/wage/menu.cpp @@ -46,6 +46,7 @@ */ #include "common/system.h" +#include "common/keyboard.h" #include "wage/wage.h" #include "wage/entities.h" @@ -550,4 +551,20 @@ void Menu::executeCommand(MenuSubItem *subitem) { } } +void Menu::processMenuShortCut(byte flags, uint16 ascii) { + if (flags & (Common::KBD_CTRL | Common::KBD_META)) { + for (int i = 0; i < _items.size(); i++) + for (int j = 0; j < _items[i]->subitems.size(); j++) + if (_items[i]->subitems[j]->shortcut == ascii) { + if (_items[i]->subitems[j]->action == kMenuActionCommand) + _gui->_engine->processTurn(&_items[i]->subitems[j]->text, NULL); + else + warning("STUB: Unhandled shortcut"); + + break; + } + } +} + + } // End of namespace Wage diff --git a/engines/wage/menu.h b/engines/wage/menu.h index 82c0106a7b..d817cf3734 100644 --- a/engines/wage/menu.h +++ b/engines/wage/menu.h @@ -75,6 +75,7 @@ public: void regenCommandsMenu(); void regenWeaponsMenu(); + void processMenuShortCut(byte flags, uint16 ascii); bool _menuActivated; Common::Rect _bbox; diff --git a/engines/wage/wage.cpp b/engines/wage/wage.cpp index b4819cba9d..3d3fc6a293 100644 --- a/engines/wage/wage.cpp +++ b/engines/wage/wage.cpp @@ -176,8 +176,10 @@ void WageEngine::processEvents() { break; default: - if (event.kbd.flags & Common::KBD_ALT || event.kbd.flags & Common::KBD_CTRL) { - warning("STUB: Shortcuts"); + if (event.kbd.flags & (Common::KBD_ALT | Common::KBD_CTRL | Common::KBD_META)) { + if (event.kbd.ascii >= 0x20 && event.kbd.ascii <= 0x7f) { + _gui->processMenuShortCut(event.kbd.flags, event.kbd.ascii); + } break; } -- cgit v1.2.3