diff --git a/Changes.txt b/Changes.txt index e670d2b28..388634bf2 100644 --- a/Changes.txt +++ b/Changes.txt @@ -27,6 +27,11 @@ * Updated FA2 bankswitch scheme (Star Castle) to emulate load/save high score functionality to the Harmony cart flash RAM. + * Replaced commandline argument 'uselauncher' with 'exitlauncher'. The + new option specifies the behaviour of the ROM launcher when exiting + a ROM (always exit to launcher, or only when the launcher was actually + used). This setting can now be changed in the GUI. + * Several updates to the internal properties database: - 'Juno First' ROMs now use an AtariVox/SaveKey when possible - 'Astroblast' ROMs now use the paddles by default diff --git a/docs/graphics/launcher_options.png b/docs/graphics/launcher_options.png deleted file mode 100644 index 63f8be610..000000000 Binary files a/docs/graphics/launcher_options.png and /dev/null differ diff --git a/docs/graphics/options_ui.png b/docs/graphics/options_ui.png index 63f8be610..c10faec84 100644 Binary files a/docs/graphics/options_ui.png and b/docs/graphics/options_ui.png differ diff --git a/docs/index.html b/docs/index.html index 21ba50b33..b49caa635 100644 --- a/docs/index.html +++ b/docs/index.html @@ -2028,10 +2028,9 @@ -
-uselauncher <1|0>
- Use the built-in ROM launcher. If disabled, launching Stella will - simply print a help message, and exiting a ROM will completely - exit the program. +
-exitlauncher <1|0>
+ Always exit to ROM launcher when exiting a ROM (normally, an exit to + launcher only happens when started with the launcher). @@ -2547,7 +2546,7 @@

Several options are configurable in the ROM launcher. The size of the launcher and fonts, as well as the 'ROM info viewer' can be changed in UI Settings => Launcher dialog, as shown below:

- +

Most of the options are self-explanatory, except for the 'ROM Info viewer', which is described below.

