mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-12 20:17:49 +00:00
baaf6502ec
Now all transient config domains use a name in the form _TRANSIENT_DOMAIN svn-id: r8452
229 lines
7.7 KiB
C++
229 lines
7.7 KiB
C++
/* ScummVM - Scumm Interpreter
|
|
* Copyright (C) 2002-2003 The ScummVM project
|
|
*
|
|
* 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
*
|
|
* $Header$
|
|
*/
|
|
|
|
#include "stdafx.h"
|
|
#include "browser.h"
|
|
#include "chooser.h"
|
|
#include "newgui.h"
|
|
#include "options.h"
|
|
#include "PopUpWidget.h"
|
|
|
|
#include "backends/fs/fs.h"
|
|
#include "common/config-file.h"
|
|
#include "common/gameDetector.h"
|
|
|
|
#if (!( defined(__DC__) || defined(__GP32__)) && !defined(_MSC_VER))
|
|
#include <unistd.h>
|
|
#endif
|
|
|
|
/*
|
|
_____ _ _ _ _ _
|
|
|_ _| |__ (_)___ (_)___ __ _ __| |_ _ _ __ ___ _ __ ___ _ _| |
|
|
| | | '_ \| / __| | / __| / _` | / _` | | | | '_ ` _ \| '_ ` _ \| | | | |
|
|
| | | | | | \__ \ | \__ \ | (_| | | (_| | |_| | | | | | | | | | | | |_| |_|
|
|
|_| |_| |_|_|___/ |_|___/ \__,_| \__,_|\__,_|_| |_| |_|_| |_| |_|\__, (_)
|
|
|___/
|
|
|
|
This just looks like an option dialog, but it doesn't change any actual settings currently!
|
|
|
|
*/
|
|
|
|
// TODO - allow changing options for:
|
|
// - the save path (use _browser!)
|
|
// - music & graphics driver (but see also the comments on EditGameDialog
|
|
// for some techincal difficulties with this)
|
|
// - default volumes (sfx/master/music)
|
|
|
|
enum {
|
|
kMasterVolumeChanged = 'mavc',
|
|
kMusicVolumeChanged = 'muvc',
|
|
kSfxVolumeChanged = 'sfvc',
|
|
kChooseSaveDirCmd = 'chos',
|
|
kOKCmd = 'ok '
|
|
};
|
|
|
|
GlobalOptionsDialog::GlobalOptionsDialog(NewGui *gui, GameDetector &detector)
|
|
: Dialog(gui, 10, 15, 320 - 2 * 10, 200 - 2 * 15), _detector(detector) {
|
|
// The GFX mode popup & a label
|
|
// TODO - add an API to query the list of available GFX modes, and to get/set the mode
|
|
new StaticTextWidget(this, 5, 10+1, 100, kLineHeight, "Graphics mode: ", kTextAlignRight);
|
|
PopUpWidget *gfxPopUp;
|
|
gfxPopUp = new PopUpWidget(this, 105, 10, 180, kLineHeight);
|
|
gfxPopUp->appendEntry("<default>");
|
|
gfxPopUp->appendEntry("");
|
|
gfxPopUp->appendEntry("Normal (no scaling)");
|
|
gfxPopUp->appendEntry("2x");
|
|
gfxPopUp->appendEntry("3x");
|
|
gfxPopUp->appendEntry("2xSAI");
|
|
gfxPopUp->appendEntry("Super2xSAI");
|
|
gfxPopUp->appendEntry("SuperEagle");
|
|
gfxPopUp->appendEntry("AdvMAME2x");
|
|
gfxPopUp->appendEntry("TV2x");
|
|
gfxPopUp->appendEntry("DotMatrix");
|
|
gfxPopUp->setSelected(0);
|
|
|
|
// FIXME - disable GFX popup for now
|
|
gfxPopUp->setEnabled(false);
|
|
|
|
|
|
// The MIDI mode popup & a label
|
|
StaticTextWidget *foo = new StaticTextWidget(this, 5, 26+1, 100, kLineHeight, "Music driver: ", kTextAlignRight);
|
|
foo->setEnabled(false);
|
|
_midiPopUp = new PopUpWidget(this, 105, 26, 180, kLineHeight);
|
|
int midiSelected = 0, i = 0;;
|
|
|
|
// Populate it
|
|
const MusicDriver *md = GameDetector::getMusicDrivers();
|
|
while (md->name) {
|
|
if (GameDetector::isMusicDriverAvailable(md->id)) {
|
|
_midiPopUp->appendEntry(md->description, md->id);
|
|
if (md->id == _detector._midi_driver)
|
|
midiSelected = i;
|
|
i++;
|
|
}
|
|
md++;
|
|
}
|
|
_midiPopUp->setSelected(midiSelected);
|
|
|
|
//
|
|
// Sound controllers
|
|
//
|
|
const int yoffset = 40;
|
|
new StaticTextWidget(this, 5, yoffset+10, 100, 16, "Master volume: ", kTextAlignRight);
|
|
new StaticTextWidget(this, 5, yoffset+26, 100, 16, "Music volume: ", kTextAlignRight);
|
|
new StaticTextWidget(this, 5, yoffset+42, 100, 16, "SFX volume: ", kTextAlignRight);
|
|
|
|
_masterVolumeSlider = new SliderWidget(this, 105, yoffset+8, 85, 12, "Volume1", kMasterVolumeChanged);
|
|
_musicVolumeSlider = new SliderWidget(this, 105, yoffset+24, 85, 12, "Volume2", kMusicVolumeChanged);
|
|
_sfxVolumeSlider = new SliderWidget(this, 105, yoffset+40, 85, 12, "Volume3", kSfxVolumeChanged);
|
|
|
|
_masterVolumeSlider->setMinValue(0); _masterVolumeSlider->setMaxValue(255);
|
|
_musicVolumeSlider->setMinValue(0); _musicVolumeSlider->setMaxValue(255);
|
|
_sfxVolumeSlider->setMinValue(0); _sfxVolumeSlider->setMaxValue(255);
|
|
|
|
_masterVolumeLabel = new StaticTextWidget(this, 200, yoffset+10, 24, 16, "100%", kTextAlignLeft);
|
|
_musicVolumeLabel = new StaticTextWidget(this, 200, yoffset+26, 24, 16, "100%", kTextAlignLeft);
|
|
_sfxVolumeLabel = new StaticTextWidget(this, 200, yoffset+42, 24, 16, "100%", kTextAlignLeft);
|
|
|
|
_masterVolumeLabel->setFlags(WIDGET_CLEARBG);
|
|
_musicVolumeLabel->setFlags(WIDGET_CLEARBG);
|
|
_sfxVolumeLabel->setFlags(WIDGET_CLEARBG);
|
|
|
|
|
|
#if !( defined(__DC__) || defined(__GP32__) )
|
|
//
|
|
// Save game path
|
|
//
|
|
new StaticTextWidget(this, 5, 106, 100, kLineHeight, "Savegame path: ", kTextAlignRight);
|
|
_savePath = new StaticTextWidget(this, 105, 106, 180, kLineHeight, "/foo/bar", kTextAlignLeft);
|
|
new ButtonWidget(this, 105, 120, 64, 16, "Choose...", kChooseSaveDirCmd, 0);
|
|
|
|
// TODO: set _savePath to the current save path, i.e. as obtained via
|
|
const char *dir = NULL;
|
|
dir = g_config->get("savepath", "scummvm");
|
|
if (dir) {
|
|
_savePath->setLabel(dir);
|
|
} else {
|
|
// Default to the current directory...
|
|
char buf[256];
|
|
getcwd(buf, sizeof(buf));
|
|
_savePath->setLabel(buf);
|
|
}
|
|
#endif
|
|
|
|
//
|
|
// Add OK & Cancel buttons
|
|
//
|
|
addButton(_w - 2 * (kButtonWidth + 10), _h - 24, "Cancel", kCloseCmd, 0);
|
|
addButton(_w - (kButtonWidth + 10), _h - 24, "OK", kOKCmd, 0);
|
|
|
|
// Create file browser dialog
|
|
_browser = new BrowserDialog(_gui, "Select directory for savegames");
|
|
}
|
|
|
|
GlobalOptionsDialog::~GlobalOptionsDialog() {
|
|
delete _browser;
|
|
}
|
|
|
|
void GlobalOptionsDialog::open() {
|
|
Dialog::open();
|
|
|
|
_soundVolumeMaster = _detector._master_volume;
|
|
_soundVolumeMusic = _detector._music_volume;
|
|
_soundVolumeSfx = _detector._sfx_volume;
|
|
|
|
_masterVolumeSlider->setValue(_soundVolumeMaster);
|
|
_musicVolumeSlider->setValue(_soundVolumeMusic);
|
|
_sfxVolumeSlider->setValue(_soundVolumeSfx);
|
|
|
|
_masterVolumeLabel->setValue(_soundVolumeMaster);
|
|
_musicVolumeLabel->setValue(_soundVolumeMusic);
|
|
_sfxVolumeLabel->setValue(_soundVolumeSfx);
|
|
}
|
|
|
|
void GlobalOptionsDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 data) {
|
|
switch (cmd) {
|
|
case kChooseSaveDirCmd:
|
|
if (_browser->runModal()) {
|
|
// User made his choice...
|
|
FilesystemNode *dir = _browser->getResult();
|
|
_savePath->setLabel(dir->path());
|
|
// TODO - we should check if the director is writeable before accepting it
|
|
}
|
|
break;
|
|
case kMasterVolumeChanged:
|
|
_soundVolumeMaster = _masterVolumeSlider->getValue();
|
|
_masterVolumeLabel->setValue(_soundVolumeMaster);
|
|
_masterVolumeLabel->draw();
|
|
break;
|
|
case kMusicVolumeChanged:
|
|
_soundVolumeMusic = _musicVolumeSlider->getValue();
|
|
_musicVolumeLabel->setValue(_soundVolumeMusic);
|
|
_musicVolumeLabel->draw();
|
|
break;
|
|
case kSfxVolumeChanged:
|
|
_soundVolumeSfx = _sfxVolumeSlider->getValue();
|
|
_sfxVolumeLabel->setValue(_soundVolumeSfx);
|
|
_sfxVolumeLabel->draw();
|
|
break;
|
|
case kPopUpItemSelectedCmd:
|
|
if (sender == _midiPopUp) {
|
|
const MusicDriver *md = GameDetector::getMusicDrivers();
|
|
for (; md->name; md++) {
|
|
if (md->id == (int) data) {
|
|
g_config->set ("music_driver", md->name, "_USER_OVERRIDES");
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case kOKCmd:
|
|
// TODO Write back changes made to config object
|
|
setResult(1);
|
|
_detector._master_volume = _soundVolumeMaster;
|
|
_detector._music_volume = _soundVolumeMusic;
|
|
_detector._sfx_volume = _soundVolumeSfx;
|
|
close();
|
|
break;
|
|
default:
|
|
Dialog::handleCommand(sender, cmd, data);
|
|
}
|
|
}
|