Remember selected index when returning from cheat category

This commit is contained in:
Gericom
2026-03-01 16:24:05 +01:00
parent e2e42115e7
commit 10431c4615
3 changed files with 17 additions and 8 deletions

View File

@@ -6,13 +6,13 @@
CheatsViewModel::CheatsViewModel(const FileInfo& romFileInfo, IRomBrowserController* romBrowserController) CheatsViewModel::CheatsViewModel(const FileInfo& romFileInfo, IRomBrowserController* romBrowserController)
: _romFileInfo(romFileInfo), _romBrowserController(romBrowserController) : _romFileInfo(romFileInfo), _romBrowserController(romBrowserController)
{ {
_categoryStack.fill(nullptr); _categoryStack.fill({ nullptr, 0 });
_loadCheatsTask = _romBrowserController->GetIoTaskQueue()->Enqueue([this] (const vu8& cancelRequested) _loadCheatsTask = _romBrowserController->GetIoTaskQueue()->Enqueue([this] (const vu8& cancelRequested)
{ {
_cheats = _romBrowserController->GetCheatRepository().GetCheatsForGame(_romFileInfo.GetFastFileRef()); _cheats = _romBrowserController->GetCheatRepository().GetCheatsForGame(_romFileInfo.GetFastFileRef());
if (_cheats) if (_cheats)
{ {
_categoryStack[0] = _cheats.get(); _categoryStack[0] = { _cheats.get(), 0 };
_state = State::DisplayCheats; _state = State::DisplayCheats;
} }
else else
@@ -37,7 +37,8 @@ void CheatsViewModel::ItemActivated()
// Category activated // Category activated
if (_categoryStackLevel + 1 != _categoryStack.size()) if (_categoryStackLevel + 1 != _categoryStack.size())
{ {
_categoryStack[++_categoryStackLevel] = &categories[_selectedItem]; _categoryStack[++_categoryStackLevel] = { &categories[_selectedItem], (u32)_selectedItem };
_selectedItem = 0;
} }
} }
else else
@@ -65,7 +66,8 @@ void CheatsViewModel::Back()
} }
else else
{ {
_categoryStack[_categoryStackLevel--] = nullptr; _selectedItem = _categoryStack[_categoryStackLevel].index;
_categoryStack[_categoryStackLevel--] = { nullptr, 0 };
} }
} }

View File

@@ -24,12 +24,18 @@ public:
void Close(); void Close();
State GetState() const { return _state; } State GetState() const { return _state; }
const ICheatCategory* GetCurrentCheatCategory() const { return _categoryStack[_categoryStackLevel]; } const ICheatCategory* GetCurrentCheatCategory() const { return _categoryStack[_categoryStackLevel].cheatCategory; }
constexpr int GetSelectedItem() const { return _selectedItem; } constexpr int GetSelectedItem() const { return _selectedItem; }
void SetSelectedItem(int selectedItem) { _selectedItem = selectedItem; } void SetSelectedItem(int selectedItem) { _selectedItem = selectedItem; }
private: private:
struct CategoryStackEntry
{
const ICheatCategory* cheatCategory;
u32 index;
};
FileInfo _romFileInfo; FileInfo _romFileInfo;
IRomBrowserController* _romBrowserController; IRomBrowserController* _romBrowserController;
QueueTask<void> _loadCheatsTask; QueueTask<void> _loadCheatsTask;
@@ -38,5 +44,5 @@ private:
int _selectedItem = -1; int _selectedItem = -1;
bool _changed = false; bool _changed = false;
u32 _categoryStackLevel = 0; u32 _categoryStackLevel = 0;
std::array<const ICheatCategory*, 8> _categoryStack; std::array<CategoryStackEntry, 8> _categoryStack;
}; };

View File

@@ -175,8 +175,9 @@ bool CheatsBottomSheetView::HandleInput(const InputProvider& inputProvider, Focu
void CheatsBottomSheetView::UpdateCheatList() void CheatsBottomSheetView::UpdateCheatList()
{ {
auto oldAdapter = _cheatsAdapter; auto oldAdapter = _cheatsAdapter;
_cheatsAdapter = new CheatsAdapter(_viewModel->GetCurrentCheatCategory(), _materialColorScheme, _fontRepository, _vramOffsets); _cheatsAdapter = new CheatsAdapter(
_cheatListRecycler->SetAdapter(_cheatsAdapter); _viewModel->GetCurrentCheatCategory(), _materialColorScheme, _fontRepository, _vramOffsets);
_cheatListRecycler->SetAdapter(_cheatsAdapter, _viewModel->GetSelectedItem());
delete oldAdapter; delete oldAdapter;
// Ugly hack // Ugly hack