diff options
| author | visarhoxha <vhoxha08@gmail.com> | 2026-09-24 20:13:08 +0200 |
|---|---|---|
| committer | visarhoxha <vhoxha08@gmail.com> | 2026-10-19 12:22:32 +0200 |
| commit | 9e6659a2d8c890d60be9a3609e4e55d3a75a1216 (patch) | |
| tree | 2b275eb6e784b8d1c11e3402b759c5d53e79c602 /Source/Core | |
| parent | f0ef80016182ef0a79fd8b100b35ed906f954044 (diff) | |
State: Move logic of selected state to Core/State
Diffstat (limited to 'Source/Core')
| -rw-r--r-- | Source/Core/Core/State.cpp | 41 | ||||
| -rw-r--r-- | Source/Core/Core/State.h | 11 | ||||
| -rw-r--r-- | Source/Core/DolphinQt/MainWindow.cpp | 24 | ||||
| -rw-r--r-- | Source/Core/DolphinQt/MainWindow.h | 1 |
4 files changed, 59 insertions, 18 deletions
diff --git a/Source/Core/Core/State.cpp b/Source/Core/Core/State.cpp index 2dcd2cae2b..f3e3f6ad7c 100644 --- a/Source/Core/Core/State.cpp +++ b/Source/Core/Core/State.cpp @@ -78,6 +78,8 @@ static Common::UniqueBuffer<u8> s_undo_load_buffer; // Used to estimate buffer size for the next save. static u32 s_last_state_size = 0; +static u32 s_selected_slot = 1; + // Shared locks are acquired for each state save task. // Tasks generally transition from: Calling thread -> CPU thread -> Compress/Write thread. // Holding an "exclusive" lock will: @@ -912,6 +914,45 @@ void Load(Core::System& system, u32 slot) LoadAs(system, MakeStateFilename(slot)); } +u32 GetSelectedSlot() +{ + return s_selected_slot; +} + +void SetSelectedSlot(u32 slot) +{ + s_selected_slot = std::clamp<u32>(slot, 1, NUM_STATES); +} + +void SelectSlot(u32 slot) +{ + SetSelectedSlot(slot); + + Core::DisplayMessage(fmt::format("Selected slot {} - {}", s_selected_slot, + GetInfoStringOfSlot(s_selected_slot, false)), + 2500); +} + +u32 GetNextSlot() +{ + return s_selected_slot >= NUM_STATES ? 1 : s_selected_slot + 1; +} + +u32 GetPreviousSlot() +{ + return s_selected_slot <= 1 ? NUM_STATES : s_selected_slot - 1; +} + +void SaveSelected(Core::System& system) +{ + Save(system, s_selected_slot); +} + +void LoadSelected(Core::System& system) +{ + Load(system, s_selected_slot); +} + void LoadLastSaved(Core::System& system, int i) { if (!CheckIfStateLoadIsAllowed(system)) diff --git a/Source/Core/Core/State.h b/Source/Core/Core/State.h index cd35ea1af0..e1bf3384a1 100644 --- a/Source/Core/Core/State.h +++ b/Source/Core/Core/State.h @@ -95,6 +95,17 @@ u64 GetUnixTimeOfSlot(u32 slot); void Save(Core::System& system, u32 slot); void Load(Core::System& system, u32 slot); +u32 GetSelectedSlot(); +void SetSelectedSlot(u32 slot); + +void SelectSlot(u32 slot); + +u32 GetNextSlot(); +u32 GetPreviousSlot(); + +void SaveSelected(Core::System& system); +void LoadSelected(Core::System& system); + void SaveAs(Core::System& system, std::string filename); void LoadAs(Core::System& system, std::string filename); diff --git a/Source/Core/DolphinQt/MainWindow.cpp b/Source/Core/DolphinQt/MainWindow.cpp index 688ae6ffcd..7905402013 100644 --- a/Source/Core/DolphinQt/MainWindow.cpp +++ b/Source/Core/DolphinQt/MainWindow.cpp @@ -297,8 +297,8 @@ MainWindow::MainWindow(Core::System& system, std::unique_ptr<BootParameters> boo } } - m_state_slot = - std::clamp(Settings::Instance().GetStateSlot(), 1, static_cast<int>(State::NUM_STATES)); + State::SetSelectedSlot( + std::clamp(Settings::Instance().GetStateSlot(), 1, static_cast<int>(State::NUM_STATES))); m_render_widget_geometry = settings.value(QStringLiteral("renderwidget/geometry")).toByteArray(); @@ -1531,12 +1531,12 @@ void MainWindow::StateSave() void MainWindow::StateLoadSlot() { - State::Load(m_system, m_state_slot); + State::LoadSelected(m_system); } void MainWindow::StateSaveSlot() { - State::Save(m_system, m_state_slot); + State::SaveSelected(m_system); } void MainWindow::StateLoadSlotAt(int slot) @@ -1572,27 +1572,17 @@ void MainWindow::StateSaveOldest() void MainWindow::SetStateSlot(int slot) { Settings::Instance().SetStateSlot(slot); - m_state_slot = slot; - - Core::DisplayMessage(fmt::format("Selected slot {} - {}", m_state_slot, - State::GetInfoStringOfSlot(m_state_slot, false)), - 2500); + State::SelectSlot(slot); } void MainWindow::IncrementSelectedStateSlot() { - u32 state_slot = m_state_slot + 1; - if (state_slot > State::NUM_STATES) - state_slot = 1; - m_menu_bar->SetStateSlot(state_slot); + m_menu_bar->SetStateSlot(State::GetNextSlot()); } void MainWindow::DecrementSelectedStateSlot() { - u32 state_slot = m_state_slot - 1; - if (state_slot < 1) - state_slot = State::NUM_STATES; - m_menu_bar->SetStateSlot(state_slot); + m_menu_bar->SetStateSlot(State::GetPreviousSlot()); } void MainWindow::PerformOnlineUpdate(const std::string& region) diff --git a/Source/Core/DolphinQt/MainWindow.h b/Source/Core/DolphinQt/MainWindow.h index 93490eaad6..c342dc0a65 100644 --- a/Source/Core/DolphinQt/MainWindow.h +++ b/Source/Core/DolphinQt/MainWindow.h @@ -250,7 +250,6 @@ private: bool m_exit_requested = false; bool m_fullscreen_requested = false; bool m_is_screensaver_inhibited = false; - u32 m_state_slot = 1; std::unique_ptr<BootParameters> m_pending_boot; SettingsWindow* m_settings_window = nullptr; |
