PINK: added menu commands

This commit is contained in:
Andrei Prykhodko 2018-07-22 21:26:09 +03:00
parent f4eda44186
commit c06e2abfb0
6 changed files with 352 additions and 8 deletions

View file

@ -76,15 +76,12 @@ static const Graphics::MacMenuData menuSubItems[] = {
};
Director::Director(Common::PEResources &exe)
Director::Director()
: _surface(640, 480) {
_wm.setScreen(&_surface);
_wm.setMode(Graphics::kWMModeNoDesktop | Graphics::kWMModeAutohideMenu | Graphics::kWMModalMenuMode);
_wm.setMenuHotzone(Common::Rect(0, 0, 640, 23));
_wm.setMenuDelay(250000);
_menu = Graphics::MacMenu::createMenuFromPEexe(exe, &_wm);
_menu->calcDimensions();
}
void Director::update() {

View file

@ -46,7 +46,7 @@ class ActionSound;
class Director {
public:
Director(Common::PEResources &exe);
Director();
void update();
bool processEvent(Common::Event &event);
@ -81,7 +81,6 @@ private:
private:
Graphics::Screen _surface;
Graphics::MacWindowManager _wm;
Graphics::MacMenu *_menu;
Common::Array<Common::Rect> _dirtyRects;
Common::Array<ActionCEL *> _sprites;
Common::Array<ActionCEL *> _savedSprites;

338
engines/pink/gui.cpp Normal file
View file

@ -0,0 +1,338 @@
/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/
#include "graphics/macgui/macwindowmanager.h"
#include "graphics/macgui/macmenu.h"
#include "pink/pink.h"
#include "pink/director.h"
#include "pink/objects/actors/lead_actor.h"
namespace Pink {
enum {
kNewGameAction = 0,
kLoadSave,
kSaveAction,
kSaveAsAction,
kSongsAction,
kSoundSettingsAction,
kLastSavesAction,
kPauseAction,
kExitAction
};
enum {
kShowContent = 9,
kShowGreece,
kShowIndonesia,
kShowIsrael,
kShowKenya,
kShowRussia
};
enum {
kShowPDAAction = 15,
kShowAustraliaArt = 16,
kShowAustraliaCloth,
kShowAustraliaFood,
kShowAustraliaHistory,
kShowAustraliaNature,
kShowAustraliaPeople,
kShowAustraliaPlaces,
kShowAustraliaReligion,
kShowBhutanArt = 24,
kShowBhutanCloth,
kShowBhutanFood,
kShowBhutanHistory,
kShowBhutanNature,
kShowBhutanPeople,
kShowBhutanPlaces,
kShowBhutanReligion,
kShowChinaArt = 32,
kShowChinaCloth,
kShowChinaFood,
kShowChinaHistory,
kShowChinaNature,
kShowChinaPeople,
kShowChinaPlaces,
kShowChinaReligion,
kShowEnglandArt = 40,
kShowEnglandCloth,
kShowEnglandFood,
kShowEnglandHistory,
kShowEnglandNature,
kShowEnglandPeople,
kShowEnglandPlaces,
kShowEnglandReligion,
kShowEgyptArt = 48,
kShowEgyptCloth,
kShowEgyptFood,
kShowEgyptHistory,
kShowEgyptNature,
kShowEgyptPeople,
kShowEgyptPlaces,
kShowEgyptReligion,
kShowIndiaArt = 56,
kShowIndiaCloth,
kShowIndiaFood,
kShowIndiaHistory,
kShowIndiaNature,
kShowIndiaPeople,
kShowIndiaPlaces,
kShowIndiaReligion
};
enum {
kShowGameWebPage = 64,
kShowTechSupport,
kShowWinnnerPage,
kShowWanderlustInteractive,
kShowMGM,
kShowDiagnostics,
kShowAbout
};
static void menuCommandsCallback(int action, Common::U32String &, void *data) {
PinkEngine *engine = (PinkEngine *)data;
bool isPeril = engine->isPeril();
if (!isPeril && action > 14) {
action += 49;
} else if (isPeril && action >= 9) {
action += 6;
}
engine->executeMenuCommand(action);
}
void PinkEngine::initMenu(Common::PEResources &exeResources) {
_director->getWndManager().setEnginePauseCallback(this, &pauseEngine);
_menu = Graphics::MacMenu::createMenuFromPEexe(exeResources, &_director->getWndManager());
_menu->calcDimensions();
_menu->setCommandsCallback(&menuCommandsCallback, this);
}
void PinkEngine::executeMenuCommand(uint id) {
switch (id) {
case kNewGameAction: {
const Common::String moduleName = _modules[0]->getName();
initModule(moduleName, "", nullptr);
break;
}
case kLoadSave:
case kSaveAction:
case kSaveAsAction:
case kSoundSettingsAction:
case kLastSavesAction:
case kPauseAction:
case kExitAction:
openMainMenuDialog();
break;
case kSongsAction:
initModule("Muzik", "", nullptr);
break;
case kShowPDAAction:
_actor->loadPDA(kNavigatePage);
break;
case kShowAustraliaArt:
_actor->loadPDA("AUSART");
break;
case kShowAustraliaCloth:
_actor->loadPDA("AUSCLO");
break;
case kShowAustraliaFood:
_actor->loadPDA("AUSFOO");
break;
case kShowAustraliaHistory:
_actor->loadPDA("AUSHIS");
break;
case kShowAustraliaNature:
_actor->loadPDA("AUSNAT");
break;
case kShowAustraliaPeople:
_actor->loadPDA("AUSPEO");
break;
case kShowAustraliaPlaces:
_actor->loadPDA("AUSPLA");
break;
case kShowAustraliaReligion:
_actor->loadPDA("AUSREL");
break;
case kShowBhutanArt:
_actor->loadPDA("BHUART");
break;
case kShowBhutanCloth:
_actor->loadPDA("BHUCLO");
break;
case kShowBhutanFood:
_actor->loadPDA("BHUFOO");
break;
case kShowBhutanHistory:
_actor->loadPDA("BHUHIS");
break;
case kShowBhutanNature:
_actor->loadPDA("BHUNAT");
break;
case kShowBhutanPeople:
_actor->loadPDA("BHUPEO");
break;
case kShowBhutanPlaces:
_actor->loadPDA("BHUPLA");
break;
case kShowBhutanReligion:
_actor->loadPDA("BHUREL");
break;
case kShowChinaArt:
_actor->loadPDA("CHIART");
break;
case kShowChinaCloth:
_actor->loadPDA("CHICLO");
break;
case kShowChinaFood:
_actor->loadPDA("CHIFOO");
break;
case kShowChinaHistory:
_actor->loadPDA("CHIHIS");
break;
case kShowChinaNature:
_actor->loadPDA("CHINAT");
break;
case kShowChinaPeople:
_actor->loadPDA("CHIPEO");
break;
case kShowChinaPlaces:
_actor->loadPDA("CHIPLA");
break;
case kShowChinaReligion:
_actor->loadPDA("CHIREL");
break;
case kShowEnglandArt:
_actor->loadPDA("BRIART");
break;
case kShowEnglandCloth:
_actor->loadPDA("BRICLO");
break;
case kShowEnglandFood:
_actor->loadPDA("BRIFOO");
break;
case kShowEnglandHistory:
_actor->loadPDA("BRIHIS");
break;
case kShowEnglandNature:
_actor->loadPDA("BRINAT");
break;
case kShowEnglandPeople:
_actor->loadPDA("BRIPEO");
break;
case kShowEnglandPlaces:
_actor->loadPDA("BRIPLA");
break;
case kShowEnglandReligion:
_actor->loadPDA("BRIREL");
break;
case kShowEgyptArt:
_actor->loadPDA("BRIART");
break;
case kShowEgyptCloth:
_actor->loadPDA("BRICLO");
break;
case kShowEgyptFood:
_actor->loadPDA("BRIFOO");
break;
case kShowEgyptHistory:
_actor->loadPDA("BRIHIS");
break;
case kShowEgyptNature:
_actor->loadPDA("BRINAT");
break;
case kShowEgyptPeople:
_actor->loadPDA("BRIPEO");
break;
case kShowEgyptPlaces:
_actor->loadPDA("BRIPLA");
break;
case kShowEgyptReligion:
_actor->loadPDA("BRIREL");
break;
case kShowIndiaArt:
_actor->loadPDA("INDART");
break;
case kShowIndiaCloth:
_actor->loadPDA("INDCLO");
break;
case kShowIndiaFood:
_actor->loadPDA("INDFOO");
break;
case kShowIndiaHistory:
_actor->loadPDA("INDHIS");
break;
case kShowIndiaNature:
_actor->loadPDA("INDNAT");
break;
case kShowIndiaPeople:
_actor->loadPDA("INDPEO");
break;
case kShowIndiaPlaces:
_actor->loadPDA("INDPLA");
break;
case kShowIndiaReligion:
_actor->loadPDA("INDREL");
break;
case kShowContent:
_actor->loadPDA("TOC");
break;
case kShowGreece:
_actor->loadPDA("GREOVER");
break;
case kShowIndonesia:
_actor->loadPDA("INDOVER");
break;
case kShowIsrael:
_actor->loadPDA("ISROVER");
break;
case kShowKenya:
_actor->loadPDA("KENOVER");
break;
case kShowRussia:
_actor->loadPDA("SIBOVER");
break;
default:
break;
}
}
} // End of namespace Pink

View file

@ -9,6 +9,7 @@ MODULE_OBJS = \
detection.o \
director.o \
file.o \
gui.o \
pda_mgr.o \
pink.o \
resource_mgr.o \

View file

@ -76,9 +76,9 @@ Common::Error PinkEngine::init() {
_console = new Console(this);
_director = new Director(exeResources);
_director = new Director();
_director->getWndManager().setEnginePauseCallback(this, &pauseEngine);
initMenu(exeResources);
Common::String orbName;
Common::String broName;

View file

@ -59,6 +59,10 @@
* missing menu
*/
namespace Graphics {
class MacMenu;
}
namespace Pink {
class Console;
@ -109,6 +113,8 @@ public:
void setVariable(Common::String &variable, Common::String &value);
bool checkValueOfVariable(Common::String &variable, Common::String &value);
void executeMenuCommand(uint id);
OrbFile *getOrb() { return &_orb; }
BroFile *getBro() { return _bro; }
Common::RandomSource &getRnd() { return _rnd; };
@ -122,6 +128,8 @@ public:
private:
Common::Error init();
void initMenu(Common::PEResources &exeResources);
bool loadCursors(Common::PEResources &exeResources);
void initModule(const Common::String &moduleName, const Common::String &pageName, Archive *saveFile);
@ -139,6 +147,7 @@ private:
OrbFile _orb;
BroFile *_bro;
Graphics::MacMenu *_menu;
Director *_director;
LeadActor *_actor;