Files
pico-launcher/arm9/source/romBrowser/views/RomBrowserBottomScreenView.cpp

159 lines
4.8 KiB
C++

#include "common.h"
#include "../viewModels/RomBrowserViewModel.h"
#include "../views/IconGridItemView.h"
#include "gui/GraphicsContext.h"
#include "backIcon.h"
#include "settingsIcon.h"
#include "heartIcon.h"
#include "recentIcon.h"
#include "listIcon.h"
#include "gui/IVramManager.h"
#include "gui/input/InputProvider.h"
#include "RomBrowserBottomScreenView.h"
RomBrowserBottomScreenView::RomBrowserBottomScreenView(
RomBrowserBottomScreenViewModel* viewModel,
const RomBrowserDisplayMode* displayMode,
const IThemeFileIconFactory* themeFileIconFactory,
const IRomBrowserViewFactory* romBrowserViewFactory,
VBlankTextureLoader* vblankTextureLoader)
: _viewModel(viewModel)
, _romBrowserViewFactory(romBrowserViewFactory)
, _romBrowserDisplayMode(displayMode)
, _themeFileIconFactory(themeFileIconFactory)
, _romBrowserAppBarView(RomBrowserAppBarView::CreateShared(_viewModel->GetRomBrowserAppBarViewModel(),
*displayMode, romBrowserViewFactory))
, _vblankTextureLoader(vblankTextureLoader)
{
_romBrowserAppBarView->SetParent(this);
}
void RomBrowserBottomScreenView::InitVram(const VramContext& vramContext)
{
_romBrowserAppBarView->InitVram(vramContext);
}
void RomBrowserBottomScreenView::Update()
{
_romBrowserAppBarView->Update();
if (_romBrowserView && _viewModel->IsRomBrowserVisible())
{
_romBrowserView->Update();
}
}
void RomBrowserBottomScreenView::Draw(GraphicsContext& graphicsContext)
{
_romBrowserAppBarView->Draw(graphicsContext);
if (_romBrowserView && _viewModel->IsRomBrowserVisible())
{
_romBrowserView->Draw(graphicsContext);
}
}
void RomBrowserBottomScreenView::VBlank()
{
_romBrowserAppBarView->VBlank();
if (_romBrowserView && _viewModel->IsRomBrowserVisible())
{
_romBrowserView->VBlank();
}
}
SharedPtr<View> RomBrowserBottomScreenView::MoveFocus(const SharedPtr<View>& currentFocus, FocusMoveDirection direction, View* source)
{
if (!currentFocus)
{
return nullptr;
}
if (source == _romBrowserAppBarView.GetPointer())
{
if (_romBrowserDisplayMode->IsVertical())
{
if (direction == FocusMoveDirection::Right)
{
return _romBrowserView->MoveFocus(currentFocus, direction, this);
}
}
else
{
if (direction == FocusMoveDirection::Down)
{
return _romBrowserView->MoveFocus(currentFocus, direction, this);
}
}
return nullptr;
}
else if (source == _romBrowserView.GetPointer())
{
if (_romBrowserDisplayMode->IsVertical())
{
if (direction == FocusMoveDirection::Left)
{
return _romBrowserAppBarView->MoveFocus(currentFocus, direction, this);
}
}
else
{
if (direction == FocusMoveDirection::Up)
{
return _romBrowserAppBarView->MoveFocus(currentFocus, direction, this);
}
}
return nullptr;
}
return nullptr;
}
bool RomBrowserBottomScreenView::HandleInput(const InputProvider& inputProvider, FocusManager& focusManager)
{
if (inputProvider.Triggered(InputKey::B))
{
_viewModel->NavigateUp();
return true;
}
return View::HandleInput(inputProvider, focusManager);
}
void RomBrowserBottomScreenView::HandlePenDown(const Point& touchPoint, FocusManager& focusManager)
{
_romBrowserAppBarView->HandlePenDown(touchPoint, focusManager);
if (_romBrowserView && _viewModel->IsRomBrowserVisible())
{
_romBrowserView->HandlePenDown(touchPoint, focusManager);
}
}
void RomBrowserBottomScreenView::HandlePenMove(const Point& touchPoint, FocusManager& focusManager)
{
_romBrowserAppBarView->HandlePenMove(touchPoint, focusManager);
if (_romBrowserView && _viewModel->IsRomBrowserVisible())
{
_romBrowserView->HandlePenMove(touchPoint, focusManager);
}
}
void RomBrowserBottomScreenView::HandlePenUp(const Point& lastTouchPoint, FocusManager& focusManager)
{
_romBrowserAppBarView->HandlePenUp(lastTouchPoint, focusManager);
if (_romBrowserView && _viewModel->IsRomBrowserVisible())
{
_romBrowserView->HandlePenUp(lastTouchPoint, focusManager);
}
}
void RomBrowserBottomScreenView::RomBrowserViewModelInvalidated(const VramContext& vramContext)
{
if (_viewModel->GetRomBrowserViewModel().IsValid())
{
_romBrowserView = RomBrowserView::CreateShared(
_viewModel->GetRomBrowserViewModel(), *_romBrowserDisplayMode,
_themeFileIconFactory, _romBrowserViewFactory, _vblankTextureLoader);
_romBrowserView->SetParent(this);
_romBrowserView->InitVram(vramContext);
}
else
{
_romBrowserView.Reset();
}
}