From 9f9f0143a2db22bb860e74b06eae6aeefe5c6838 Mon Sep 17 00:00:00 2001 From: Gericom Date: Sat, 18 Apr 2026 13:15:25 +0200 Subject: [PATCH] Add ability to move to and from the up button in the cheats panel with the dpad, fix oopsie with cheat category name text, update Usage.md --- arm9/source/gui/views/RecyclerView.cpp | 16 +++++++++----- .../views/cheats/CheatsBottomSheetView.cpp | 21 ++++++++++++++++++- .../views/cheats/CheatsBottomSheetView.h | 1 + docs/Usage.md | 2 +- 4 files changed, 33 insertions(+), 7 deletions(-) diff --git a/arm9/source/gui/views/RecyclerView.cpp b/arm9/source/gui/views/RecyclerView.cpp index 2b4e32d..93204c2 100644 --- a/arm9/source/gui/views/RecyclerView.cpp +++ b/arm9/source/gui/views/RecyclerView.cpp @@ -256,14 +256,20 @@ SharedPtr RecyclerView::MoveFocusVertical(const SharedPtr& currentFo if (!_selectedItem || currentFocus.GetPointer() != _selectedItem->view.GetPointer()) { // incoming focus - if (direction != FocusMoveDirection::Right) + if (direction == FocusMoveDirection::Right) { - return nullptr; + int idx = (-_yOffset + currentFocus->GetPosition().y - _yPadding + ((_ySpacing + _itemHeight) >> 1)) / (_ySpacing + _itemHeight) * _columns; + SetSelectedItem(std::clamp(idx, 0, ((int)_itemCount - 1) / _columns * _columns)); + return _selectedItem != nullptr ? _selectedItem->view : SharedFromThis(); + } + else if (direction == FocusMoveDirection::Down) + { + int idx = (-_xOffset + currentFocus->GetPosition().x - _xPadding + ((_xSpacing + _itemWidth) >> 1)) / (_xSpacing + _itemWidth); + SetSelectedItem(std::clamp(idx, 0, _columns - 1)); + return _selectedItem != nullptr ? _selectedItem->view : SharedFromThis(); } - int idx = (-_yOffset + currentFocus->GetPosition().y - _yPadding + ((_ySpacing + _itemHeight) >> 1)) / (_ySpacing + _itemHeight) * _columns; - SetSelectedItem(std::clamp(idx, 0, ((int)_itemCount - 1) / _columns * _columns)); - return _selectedItem != nullptr ? _selectedItem->view : SharedFromThis(); + return nullptr; } int column = _selectedItem->itemIdx % _columns; diff --git a/arm9/source/romBrowser/views/cheats/CheatsBottomSheetView.cpp b/arm9/source/romBrowser/views/cheats/CheatsBottomSheetView.cpp index 0daf05f..9004a87 100644 --- a/arm9/source/romBrowser/views/cheats/CheatsBottomSheetView.cpp +++ b/arm9/source/romBrowser/views/cheats/CheatsBottomSheetView.cpp @@ -128,7 +128,7 @@ void CheatsBottomSheetView::Update() else if (_currentCheatCategory != _viewModel->GetCurrentCheatCategory() && _viewModel->GetCurrentCheatCategory() != nullptr) { - // _secondaryLabel->SetText(_viewModel->GetCurrentCheatCategory()->GetName()); + _secondaryLabel->SetText(_viewModel->GetCurrentCheatCategory()->GetName()); UpdateCheatList(); } } @@ -223,6 +223,25 @@ void CheatsBottomSheetView::Draw(GraphicsContext& graphicsContext) graphicsContext.ResetClipArea(); } +SharedPtr CheatsBottomSheetView::MoveFocus(const SharedPtr& currentFocus, FocusMoveDirection direction, View* source) +{ + if (!currentFocus) + { + return nullptr; + } + + if (source == _cheatListRecycler.GetPointer() && direction == FocusMoveDirection::Up && _viewModel->IsInSubCategory()) + { + return _upButton; + } + else if (source == _upButton.GetPointer() && direction == FocusMoveDirection::Down) + { + return _cheatListRecycler->MoveFocus(currentFocus, direction, this); + } + + return nullptr; +} + bool CheatsBottomSheetView::HandleInput(const InputProvider& inputProvider, FocusManager& focusManager) { if (inputProvider.Triggered(InputKey::B)) diff --git a/arm9/source/romBrowser/views/cheats/CheatsBottomSheetView.h b/arm9/source/romBrowser/views/cheats/CheatsBottomSheetView.h index b30da0d..929762c 100644 --- a/arm9/source/romBrowser/views/cheats/CheatsBottomSheetView.h +++ b/arm9/source/romBrowser/views/cheats/CheatsBottomSheetView.h @@ -22,6 +22,7 @@ public: void InitVram(const VramContext& vramContext) override; void Update() override; void Draw(GraphicsContext& graphicsContext) override; + SharedPtr MoveFocus(const SharedPtr& currentFocus, FocusMoveDirection direction, View* source) override; bool HandleInput(const InputProvider& inputProvider, FocusManager& focusManager) override; void Focus(FocusManager& focusManager) override diff --git a/docs/Usage.md b/docs/Usage.md index bd3fb14..adf32f7 100644 --- a/docs/Usage.md +++ b/docs/Usage.md @@ -16,7 +16,7 @@ From here you can browse your SD card to launch homebrew and games. The back arrow on the top left of the bottom screen can also be used to go up to the parent folder. -Please note that touch functionality is not supported yet. +Touch input is also supported. ## Settings menu The settings menu can be accessed by using the DPAD to move the selector to the cogwheel icon and pressing A. When in the settings menu, press the B button will to return to the file browser.