diff --git a/src/common/Version.hxx b/src/common/Version.hxx index b070389ed..b321c48b7 100644 --- a/src/common/Version.hxx +++ b/src/common/Version.hxx @@ -22,7 +22,7 @@ #include -#define STELLA_VERSION "3.9_beta1" +#define STELLA_VERSION "3.9_beta2" #define STELLA_BUILD atoi("$Rev$" + 6) #endif diff --git a/src/gui/FileSnapDialog.cxx b/src/gui/ConfigPathDialog.cxx similarity index 65% rename from src/gui/FileSnapDialog.cxx rename to src/gui/ConfigPathDialog.cxx index 5d22059f9..21d0a69ba 100644 --- a/src/gui/FileSnapDialog.cxx +++ b/src/gui/ConfigPathDialog.cxx @@ -15,9 +15,6 @@ // 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 "bspf.hxx" @@ -29,10 +26,10 @@ #include "PopUpWidget.hxx" #include "Settings.hxx" -#include "FileSnapDialog.hxx" +#include "ConfigPathDialog.hxx" // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -FileSnapDialog::FileSnapDialog( +ConfigPathDialog::ConfigPathDialog( OSystem* osystem, DialogContainer* parent, const GUI::Font& font, GuiObject* boss, int max_w, int max_h) @@ -43,7 +40,7 @@ FileSnapDialog::FileSnapDialog( { const int lineHeight = font.getLineHeight(), fontWidth = font.getMaxCharWidth(), - buttonWidth = font.getStringWidth("Snapshot load path:") + 20, + buttonWidth = font.getStringWidth("Properties file:") + 20, buttonHeight = font.getLineHeight() + 4; const int vBorder = 8; int xpos, ypos; @@ -52,7 +49,7 @@ FileSnapDialog::FileSnapDialog( // Set real dimensions _w = 56 * fontWidth + 8; - _h = 13 * (lineHeight + 4) + 10; + _h = 9 * (lineHeight + 4) + 10; xpos = vBorder; ypos = vBorder; @@ -66,28 +63,8 @@ FileSnapDialog::FileSnapDialog( _w - xpos - 10, lineHeight, ""); wid.push_back(myRomPath); - // Snapshot path (save files) - xpos = vBorder; ypos += romButton->getHeight() + 3; - b = new ButtonWidget(this, font, xpos, ypos, buttonWidth, buttonHeight, - "Snapshot save path:", kChooseSnapSaveDirCmd); - wid.push_back(b); - xpos += buttonWidth + 10; - mySnapSavePath = new EditTextWidget(this, font, xpos, ypos + 2, - _w - xpos - 10, lineHeight, ""); - wid.push_back(mySnapSavePath); - - // Snapshot path (load files) - xpos = vBorder; ypos += romButton->getHeight() + 3; - b = new ButtonWidget(this, font, xpos, ypos, buttonWidth, buttonHeight, - "Snapshot load path:", kChooseSnapLoadDirCmd); - wid.push_back(b); - xpos += buttonWidth + 10; - mySnapLoadPath = new EditTextWidget(this, font, xpos, ypos + 2, - _w - xpos - 10, lineHeight, ""); - wid.push_back(mySnapLoadPath); - // Cheat file - xpos = vBorder; ypos += b->getHeight() + 3; + xpos = vBorder; ypos += romButton->getHeight() + 3; b = new ButtonWidget(this, font, xpos, ypos, buttonWidth, buttonHeight, "Cheat file:", kChooseCheatFileCmd); wid.push_back(b); @@ -136,37 +113,6 @@ FileSnapDialog::FileSnapDialog( _w - xpos - 10, lineHeight, ""); wid.push_back(myNVRamPath); - // Snapshot single or multiple saves - xpos = 30; ypos += b->getHeight() + 5; - mySnapSingle = new CheckboxWidget(this, font, xpos, ypos, - "Overwrite snapshots"); - wid.push_back(mySnapSingle); - - // Snapshot in 1x mode (ignore scaling) - xpos += mySnapSingle->getWidth() + 20; - mySnap1x = new CheckboxWidget(this, font, xpos, ypos, - "Snapshot in 1x mode"); - wid.push_back(mySnap1x); - - // Snapshot interval (continuous mode) - VariantList items; - items.clear(); - items.push_back("1 second", "1"); - items.push_back("2 seconds", "2"); - items.push_back("3 seconds", "3"); - items.push_back("4 seconds", "4"); - items.push_back("5 seconds", "5"); - items.push_back("6 seconds", "6"); - items.push_back("7 seconds", "7"); - items.push_back("8 seconds", "8"); - items.push_back("9 seconds", "9"); - items.push_back("10 seconds", "10"); - xpos = 30; ypos += b->getHeight(); - mySnapInterval = new PopUpWidget(this, font, xpos, ypos, - font.getStringWidth("10 seconds"), lineHeight, - items, "Continuous snapshot interval: "); - wid.push_back(mySnapInterval); - // Add Defaults, OK and Cancel buttons b = new ButtonWidget(this, font, 10, _h - buttonHeight - 10, font.getStringWidth("Defaults") + 20, buttonHeight, @@ -188,43 +134,32 @@ FileSnapDialog::FileSnapDialog( } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -FileSnapDialog::~FileSnapDialog() +ConfigPathDialog::~ConfigPathDialog() { delete myBrowser; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void FileSnapDialog::loadConfig() +void ConfigPathDialog::loadConfig() { const Settings& settings = instance().settings(); myRomPath->setText(settings.getString("romdir")); - mySnapSavePath->setText(settings.getString("snapsavedir")); - mySnapLoadPath->setText(settings.getString("snaploaddir")); myCheatFile->setText(settings.getString("cheatfile")); myPaletteFile->setText(settings.getString("palettefile")); myPropsFile->setText(settings.getString("propsfile")); myNVRamPath->setText(settings.getString("nvramdir")); myStatePath->setText(settings.getString("statedir")); - mySnapSingle->setState(settings.getBool("sssingle")); - mySnap1x->setState(settings.getBool("ss1x")); - mySnapInterval->setSelected(instance().settings().getString("ssinterval"), "2"); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void FileSnapDialog::saveConfig() +void ConfigPathDialog::saveConfig() { instance().settings().setValue("romdir", myRomPath->getText()); - instance().settings().setValue("snapsavedir", mySnapSavePath->getText()); - instance().settings().setValue("snaploaddir", mySnapLoadPath->getText()); instance().settings().setValue("cheatfile", myCheatFile->getText()); instance().settings().setValue("palettefile", myPaletteFile->getText()); instance().settings().setValue("propsfile", myPropsFile->getText()); instance().settings().setValue("statedir", myStatePath->getText()); instance().settings().setValue("nvramdir", myNVRamPath->getText()); - instance().settings().setValue("sssingle", mySnapSingle->getState()); - instance().settings().setValue("ss1x", mySnap1x->getState()); - instance().settings().setValue("ssinterval", - mySnapInterval->getSelectedTag().toString()); // Flush changes to disk and inform the OSystem instance().saveConfig(); @@ -232,7 +167,7 @@ void FileSnapDialog::saveConfig() } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void FileSnapDialog::setDefaults() +void ConfigPathDialog::setDefaults() { FilesystemNode node; const string& basedir = instance().baseDir(); @@ -240,9 +175,6 @@ void FileSnapDialog::setDefaults() node = FilesystemNode("~"); myRomPath->setText(node.getShortPath()); - mySnapSavePath->setText(instance().defaultSnapSaveDir()); - mySnapLoadPath->setText(instance().defaultSnapLoadDir()); - const string& cheatfile = basedir + "stella.cht"; node = FilesystemNode(cheatfile); myCheatFile->setText(node.getShortPath()); @@ -262,14 +194,10 @@ void FileSnapDialog::setDefaults() const string& statedir = basedir + "state"; node = FilesystemNode(statedir); myStatePath->setText(node.getShortPath()); - - mySnapSingle->setState(false); - mySnap1x->setState(false); - mySnapInterval->setSelected("2", "2"); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void FileSnapDialog::handleCommand(CommandSender* sender, int cmd, +void ConfigPathDialog::handleCommand(CommandSender* sender, int cmd, int data, int id) { switch (cmd) @@ -277,8 +205,8 @@ void FileSnapDialog::handleCommand(CommandSender* sender, int cmd, case kOKCmd: saveConfig(); close(); - if(myIsGlobal) - sendCommand(kRomDirChosenCmd, 0, 0); // Let the boss know romdir has changed + if(myIsGlobal) // Let the boss know romdir has changed + sendCommand(LauncherDialog::kRomDirChosenCmd, 0, 0); break; case kDefaultsCmd: @@ -287,17 +215,7 @@ void FileSnapDialog::handleCommand(CommandSender* sender, int cmd, case kChooseRomDirCmd: myBrowser->show("Select ROM directory:", myRomPath->getText(), - BrowserDialog::Directories, kRomDirChosenCmd); - break; - - case kChooseSnapSaveDirCmd: - myBrowser->show("Select snapshot save directory:", mySnapSavePath->getText(), - BrowserDialog::Directories, kSnapSaveDirChosenCmd); - break; - - case kChooseSnapLoadDirCmd: - myBrowser->show("Select snapshot load directory:", mySnapLoadPath->getText(), - BrowserDialog::Directories, kSnapLoadDirChosenCmd); + BrowserDialog::Directories, LauncherDialog::kRomDirChosenCmd); break; case kChooseCheatFileCmd: @@ -325,56 +243,32 @@ void FileSnapDialog::handleCommand(CommandSender* sender, int cmd, BrowserDialog::Directories, kStateDirChosenCmd); break; - case kRomDirChosenCmd: - { + case LauncherDialog::kRomDirChosenCmd: myRomPath->setText(myBrowser->getResult().getShortPath()); break; - } - - case kSnapSaveDirChosenCmd: - { - mySnapSavePath->setText(myBrowser->getResult().getShortPath()); - break; - } - - case kSnapLoadDirChosenCmd: - { - mySnapLoadPath->setText(myBrowser->getResult().getShortPath()); - break; - } case kCheatFileChosenCmd: - { myCheatFile->setText(myBrowser->getResult().getShortPath()); break; - } case kPaletteFileChosenCmd: - { myPaletteFile->setText(myBrowser->getResult().getShortPath()); break; - } case kPropsFileChosenCmd: - { myPropsFile->setText(myBrowser->getResult().getShortPath()); break; - } case kNVRamDirChosenCmd: - { myNVRamPath->setText(myBrowser->getResult().getShortPath()); break; - } case kStateDirChosenCmd: - { myStatePath->setText(myBrowser->getResult().getShortPath()); break; - } - case kReloadRomDirCmd: - sendCommand(kReloadRomDirCmd, 0, 0); + case LauncherDialog::kReloadRomDirCmd: + sendCommand(LauncherDialog::kReloadRomDirCmd, 0, 0); break; default: diff --git a/src/gui/FileSnapDialog.hxx b/src/gui/ConfigPathDialog.hxx similarity index 74% rename from src/gui/FileSnapDialog.hxx rename to src/gui/ConfigPathDialog.hxx index 10151c043..71d17c223 100644 --- a/src/gui/FileSnapDialog.hxx +++ b/src/gui/ConfigPathDialog.hxx @@ -15,13 +15,10 @@ // this file, and for a DISCLAIMER OF ALL WARRANTIES. // // $Id$ -// -// Based on code from ScummVM - Scumm Interpreter -// Copyright (C) 2002-2004 The ScummVM project //============================================================================ -#ifndef FILE_SNAP_DIALOG_HXX -#define FILE_SNAP_DIALOG_HXX +#ifndef CONFIG_PATH_DIALOG_HXX +#define CONFIG_PATH_DIALOG_HXX class OSystem; class GuiObject; @@ -36,13 +33,13 @@ class StaticTextWidget; #include "Dialog.hxx" #include "Command.hxx" -class FileSnapDialog : public Dialog, public CommandSender +class ConfigPathDialog : public Dialog, public CommandSender { public: - FileSnapDialog(OSystem* osystem, DialogContainer* parent, - const GUI::Font& font, GuiObject* boss, - int max_w, int max_h); - ~FileSnapDialog(); + ConfigPathDialog(OSystem* osystem, DialogContainer* parent, + const GUI::Font& font, GuiObject* boss, + int max_w, int max_h); + ~ConfigPathDialog(); void handleCommand(CommandSender* sender, int cmd, int data, int id); @@ -58,8 +55,6 @@ class FileSnapDialog : public Dialog, public CommandSender kChooseCheatFileCmd = 'LOcf', // cheatfile (stella.cht) kChoosePaletteFileCmd = 'LOpf', // palette file (stella.pal) kChoosePropsFileCmd = 'LOpr', // properties file (stella.pro) - kChooseSnapSaveDirCmd = 'LOss', // snapshot dir (save files) - kChooseSnapLoadDirCmd = 'LOsl', // snapshot dir (load files) kChooseNVRamDirCmd = 'LOnv', // nvram (flash/eeprom) dir kStateDirChosenCmd = 'LOsc', // state dir changed kCheatFileChosenCmd = 'LOcc', // cheatfile changed @@ -77,13 +72,6 @@ class FileSnapDialog : public Dialog, public CommandSender EditTextWidget* myCheatFile; EditTextWidget* myPaletteFile; EditTextWidget* myPropsFile; - EditTextWidget* mySnapSavePath; - EditTextWidget* mySnapLoadPath; - - // Other snapshot settings - CheckboxWidget* mySnapSingle; - CheckboxWidget* mySnap1x; - PopUpWidget* mySnapInterval; // Indicates if this dialog is used for global (vs. in-game) settings bool myIsGlobal; diff --git a/src/gui/LauncherDialog.cxx b/src/gui/LauncherDialog.cxx index c81199251..e3ab03b1b 100644 --- a/src/gui/LauncherDialog.cxx +++ b/src/gui/LauncherDialog.cxx @@ -564,14 +564,6 @@ void LauncherDialog::handleCommand(CommandSender* sender, int cmd, updateListing(); break; - case kSnapSaveDirChosenCmd: - // Stub just in case we need it - break; - - case kSnapLoadDirChosenCmd: - // Stub just in case we need it - break; - case kReloadRomDirCmd: updateListing(); break; diff --git a/src/gui/LauncherDialog.hxx b/src/gui/LauncherDialog.hxx index 2c841a297..e12ca6422 100644 --- a/src/gui/LauncherDialog.hxx +++ b/src/gui/LauncherDialog.hxx @@ -47,17 +47,16 @@ class StringListWidget; #include "Stack.hxx" #include "MessageBox.hxx" -// These must be accessible from dialogs created by this class -enum { - kRomDirChosenCmd = 'romc', // rom chosen - kSnapSaveDirChosenCmd = 'snsc', // snap chosen (save files) - kSnapLoadDirChosenCmd = 'snlc', // snap chosen (load files) - kReloadRomDirCmd = 'rdrl', // reload the current listing - kReloadFiltersCmd = 'rlfl' // reload filtering options and current listing -}; - class LauncherDialog : public Dialog { + public: + // These must be accessible from dialogs created by this class + enum { + kRomDirChosenCmd = 'romc', // rom chosen + kReloadRomDirCmd = 'rdrl', // reload the current listing + kReloadFiltersCmd = 'rlfl' // reload filtering options and current listing + }; + public: LauncherDialog(OSystem* osystem, DialogContainer* parent, int x, int y, int w, int h); diff --git a/src/gui/LauncherFilterDialog.cxx b/src/gui/LauncherFilterDialog.cxx index 8b92fcb12..a0b0ab289 100644 --- a/src/gui/LauncherFilterDialog.cxx +++ b/src/gui/LauncherFilterDialog.cxx @@ -191,7 +191,7 @@ void LauncherFilterDialog::saveConfig() } // Let parent know about the changes - sendCommand(kReloadFiltersCmd, 0, 0); + sendCommand(LauncherDialog::kReloadFiltersCmd, 0, 0); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/gui/OptionsDialog.cxx b/src/gui/OptionsDialog.cxx index 6d6e5854c..60c85fa8e 100644 --- a/src/gui/OptionsDialog.cxx +++ b/src/gui/OptionsDialog.cxx @@ -29,7 +29,8 @@ #include "AudioDialog.hxx" #include "InputDialog.hxx" #include "UIDialog.hxx" -#include "FileSnapDialog.hxx" +#include "SnapshotDialog.hxx" +#include "ConfigPathDialog.hxx" #include "RomAuditDialog.hxx" #include "GameInfoDialog.hxx" #include "LoggerDialog.hxx" @@ -55,7 +56,8 @@ OptionsDialog::OptionsDialog(OSystem* osystem, DialogContainer* parent, myAudioDialog(NULL), myInputDialog(NULL), myUIDialog(NULL), - myFileSnapDialog(NULL), + mySnapshotDialog(NULL), + myConfigPathDialog(NULL), myGameInfoDialog(NULL), myCheatCodeDialog(NULL), myLoggerDialog(NULL), @@ -64,34 +66,37 @@ OptionsDialog::OptionsDialog(OSystem* osystem, DialogContainer* parent, myIsGlobal(global) { const GUI::Font& font = instance().font(); - const int buttonWidth = font.getStringWidth("Game Properties") + 20, + const int buttonWidth = font.getStringWidth("Snapshot Settings") + 20, buttonHeight = font.getLineHeight() + 6, rowHeight = font.getLineHeight() + 10; _w = 2 * buttonWidth + 30; - _h = 6 * rowHeight + 15; + _h = 7 * rowHeight + 15; int xoffset = 10, yoffset = 10; WidgetArray wid; ButtonWidget* b = NULL; - myVideoSettingsButton = addODButton("Video Settings", kVidCmd); - wid.push_back(myVideoSettingsButton); + b = addODButton("Video Settings", kVidCmd); + wid.push_back(b); - myAudioSettingsButton = addODButton("Audio Settings", kAudCmd); + b = addODButton("Audio Settings", kAudCmd); #ifndef SOUND_SUPPORT - myAudioSettingsButton->clearFlags(WIDGET_ENABLED); + b->clearFlags(WIDGET_ENABLED); #endif - wid.push_back(myAudioSettingsButton); + wid.push_back(b); b = addODButton("Input Settings", kInptCmd); wid.push_back(b); - myUIButton = addODButton("UI Settings", kUsrIfaceCmd); - wid.push_back(myUIButton); + b = addODButton("UI Settings", kUsrIfaceCmd); + wid.push_back(b); - myFileSnapButton = addODButton("Config Paths", kFileSnapCmd); - wid.push_back(myFileSnapButton); + b = addODButton("Snapshot Settings", kSnapCmd); + wid.push_back(b); + + b = addODButton("Config Paths", kFileSnapCmd); + wid.push_back(b); myRomAuditButton = addODButton("Audit ROMs", kAuditCmd); wid.push_back(myRomAuditButton); @@ -108,33 +113,34 @@ OptionsDialog::OptionsDialog(OSystem* osystem, DialogContainer* parent, #endif wid.push_back(myCheatCodeButton); - myLoggerButton = addODButton("System Logs", kLoggerCmd); - wid.push_back(myLoggerButton); + b = addODButton("System Logs", kLoggerCmd); + wid.push_back(b); - myHelpButton = addODButton("Help", kHelpCmd); - wid.push_back(myHelpButton); + b = addODButton("Help", kHelpCmd); + wid.push_back(b); - myAboutButton = addODButton("About", kAboutCmd); - wid.push_back(myAboutButton); + b = addODButton("About", kAboutCmd); + wid.push_back(b); 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); + 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); + mySnapshotDialog = new SnapshotDialog(osystem, parent, font, boss, max_w, max_h); + myConfigPathDialog = new ConfigPathDialog(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 - myLoggerDialog = new LoggerDialog(osystem, parent, font, max_w, max_h); - myHelpDialog = new HelpDialog(osystem, parent, font); - myAboutDialog = new AboutDialog(osystem, parent, font); + myLoggerDialog = new LoggerDialog(osystem, parent, font, max_w, max_h); + myHelpDialog = new HelpDialog(osystem, parent, font); + myAboutDialog = new AboutDialog(osystem, parent, font); addToFocusList(wid); @@ -147,9 +153,6 @@ OptionsDialog::OptionsDialog(OSystem* osystem, DialogContainer* parent, { myRomAuditButton->clearFlags(WIDGET_ENABLED); } -#ifdef _WIN32_WCE - myAudioSettingsButton->clearFlags(WIDGET_ENABLED); // not honored in wince port -#endif } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -159,7 +162,8 @@ OptionsDialog::~OptionsDialog() delete myAudioDialog; delete myInputDialog; delete myUIDialog; - delete myFileSnapDialog; + delete mySnapshotDialog; + delete myConfigPathDialog; delete myRomAuditDialog; delete myGameInfoDialog; #ifdef CHEATCODE_SUPPORT @@ -214,8 +218,12 @@ void OptionsDialog::handleCommand(CommandSender* sender, int cmd, myUIDialog->open(); break; + case kSnapCmd: + mySnapshotDialog->open(); + break; + case kFileSnapCmd: - myFileSnapDialog->open(); + myConfigPathDialog->open(); break; case kAuditCmd: diff --git a/src/gui/OptionsDialog.hxx b/src/gui/OptionsDialog.hxx index 9fde09807..b3c294b5c 100644 --- a/src/gui/OptionsDialog.hxx +++ b/src/gui/OptionsDialog.hxx @@ -30,7 +30,8 @@ class VideoDialog; class AudioDialog; class InputDialog; class UIDialog; -class FileSnapDialog; +class SnapshotDialog; +class ConfigPathDialog; class RomAuditDialog; class GameInfoDialog; class CheatCodeDialog; @@ -54,28 +55,22 @@ class OptionsDialog : public Dialog virtual void handleCommand(CommandSender* sender, int cmd, int data, int id); private: - VideoDialog* myVideoDialog; - AudioDialog* myAudioDialog; - InputDialog* myInputDialog; - UIDialog* myUIDialog; - FileSnapDialog* myFileSnapDialog; - RomAuditDialog* myRomAuditDialog; - GameInfoDialog* myGameInfoDialog; - CheatCodeDialog* myCheatCodeDialog; - LoggerDialog* myLoggerDialog; - HelpDialog* myHelpDialog; - AboutDialog* myAboutDialog; + VideoDialog* myVideoDialog; + AudioDialog* myAudioDialog; + InputDialog* myInputDialog; + UIDialog* myUIDialog; + SnapshotDialog* mySnapshotDialog; + ConfigPathDialog* myConfigPathDialog; + RomAuditDialog* myRomAuditDialog; + GameInfoDialog* myGameInfoDialog; + CheatCodeDialog* myCheatCodeDialog; + LoggerDialog* myLoggerDialog; + HelpDialog* myHelpDialog; + AboutDialog* myAboutDialog; - ButtonWidget* myVideoSettingsButton; - ButtonWidget* myAudioSettingsButton; - ButtonWidget* myUIButton; - ButtonWidget* myFileSnapButton; ButtonWidget* myRomAuditButton; ButtonWidget* myGameInfoButton; ButtonWidget* myCheatCodeButton; - ButtonWidget* myLoggerButton; - ButtonWidget* myHelpButton; - ButtonWidget* myAboutButton; // Indicates if this dialog is used for global (vs. in-game) settings bool myIsGlobal; @@ -85,6 +80,7 @@ class OptionsDialog : public Dialog kAudCmd = 'AUDO', kInptCmd = 'INPT', kUsrIfaceCmd = 'URIF', + kSnapCmd = 'SNAP', kFileSnapCmd = 'FLSN', kAuditCmd = 'RAUD', kInfoCmd = 'INFO', diff --git a/src/gui/SnapshotDialog.cxx b/src/gui/SnapshotDialog.cxx new file mode 100644 index 000000000..850e98a77 --- /dev/null +++ b/src/gui/SnapshotDialog.cxx @@ -0,0 +1,197 @@ +//============================================================================ +// +// 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-2013 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$ +//============================================================================ + +#include "bspf.hxx" + +#include "BrowserDialog.hxx" +#include "EditTextWidget.hxx" +#include "FSNode.hxx" +#include "LauncherDialog.hxx" +#include "PopUpWidget.hxx" +#include "Settings.hxx" + +#include "SnapshotDialog.hxx" + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +SnapshotDialog::SnapshotDialog( + OSystem* osystem, DialogContainer* parent, + const GUI::Font& font, GuiObject* boss, + int max_w, int max_h) + : Dialog(osystem, parent, 0, 0, 0, 0), + myBrowser(NULL) +{ + const int lineHeight = font.getLineHeight(), + fontWidth = font.getMaxCharWidth(), + buttonWidth = font.getStringWidth("Snapshot load path:") + 20, + buttonHeight = font.getLineHeight() + 4; + const int vBorder = 8; + int xpos, ypos; + WidgetArray wid; + ButtonWidget* b; + + // Set real dimensions + _w = 56 * fontWidth + 8; + _h = 13 * (lineHeight + 4) + 10; + + xpos = vBorder; ypos = vBorder; + + // Snapshot path (save files) + b = new ButtonWidget(this, font, xpos, ypos, buttonWidth, buttonHeight, + "Snapshot save path:", kChooseSnapSaveDirCmd); + wid.push_back(b); + xpos += buttonWidth + 10; + mySnapSavePath = new EditTextWidget(this, font, xpos, ypos + 2, + _w - xpos - 10, lineHeight, ""); + wid.push_back(mySnapSavePath); + + // Snapshot path (load files) + xpos = vBorder; ypos += buttonHeight + 3; + b = new ButtonWidget(this, font, xpos, ypos, buttonWidth, buttonHeight, + "Snapshot load path:", kChooseSnapLoadDirCmd); + wid.push_back(b); + xpos += buttonWidth + 10; + mySnapLoadPath = new EditTextWidget(this, font, xpos, ypos + 2, + _w - xpos - 10, lineHeight, ""); + wid.push_back(mySnapLoadPath); + + // Snapshot single or multiple saves + xpos = 30; ypos += b->getHeight() + 5; + mySnapSingle = new CheckboxWidget(this, font, xpos, ypos, + "Overwrite snapshots"); + wid.push_back(mySnapSingle); + + // Snapshot in 1x mode (ignore scaling) + xpos += mySnapSingle->getWidth() + 20; + mySnap1x = new CheckboxWidget(this, font, xpos, ypos, + "Snapshot in 1x mode"); + wid.push_back(mySnap1x); + + // Snapshot interval (continuous mode) + VariantList items; + items.clear(); + items.push_back("1 second", "1"); + items.push_back("2 seconds", "2"); + items.push_back("3 seconds", "3"); + items.push_back("4 seconds", "4"); + items.push_back("5 seconds", "5"); + items.push_back("6 seconds", "6"); + items.push_back("7 seconds", "7"); + items.push_back("8 seconds", "8"); + items.push_back("9 seconds", "9"); + items.push_back("10 seconds", "10"); + xpos = 30; ypos += b->getHeight(); + mySnapInterval = new PopUpWidget(this, font, xpos, ypos, + font.getStringWidth("10 seconds"), lineHeight, + items, "Continuous snapshot interval: "); + wid.push_back(mySnapInterval); + + // Add Defaults, OK and Cancel buttons + b = new ButtonWidget(this, font, 10, _h - buttonHeight - 10, + font.getStringWidth("Defaults") + 20, buttonHeight, + "Defaults", kDefaultsCmd); + wid.push_back(b); + addOKCancelBGroup(wid, font); + + addToFocusList(wid); + + // Create file browser dialog + myBrowser = new BrowserDialog(this, font, max_w, max_h); +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +SnapshotDialog::~SnapshotDialog() +{ + delete myBrowser; +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void SnapshotDialog::loadConfig() +{ + const Settings& settings = instance().settings(); + mySnapSavePath->setText(settings.getString("snapsavedir")); + mySnapLoadPath->setText(settings.getString("snaploaddir")); + mySnapSingle->setState(settings.getBool("sssingle")); + mySnap1x->setState(settings.getBool("ss1x")); + mySnapInterval->setSelected(instance().settings().getString("ssinterval"), "2"); +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void SnapshotDialog::saveConfig() +{ + instance().settings().setValue("snapsavedir", mySnapSavePath->getText()); + instance().settings().setValue("snaploaddir", mySnapLoadPath->getText()); + instance().settings().setValue("sssingle", mySnapSingle->getState()); + instance().settings().setValue("ss1x", mySnap1x->getState()); + instance().settings().setValue("ssinterval", + mySnapInterval->getSelectedTag().toString()); + + // Flush changes to disk and inform the OSystem + instance().saveConfig(); + instance().setConfigPaths(); +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void SnapshotDialog::setDefaults() +{ + mySnapSavePath->setText(instance().defaultSnapSaveDir()); + mySnapLoadPath->setText(instance().defaultSnapLoadDir()); + + mySnapSingle->setState(false); + mySnap1x->setState(false); + mySnapInterval->setSelected("2", "2"); +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void SnapshotDialog::handleCommand(CommandSender* sender, int cmd, + int data, int id) +{ + switch (cmd) + { + case kOKCmd: + saveConfig(); + close(); + break; + + case kDefaultsCmd: + setDefaults(); + break; + + case kChooseSnapSaveDirCmd: + myBrowser->show("Select snapshot save directory:", mySnapSavePath->getText(), + BrowserDialog::Directories, kSnapSaveDirChosenCmd); + break; + + case kChooseSnapLoadDirCmd: + myBrowser->show("Select snapshot load directory:", mySnapLoadPath->getText(), + BrowserDialog::Directories, kSnapLoadDirChosenCmd); + break; + + case kSnapSaveDirChosenCmd: + mySnapSavePath->setText(myBrowser->getResult().getShortPath()); + break; + + case kSnapLoadDirChosenCmd: + mySnapLoadPath->setText(myBrowser->getResult().getShortPath()); + break; + + default: + Dialog::handleCommand(sender, cmd, data, 0); + break; + } +} diff --git a/src/gui/SnapshotDialog.hxx b/src/gui/SnapshotDialog.hxx new file mode 100644 index 000000000..90f32f452 --- /dev/null +++ b/src/gui/SnapshotDialog.hxx @@ -0,0 +1,71 @@ +//============================================================================ +// +// 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-2013 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$ +//============================================================================ + +#ifndef SNAPSHOT_DIALOG_HXX +#define SNAPSHOT_DIALOG_HXX + +class OSystem; +class GuiObject; +class DialogContainer; +class BrowserDialog; +class CheckboxWidget; +class PopUpWidget; +class EditTextWidget; +class SliderWidget; +class StaticTextWidget; + +#include "Dialog.hxx" +#include "Command.hxx" + +class SnapshotDialog : public Dialog +{ + public: + SnapshotDialog(OSystem* osystem, DialogContainer* parent, + const GUI::Font& font, GuiObject* boss, + int max_w, int max_h); + ~SnapshotDialog(); + + void handleCommand(CommandSender* sender, int cmd, int data, int id); + + private: + void loadConfig(); + void saveConfig(); + void setDefaults(); + + private: + enum { + kChooseSnapSaveDirCmd = 'LOss', // snapshot dir (save files) + kChooseSnapLoadDirCmd = 'LOsl', // snapshot dir (load files) + kSnapSaveDirChosenCmd = 'snsc', // snap chosen (save files) + kSnapLoadDirChosenCmd = 'snlc' // snap chosen (load files) + }; + + BrowserDialog* myBrowser; + + // Config paths + EditTextWidget* mySnapSavePath; + EditTextWidget* mySnapLoadPath; + + // Other snapshot settings + CheckboxWidget* mySnapSingle; + CheckboxWidget* mySnap1x; + PopUpWidget* mySnapInterval; +}; + +#endif diff --git a/src/gui/module.mk b/src/gui/module.mk index 9afeed737..a940b856d 100644 --- a/src/gui/module.mk +++ b/src/gui/module.mk @@ -14,7 +14,8 @@ MODULE_OBJS := \ src/gui/EditTextWidget.o \ src/gui/EventMappingWidget.o \ src/gui/FileListWidget.o \ - src/gui/FileSnapDialog.o \ + src/gui/ConfigPathDialog.o \ + src/gui/SnapshotDialog.o \ src/gui/Font.o \ src/gui/GameInfoDialog.o \ src/gui/GameList.o \ diff --git a/src/win32/Stella.vcxproj b/src/win32/Stella.vcxproj index f932fe2ba..e67d64dee 100644 --- a/src/win32/Stella.vcxproj +++ b/src/win32/Stella.vcxproj @@ -396,7 +396,7 @@ SDLmain.lib - + @@ -651,7 +651,7 @@ SDLmain.lib - + @@ -704,4 +704,4 @@ SDLmain.lib - \ No newline at end of file + diff --git a/src/win32/Stella.vcxproj.filters b/src/win32/Stella.vcxproj.filters index f625ae0fc..d3e673ed1 100644 --- a/src/win32/Stella.vcxproj.filters +++ b/src/win32/Stella.vcxproj.filters @@ -405,7 +405,7 @@ Source Files\gui - + Source Files\gui @@ -1121,7 +1121,7 @@ Header Files\gui - + Header Files\gui @@ -1459,4 +1459,4 @@ Resource Files - \ No newline at end of file +