summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorvisarhoxha <vhoxha08@gmail.com>2026-09-24 20:13:08 +0200
committervisarhoxha <vhoxha08@gmail.com>2026-10-19 12:22:32 +0200
commit9e6659a2d8c890d60be9a3609e4e55d3a75a1216 (patch)
tree2b275eb6e784b8d1c11e3402b759c5d53e79c602 /Source/Core
parentf0ef80016182ef0a79fd8b100b35ed906f954044 (diff)
State: Move logic of selected state to Core/State
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Core/State.cpp41
-rw-r--r--Source/Core/Core/State.h11
-rw-r--r--Source/Core/DolphinQt/MainWindow.cpp24
-rw-r--r--Source/Core/DolphinQt/MainWindow.h1
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;