aboutsummaryrefslogtreecommitdiff
path: root/engines/wage
diff options
context:
space:
mode:
authorEugene Sandulenko2016-04-28 15:25:14 +0200
committerEugene Sandulenko2016-04-28 15:25:14 +0200
commit72b8f3a1c7e47ec6fef962cd1aa7abebcf5d782f (patch)
treeeb6304dbd84f20479d0bb886d79744369d32e982 /engines/wage
parent3027433b669d00a5b16689a4de518639d7dff746 (diff)
downloadscummvm-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.cpp50
-rw-r--r--engines/wage/gui.h1
-rw-r--r--engines/wage/macmenu.cpp42
-rw-r--r--engines/wage/macmenu.h6
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