Initial commit

This commit is contained in:
Gericom
2025-11-22 17:21:45 +01:00
commit 5d6f67c612
517 changed files with 63025 additions and 0 deletions

View File

@@ -0,0 +1,49 @@
#pragma once
#include "../IRomBrowserController.h"
#include "services/settings/RomBrowserDisplaySettings.h"
/// @brief View model for the display settings screen.
class DisplaySettingsViewModel
{
public:
explicit DisplaySettingsViewModel(IRomBrowserController* romBrowserController)
: _romBrowserController(romBrowserController)
, _romBrowserDisplaySettings(_romBrowserController->GetRomBrowserDisplaySettings()) { }
constexpr RomBrowserLayout GetRomBrowserDisplayMode() const
{
return _romBrowserDisplaySettings.layout;
}
void SetRomBrowserDisplayMode(RomBrowserLayout romBrowserDisplayMode)
{
if (_romBrowserDisplaySettings.layout != romBrowserDisplayMode)
{
_romBrowserDisplaySettings.layout = romBrowserDisplayMode;
_romBrowserController->SetRomBrowserDisplaySettings(_romBrowserDisplaySettings);
}
}
constexpr RomBrowserSortMode GetRomBrowserSortMode() const
{
return _romBrowserDisplaySettings.sortMode;
}
void SetRomBrowserSortMode(RomBrowserSortMode romBrowserSortMode)
{
if (_romBrowserDisplaySettings.sortMode != romBrowserSortMode)
{
_romBrowserDisplaySettings.sortMode = romBrowserSortMode;
_romBrowserController->SetRomBrowserDisplaySettings(_romBrowserDisplaySettings);
}
}
void Close()
{
_romBrowserController->HideDisplaySettings();
}
private:
IRomBrowserController* _romBrowserController;
RomBrowserDisplaySettings _romBrowserDisplaySettings;
};

View File

@@ -0,0 +1,28 @@
#pragma once
#include "../IRomBrowserController.h"
/// @brief View model for the rom browser app bar
class RomBrowserAppBarViewModel
{
public:
explicit RomBrowserAppBarViewModel(IRomBrowserController* romBrowserController)
: _romBrowserController(romBrowserController) { }
void NavigateUp()
{
_romBrowserController->NavigateUp();
}
void ShowDisplaySettings()
{
_romBrowserController->ShowDisplaySettings();
}
constexpr RomBrowserLayout GetRomBrowserLayout() const
{
return _romBrowserController->GetRomBrowserDisplaySettings().layout;
}
private:
IRomBrowserController* _romBrowserController;
};

View File

@@ -0,0 +1,44 @@
#pragma once
#include "core/SharedPtr.h"
#include "../RomBrowserController.h"
#include "RomBrowserViewModel.h"
#include "RomBrowserAppBarViewModel.h"
class ICoverRepository;
/// @brief View model for the rom browser bottom screen
class RomBrowserBottomScreenViewModel
{
public:
RomBrowserBottomScreenViewModel(IRomBrowserController* romBrowserController)
: _romBrowserController(romBrowserController)
, _romBrowserAppBarViewModel(romBrowserController) { }
bool IsRomBrowserVisible() const
{
auto state = _romBrowserController->GetStateMachine().GetCurrentState();
return state == RomBrowserState::Browser
|| state == RomBrowserState::GameInfo
|| state == RomBrowserState::DisplaySettings
|| state == RomBrowserState::Launching;
}
const SharedPtr<RomBrowserViewModel>& GetRomBrowserViewModel()
{
return _romBrowserController->GetRomBrowserViewModel();
}
RomBrowserAppBarViewModel* GetRomBrowserAppBarViewModel()
{
return &_romBrowserAppBarViewModel;
}
void NavigateUp()
{
_romBrowserController->NavigateUp();
}
private:
IRomBrowserController* _romBrowserController;
RomBrowserAppBarViewModel _romBrowserAppBarViewModel;
};

View File

@@ -0,0 +1,65 @@
#include "common.h"
#include <algorithm>
#include "RomBrowserViewModel.h"
RomBrowserViewModel::RomBrowserViewModel(IRomBrowserController* romBrowserController, const char* initialSelectedFileName)
: _romBrowserController(romBrowserController)
{
SdFolderFilterSortParams filterSortParams;
switch (romBrowserController->GetRomBrowserDisplaySettings().sortMode)
{
case RomBrowserSortMode::NameAscending:
default:
{
filterSortParams = SdFolderFilterSortParams(
SdFolderSortType::Name, SdFolderSortDirection::Ascending);
break;
}
case RomBrowserSortMode::NameDescending:
{
filterSortParams = SdFolderFilterSortParams(
SdFolderSortType::Name, SdFolderSortDirection::Descending);
break;
}
case RomBrowserSortMode::LastModified:
{
filterSortParams = SdFolderFilterSortParams(
SdFolderSortType::LastModified, SdFolderSortDirection::Descending);
break;
}
}
u64 startTick = gTickCounter.GetValue();
const auto& sdFolder = romBrowserController->GetSdFolder();
int filteredCount;
auto sortedFilteredFiles = sdFolder.FilterAndSort(filterSortParams, filteredCount);
u64 endTick = gTickCounter.GetValue();
LOG_DEBUG("Filter + sort took: %d us\n", (u32)TickCounter::TicksToMicroSeconds(endTick - startTick));
_fileInfoManager = std::make_unique<FileInfoManager>(std::move(sortedFilteredFiles), filteredCount, _romBrowserController->GetCoverRepository());
_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()->GetClassification() == FileTypeClassification::Folder)
return;
_romBrowserController->ShowGameInfo();
}

View File

@@ -0,0 +1,36 @@
#pragma once
#include <memory>
#include "core/task/TaskQueue.h"
#include "../SdFolder.h"
#include "../FileInfoManager.h"
#include "../IRomBrowserController.h"
class ICoverRepository;
/// @brief View model for the rom browser
class RomBrowserViewModel
{
public:
RomBrowserViewModel(IRomBrowserController* romBrowserController, const char* initialSelectedFileName = nullptr);
FileInfoManager& GetFileInfoManager() const { return *_fileInfoManager; }
TaskQueueBase* GetIoTaskQueue() const { return _romBrowserController->GetIoTaskQueue(); }
TaskQueueBase* GetBgTaskQueue() const { return _romBrowserController->GetBgTaskQueue(); }
const ICoverRepository& GetCoverRepository() const { return _romBrowserController->GetCoverRepository(); }
constexpr int GetSelectedItem() const { return _selectedItem; }
void SetSelectedItem(int selectedItem) { _selectedItem = selectedItem; }
constexpr u32 GetIconFrameCounter() const { return _iconFrameCounter; }
void SetIconFrameCounter(u32 iconFrameCounter) { _iconFrameCounter = iconFrameCounter; }
void ItemActivated();
void NavigateUp();
void ShowGameInfo();
private:
IRomBrowserController* _romBrowserController;
std::unique_ptr<FileInfoManager> _fileInfoManager;
int _selectedItem = -1;
u32 _iconFrameCounter = 0;
};