diff --git a/src/common/PKeyboardHandler.cxx b/src/common/PKeyboardHandler.cxx index 3ae12b1e4..becdeee1c 100644 --- a/src/common/PKeyboardHandler.cxx +++ b/src/common/PKeyboardHandler.cxx @@ -475,6 +475,7 @@ PhysicalKeyboardHandler::EventMappingArray PhysicalKeyboardHandler::DefaultEmuMa {Event::SaveState, KBDK_F9}, {Event::SaveAllStates, KBDK_F9, MOD3}, {Event::ChangeState, KBDK_F10}, + {Event::ToggleAutoSlot, KBDK_F10, MOD3}, {Event::LoadState, KBDK_F11}, {Event::LoadAllStates, KBDK_F11, MOD3}, {Event::TakeSnapshot, KBDK_F12}, diff --git a/src/common/StateManager.cxx b/src/common/StateManager.cxx index 75d7cc2a3..8bd19b539 100644 --- a/src/common/StateManager.cxx +++ b/src/common/StateManager.cxx @@ -288,7 +288,7 @@ void StateManager::saveState(int slot) if(myOSystem.settings().getBool("autoslot")) { myCurrentSlot = (slot + 1) % 10; - buf << ", switching to slot " << slot; + buf << ", switching to slot " << myCurrentSlot; } } else @@ -309,6 +309,19 @@ void StateManager::changeState() myOSystem.frameBuffer().showMessage(buf.str()); } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void StateManager::toggleAutoSlot() +{ + bool autoSlot = !myOSystem.settings().getBool("autoslot"); + + // Print appropriate message + ostringstream buf; + buf << "Automatic slot change " << (autoSlot ? "enabled" : "disabled"); + myOSystem.frameBuffer().showMessage(buf.str()); + + myOSystem.settings().setValue("autoslot", autoSlot); +} + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - bool StateManager::loadState(Serializer& in) { diff --git a/src/common/StateManager.hxx b/src/common/StateManager.hxx index 211b5fe63..ac7338513 100644 --- a/src/common/StateManager.hxx +++ b/src/common/StateManager.hxx @@ -118,6 +118,11 @@ class StateManager */ void changeState(); + /** + Toggles auto slot mode. + */ + void toggleAutoSlot(); + /** Load a state into the current system from the given Serializer. No messages are printed to the screen. diff --git a/src/emucore/Event.hxx b/src/emucore/Event.hxx index e2f8741e0..74bf2723e 100644 --- a/src/emucore/Event.hxx +++ b/src/emucore/Event.hxx @@ -106,11 +106,13 @@ class Event StartPauseMode, SaveAllStates, LoadAllStates, DecreaseOverscan, IncreaseOverScan, + ToggleAutoSlot, + LastType }; // Event list version, update if the id of existing event types changed - static constexpr Int32 VERSION = 2; + static constexpr Int32 VERSION = 3; class KeyTable { public: diff --git a/src/emucore/EventHandler.cxx b/src/emucore/EventHandler.cxx index d83bc827d..348a418b4 100644 --- a/src/emucore/EventHandler.cxx +++ b/src/emucore/EventHandler.cxx @@ -630,6 +630,10 @@ void EventHandler::handleEvent(Event::Type event, bool pressed, bool repeated) if(pressed) myOSystem.state().changeState(); return; + case Event::ToggleAutoSlot: + if (pressed) myOSystem.state().toggleAutoSlot(); + return; + case Event::LoadState: if(pressed && !repeated) myOSystem.state().loadState(); return; @@ -1606,7 +1610,8 @@ EventHandler::ActionList EventHandler::ourEmulActionList[EMUL_ACTIONLIST_SIZE] = { Event::ConsoleRightDiffB, "P1 Difficulty B", "" }, { Event::ConsoleRightDiffToggle, "P1 Swap Difficulty", "" }, { Event::SaveState, "Save state", "" }, - { Event::ChangeState, "Change state", "" }, + { Event::ChangeState, "Change state slot", "" }, + { Event::ToggleAutoSlot, "Toggle automatic state slot change", "" }, { Event::LoadState, "Load state", "" }, { Event::TakeSnapshot, "Snapshot", "" }, { Event::TogglePauseMode, "Toggle pause mode", "" }, diff --git a/src/emucore/EventHandler.hxx b/src/emucore/EventHandler.hxx index 92d23fae7..30efe8091 100644 --- a/src/emucore/EventHandler.hxx +++ b/src/emucore/EventHandler.hxx @@ -382,7 +382,7 @@ class EventHandler #else PNG_SIZE = 0, #endif - EMUL_ACTIONLIST_SIZE = 138 + PNG_SIZE + COMBO_SIZE, + EMUL_ACTIONLIST_SIZE = 139 + PNG_SIZE + COMBO_SIZE, MENU_ACTIONLIST_SIZE = 18 ;