mirror of https://github.com/stella-emu/stella.git
247 lines
6.8 KiB
C++
247 lines
6.8 KiB
C++
//============================================================================
|
|
//
|
|
// SSSS tt lll lll
|
|
// SS SS tt ll ll
|
|
// SS tttttt eeee ll ll aaaa
|
|
// SSSS tt ee ee ll ll aa
|
|
// SS tt eeeeee ll ll aaaaa -- "An Atari 2600 VCS Emulator"
|
|
// SS SS tt ee ll ll aa aa
|
|
// SSSS ttt eeeee llll llll aaaaa
|
|
//
|
|
// Copyright (c) 1995-2010 by Bradford W. Mott, Stephen Anthony
|
|
// and the Stella Team
|
|
//
|
|
// See the file "License.txt" for information on usage and redistribution of
|
|
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
|
//
|
|
// $Id$
|
|
//
|
|
// Based on code from ScummVM - Scumm Interpreter
|
|
// Copyright (C) 2002-2004 The ScummVM project
|
|
//============================================================================
|
|
|
|
#include "OSystem.hxx"
|
|
#include "Dialog.hxx"
|
|
#include "DialogContainer.hxx"
|
|
#include "Widget.hxx"
|
|
#include "Control.hxx"
|
|
#include "VideoDialog.hxx"
|
|
#include "AudioDialog.hxx"
|
|
#include "InputDialog.hxx"
|
|
#include "UIDialog.hxx"
|
|
#include "FileSnapDialog.hxx"
|
|
#include "RomAuditDialog.hxx"
|
|
#include "GameInfoDialog.hxx"
|
|
#include "HelpDialog.hxx"
|
|
#include "AboutDialog.hxx"
|
|
#include "OptionsDialog.hxx"
|
|
#include "Launcher.hxx"
|
|
|
|
#ifdef CHEATCODE_SUPPORT
|
|
#include "CheatCodeDialog.hxx"
|
|
#endif
|
|
|
|
#include "bspf.hxx"
|
|
|
|
#define addODButton(label, cmd) \
|
|
new ButtonWidget(this, font, xoffset, yoffset, buttonWidth, buttonHeight, label, cmd); yoffset += rowHeight
|
|
|
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
OptionsDialog::OptionsDialog(OSystem* osystem, DialogContainer* parent,
|
|
GuiObject* boss, int max_w, int max_h, bool global)
|
|
: Dialog(osystem, parent, 0, 0, 0, 0),
|
|
myVideoDialog(NULL),
|
|
myAudioDialog(NULL),
|
|
myInputDialog(NULL),
|
|
myUIDialog(NULL),
|
|
myFileSnapDialog(NULL),
|
|
myGameInfoDialog(NULL),
|
|
myCheatCodeDialog(NULL),
|
|
myHelpDialog(NULL),
|
|
myAboutDialog(NULL),
|
|
myIsGlobal(global)
|
|
{
|
|
const GUI::Font& font = instance().font();
|
|
const int buttonWidth = font.getStringWidth("Game Properties") + 20,
|
|
buttonHeight = font.getLineHeight() + 6,
|
|
rowHeight = font.getLineHeight() + 10;
|
|
|
|
_w = 2 * buttonWidth + 30;
|
|
_h = 6 * rowHeight + 15;
|
|
|
|
int xoffset = 10, yoffset = 10;
|
|
WidgetArray wid;
|
|
ButtonWidget* b = NULL;
|
|
|
|
myVideoSettingsButton = addODButton("Video Settings", kVidCmd);
|
|
wid.push_back(myVideoSettingsButton);
|
|
|
|
myAudioSettingsButton = addODButton("Audio Settings", kAudCmd);
|
|
#ifndef SOUND_SUPPORT
|
|
myAudioSettingsButton->clearFlags(WIDGET_ENABLED);
|
|
#endif
|
|
wid.push_back(myAudioSettingsButton);
|
|
|
|
b = addODButton("Input Settings", kInptCmd);
|
|
wid.push_back(b);
|
|
|
|
myUIButton = addODButton("UI Settings", kUsrIfaceCmd);
|
|
wid.push_back(myUIButton);
|
|
|
|
myFileSnapButton = addODButton("Config Files", kFileSnapCmd);
|
|
wid.push_back(myFileSnapButton);
|
|
|
|
myRomAuditButton = addODButton("Audit ROMs", kAuditCmd);
|
|
wid.push_back(myRomAuditButton);
|
|
|
|
// Move to second column
|
|
xoffset += buttonWidth + 10; yoffset = 10;
|
|
|
|
myGameInfoButton = addODButton("Game Properties", kInfoCmd);
|
|
wid.push_back(myGameInfoButton);
|
|
|
|
myCheatCodeButton = addODButton("Cheat Code", kCheatCmd);
|
|
#ifndef CHEATCODE_SUPPORT
|
|
myCheatCodeButton->clearFlags(WIDGET_ENABLED);
|
|
#endif
|
|
wid.push_back(myCheatCodeButton);
|
|
|
|
myHelpButton = addODButton("Help", kHelpCmd);
|
|
wid.push_back(myHelpButton);
|
|
|
|
myAboutButton = addODButton("About", kAboutCmd);
|
|
wid.push_back(myAboutButton);
|
|
|
|
b = addODButton("Exit Menu", kExitCmd);
|
|
wid.push_back(b);
|
|
addCancelWidget(b);
|
|
|
|
// Now create all the dialogs attached to each menu button
|
|
myVideoDialog = new VideoDialog(osystem, parent, font, max_w, max_h);
|
|
myAudioDialog = new AudioDialog(osystem, parent, font);
|
|
myInputDialog = new InputDialog(osystem, parent, font, max_w, max_h);
|
|
myUIDialog = new UIDialog(osystem, parent, font);
|
|
myFileSnapDialog = new FileSnapDialog(osystem, parent, font, boss, max_w, max_h);
|
|
myRomAuditDialog = new RomAuditDialog(osystem, parent, font, max_w, max_h);
|
|
myGameInfoDialog = new GameInfoDialog(osystem, parent, font, this);
|
|
#ifdef CHEATCODE_SUPPORT
|
|
myCheatCodeDialog = new CheatCodeDialog(osystem, parent, font);
|
|
#endif
|
|
myHelpDialog = new HelpDialog(osystem, parent, font);
|
|
myAboutDialog = new AboutDialog(osystem, parent, font);
|
|
|
|
addToFocusList(wid);
|
|
|
|
// Certain buttons are disabled depending on mode
|
|
if(myIsGlobal)
|
|
{
|
|
myCheatCodeButton->clearFlags(WIDGET_ENABLED);
|
|
}
|
|
else
|
|
{
|
|
myRomAuditButton->clearFlags(WIDGET_ENABLED);
|
|
}
|
|
#ifdef _WIN32_WCE
|
|
myAudioSettingsButton->clearFlags(WIDGET_ENABLED); // not honored in wince port
|
|
#endif
|
|
}
|
|
|
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
OptionsDialog::~OptionsDialog()
|
|
{
|
|
delete myVideoDialog;
|
|
delete myAudioDialog;
|
|
delete myInputDialog;
|
|
delete myUIDialog;
|
|
delete myFileSnapDialog;
|
|
delete myRomAuditDialog;
|
|
delete myGameInfoDialog;
|
|
#ifdef CHEATCODE_SUPPORT
|
|
delete myCheatCodeDialog;
|
|
#endif
|
|
delete myHelpDialog;
|
|
delete myAboutDialog;
|
|
}
|
|
|
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
void OptionsDialog::loadConfig()
|
|
{
|
|
// Determine whether we should show the 'Game Information' button
|
|
// We always show it in emulation mode, or if a valid ROM is selected
|
|
// in launcher mode
|
|
switch(instance().eventHandler().state())
|
|
{
|
|
case EventHandler::S_EMULATE:
|
|
myGameInfoButton->setFlags(WIDGET_ENABLED);
|
|
break;
|
|
case EventHandler::S_LAUNCHER:
|
|
if(instance().launcher().selectedRomMD5() != "")
|
|
myGameInfoButton->setFlags(WIDGET_ENABLED);
|
|
else
|
|
myGameInfoButton->clearFlags(WIDGET_ENABLED);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
void OptionsDialog::handleCommand(CommandSender* sender, int cmd,
|
|
int data, int id)
|
|
{
|
|
switch(cmd)
|
|
{
|
|
case kVidCmd:
|
|
parent().addDialog(myVideoDialog);
|
|
break;
|
|
|
|
case kAudCmd:
|
|
parent().addDialog(myAudioDialog);
|
|
break;
|
|
|
|
case kInptCmd:
|
|
parent().addDialog(myInputDialog);
|
|
break;
|
|
|
|
case kUsrIfaceCmd:
|
|
parent().addDialog(myUIDialog);
|
|
break;
|
|
|
|
case kFileSnapCmd:
|
|
parent().addDialog(myFileSnapDialog);
|
|
break;
|
|
|
|
case kAuditCmd:
|
|
parent().addDialog(myRomAuditDialog);
|
|
break;
|
|
|
|
case kInfoCmd:
|
|
parent().addDialog(myGameInfoDialog);
|
|
break;
|
|
|
|
#ifdef CHEATCODE_SUPPORT
|
|
case kCheatCmd:
|
|
parent().addDialog(myCheatCodeDialog);
|
|
break;
|
|
#endif
|
|
|
|
case kHelpCmd:
|
|
parent().addDialog(myHelpDialog);
|
|
break;
|
|
|
|
case kAboutCmd:
|
|
parent().addDialog(myAboutDialog);
|
|
break;
|
|
|
|
case kExitCmd:
|
|
if(myIsGlobal)
|
|
close();
|
|
else
|
|
instance().eventHandler().leaveMenuMode();
|
|
break;
|
|
|
|
default:
|
|
Dialog::handleCommand(sender, cmd, data, 0);
|
|
}
|
|
}
|