diff options
-rw-r--r-- | common/gameDetector.h | 2 | ||||
-rw-r--r-- | gui/browser.cpp | 5 | ||||
-rw-r--r-- | gui/browser.h | 2 | ||||
-rw-r--r-- | gui/launcher.cpp | 6 | ||||
-rw-r--r-- | gui/options.cpp | 105 | ||||
-rw-r--r-- | gui/options.h | 22 | ||||
-rw-r--r-- | scumm/dialogs.cpp | 54 | ||||
-rw-r--r-- | scumm/dialogs.h | 12 |
8 files changed, 140 insertions, 68 deletions
diff --git a/common/gameDetector.h b/common/gameDetector.h index fd517fff18..fd2f4e90b6 100644 --- a/common/gameDetector.h +++ b/common/gameDetector.h @@ -142,9 +142,9 @@ public: bool _use_adlib; + int _master_volume; int _music_volume; int _sfx_volume; - int _master_volume; bool _amiga; int _language; diff --git a/gui/browser.cpp b/gui/browser.cpp index 1faac20bf9..79d3baaf63 100644 --- a/gui/browser.cpp +++ b/gui/browser.cpp @@ -35,12 +35,11 @@ enum { kGoUpCmd = 'GoUp' }; -BrowserDialog::BrowserDialog(NewGui *gui) +BrowserDialog::BrowserDialog(NewGui *gui, const char *title) : Dialog(gui, 40, 10, 320 -2 * 40, 200 - 2 * 10), _node(0), _nodeContent(0) { // Headline - TODO: should be customizable during creation time - new StaticTextWidget(this, 10, 8, _w-2 * 10, kLineHeight, - "Select directory with game data", kTextAlignCenter); + new StaticTextWidget(this, 10, 8, _w-2 * 10, kLineHeight, title, kTextAlignCenter); // Current path - TODO: handle long paths ? _currentPath = new StaticTextWidget(this, 10, 20, _w - 2 * 10, kLineHeight, diff --git a/gui/browser.h b/gui/browser.h index 60c7fb7d69..d7c41a9957 100644 --- a/gui/browser.h +++ b/gui/browser.h @@ -35,7 +35,7 @@ class BrowserDialog : public Dialog { typedef ScummVM::String String; typedef ScummVM::StringList StringList; public: - BrowserDialog(NewGui *gui); + BrowserDialog(NewGui *gui, const char *title); virtual ~BrowserDialog(); virtual void open(); diff --git a/gui/launcher.cpp b/gui/launcher.cpp index 7018bbc7c3..c0fd35f8f5 100644 --- a/gui/launcher.cpp +++ b/gui/launcher.cpp @@ -205,7 +205,7 @@ LauncherDialog::LauncherDialog(NewGui *gui, GameDetector &detector) updateButtons(); // Create file browser dialog - _browser = new BrowserDialog(_gui); + _browser = new BrowserDialog(_gui, "Select directory with game data"); } LauncherDialog::~LauncherDialog() { @@ -328,7 +328,7 @@ void LauncherDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 dat // options for that game. if (_browser->runModal()) { - // User did make a choice... + // User made his choice... FilesystemNode *dir = _browser->getResult(); // ...so let's determine a list of candidates, games that @@ -431,7 +431,7 @@ void LauncherDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 dat // - music & graphics driver (but see also the comments on EditGameDialog // for some techincal difficulties with this) // - default volumes (sfx/master/music) - GlobalOptionsDialog options(_gui); + GlobalOptionsDialog options(_gui, _detector); options.runModal(); } break; diff --git a/gui/options.cpp b/gui/options.cpp index d74b937338..14cf1d90b3 100644 --- a/gui/options.cpp +++ b/gui/options.cpp @@ -25,9 +25,8 @@ #include "options.h" #include "PopUpWidget.h" -//#include "backends/fs/fs.h" +#include "backends/fs/fs.h" #include "common/config-file.h" -//#include "common/engine.h" #include "common/gameDetector.h" /* @@ -49,11 +48,15 @@ This just looks like an option dialog, but it doesn't change any actual settings // - default volumes (sfx/master/music) enum { - kOKCmd = 'OK ' + kMasterVolumeChanged = 'mavc', + kMusicVolumeChanged = 'muvc', + kSfxVolumeChanged = 'sfvc', + kChooseSaveDirCmd = 'chos', + kOKCmd = 'ok ' }; -GlobalOptionsDialog::GlobalOptionsDialog(NewGui *gui) - : Dialog(gui, 10, 15, 320 - 2 * 10, 200 - 2 * 15) { +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); @@ -94,51 +97,103 @@ GlobalOptionsDialog::GlobalOptionsDialog(NewGui *gui) new StaticTextWidget(this, 5, yoffset+26, 100, 16, "Music volume: ", kTextAlignRight); new StaticTextWidget(this, 5, yoffset+42, 100, 16, "SFX volume: ", kTextAlignRight); - SliderWidget *masterVolumeSlider, *musicVolumeSlider, *sfxVolumeSlider; + _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 = new SliderWidget(this, 105, yoffset+8, 85, 12, "Volume1", 0); - musicVolumeSlider = new SliderWidget(this, 105, yoffset+24, 85, 12, "Volume2", 0); - sfxVolumeSlider = new SliderWidget(this, 105, yoffset+40, 85, 12, "Volume3", 0); + _masterVolumeSlider->setMinValue(0); _masterVolumeSlider->setMaxValue(255); + _musicVolumeSlider->setMinValue(0); _musicVolumeSlider->setMaxValue(255); + _sfxVolumeSlider->setMinValue(0); _sfxVolumeSlider->setMaxValue(255); - masterVolumeSlider->setMinValue(0); masterVolumeSlider->setMaxValue(255); - musicVolumeSlider->setMinValue(0); musicVolumeSlider->setMaxValue(255); - sfxVolumeSlider->setMinValue(0); sfxVolumeSlider->setMaxValue(255); - - Widget *masterVolumeLabel, *musicVolumeLabel, *sfxVolumeLabel; - - 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 = 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); + _masterVolumeLabel->setFlags(WIDGET_CLEARBG); + _musicVolumeLabel->setFlags(WIDGET_CLEARBG); + _sfxVolumeLabel->setFlags(WIDGET_CLEARBG); // // Save game path // new StaticTextWidget(this, 5, 106, 100, kLineHeight, "Savegame path: ", kTextAlignRight); - new StaticTextWidget(this, 105, 106, 180, kLineHeight, "/foo/bar", kTextAlignLeft); - new ButtonWidget(this, 105, 120, 64, 16, "Choose...", 0, 0); + _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 { + char buf[256]; + getcwd(buf, sizeof(buf)); + _savePath->setLabel(buf); + } +// If that is NULL, we should use the current directory... // // 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) { - if (cmd == kOKCmd) { + 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 kOKCmd: // TODO Write back changes made to config object setResult(1); close(); - } else { + break; + default: Dialog::handleCommand(sender, cmd, data); } } diff --git a/gui/options.h b/gui/options.h index 1755dd713c..d15199c76b 100644 --- a/gui/options.h +++ b/gui/options.h @@ -25,18 +25,36 @@ #include "common/str.h" #include "common/list.h" +class BrowserDialog; +class GameDetector; class GlobalOptionsDialog : public Dialog { typedef ScummVM::String String; public: - GlobalOptionsDialog(NewGui *gui); + GlobalOptionsDialog(NewGui *gui, GameDetector &detector); ~GlobalOptionsDialog(); -// void open(); + void open(); // void close(); void handleCommand(CommandSender *sender, uint32 cmd, uint32 data); protected: + GameDetector &_detector; + + BrowserDialog *_browser; + StaticTextWidget*_savePath; + + int _soundVolumeMaster; + int _soundVolumeMusic; + int _soundVolumeSfx; + + SliderWidget *_masterVolumeSlider; + SliderWidget *_musicVolumeSlider; + SliderWidget *_sfxVolumeSlider; + + StaticTextWidget *_masterVolumeLabel; + StaticTextWidget *_musicVolumeLabel; + StaticTextWidget *_sfxVolumeLabel; }; #endif diff --git a/scumm/dialogs.cpp b/scumm/dialogs.cpp index f159e83c08..05a114eabf 100644 --- a/scumm/dialogs.cpp +++ b/scumm/dialogs.cpp @@ -484,21 +484,21 @@ OptionsDialog::OptionsDialog(NewGui *gui, Scumm *scumm) new StaticTextWidget(this, 15, 26, 95, 16, "Music volume:", kTextAlignRight); new StaticTextWidget(this, 15, 42, 95, 16, "SFX volume:", kTextAlignRight); - masterVolumeSlider = new SliderWidget(this, 125, 8, 80, 12, "Volume1", kMasterVolumeChanged); - musicVolumeSlider = new SliderWidget(this, 125, 24, 80, 12, "Volume2", kMusicVolumeChanged); - sfxVolumeSlider = new SliderWidget(this, 125, 40, 80, 12, "Volume3", kSfxVolumeChanged); + _masterVolumeSlider = new SliderWidget(this, 125, 8, 80, 12, "Volume1", kMasterVolumeChanged); + _musicVolumeSlider = new SliderWidget(this, 125, 24, 80, 12, "Volume2", kMusicVolumeChanged); + _sfxVolumeSlider = new SliderWidget(this, 125, 40, 80, 12, "Volume3", kSfxVolumeChanged); - masterVolumeSlider->setMinValue(0); masterVolumeSlider->setMaxValue(255); - musicVolumeSlider->setMinValue(0); musicVolumeSlider->setMaxValue(255); - sfxVolumeSlider->setMinValue(0); sfxVolumeSlider->setMaxValue(255); + _masterVolumeSlider->setMinValue(0); _masterVolumeSlider->setMaxValue(255); + _musicVolumeSlider->setMinValue(0); _musicVolumeSlider->setMaxValue(255); + _sfxVolumeSlider->setMinValue(0); _sfxVolumeSlider->setMaxValue(255); - masterVolumeLabel = new StaticTextWidget(this, 210, 10, 24, 16, "Volume1", kTextAlignLeft); - musicVolumeLabel = new StaticTextWidget(this, 210, 26, 24, 16, "Volume2", kTextAlignLeft); - sfxVolumeLabel = new StaticTextWidget(this, 210, 42, 24, 16, "Volume3", kTextAlignLeft); + _masterVolumeLabel = new StaticTextWidget(this, 210, 10, 24, 16, "Volume1", kTextAlignLeft); + _musicVolumeLabel = new StaticTextWidget(this, 210, 26, 24, 16, "Volume2", kTextAlignLeft); + _sfxVolumeLabel = new StaticTextWidget(this, 210, 42, 24, 16, "Volume3", kTextAlignLeft); - masterVolumeLabel->setFlags(WIDGET_CLEARBG); - musicVolumeLabel->setFlags(WIDGET_CLEARBG); - sfxVolumeLabel->setFlags(WIDGET_CLEARBG); + _masterVolumeLabel->setFlags(WIDGET_CLEARBG); + _musicVolumeLabel->setFlags(WIDGET_CLEARBG); + _sfxVolumeLabel->setFlags(WIDGET_CLEARBG); // // Some misc options @@ -530,13 +530,13 @@ void OptionsDialog::open() { _soundVolumeMusic = _scumm->_sound->_sound_volume_music; _soundVolumeSfx = _scumm->_sound->_sound_volume_sfx; - masterVolumeSlider->setValue(_soundVolumeMaster); - musicVolumeSlider->setValue(_soundVolumeMusic); - sfxVolumeSlider->setValue(_soundVolumeSfx); + _masterVolumeSlider->setValue(_soundVolumeMaster); + _musicVolumeSlider->setValue(_soundVolumeMusic); + _sfxVolumeSlider->setValue(_soundVolumeSfx); - masterVolumeLabel->setValue(_soundVolumeMaster); - musicVolumeLabel->setValue(_soundVolumeMusic); - sfxVolumeLabel->setValue(_soundVolumeSfx); + _masterVolumeLabel->setValue(_soundVolumeMaster); + _musicVolumeLabel->setValue(_soundVolumeMusic); + _sfxVolumeLabel->setValue(_soundVolumeSfx); // update checkboxes, too subtitlesCheckbox->setState(_scumm->_noSubtitles == false); @@ -554,19 +554,19 @@ void OptionsDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 data _aboutDialog->runModal(); break; case kMasterVolumeChanged: - _soundVolumeMaster = masterVolumeSlider->getValue(); - masterVolumeLabel->setValue(_soundVolumeMaster); - masterVolumeLabel->draw(); + _soundVolumeMaster = _masterVolumeSlider->getValue(); + _masterVolumeLabel->setValue(_soundVolumeMaster); + _masterVolumeLabel->draw(); break; case kMusicVolumeChanged: - _soundVolumeMusic = musicVolumeSlider->getValue(); - musicVolumeLabel->setValue(_soundVolumeMusic); - musicVolumeLabel->draw(); + _soundVolumeMusic = _musicVolumeSlider->getValue(); + _musicVolumeLabel->setValue(_soundVolumeMusic); + _musicVolumeLabel->draw(); break; case kSfxVolumeChanged: - _soundVolumeSfx = sfxVolumeSlider->getValue(); - sfxVolumeLabel->setValue(_soundVolumeSfx); - sfxVolumeLabel->draw(); + _soundVolumeSfx = _sfxVolumeSlider->getValue(); + _sfxVolumeLabel->setValue(_soundVolumeSfx); + _sfxVolumeLabel->draw(); break; case kOKCmd: { // Update the sound settings diff --git a/scumm/dialogs.h b/scumm/dialogs.h index 11244be24f..a114bafe99 100644 --- a/scumm/dialogs.h +++ b/scumm/dialogs.h @@ -94,13 +94,13 @@ protected: int _soundVolumeMusic; int _soundVolumeSfx; - SliderWidget *masterVolumeSlider; - SliderWidget *musicVolumeSlider; - SliderWidget *sfxVolumeSlider; + SliderWidget *_masterVolumeSlider; + SliderWidget *_musicVolumeSlider; + SliderWidget *_sfxVolumeSlider; - StaticTextWidget *masterVolumeLabel; - StaticTextWidget *musicVolumeLabel; - StaticTextWidget *sfxVolumeLabel; + StaticTextWidget *_masterVolumeLabel; + StaticTextWidget *_musicVolumeLabel; + StaticTextWidget *_sfxVolumeLabel; CheckboxWidget *subtitlesCheckbox; CheckboxWidget *amigaPalCheckbox; |