diff options
author | johndoe123 | 2013-01-30 11:04:48 +0000 |
---|---|---|
committer | Willem Jan Palenstijn | 2013-05-08 20:47:43 +0200 |
commit | 9ca3973e6fe6c191a504a2c9fb402f03fda738e7 (patch) | |
tree | 73964926b4fb00aff65183084333c738bc57426e /engines/neverhood | |
parent | 8749efdea821433cf355ae4fa543ef412f33c2fe (diff) | |
download | scummvm-rg350-9ca3973e6fe6c191a504a2c9fb402f03fda738e7.tar.gz scummvm-rg350-9ca3973e6fe6c191a504a2c9fb402f03fda738e7.tar.bz2 scummvm-rg350-9ca3973e6fe6c191a504a2c9fb402f03fda738e7.zip |
NEVERHOOD: Work on the save/load/delete menus
- Rename WidgetScene to GameStateMenu
- Merge common code from the save/load/delete into GameStateMenu
Diffstat (limited to 'engines/neverhood')
-rw-r--r-- | engines/neverhood/menumodule.cpp | 424 | ||||
-rw-r--r-- | engines/neverhood/menumodule.h | 78 |
2 files changed, 179 insertions, 323 deletions
diff --git a/engines/neverhood/menumodule.cpp b/engines/neverhood/menumodule.cpp index 8b0353287c..619acadd8c 100644 --- a/engines/neverhood/menumodule.cpp +++ b/engines/neverhood/menumodule.cpp @@ -243,9 +243,9 @@ void MenuModule::handleSaveGameMenuAction(bool doSave, bool doQuery) { } void MenuModule::handleDeleteGameMenuAction(bool doDelete) { + createScene(MAIN_MENU, -1); if (doDelete && _savegameSlot >= 0) { _vm->removeGameState(_savegameSlot); - createScene(MAIN_MENU, -1); } delete _savegameList; _savegameList = NULL; @@ -453,33 +453,9 @@ uint32 CreditsScene::handleMessage(int messageNum, const MessageParam ¶m, En return 0; } -WidgetScene::WidgetScene(NeverhoodEngine *vm, Module *parentModule) - : Scene(vm, parentModule), _currWidget(NULL) { -} - -NPoint WidgetScene::getMousePos() { - NPoint pt; - pt.x = _mouseCursor->getX(); - pt.y = _mouseCursor->getY(); - return pt; -} - -void WidgetScene::setCurrWidget(Widget *newWidget) { - if (newWidget && newWidget != _currWidget) { - if (_currWidget) - _currWidget->exitWidget(); - newWidget->enterWidget(); - _currWidget = newWidget; - } -} - -void WidgetScene::handleEvent(int16 itemID, int eventType) { - // Empty -} - -Widget::Widget(NeverhoodEngine *vm, int16 x, int16 y, int16 itemID, WidgetScene *parentScene, +Widget::Widget(NeverhoodEngine *vm, int16 x, int16 y, GameStateMenu *parentScene, int baseObjectPriority, int baseSurfacePriority) - : StaticSprite(vm, baseObjectPriority), _itemID(itemID), _parentScene(parentScene), + : StaticSprite(vm, baseObjectPriority), _parentScene(parentScene), _baseObjectPriority(baseObjectPriority), _baseSurfacePriority(baseSurfacePriority) { SetUpdateHandler(&Widget::update); @@ -542,10 +518,10 @@ uint32 Widget::handleMessage(int messageNum, const MessageParam ¶m, Entity * return messageResult; } -TextLabelWidget::TextLabelWidget(NeverhoodEngine *vm, int16 x, int16 y, int16 itemID, WidgetScene *parentScene, +TextLabelWidget::TextLabelWidget(NeverhoodEngine *vm, int16 x, int16 y, GameStateMenu *parentScene, int baseObjectPriority, int baseSurfacePriority, const byte *string, int stringLen, BaseSurface *drawSurface, int16 tx, int16 ty, FontSurface *fontSurface) - : Widget(vm, x, y, itemID, parentScene, baseObjectPriority, baseSurfacePriority), + : Widget(vm, x, y, parentScene, baseObjectPriority, baseSurfacePriority), _string(string), _stringLen(stringLen), _drawSurface(drawSurface), _tx(tx), _ty(ty), _fontSurface(fontSurface) { } @@ -579,9 +555,9 @@ void TextLabelWidget::setString(const byte *string, int stringLen) { _stringLen = stringLen; } -TextEditWidget::TextEditWidget(NeverhoodEngine *vm, int16 x, int16 y, int16 itemID, WidgetScene *parentScene, +TextEditWidget::TextEditWidget(NeverhoodEngine *vm, int16 x, int16 y, GameStateMenu *parentScene, int maxStringLength, FontSurface *fontSurface, uint32 fileHash, const NRect &rect) - : Widget(vm, x, y, itemID, parentScene, 1000, 1000), + : Widget(vm, x, y, parentScene, 1000, 1000), _maxStringLength(maxStringLength), _fontSurface(fontSurface), _fileHash(fileHash), _rect(rect), _cursorSurface(NULL), _cursorTicks(0), _cursorPos(0), _cursorFileHash(0), _cursorWidth(0), _cursorHeight(0), _modified(false), _readOnly(false) { @@ -627,7 +603,7 @@ void TextEditWidget::initialize() { _parentScene->addCollisionSprite(this); _surface->setVisible(true); _textLabelWidget = new TextLabelWidget(_vm, _rect.x1, _rect.y1 + (_rect.y2 - _rect.y1 + 1 - _fontSurface->getCharHeight()) / 2, - 0, _parentScene, _baseObjectPriority + 1, _baseSurfacePriority + 1, + _parentScene, _baseObjectPriority + 1, _baseSurfacePriority + 1, (const byte*)_entryString.c_str(), _entryString.size(), _surface, _x, _y, _fontSurface); _textLabelWidget->initialize(); cursorSpriteResource.load(_cursorFileHash, true); @@ -758,9 +734,9 @@ uint32 TextEditWidget::handleMessage(int messageNum, const MessageParam ¶m, return messageResult; } -SavegameListBox::SavegameListBox(NeverhoodEngine *vm, int16 x, int16 y, int16 itemID, WidgetScene *parentScene, +SavegameListBox::SavegameListBox(NeverhoodEngine *vm, int16 x, int16 y, GameStateMenu *parentScene, SavegameList *savegameList, FontSurface *fontSurface, uint32 bgFileHash, const NRect &rect) - : Widget(vm, x, y, itemID, parentScene, 1000, 1000), + : Widget(vm, x, y, parentScene, 1000, 1000), _savegameList(savegameList), _fontSurface(fontSurface), _bgFileHash(bgFileHash), _rect(rect), _maxStringLength(0), _firstVisibleItem(0), _lastVisibleItem(0), _currIndex(0) { @@ -779,7 +755,7 @@ void SavegameListBox::onClick() { _currIndex = newIndex; refresh(); _parentScene->setCurrWidget(this); - _parentScene->handleEvent(_itemID, 5); + _parentScene->refreshDescriptionEdit(); } } } @@ -803,7 +779,7 @@ void SavegameListBox::buildItems() { for (uint i = 0; i < savegameList.size(); ++i) { const byte *string = (const byte*)savegameList[i].description.c_str(); int stringLen = (int)savegameList[i].description.size(); - TextLabelWidget *label = new TextLabelWidget(_vm, itemX, itemY, i, _parentScene, _baseObjectPriority + 1, + TextLabelWidget *label = new TextLabelWidget(_vm, itemX, itemY, _parentScene, _baseObjectPriority + 1, _baseSurfacePriority + 1, string, MIN(stringLen, _maxStringLength), _surface, _x, _y, _fontSurface); label->initialize(); _textLabelItems.push_back(label); @@ -861,84 +837,92 @@ void SavegameListBox::pageDown() { } } -SaveGameMenu::SaveGameMenu(NeverhoodEngine *vm, Module *parentModule, SavegameList *savegameList) - : WidgetScene(vm, parentModule), _savegameList(savegameList) { - - static const uint32 kSaveGameMenuButtonFileHashes[] = { - 0x8359A824, - 0x0690E260, - 0x0352B050, - 0x1392A223, - 0x13802260, - 0x0B32B200 - }; +GameStateMenu::GameStateMenu(NeverhoodEngine *vm, Module *parentModule, SavegameList *savegameList, + const uint32 *buttonFileHashes, const NRect *buttonCollisionBounds, + uint32 backgroundFileHash, uint32 fontFileHash, + uint32 mouseFileHash, const NRect *mouseRect, + uint32 listBoxBackgroundFileHash, int16 listBoxX, int16 listBoxY, const NRect &listBoxRect, + uint32 textEditBackgroundFileHash, uint32 textEditCursorFileHash, int16 textEditX, int16 textEditY, const NRect &textEditRect, + uint32 textFileHash1, uint32 textFileHash2) + : Scene(vm, parentModule), _currWidget(NULL), _savegameList(savegameList) { - static const NRect kSaveGameMenuButtonCollisionBounds[] = { - NRect(518, 106, 602, 160), - NRect(516, 378, 596, 434), - NRect(394, 108, 458, 206), - NRect(400, 204, 458, 276), - NRect(398, 292, 456, 352), - NRect(396, 352, 460, 444) - }; - - static const NRect kListBoxRect(0, 0, 320, 272); - static const NRect kTextEditRect(0, 0, 377, 17); - static const NRect kMouseRect(50, 47, 427, 64); - - _fontSurface = new FontSurface(_vm, 0x2328121A, 32, 7, 32, 11, 17); + _fontSurface = new FontSurface(_vm, fontFileHash, 32, 7, 32, 11, 17); - setBackground(0x30084E25); - setPalette(0x30084E25); - insertScreenMouse(0x84E21308, &kMouseRect); - insertStaticSprite(0x1340A5C2, 200); - insertStaticSprite(0x1301A7EA, 200); - - _listBox = new SavegameListBox(_vm, 60, 142, 69/*ItemID*/, this, - _savegameList, _fontSurface, 0x1115A223, kListBoxRect); + setBackground(backgroundFileHash); + setPalette(backgroundFileHash); + insertScreenMouse(mouseFileHash, mouseRect); + insertStaticSprite(textFileHash1, 200); + insertStaticSprite(textFileHash2, 200); + + _listBox = new SavegameListBox(_vm, listBoxX, listBoxY, this, + _savegameList, _fontSurface, listBoxBackgroundFileHash, listBoxRect); _listBox->initialize(); - _textEditWidget = new TextEditWidget(_vm, 50, 47, 70/*ItemID*/, this, 29, - _fontSurface, 0x3510A868, kTextEditRect); - _textEditWidget->setCursor(0x8290AC20, 2, 13); + _textEditWidget = new TextEditWidget(_vm, textEditX, textEditY, this, 29, + _fontSurface, textEditBackgroundFileHash, textEditRect); + if (textEditCursorFileHash != 0) + _textEditWidget->setCursor(textEditCursorFileHash, 2, 13); + else + _textEditWidget->setReadOnly(true); _textEditWidget->initialize(); setCurrWidget(_textEditWidget); for (uint buttonIndex = 0; buttonIndex < 6; ++buttonIndex) { Sprite *menuButton = insertSprite<MenuButton>(this, buttonIndex, - kSaveGameMenuButtonFileHashes[buttonIndex], kSaveGameMenuButtonCollisionBounds[buttonIndex]); + buttonFileHashes[buttonIndex], buttonCollisionBounds[buttonIndex]); addCollisionSprite(menuButton); } SetUpdateHandler(&Scene::update); - SetMessageHandler(&SaveGameMenu::handleMessage); + SetMessageHandler(&GameStateMenu::handleMessage); + } -SaveGameMenu::~SaveGameMenu() { +GameStateMenu::~GameStateMenu() { delete _fontSurface; } -void SaveGameMenu::handleEvent(int16 itemID, int eventType) { - if (itemID == 69 && eventType == 5) { - uint currIndex = _listBox->getCurrIndex(); - _textEditWidget->setString((*_savegameList)[currIndex].description); - setCurrWidget(_textEditWidget); +NPoint GameStateMenu::getMousePos() { + NPoint pt; + pt.x = _mouseCursor->getX(); + pt.y = _mouseCursor->getY(); + return pt; +} + +void GameStateMenu::setCurrWidget(Widget *newWidget) { + if (newWidget && newWidget != _currWidget) { + if (_currWidget) + _currWidget->exitWidget(); + newWidget->enterWidget(); + _currWidget = newWidget; } } -uint32 SaveGameMenu::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) { +void GameStateMenu::refreshDescriptionEdit() { + uint currIndex = _listBox->getCurrIndex(); + _textEditWidget->setString((*_savegameList)[currIndex].description); + setCurrWidget(_textEditWidget); +} + +void GameStateMenu::performAction() { + // Empty +} + +uint32 GameStateMenu::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) { Scene::handleMessage(messageNum, param, sender); switch (messageNum) { case 0x000A: - sendMessage(_textEditWidget, 0x000A, param.asInteger()); - setCurrWidget(_textEditWidget); + if (!_textEditWidget->isReadOnly()) { + sendMessage(_textEditWidget, 0x000A, param.asInteger()); + setCurrWidget(_textEditWidget); + } break; case 0x000B: if (param.asInteger() == Common::KEYCODE_RETURN) - performSaveGame(); + performAction(); else if (param.asInteger() == Common::KEYCODE_ESCAPE) leaveScene(1); - else { + else if (!_textEditWidget->isReadOnly()) { sendMessage(_textEditWidget, 0x000B, param.asInteger()); setCurrWidget(_textEditWidget); } @@ -947,7 +931,7 @@ uint32 SaveGameMenu::handleMessage(int messageNum, const MessageParam ¶m, En // Handle menu button click switch (param.asInteger()) { case 0: - performSaveGame(); + performAction(); break; case 1: leaveScene(1); @@ -970,219 +954,101 @@ uint32 SaveGameMenu::handleMessage(int messageNum, const MessageParam ¶m, En return 0; } -void SaveGameMenu::performSaveGame() { - ((MenuModule*)_parentModule)->setSavegameInfo(_textEditWidget->getString(), - _listBox->getCurrIndex(), _textEditWidget->isModified()); - leaveScene(0); -} - -LoadGameMenu::LoadGameMenu(NeverhoodEngine *vm, Module *parentModule, SavegameList *savegameList) - : WidgetScene(vm, parentModule), _savegameList(savegameList) { - - static const uint32 kLoadGameMenuButtonFileHashes[] = { - 0x100B2091, - 0x84822B03, - 0x20E22087, - 0x04040107, - 0x04820122, - 0x24423047 - }; - - static const NRect kLoadGameMenuButtonCollisionBounds[] = { - NRect( 44, 115, 108, 147), - NRect( 52, 396, 112, 426), - NRect(188, 116, 245, 196), - NRect(189, 209, 239, 269), - NRect(187, 301, 233, 349), - NRect(182, 358, 241, 433) - }; +static const uint32 kSaveGameMenuButtonFileHashes[] = { + 0x8359A824, 0x0690E260, 0x0352B050, + 0x1392A223, 0x13802260, 0x0B32B200 +}; - static const NRect kListBoxRect(0, 0, 320, 271); - static const NRect kTextEditRect(0, 0, 320, 17); - static const NRect kMouseRect(263, 48, 583, 65); +static const NRect kSaveGameMenuButtonCollisionBounds[] = { + NRect(518, 106, 602, 160), + NRect(516, 378, 596, 434), + NRect(394, 108, 458, 206), + NRect(400, 204, 458, 276), + NRect(398, 292, 456, 352), + NRect(396, 352, 460, 444) +}; - _fontSurface = new FontSurface(_vm, calcHash("bgLoadTinyAlphabet"), 32, 7, 32, 11, 17); - - setBackground(0x98620234); - setPalette(0x98620234); - insertScreenMouse(0x2023098E, &kMouseRect); - insertStaticSprite(0x0BC600A3, 200); - insertStaticSprite(0x0F960021, 200); - - _listBox = new SavegameListBox(_vm, 263, 142, 69/*ItemID*/, this, - _savegameList, _fontSurface, 0x04040409, kListBoxRect); - _listBox->initialize(); +static const NRect kSaveGameMenuListBoxRect(0, 0, 320, 272); +static const NRect kSaveGameMenuTextEditRect(0, 0, 377, 17); +static const NRect kSaveGameMenuMouseRect(50, 47, 427, 64); - _textEditWidget = new TextEditWidget(_vm, 263, 48, 70/*ItemID*/, this, 29, - _fontSurface, 0x10924C03, kTextEditRect); - _textEditWidget->setReadOnly(true); - _textEditWidget->initialize(); - setCurrWidget(_textEditWidget); - - for (uint buttonIndex = 0; buttonIndex < 6; ++buttonIndex) { - Sprite *menuButton = insertSprite<MenuButton>(this, buttonIndex, - kLoadGameMenuButtonFileHashes[buttonIndex], kLoadGameMenuButtonCollisionBounds[buttonIndex]); - addCollisionSprite(menuButton); - } +SaveGameMenu::SaveGameMenu(NeverhoodEngine *vm, Module *parentModule, SavegameList *savegameList) + : GameStateMenu(vm, parentModule, savegameList, kSaveGameMenuButtonFileHashes, kSaveGameMenuButtonCollisionBounds, + 0x30084E25, 0x2328121A, + 0x84E21308, &kSaveGameMenuMouseRect, + 0x1115A223, 60, 142, kSaveGameMenuListBoxRect, + 0x3510A868, 0x8290AC20, 50, 47, kSaveGameMenuTextEditRect, + 0x1340A5C2, 0x1301A7EA) { - SetUpdateHandler(&Scene::update); - SetMessageHandler(&LoadGameMenu::handleMessage); } -LoadGameMenu::~LoadGameMenu() { - delete _fontSurface; +void SaveGameMenu::performAction() { + ((MenuModule*)_parentModule)->setSavegameInfo(_textEditWidget->getString(), + _listBox->getCurrIndex(), _textEditWidget->isModified()); + leaveScene(0); } -void LoadGameMenu::handleEvent(int16 itemID, int eventType) { - if (itemID == 69 && eventType == 5) { - uint currIndex = _listBox->getCurrIndex(); - _textEditWidget->setString((*_savegameList)[currIndex].description); - setCurrWidget(_textEditWidget); - } -} +static const uint32 kLoadGameMenuButtonFileHashes[] = { + 0x100B2091, 0x84822B03, 0x20E22087, + 0x04040107, 0x04820122, 0x24423047 +}; + +static const NRect kLoadGameMenuButtonCollisionBounds[] = { + NRect( 44, 115, 108, 147), + NRect( 52, 396, 112, 426), + NRect(188, 116, 245, 196), + NRect(189, 209, 239, 269), + NRect(187, 301, 233, 349), + NRect(182, 358, 241, 433) +}; + +static const NRect kLoadGameMenuListBoxRect(0, 0, 320, 271); +static const NRect kLoadGameMenuTextEditRect(0, 0, 320, 17); +static const NRect kLoadGameMenuMouseRect(263, 48, 583, 65); + +LoadGameMenu::LoadGameMenu(NeverhoodEngine *vm, Module *parentModule, SavegameList *savegameList) + : GameStateMenu(vm, parentModule, savegameList, kLoadGameMenuButtonFileHashes, kLoadGameMenuButtonCollisionBounds, + 0x98620234, 0x201C2474, + 0x2023098E, &kLoadGameMenuMouseRect, + 0x04040409, 263, 142, kLoadGameMenuListBoxRect, + 0x10924C03, 0, 263, 48, kLoadGameMenuTextEditRect, + 0x0BC600A3, 0x0F960021) { -uint32 LoadGameMenu::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) { - Scene::handleMessage(messageNum, param, sender); - switch (messageNum) { - case 0x000B: - if (param.asInteger() == Common::KEYCODE_RETURN) - performLoadGame(); - else if (param.asInteger() == Common::KEYCODE_ESCAPE) - leaveScene(1); - break; - case 0x2000: - // Handle menu button click - switch (param.asInteger()) { - case 0: - performLoadGame(); - break; - case 1: - leaveScene(1); - break; - case 2: - _listBox->pageUp(); - break; - case 3: - _listBox->scrollUp(); - break; - case 4: - _listBox->scrollDown(); - break; - case 5: - _listBox->pageDown(); - break; - } - break; - } - return 0; } -void LoadGameMenu::performLoadGame() { +void LoadGameMenu::performAction() { ((MenuModule*)_parentModule)->setLoadgameInfo(_listBox->getCurrIndex()); leaveScene(0); } -DeleteGameMenu::DeleteGameMenu(NeverhoodEngine *vm, Module *parentModule, SavegameList *savegameList) - : WidgetScene(vm, parentModule), _savegameList(savegameList) { - - static const uint32 kDeleteGameMenuButtonFileHashes[] = { - 0x8198E268, - 0xDD0C4620, - 0x81296520, - 0x8D284211, - 0x8C004621, - 0x07294020 - }; - - static const NRect kDeleteGameMenuButtonCollisionBounds[] = { - NRect(518, 46, 595, 91), - NRect(524, 322, 599, 369), - NRect(395, 40, 462, 127), - NRect(405, 126, 460, 185), - NRect(397, 205, 456, 273), - NRect(395, 278, 452, 372) - }; - - static const NRect kListBoxRect(0, 0, 320, 271); - static const NRect kTextEditRect(0, 0, 320, 17); - - _fontSurface = new FontSurface(_vm, calcHash("bgDeleteTinyAlphabet"), 32, 7, 32, 11, 17); - - setBackground(0x4080E01C); - setPalette(0x4080E01C); - insertScreenMouse(0x0E018400); - insertStaticSprite(0x80083C01, 200); - insertStaticSprite(0x84181E81, 200); - - _listBox = new SavegameListBox(_vm, 61, 64, 69/*ItemID*/, this, - _savegameList, _fontSurface, calcHash("mxDeleteListBox"), kListBoxRect); - _listBox->initialize(); - - _textEditWidget = new TextEditWidget(_vm, 49, 414, 70/*ItemID*/, this, 29, - _fontSurface, 0x250A3060, kTextEditRect); - _textEditWidget->setReadOnly(true); - _textEditWidget->initialize(); - setCurrWidget(_textEditWidget); - - for (uint buttonIndex = 0; buttonIndex < 6; ++buttonIndex) { - Sprite *menuButton = insertSprite<MenuButton>(this, buttonIndex, - kDeleteGameMenuButtonFileHashes[buttonIndex], kDeleteGameMenuButtonCollisionBounds[buttonIndex]); - addCollisionSprite(menuButton); - } +static const uint32 kDeleteGameMenuButtonFileHashes[] = { + 0x8198E268, 0xDD0C4620, 0x81296520, + 0x8D284211, 0x8C004621, 0x07294020 +}; - SetUpdateHandler(&Scene::update); - SetMessageHandler(&DeleteGameMenu::handleMessage); -} +static const NRect kDeleteGameMenuButtonCollisionBounds[] = { + NRect(518, 46, 595, 91), + NRect(524, 322, 599, 369), + NRect(395, 40, 462, 127), + NRect(405, 126, 460, 185), + NRect(397, 205, 456, 273), + NRect(395, 278, 452, 372) +}; -DeleteGameMenu::~DeleteGameMenu() { - delete _fontSurface; -} +static const NRect kDeleteGameMenuListBoxRect(0, 0, 320, 271); +static const NRect kDeleteGameMenuTextEditRect(0, 0, 320, 17); -void DeleteGameMenu::handleEvent(int16 itemID, int eventType) { - if (itemID == 69 && eventType == 5) { - uint currIndex = _listBox->getCurrIndex(); - _textEditWidget->setString((*_savegameList)[currIndex].description); - setCurrWidget(_textEditWidget); - } -} +DeleteGameMenu::DeleteGameMenu(NeverhoodEngine *vm, Module *parentModule, SavegameList *savegameList) + : GameStateMenu(vm, parentModule, savegameList, kDeleteGameMenuButtonFileHashes, kDeleteGameMenuButtonCollisionBounds, + 0x4080E01C, 0x728523ED, + 0x0E018400, NULL, + 0xA5584211, 61, 64, kDeleteGameMenuListBoxRect, + 0x250A3060, 0, 49, 414, kDeleteGameMenuTextEditRect, + 0x80083C01, 0x84181E81) { -uint32 DeleteGameMenu::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) { - Scene::handleMessage(messageNum, param, sender); - switch (messageNum) { - case 0x000B: - if (param.asInteger() == Common::KEYCODE_RETURN) - performDeleteGame(); - else if (param.asInteger() == Common::KEYCODE_ESCAPE) - leaveScene(1); - break; - case 0x2000: - // Handle menu button click - switch (param.asInteger()) { - case 0: - performDeleteGame(); - break; - case 1: - leaveScene(1); - break; - case 2: - _listBox->pageUp(); - break; - case 3: - _listBox->scrollUp(); - break; - case 4: - _listBox->scrollDown(); - break; - case 5: - _listBox->pageDown(); - break; - } - break; - } - return 0; } -void DeleteGameMenu::performDeleteGame() { +void DeleteGameMenu::performAction() { ((MenuModule*)_parentModule)->setDeletegameInfo(_listBox->getCurrIndex()); leaveScene(0); } @@ -1213,7 +1079,7 @@ QueryOverwriteMenu::QueryOverwriteMenu(NeverhoodEngine *vm, Module *parentModule // Draw the query text to the background, each text line is centered // NOTE The original had this text in its own class - FontSurface *fontSurface = new FontSurface(_vm, calcHash("bgQueryTinyAlphabet"), 32, 7, 32, 11, 17); + FontSurface *fontSurface = new FontSurface(_vm, 0x94188D4D, 32, 7, 32, 11, 17); Common::StringArray textLines; textLines.push_back(description); textLines.push_back("Game exists."); diff --git a/engines/neverhood/menumodule.h b/engines/neverhood/menumodule.h index 39cd36a7a2..08858ad204 100644 --- a/engines/neverhood/menumodule.h +++ b/engines/neverhood/menumodule.h @@ -98,21 +98,11 @@ protected: }; class Widget; - -class WidgetScene : public Scene { -public: - WidgetScene(NeverhoodEngine *vm, Module *parentModule); - NPoint getMousePos(); - virtual void setCurrWidget(Widget *newWidget); - virtual Widget *getCurrWidget() { return _currWidget; } - virtual void handleEvent(int16 itemID, int eventType); -protected: - Widget *_currWidget; -}; +class GameStateMenu; class Widget : public StaticSprite { public: - Widget(NeverhoodEngine *vm, int16 x, int16 y, int16 itemID, WidgetScene *parentScene, + Widget(NeverhoodEngine *vm, int16 x, int16 y, GameStateMenu *parentScene, int baseObjectPriority, int baseSurfacePriority); virtual void onClick(); virtual void setPosition(int16 x, int16 y); @@ -123,8 +113,7 @@ public: virtual void enterWidget(); virtual void exitWidget(); protected: - int16 _itemID; - WidgetScene *_parentScene; + GameStateMenu *_parentScene; int _baseObjectPriority; int _baseSurfacePriority; void update(); @@ -133,7 +122,7 @@ protected: class TextLabelWidget : public Widget { public: - TextLabelWidget(NeverhoodEngine *vm, int16 x, int16 y, int16 itemID, WidgetScene *parentScene, + TextLabelWidget(NeverhoodEngine *vm, int16 x, int16 y, GameStateMenu *parentScene, int baseObjectPriority, int baseSurfacePriority, const byte *string, int stringLen, BaseSurface *drawSurface, int16 tx, int16 ty, FontSurface *fontSurface); virtual void initialize(); @@ -153,7 +142,7 @@ protected: class TextEditWidget : public Widget { public: - TextEditWidget(NeverhoodEngine *vm, int16 x, int16 y, int16 itemID, WidgetScene *parentScene, + TextEditWidget(NeverhoodEngine *vm, int16 x, int16 y, GameStateMenu *parentScene, int maxStringLength, FontSurface *fontSurface, uint32 fileHash, const NRect &rect); ~TextEditWidget(); virtual void onClick(); @@ -169,6 +158,7 @@ public: void handleKeyDown(Common::KeyCode keyCode); void refresh(); void setReadOnly(bool value) { _readOnly = value; } + bool isReadOnly() const { return _readOnly; } bool isModified() const { return _modified; } protected: NRect _rect; @@ -191,7 +181,7 @@ protected: class SavegameListBox : public Widget { public: - SavegameListBox(NeverhoodEngine *vm, int16 x, int16 y, int16 itemID, WidgetScene *parentScene, + SavegameListBox(NeverhoodEngine *vm, int16 x, int16 y, GameStateMenu *parentScene, SavegameList *savegameList, FontSurface *fontSurface, uint32 bgFileHash, const NRect &rect); virtual void onClick(); virtual void initialize(); @@ -215,51 +205,51 @@ protected: uint _currIndex; int _maxVisibleItemsCount; }; - -class SaveGameMenu : public WidgetScene { + +class GameStateMenu : public Scene { public: - SaveGameMenu(NeverhoodEngine *vm, Module *parentModule, SavegameList *savegameList); - ~SaveGameMenu(); - virtual void handleEvent(int16 itemID, int eventType); + GameStateMenu(NeverhoodEngine *vm, Module *parentModule, SavegameList *savegameList, + const uint32 *buttonFileHashes, const NRect *buttonCollisionBounds, + uint32 backgroundFileHash, uint32 fontFileHash, + uint32 mouseFileHash, const NRect *mouseRect, + uint32 listBoxBackgroundFileHash, int16 listBoxX, int16 listBoxY, const NRect &listBoxRect, + uint32 textEditBackgroundFileHash, uint32 textEditCursorFileHash, int16 textEditX, int16 textEditY, const NRect &textEditRect, + uint32 textFileHash1, uint32 textFileHash2); + virtual ~GameStateMenu(); + NPoint getMousePos(); + virtual void setCurrWidget(Widget *newWidget); + virtual Widget *getCurrWidget() { return _currWidget; } + virtual void refreshDescriptionEdit(); protected: + Widget *_currWidget; SavegameList *_savegameList; FontSurface *_fontSurface; SavegameListBox *_listBox; TextEditWidget *_textEditWidget; Common::String _savegameDescription; - void update(); uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender); - void performSaveGame(); + virtual void performAction(); +}; + +class SaveGameMenu : public GameStateMenu { +public: + SaveGameMenu(NeverhoodEngine *vm, Module *parentModule, SavegameList *savegameList); +protected: + virtual void performAction(); }; -class LoadGameMenu : public WidgetScene { +class LoadGameMenu : public GameStateMenu { public: LoadGameMenu(NeverhoodEngine *vm, Module *parentModule, SavegameList *savegameList); - ~LoadGameMenu(); - virtual void handleEvent(int16 itemID, int eventType); protected: - SavegameList *_savegameList; - FontSurface *_fontSurface; - SavegameListBox *_listBox; - TextEditWidget *_textEditWidget; - Common::String _savegameDescription; - uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender); - void performLoadGame(); + virtual void performAction(); }; -class DeleteGameMenu : public WidgetScene { +class DeleteGameMenu : public GameStateMenu { public: DeleteGameMenu(NeverhoodEngine *vm, Module *parentModule, SavegameList *savegameList); - ~DeleteGameMenu(); - virtual void handleEvent(int16 itemID, int eventType); protected: - SavegameList *_savegameList; - FontSurface *_fontSurface; - SavegameListBox *_listBox; - TextEditWidget *_textEditWidget; - Common::String _savegameDescription; - uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender); - void performDeleteGame(); + virtual void performAction(); }; class QueryOverwriteMenu : public Scene { |