aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohannes Schickel2008-04-04 06:45:39 +0000
committerJohannes Schickel2008-04-04 06:45:39 +0000
commit84af9cae9d47406942ce38b9a5cdaf306e12d11e (patch)
treedec2d17a4695edae63f69f0de808ac294d874a62
parent3dc6f9000de5782ccb1a08cb081300dcb0961580 (diff)
downloadscummvm-rg350-84af9cae9d47406942ce38b9a5cdaf306e12d11e.tar.gz
scummvm-rg350-84af9cae9d47406942ce38b9a5cdaf306e12d11e.tar.bz2
scummvm-rg350-84af9cae9d47406942ce38b9a5cdaf306e12d11e.zip
Added support for quit game button.
svn-id: r31376
-rw-r--r--engines/kyra/gui_v2.cpp58
-rw-r--r--engines/kyra/gui_v2.h11
-rw-r--r--engines/kyra/staticres.cpp11
3 files changed, 79 insertions, 1 deletions
diff --git a/engines/kyra/gui_v2.cpp b/engines/kyra/gui_v2.cpp
index 4583136743..86783af821 100644
--- a/engines/kyra/gui_v2.cpp
+++ b/engines/kyra/gui_v2.cpp
@@ -28,6 +28,7 @@
#include "kyra/screen.h"
#include "kyra/wsamovie.h"
#include "kyra/timer.h"
+#include "kyra/sound.h"
#include "common/savefile.h"
@@ -1208,6 +1209,7 @@ int GUI_v2::optionsButton(Button *button) {
initMenuLayout(_mainMenu);
//XXX
+ initMenuLayout(_choiceMenu);
_loadMenu.numberOfItems = 6;
initMenuLayout(_loadMenu);
initMenuLayout(_saveMenu);
@@ -1408,6 +1410,24 @@ int GUI_v2::scrollDownButton(Button *button) {
#pragma mark -
+int GUI_v2::quitGame(Button *caller) {
+ updateMenuButton(caller);
+ if (choiceDialog(0xF, 1)) {
+ _displayMenu = false;
+ _vm->_runFlag = false;
+ _vm->_sound->beginFadeOut();
+ _screen->fadeToBlack();
+ _screen->clearCurPage();
+ }
+
+ if (_vm->_runFlag) {
+ initMenu(*_currentMenu);
+ updateAllMenuButtons();
+ }
+
+ return 0;
+}
+
int GUI_v2::resumeGame(Button *caller) {
updateMenuButton(caller);
_displayMenu = false;
@@ -1704,5 +1724,43 @@ void GUI_v2::drawTextfieldBlock(int x, int y, uint8 c) {
_screen->fillRect(x+1, y+1, x+7, y+8, c);
}
+bool GUI_v2::choiceDialog(int name, bool type) {
+ _choiceMenu.highlightedItem = 0;
+ restorePage1(_vm->_screenBuffer);
+ backUpPage1(_vm->_screenBuffer);
+ if (type)
+ _choiceMenu.numberOfItems = 2;
+ else
+ _choiceMenu.numberOfItems = 1;
+ _choiceMenu.menuNameId = name;
+
+ initMenu(_choiceMenu);
+ _isChoiceMenu = true;
+ _choice = false;
+
+ while (_isChoiceMenu) {
+ processHighlights(_choiceMenu, _vm->_mouseX, _vm->_mouseY);
+ getInput();
+ }
+
+ restorePage1(_vm->_screenBuffer);
+ backUpPage1(_vm->_screenBuffer);
+ return _choice;
+}
+
+int GUI_v2::choiceYes(Button *caller) {
+ updateMenuButton(caller);
+ _choice = true;
+ _isChoiceMenu = false;
+ return 0;
+}
+
+int GUI_v2::choiceNo(Button *caller) {
+ updateMenuButton(caller);
+ _choice = false;
+ _isChoiceMenu = false;
+ return 0;
+}
+
} // end of namespace Kyra
diff --git a/engines/kyra/gui_v2.h b/engines/kyra/gui_v2.h
index fbac982bd4..8fb3d3fa74 100644
--- a/engines/kyra/gui_v2.h
+++ b/engines/kyra/gui_v2.h
@@ -111,7 +111,7 @@ private:
Button _menuButtons[7];
Button _scrollUpButton;
Button _scrollDownButton;
- Menu _mainMenu, _loadMenu, _saveMenu, _savenameMenu, _deathMenu;
+ Menu _mainMenu, _choiceMenu, _loadMenu, _saveMenu, _savenameMenu, _deathMenu;
void initStaticData();
const char *getMenuTitle(const Menu &menu);
@@ -152,6 +152,7 @@ private:
bool _isLoadMenu;
bool _isDeathMenu;
bool _isSaveMenu;
+ bool _isChoiceMenu;
bool _madeSave;
bool _loadedSave;
bool _restartGame;
@@ -162,6 +163,7 @@ private:
void setupSavegameNames(Menu &menu, int num);
// main menu
+ int quitGame(Button *caller);
int resumeGame(Button *caller);
// load menu
@@ -192,6 +194,13 @@ private:
void checkTextfieldInput();
void drawTextfieldBlock(int x, int y, uint8 c);
+ // choice menu
+ bool _choice;
+
+ bool choiceDialog(int name, bool type);
+ int choiceYes(Button *caller);
+ int choiceNo(Button *caller);
+
static const uint16 _menuStringsTalkie[];
static const uint16 _menuStringsOther[];
};
diff --git a/engines/kyra/staticres.cpp b/engines/kyra/staticres.cpp
index f599e9b634..e73b27f4b1 100644
--- a/engines/kyra/staticres.cpp
+++ b/engines/kyra/staticres.cpp
@@ -1520,10 +1520,21 @@ void GUI_v2::initStaticData() {
GUI_V2_MENU_ITEM(_mainMenu.item[3], 1, 0x04, -1, 0x51, 0xDC, 0x0F, 0xFC, 0xFD, -1, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
GUI_V2_MENU_ITEM(_mainMenu.item[4], 1, 0x25, -1, 0x62, 0xDC, 0x0F, 0xFC, 0xFD, -1, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
GUI_V2_MENU_ITEM(_mainMenu.item[5], 1, 0x05, -1, 0x73, 0xDC, 0x0F, 0xFC, 0xFD, -1, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
+ _mainMenu.item[5].callback = BUTTON_FUNCTOR(GUI_v2, this, &GUI_v2::quitGame);
GUI_V2_MENU_ITEM(_mainMenu.item[6], 1, 0x06, -1, 0x90, 0xDC, 0x0F, 0xFC, 0xFD, -1, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
_mainMenu.item[6].callback = BUTTON_FUNCTOR(GUI_v2, this, &GUI_v2::resumeGame);
for (int i = 0; i < 7; ++i)
_mainMenu.item[i].itemId = menuStr[0 * 8 + i + 1];
+
+ GUI_V2_MENU(_choiceMenu, -1, -1, 0x140, 0x38, 0xF8, 0xF9, 0xFA, 0, 0xFE, -1, 8, 0, 2, -1, -1, -1, -1);
+ GUI_V2_MENU_ITEM(_choiceMenu.item[0], 1, 0x14, 0x18, 0x1E, 0x48, 0x0F, 0xFC, 0xFD, -1, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
+ _choiceMenu.item[0].callback = BUTTON_FUNCTOR(GUI_v2, this, &GUI_v2::choiceYes);
+ GUI_V2_MENU_ITEM(_choiceMenu.item[1], 1, 0x13, 0xD8, 0x1E, 0x48, 0x0F, 0xFC, 0xFD, -1, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
+ _choiceMenu.item[1].callback = BUTTON_FUNCTOR(GUI_v2, this, &GUI_v2::choiceNo);
+ for (int i = 2; i <= 6; ++i)
+ _choiceMenu.item[i].enabled = false;
+ for (int i = 0; i < 7; ++i)
+ _choiceMenu.item[i].itemId = menuStr[3 * 8 + i + 1];
GUI_V2_MENU(_loadMenu, -1, -1, 0x120, 0xA0, 0xF8, 0xF9, 0xFA, menuStr[4 * 8], 0xFB, -1, 8, 0, 6, 0x84, 0x16, 0x84, 0x7C);
GUI_V2_MENU_ITEM(_loadMenu.item[0], 1, 0x29, -1, 0x27, 0x100, 0xF, 0xFC, 0xFD, 5, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);