diff options
author | Eugene Sandulenko | 2016-04-28 15:25:14 +0200 |
---|---|---|
committer | Eugene Sandulenko | 2016-04-28 15:25:14 +0200 |
commit | 72b8f3a1c7e47ec6fef962cd1aa7abebcf5d782f (patch) | |
tree | eb6304dbd84f20479d0bb886d79744369d32e982 /engines/wage | |
parent | 3027433b669d00a5b16689a4de518639d7dff746 (diff) | |
download | scummvm-rg350-72b8f3a1c7e47ec6fef962cd1aa7abebcf5d782f.tar.gz scummvm-rg350-72b8f3a1c7e47ec6fef962cd1aa7abebcf5d782f.tar.bz2 scummvm-rg350-72b8f3a1c7e47ec6fef962cd1aa7abebcf5d782f.zip |
WAGE: Implemented menu commands as callback
Diffstat (limited to 'engines/wage')
-rw-r--r-- | engines/wage/gui.cpp | 50 | ||||
-rw-r--r-- | engines/wage/gui.h | 1 | ||||
-rw-r--r-- | engines/wage/macmenu.cpp | 42 | ||||
-rw-r--r-- | engines/wage/macmenu.h | 6 |
4 files changed, 59 insertions, 40 deletions
diff --git a/engines/wage/gui.cpp b/engines/wage/gui.cpp index 9eca3a8fea..0ddae88f2d 100644 --- a/engines/wage/gui.cpp +++ b/engines/wage/gui.cpp @@ -112,6 +112,8 @@ static void cursorTimerHandler(void *refCon) { static bool sceneWindowCallback(WindowClick click, Common::Event &event, void *gui); static bool consoleWindowCallback(WindowClick click, Common::Event &event, void *gui); +static void menuCommandsCallback(int action, Common::String &text, void *data); + Gui::Gui(WageEngine *engine) { _engine = engine; @@ -143,6 +145,8 @@ Gui::Gui(WageEngine *engine) { _menu = _wm.addMenu(this); + _menu->setCommandsCallback(menuCommandsCallback, this); + _menu->addStaticMenus(menuSubItems); _menu->addMenuSubItem(kMenuAbout, _engine->_world->getAboutMenuItemName(), kMenuActionAbout); @@ -267,6 +271,9 @@ static bool consoleWindowCallback(WindowClick click, Common::Event &event, void return gui->processConsoleEvents(click, event); } +//////////////// +// Menu stuff +//////////////// void Gui::regenCommandsMenu() { _menu->createSubMenuFromString(_commandsMenuId, _engine->_world->_commandsMenu.c_str()); } @@ -306,4 +313,47 @@ bool Gui::processEvent(Common::Event &event) { return _wm.processEvent(event); } +void menuCommandsCallback(int action, Common::String &text, void *data) { + Gui *g = (Gui *)data; + + g->executeMenuCommand(action, text); +} + +void Gui::executeMenuCommand(int action, Common::String &text) { + switch(action) { + case kMenuActionAbout: + case kMenuActionNew: + case kMenuActionOpen: + case kMenuActionClose: + case kMenuActionSave: + case kMenuActionSaveAs: + case kMenuActionRevert: + case kMenuActionQuit: + + case kMenuActionUndo: + actionUndo(); + break; + case kMenuActionCut: + actionCut(); + break; + case kMenuActionCopy: + actionCopy(); + break; + case kMenuActionPaste: + actionPaste(); + break; + case kMenuActionClear: + actionClear(); + break; + + case kMenuActionCommand: + _engine->processTurn(&text, NULL); + break; + + default: + warning("Unknown action: %d", action); + + } +} + } // End of namespace Wage diff --git a/engines/wage/gui.h b/engines/wage/gui.h index c3612db6b5..ecf54d4b78 100644 --- a/engines/wage/gui.h +++ b/engines/wage/gui.h @@ -91,6 +91,7 @@ public: bool processSceneEvents(WindowClick click, Common::Event &event); bool processConsoleEvents(WindowClick click, Common::Event &event); + void executeMenuCommand(int action, Common::String &text); private: void drawScene(); diff --git a/engines/wage/macmenu.cpp b/engines/wage/macmenu.cpp index 0b3b76c7bb..aecf27726a 100644 --- a/engines/wage/macmenu.cpp +++ b/engines/wage/macmenu.cpp @@ -487,7 +487,8 @@ bool Menu::mouseRelease(int x, int y) { _menuActivated = false; if (_activeItem != -1 && _activeSubItem != -1 && _items[_activeItem]->subitems[_activeSubItem]->enabled) - executeCommand(_items[_activeItem]->subitems[_activeSubItem]); + (*_ccallback)(_items[_activeItem]->subitems[_activeSubItem]->action, + _items[_activeItem]->subitems[_activeSubItem]->text, _cdata); _activeItem = -1; _activeSubItem = -1; @@ -500,43 +501,6 @@ bool Menu::mouseRelease(int x, int y) { return false; } -void Menu::executeCommand(MenuSubItem *subitem) { - switch(subitem->action) { - case kMenuActionAbout: - case kMenuActionNew: - case kMenuActionOpen: - case kMenuActionClose: - case kMenuActionSave: - case kMenuActionSaveAs: - case kMenuActionRevert: - case kMenuActionQuit: - - case kMenuActionUndo: - _gui->actionUndo(); - break; - case kMenuActionCut: - _gui->actionCut(); - break; - case kMenuActionCopy: - _gui->actionCopy(); - break; - case kMenuActionPaste: - _gui->actionPaste(); - break; - case kMenuActionClear: - _gui->actionClear(); - break; - - case kMenuActionCommand: - _gui->_engine->processTurn(&subitem->text, NULL); - break; - - default: - warning("Unknown action: %d", subitem->action); - - } -} - bool Menu::processMenuShortCut(byte flags, uint16 ascii) { ascii = tolower(ascii); @@ -544,7 +508,7 @@ bool Menu::processMenuShortCut(byte flags, uint16 ascii) { for (uint i = 0; i < _items.size(); i++) for (uint j = 0; j < _items[i]->subitems.size(); j++) if (_items[i]->subitems[j]->enabled && tolower(_items[i]->subitems[j]->shortcut) == ascii) { - executeCommand(_items[i]->subitems[j]); + (*_ccallback)(_items[i]->subitems[j]->action, _items[i]->subitems[j]->text, _cdata); return true; } } diff --git a/engines/wage/macmenu.h b/engines/wage/macmenu.h index c80de9d683..929ce76dc5 100644 --- a/engines/wage/macmenu.h +++ b/engines/wage/macmenu.h @@ -104,6 +104,8 @@ public: Menu(int id, const Common::Rect &bounds, MacWindowManager *wm, Gui *gui); ~Menu(); + void setCommandsCallback(void (*callback)(int, Common::String &, void *), void *data) { _ccallback = callback; _cdata = data; } + void addStaticMenus(const MenuData *data); void calcDimensions(); @@ -135,7 +137,6 @@ private: int calculateMenuWidth(MenuItem *menu); void calcMenuBounds(MenuItem *menu); void renderSubmenu(MenuItem *menu); - void executeCommand(MenuSubItem *subitem); bool keyEvent(Common::Event &event); bool mouseClick(int x, int y); @@ -152,6 +153,9 @@ private: int _activeItem; int _activeSubItem; + + void (*_ccallback)(int action, Common::String &text, void *data); + void *_cdata; }; } // End of namespace Wage |