mirror of
https://github.com/LNH-team/pico-launcher.git
synced 2026-06-02 09:06:54 +02:00
Add touch input support, add fast scrolling support for coverflow display mode, fix use after free bug in banner list mode
This commit is contained in:
@@ -24,7 +24,7 @@ CheatsViewModel::CheatsViewModel(const FileInfo& romFileInfo, IRomBrowserControl
|
||||
});
|
||||
}
|
||||
|
||||
void CheatsViewModel::ActivateSelectedItem()
|
||||
void CheatsViewModel::ActivateItem(int index)
|
||||
{
|
||||
if (_state != State::DisplayCheats)
|
||||
{
|
||||
@@ -36,19 +36,19 @@ void CheatsViewModel::ActivateSelectedItem()
|
||||
u32 numberOfSubEntries = 0;
|
||||
auto subEntries = cheatCategory->GetSubEntries(numberOfSubEntries);
|
||||
|
||||
if (numberOfSubEntries == 0)
|
||||
if (numberOfSubEntries == 0 || index < 0 || index >= (int)numberOfSubEntries)
|
||||
{
|
||||
// There is nothing to activate
|
||||
return;
|
||||
}
|
||||
|
||||
auto& entry = subEntries[_selectedItem];
|
||||
auto& entry = subEntries[index];
|
||||
if (entry.IsCheatCategory())
|
||||
{
|
||||
// Category activated
|
||||
if (_categoryStackLevel + 1 != _categoryStack.size())
|
||||
{
|
||||
_categoryStack[++_categoryStackLevel] = { &entry, (u32)_selectedItem };
|
||||
_categoryStack[++_categoryStackLevel] = { &entry, (u32)index };
|
||||
_selectedItem = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,8 +25,8 @@ public:
|
||||
|
||||
CheatsViewModel(const FileInfo& romFileInfo, IRomBrowserController* romBrowserController);
|
||||
|
||||
/// @brief Activates the selected cheat or category.
|
||||
void ActivateSelectedItem();
|
||||
/// @brief Activates the cheat or category at the specified \p index.
|
||||
void ActivateItem(int index);
|
||||
|
||||
/// @brief Navigates up in the cheat hierachy, or closes the cheats panel when at the root.
|
||||
/// @return \c true when navigation happened in the cheats tree, or \c false when the cheats panel was closed.
|
||||
@@ -54,9 +54,9 @@ public:
|
||||
/// @param selectedItem The index of the selected item to set.
|
||||
void SetSelectedItem(int selectedItem) { _selectedItem = selectedItem; }
|
||||
|
||||
/// @brief Returns whether the category name should be displayed.
|
||||
/// @return \c true when the category name should be displayed, or \c false otherwise.
|
||||
bool ShouldShowCategoryName() const
|
||||
/// @brief Returns whether the current displayed category is a sub-category.
|
||||
/// @return \c true when the current displayed category is a sub-category, or \c false otherwise.
|
||||
bool IsInSubCategory() const
|
||||
{
|
||||
return _categoryStackLevel > 0;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
#include "common.h"
|
||||
#include "romBrowser/IRomBrowserController.h"
|
||||
#include "RomBrowserViewModel.h"
|
||||
#include "romBrowser/FileType/Nds/NdsFileType.h"
|
||||
#include "RomBrowserItemViewModel.h"
|
||||
|
||||
void RomBrowserItemViewModel::Activate()
|
||||
{
|
||||
if (_index >= 0)
|
||||
{
|
||||
const auto& item = _romBrowserController->GetRomBrowserViewModel()->GetFileInfoManager().GetItem(_index);
|
||||
if (item.GetFileType()->GetClassification() == FileTypeClassification::Folder)
|
||||
{
|
||||
_romBrowserController->NavigateToPath(item.GetFileName());
|
||||
}
|
||||
else
|
||||
{
|
||||
_romBrowserController->LaunchFile(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void RomBrowserItemViewModel::ShowGameInfo()
|
||||
{
|
||||
if (_index >= 0)
|
||||
{
|
||||
const auto& item = _romBrowserController->GetRomBrowserViewModel()->GetFileInfoManager().GetItem(_index);
|
||||
if (item.GetFileType() == &NdsFileType::sInstance)
|
||||
{
|
||||
_romBrowserController->ShowGameInfo(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
43
arm9/source/romBrowser/viewModels/RomBrowserItemViewModel.h
Normal file
43
arm9/source/romBrowser/viewModels/RomBrowserItemViewModel.h
Normal file
@@ -0,0 +1,43 @@
|
||||
#pragma once
|
||||
#include "core/task/TaskQueue.h"
|
||||
|
||||
class IRomBrowserController;
|
||||
|
||||
class RomBrowserItemViewModel
|
||||
{
|
||||
public:
|
||||
explicit RomBrowserItemViewModel(IRomBrowserController* romBrowserController)
|
||||
: _romBrowserController(romBrowserController) { }
|
||||
|
||||
void Activate();
|
||||
void ShowGameInfo();
|
||||
|
||||
void SetIndex(int index)
|
||||
{
|
||||
_index = index;
|
||||
}
|
||||
|
||||
void SetQueueTask(QueueTask<void> queueTask)
|
||||
{
|
||||
_queueTask = std::move(queueTask);
|
||||
}
|
||||
|
||||
void CancelQueueTask()
|
||||
{
|
||||
_queueTask.CancelTask();
|
||||
}
|
||||
|
||||
void DisposeQueueTaskWhenComplete()
|
||||
{
|
||||
if (_queueTask.GetTask().IsCompleted())
|
||||
{
|
||||
_queueTask.Dispose();
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
int _index = -1;
|
||||
QueueTask<void> _queueTask;
|
||||
|
||||
IRomBrowserController* _romBrowserController;
|
||||
};
|
||||
@@ -40,29 +40,7 @@ RomBrowserViewModel::RomBrowserViewModel(IRomBrowserController* romBrowserContro
|
||||
_selectedItem = _fileInfoManager->GetItemIndex(initialSelectedFileName);
|
||||
}
|
||||
|
||||
void RomBrowserViewModel::ItemActivated()
|
||||
{
|
||||
const auto& item = _fileInfoManager->GetItem(_selectedItem);
|
||||
if (item.GetFileType()->GetClassification() == FileTypeClassification::Folder)
|
||||
{
|
||||
_romBrowserController->NavigateToPath(item.GetFileName());
|
||||
}
|
||||
else
|
||||
{
|
||||
_romBrowserController->LaunchFile(item);
|
||||
}
|
||||
}
|
||||
|
||||
void RomBrowserViewModel::NavigateUp()
|
||||
{
|
||||
_romBrowserController->NavigateUp();
|
||||
}
|
||||
|
||||
void RomBrowserViewModel::ShowGameInfo()
|
||||
{
|
||||
const auto& item = _fileInfoManager->GetItem(_selectedItem);
|
||||
if (item.GetFileType() == &NdsFileType::sInstance)
|
||||
{
|
||||
_romBrowserController->ShowGameInfo(item);
|
||||
}
|
||||
}
|
||||
@@ -13,6 +13,7 @@ class RomBrowserViewModel
|
||||
public:
|
||||
RomBrowserViewModel(IRomBrowserController* romBrowserController, const char* initialSelectedFileName = nullptr);
|
||||
|
||||
IRomBrowserController* GetRomBrowserController() const { return _romBrowserController; }
|
||||
FileInfoManager& GetFileInfoManager() const { return *_fileInfoManager; }
|
||||
TaskQueueBase* GetIoTaskQueue() const { return _romBrowserController->GetIoTaskQueue(); }
|
||||
TaskQueueBase* GetBgTaskQueue() const { return _romBrowserController->GetBgTaskQueue(); }
|
||||
@@ -24,9 +25,7 @@ public:
|
||||
constexpr u32 GetIconFrameCounter() const { return _iconFrameCounter; }
|
||||
void SetIconFrameCounter(u32 iconFrameCounter) { _iconFrameCounter = iconFrameCounter; }
|
||||
|
||||
void ItemActivated();
|
||||
void NavigateUp();
|
||||
void ShowGameInfo();
|
||||
|
||||
private:
|
||||
IRomBrowserController* _romBrowserController;
|
||||
|
||||
Reference in New Issue
Block a user