diff --git a/src/common/Array.hxx b/src/common/Array.hxx index 6e55d5bd7..c841a4980 100644 --- a/src/common/Array.hxx +++ b/src/common/Array.hxx @@ -104,8 +104,6 @@ class Array return tmp; } - // TODO: insert, remove, ... - T& operator [](int idx) { assert(idx >= 0 && idx < _size); diff --git a/src/common/FrameBufferSoft.cxx b/src/common/FrameBufferSoft.cxx index 84e1e8d41..98cc185a8 100644 --- a/src/common/FrameBufferSoft.cxx +++ b/src/common/FrameBufferSoft.cxx @@ -750,7 +750,6 @@ void FBSurfaceSoft::addDirtyRect(uInt32 x, uInt32 y, uInt32 w, uInt32 h) if(myIsBaseSurface) { // Add a dirty rect to the UI rectangle list - // TODO - intelligent merging of rectangles, to avoid overlap SDL_Rect temp; temp.x = x + myXOrig; temp.y = y + myYOrig; temp.w = w; temp.h = h; myFB.myRectList->add(&temp); diff --git a/src/common/mainSDL.cxx b/src/common/mainSDL.cxx index c1a353a4f..7681782ec 100644 --- a/src/common/mainSDL.cxx +++ b/src/common/mainSDL.cxx @@ -171,14 +171,9 @@ int main(int argc, char* argv[]) if(romfile == "" || romnode.isDirectory()) { theOSystem->logMessage("Attempting to use ROM launcher ...\n", 2); - if(theOSystem->settings().getBool("uselauncher")) - { - bool launcherOpened = romfile != "" ? - theOSystem->createLauncher(romnode.getPath()) : theOSystem->createLauncher(); - if(!launcherOpened) - return Cleanup(); - } - else + bool launcherOpened = romfile != "" ? + theOSystem->createLauncher(romnode.getPath()) : theOSystem->createLauncher(); + if(!launcherOpened) { theOSystem->logMessage("Launcher could not be started, showing usage\n", 2); theOSystem->settings().usage(); diff --git a/src/emucore/DefProps.hxx b/src/emucore/DefProps.hxx index 8200a881e..559c5441d 100644 --- a/src/emucore/DefProps.hxx +++ b/src/emucore/DefProps.hxx @@ -216,7 +216,7 @@ static const char* DefProps[DEF_PROPS_SIZE][21] = { { "0dfbdadf8f1bc718e7e1bb3ccd5fef3d", "", "", "Mr. Pac-Man (New start tune) (El Destructo)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "0e0808227ef41f6825c06f25082c2e56", "", "", "Candi (Hack) [a]", "Hack of Space Invaders", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "0e08cd2c5bcf11c6a7e5a009a7715b6a", "", "", "Boing! (PD) [a1]", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "0e224ea74310da4e7e2103400eb1b4bf", "Atari, Peter C. Niday, Howard Scott Warshaw", "", "Mind Maze (10-10-1984) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "0e224ea74310da4e7e2103400eb1b4bf", "Atari, Peter C. Niday, Howard Scott Warshaw", "", "Mind Maze (10-10-1984) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "MINDLINK", "", "", "", "", "", "", "" }, { "0e4b2b6e014a93ef8be896823da0d4ec", "", "", "Skiing (208 in 1) (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "0e713d4e272ea7322c5b27d645f56dd0", "Home Vision - Gem International Corp.", "VCS83105", "Panda Chase (1983) (Home Vision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "0e7e73421606873b544e858c59dc283e", "Digivision", "", "Super Soccer (Digivision)", "AKA RealSports Soccer", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, @@ -621,7 +621,7 @@ static const char* DefProps[DEF_PROPS_SIZE][21] = { { "2d9e5d8d083b6367eda880e80dfdfaeb", "Selchow & Righter - QDI", "87", "Glib (1983) (Selchow & Righter)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "2d9e65959808a6098c16c82a59c9d9dc", "Arcadia Corporation, Stephen Harland Landrum", "AR-4400", "Dragonstomper (1 of 3) (1982) (Arcadia) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "2dbc92688f9ba92a7e086d62be9df79d", "", "", "How to Draw a Playfield (1997) (Jim Crawford) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "2dbdca3058035d2b40c734dcf06a86d9", "Thomas Jentzsch", "", "Asteroids DC+ (Thomas Jentzsch) (Hack)", "Uses the Joystick (left) or Steering (right) Controller", "Hack", "", "", "", "", "", "", "", "DRIVING", "", "54", "", "", "", "YES", "" }, + { "2dbdca3058035d2b40c734dcf06a86d9", "Thomas Jentzsch", "", "Asteroids DC+ (Thomas Jentzsch) (Hack)", "Uses the Joystick (left) or Steering (right) Controller", "Hack", "", "", "", "", "", "", "", "DRIVING", "", "58", "", "", "", "YES", "" }, { "2dcf9ce486393cd36ca0928cd53b96cb", "Atari - GCC, Mike Feinstein, John Allred", "CX2688, CX2688P", "Jungle Hunt (1983) (Atari) (PAL) [a2]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "2dfec1615c49501fefc02165c81955e6", "", "", "Song (05-11-2002) (Paul Slocum)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "2e0aed5bb619edcefa3fafb4fbe7c551", "", "", "Qb (2.06) (Retroactive) (NTSC)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, @@ -1272,7 +1272,7 @@ static const char* DefProps[DEF_PROPS_SIZE][21] = { { "60a61da9b2f43dd7e13a5093ec41a53d", "VentureVision, Dan Oliver", "VV2001", "Rescue Terra I (1982) (VentureVision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "60bbd425cb7214ddb9f9a31948e91ecb", "Activision, Bob Whitehead", "AG-005, CAG-005, AG-005-04", "Skiing (1980) (Activision) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "60d304582d33e2957b73eb300a7495bb", "", "", "Jam Demo 2 (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "60e0ea3cbe0913d39803477945e9e5ec", "Atari, Joe Decuir - Sears", "CX2621 - 99806, 6-99806, 49-75104", "Video Olympics (1977) (Atari)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "PADDLES_IAXDR", "", "YES", "10", "", "", "", "", "" }, + { "60e0ea3cbe0913d39803477945e9e5ec", "Atari, Joe Decuir - Sears", "CX2621 - 99806, 6-99806, 49-75104", "Video Olympics (1977) (Atari)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "PADDLES_IAXDR", "", "YES", "", "", "", "", "", "" }, { "613abf596c304ef6dbd8f3351920c37a", "", "", "Boring Pac-Man (Hack)", "Hack of Pac-Man", "Hack", "", "", "", "", "", "", "", "", "", "", "", "33", "", "", "" }, { "6141c095d0aee4e734bebfaac939030a", "Rainbow Vision - Suntek", "SS-017", "Mariana (Rainbow Vision) (PAL)", "AKA Seaquest", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "61426cee013306e7f7367534ab124747", "", "", "One Blue Bar Demo (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2436,7 +2436,7 @@ static const char* DefProps[DEF_PROPS_SIZE][21] = { { "bff8f8f53a8aeb1ee804004ccbb08313", "", "", "Droid Demo 22 (David Conrad Schweinsberg) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "bffe34516aaa3cbf5d307eab382a7e95", "", "", "Euchre (Release Candidate) (PAL) (28-09-2002) (Erik Eid)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c00734a2233ef683d9b6e622ac97a5c8", "Atari, Jerome Domurat, Howard Scott Warshaw", "CX26133", "A-Team, The (03-30-1984) (Atari) (Prototype)", "AKA Saboteur", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "c00b65d1bae0aef6a1b5652c9c2156a1", "Atari, Joe Decuir - Sears", "CX2621 - 99806, 6-99806, 49-75104", "Video Olympics (1977) (Atari) (4K)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "PADDLES_IAXDR", "", "YES", "10", "", "", "", "", "" }, + { "c00b65d1bae0aef6a1b5652c9c2156a1", "Atari, Joe Decuir - Sears", "CX2621 - 99806, 6-99806, 49-75104", "Video Olympics (1977) (Atari) (4K)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "PADDLES_IAXDR", "", "YES", "", "", "", "", "", "" }, { "c02e1afa0671e438fd526055c556d231", "Atari", "", "A-Team (Atari) (Prototype) (PAL60)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "PAL60", "", "", "", "" }, { "c032c2bd7017fdfbba9a105ec50f800e", "Activision, Charlie Heath", "", "Thwocker (04-09-1984) (Activision) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c033dc1d7b6fde41b9cadce9638909bb", "", "", "Skeleton (V1.1) (06-09-2002) (Eric Ball)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -3287,7 +3287,7 @@ static const char* DefProps[DEF_PROPS_SIZE][21] = { { "fdf6680b2b1e8054293a39700a765692", "", "", "Alpha Demo - The Beta Demo 2 (2000) (MP)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "fe0b7f27e3ad50bbf9ff468ee56d553d", "", "", "Lines Demo (Eckhard Stolberg) (PAL) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "fe0bc4bb92c1c4de7d5706aaa8d8c10d", "", "", "Sprite Demo 2 (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "fe3b461d4c8b179fe68bc77760294c25", "Atari, Joe Decuir", "CX2621, CX2621P", "Video Olympics (1977) (Atari) (PAL) (4K)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "PADDLES", "PADDLES", "", "10", "", "", "", "", "" }, + { "fe3b461d4c8b179fe68bc77760294c25", "Atari, Joe Decuir", "CX2621, CX2621P", "Video Olympics (1977) (Atari) (PAL) (4K)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "PADDLES_IAXDR", "", "YES", "", "", "", "", "", "" }, { "fe67087f9c22655ce519616fc6c6ef4d", "Atari, Randy Bowker", "CX26142", "Crack'ed (11-28-1988) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "fe6abc0f63e31e2646c9c600926b5b7f", "Atari", "CX26137", "4 in 1 (02-19-1987) (Atari) (Prototype)", "Home Run, Canyon Bomber, Sky Diver, Night Driver", "Prototype", "", "4IN1", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "fe870018332a0221eb59fb18b0c6bccc", "", "", "Incoming (08-11-2002) (Ben Larson) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, diff --git a/src/emucore/EventHandler.cxx b/src/emucore/EventHandler.cxx index e32682e88..77d3fa873 100644 --- a/src/emucore/EventHandler.cxx +++ b/src/emucore/EventHandler.cxx @@ -1032,7 +1032,8 @@ void EventHandler::handleEvent(Event::Type event, int state) myOSystem->settings().saveConfig(); // Go back to the launcher, or immediately quit - if(myOSystem->settings().getBool("uselauncher")) + if(myOSystem->settings().getBool("exitlauncher") || + myOSystem->launcherUsed()) { myOSystem->deleteConsole(); myOSystem->createLauncher(); diff --git a/src/emucore/OSystem.cxx b/src/emucore/OSystem.cxx index b6d8d8635..4a83d65a4 100644 --- a/src/emucore/OSystem.cxx +++ b/src/emucore/OSystem.cxx @@ -86,6 +86,7 @@ OSystem::OSystem() myMenu(NULL), myCommandMenu(NULL), myLauncher(NULL), + myLauncherUsed(false), myDebugger(NULL), myCheatManager(NULL), myStateManager(NULL), @@ -603,21 +604,24 @@ void OSystem::deleteConsole() bool OSystem::createLauncher(const string& startdir) { mySettings->setString("tmpromdir", startdir); + bool status = false; myEventHandler->reset(EventHandler::S_LAUNCHER); - if(createFrameBuffer() != kSuccess) + if(createFrameBuffer() == kSuccess) { - logMessage("ERROR: Couldn't create launcher\n", 0); - return false; + myLauncher->reStack(); + myFrameBuffer->setCursorState(); + myFrameBuffer->refresh(); + + setFramerate(60); + resetLoopTiming(); + status = true; } - myLauncher->reStack(); - myFrameBuffer->setCursorState(); - myFrameBuffer->refresh(); + else + logMessage("ERROR: Couldn't create launcher\n", 0); - setFramerate(60); - resetLoopTiming(); - - return true; + myLauncherUsed = myLauncherUsed || status; + return status; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/emucore/OSystem.hxx b/src/emucore/OSystem.hxx index cf0c65da5..e906f8b74 100644 --- a/src/emucore/OSystem.hxx +++ b/src/emucore/OSystem.hxx @@ -350,6 +350,14 @@ class OSystem */ bool createLauncher(const string& startdir = ""); + /** + Answers whether the ROM launcher was actually successfully used + at some point since the app started. + + @return True on success, otherwise false + */ + bool launcherUsed() const { return myLauncherUsed; } + /** Gets all possible info about the ROM by creating a temporary Console object and querying it. @@ -509,6 +517,7 @@ class OSystem // Pointer to the Launcher object Launcher* myLauncher; + bool myLauncherUsed; // Pointer to the Debugger object Debugger* myDebugger; diff --git a/src/emucore/Settings.cxx b/src/emucore/Settings.cxx index 2bc914e9c..d4809bb58 100644 --- a/src/emucore/Settings.cxx +++ b/src/emucore/Settings.cxx @@ -98,7 +98,7 @@ Settings::Settings(OSystem* osystem) setInternal("cfgdir", ""); // ROM browser options - setInternal("uselauncher", "true"); + setInternal("exitlauncher", "false"); setInternal("launcherres", "640x480"); setInternal("launcherfont", "medium"); setInternal("launcherexts", "allroms"); @@ -384,7 +384,7 @@ void Settings::usage() << endl << " -rominfo Display detailed information for the given ROM\n" << " -listrominfo Display contents of stella.pro, one line per ROM entry\n" - << " -uselauncher <1|0> Use the built-in ROM launcher\n" + << " -exitlauncher <1|0> On exiting a ROM, go back to the ROM launcher\n" << " -launcherres The resolution to use in ROM launcher mode\n" << " -launcherfont \n" diff --git a/src/emucore/stella.pro b/src/emucore/stella.pro index 98aee3d56..4c3990448 100644 --- a/src/emucore/stella.pro +++ b/src/emucore/stella.pro @@ -402,13 +402,6 @@ "Controller.MouseAxis" "01" "" -"Cartridge.MD5" "7b5207e68ee85b16998bea861987c690" -"Cartridge.Manufacturer" "Atari, Carol Shaw" -"Cartridge.ModelNo" "CX26163P" -"Cartridge.Name" "3-D Tic-Tac-Toe (32 in 1) (1988) (Atari) (PAL)" -"Display.YStart" "62" -"" - "Cartridge.MD5" "f1beca5a198cf08190487e5c27b8e540" "Cartridge.Name" "Fu Kung! (V0.16) (2003) (AD)" "" @@ -421,6 +414,13 @@ "Display.Height" "230" "" +"Cartridge.MD5" "7b5207e68ee85b16998bea861987c690" +"Cartridge.Manufacturer" "Atari, Carol Shaw" +"Cartridge.ModelNo" "CX26163P" +"Cartridge.Name" "3-D Tic-Tac-Toe (32 in 1) (1988) (Atari) (PAL)" +"Display.YStart" "62" +"" + "Cartridge.MD5" "cba56e939252b05df7b7de87307d12ca" "Cartridge.Name" "Playfield Text Demo (2001) (Roger Williams)" "" @@ -760,16 +760,6 @@ "Cartridge.Rarity" "Prototype" "" -"Cartridge.MD5" "81414174f1816d5c1e583af427ac89fc" -"Cartridge.Manufacturer" "Thomas Jentzsch" -"Cartridge.Name" "Treasure Below (Thomas Jentzsch)" -"Cartridge.Note" "NTSC Conversion" -"Cartridge.Rarity" "Homebrew" -"Console.RightDifficulty" "A" -"Display.YStart" "20" -"Display.Height" "230" -"" - "Cartridge.MD5" "cd568d6acb2f14477ebf7e59fb382292" "Cartridge.Manufacturer" "Videospielkassette - Ariola" "Cartridge.ModelNo" "PGP235" @@ -782,6 +772,16 @@ "Cartridge.Name" "H.E.R.O. (Tron)" "" +"Cartridge.MD5" "81414174f1816d5c1e583af427ac89fc" +"Cartridge.Manufacturer" "Thomas Jentzsch" +"Cartridge.Name" "Treasure Below (Thomas Jentzsch)" +"Cartridge.Note" "NTSC Conversion" +"Cartridge.Rarity" "Homebrew" +"Console.RightDifficulty" "A" +"Display.YStart" "20" +"Display.Height" "230" +"" + "Cartridge.MD5" "521f4dd1eb84a09b2b19959a41839aad" "Cartridge.Manufacturer" "Bit Corporation" "Cartridge.ModelNo" "PG206" @@ -2617,9 +2617,8 @@ "Cartridge.ModelNo" "CX2621, CX2621P" "Cartridge.Name" "Video Olympics (1977) (Atari) (PAL) (4K)" "Cartridge.Note" "Uses the Paddle Controllers" -"Controller.Left" "PADDLES" -"Controller.Right" "PADDLES" -"Controller.MouseAxis" "10" +"Controller.Left" "PADDLES_IAXDR" +"Controller.SwapPaddles" "YES" "" "Cartridge.MD5" "b2d5d200f0af8485413fad957828582a" @@ -5025,7 +5024,6 @@ "Cartridge.Note" "Uses the Paddle Controllers" "Controller.Left" "PADDLES_IAXDR" "Controller.SwapPaddles" "YES" -"Controller.MouseAxis" "10" "" "Cartridge.MD5" "3556e125681aea864e17b09f3f3b2a75" @@ -5535,7 +5533,6 @@ "Cartridge.Note" "Uses the Paddle Controllers" "Controller.Left" "PADDLES_IAXDR" "Controller.SwapPaddles" "YES" -"Controller.MouseAxis" "10" "" "Cartridge.MD5" "afd2cf258d51ae4965ee21abba3627ab" @@ -9246,6 +9243,7 @@ "Cartridge.Manufacturer" "Atari, Peter C. Niday, Howard Scott Warshaw" "Cartridge.Name" "Mind Maze (10-10-1984) (Atari) (Prototype)" "Cartridge.Rarity" "Prototype" +"Controller.Right" "MINDLINK" "" "Cartridge.MD5" "eb503cc64c3560cd78b7051188b7ba56" @@ -15960,7 +15958,7 @@ "Cartridge.Note" "Uses the Joystick (left) or Steering (right) Controller" "Cartridge.Rarity" "Hack" "Controller.Right" "DRIVING" -"Controller.MouseAxis" "54" +"Controller.MouseAxis" "58" "Display.Phosphor" "YES" "" diff --git a/src/gui/UIDialog.cxx b/src/gui/UIDialog.cxx index 2189068e5..d27e3c73e 100644 --- a/src/gui/UIDialog.cxx +++ b/src/gui/UIDialog.cxx @@ -55,7 +55,7 @@ UIDialog::UIDialog(OSystem* osystem, DialogContainer* parent, // Set real dimensions _w = 37 * fontWidth + 10; - _h = 9 * (lineHeight + 4) + 10; + _h = 10 * (lineHeight + 4) + 10; // The tab widget xpos = ypos = vBorder; @@ -67,7 +67,7 @@ UIDialog::UIDialog(OSystem* osystem, DialogContainer* parent, // 1) Launcher options wid.clear(); tabID = myTab->addTab(" Launcher "); - lwidth = font.getStringWidth("Launcher Height: "); + lwidth = font.getStringWidth("Exit to Launcher: "); // Launcher width and height myLauncherWidthSlider = new SliderWidget(myTab, font, xpos, ypos, pwidth, @@ -137,6 +137,17 @@ UIDialog::UIDialog(OSystem* osystem, DialogContainer* parent, wid.push_back(myRomViewerPopup); ypos += lineHeight + 4; + // Exit to Launcher + pwidth = font.getStringWidth("If in use"); + items.clear(); + items.push_back("If in use", "0"); + items.push_back("Always", "1"); + myLauncherExitPopup = + new PopUpWidget(myTab, font, xpos, ypos+1, pwidth, lineHeight, items, + "Exit to Launcher: ", lwidth); + wid.push_back(myLauncherExitPopup); + ypos += lineHeight + 4; + // Add message concerning usage xpos = vBorder; ypos += 1*(lineHeight + 4); lwidth = ifont.getStringWidth("(*) Changes require application restart"); @@ -291,12 +302,16 @@ void UIDialog::loadConfig() // Launcher font const string& font = instance().settings().getString("launcherfont"); - myLauncherFontPopup->setSelected(font, "medium"); + myLauncherFontPopup->setSelected(font, "medium"); // ROM launcher info viewer const string& viewer = instance().settings().getString("romviewer"); myRomViewerPopup->setSelected(viewer, "0"); + // Exit to launcher + bool exitlauncher = instance().settings().getBool("exitlauncher"); + myLauncherExitPopup->setSelected(exitlauncher ? "1" : "0", "0"); + #ifdef DEBUGGER_SUPPORT // Debugger size instance().settings().getSize("debuggerres", w, h); @@ -341,6 +356,10 @@ void UIDialog::saveConfig() instance().settings().setString("romviewer", myRomViewerPopup->getSelectedTag()); + // Exit to Launcher + instance().settings().setString("exitlauncher", + myLauncherExitPopup->getSelectedTag()); + // Debugger size instance().settings().setSize("debuggerres", myDebuggerWidthSlider->getValue(), myDebuggerHeightSlider->getValue()); @@ -375,6 +394,7 @@ void UIDialog::setDefaults() myLauncherHeightLabel->setValue(h); myLauncherFontPopup->setSelected("medium", ""); myRomViewerPopup->setSelected("0", ""); + myLauncherExitPopup->setSelected("0", ""); break; } diff --git a/src/gui/UIDialog.hxx b/src/gui/UIDialog.hxx index eebd1a780..a796f9fd7 100644 --- a/src/gui/UIDialog.hxx +++ b/src/gui/UIDialog.hxx @@ -49,6 +49,7 @@ class UIDialog : public Dialog StaticTextWidget* myLauncherWidthLabel; SliderWidget* myLauncherHeightSlider; StaticTextWidget* myLauncherHeightLabel; + PopUpWidget* myLauncherExitPopup; PopUpWidget* myLauncherFontPopup; PopUpWidget* myRomViewerPopup;