From 1cced24ea6579faff288d02c93d8e2eb39d31654 Mon Sep 17 00:00:00 2001 From: Maschell Date: Fri, 21 Feb 2020 21:37:32 +0100 Subject: [PATCH] Implement basic title loading --- src/gui/GuiIconGrid.cpp | 13 +++++++++---- src/menu/MainWindow.cpp | 25 +++++++++++++++++++++++-- 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/src/gui/GuiIconGrid.cpp b/src/gui/GuiIconGrid.cpp index 6cadec9..a25662e 100644 --- a/src/gui/GuiIconGrid.cpp +++ b/src/gui/GuiIconGrid.cpp @@ -211,6 +211,7 @@ void GuiIconGrid::OnGameTitleListUpdated(GameList * gameList) { gameList->unlock(); setSelectedGame(0); + gameSelectionChanged(this, selectedGame); curPage = 0; currentLeftPosition = 0; bUpdatePositions = true; @@ -230,7 +231,7 @@ void GuiIconGrid::OnRightArrowClick(GuiButton *button, const GuiController *cont void GuiIconGrid::OnLeftClick(GuiButton *button, const GuiController *controller, GuiTrigger *trigger) { int32_t offset = offsetForTitleId(getSelectedGame()); - if(offset < 0){ + if(offset < 0) { return; } if((offset % MAX_COLS) == 0) { @@ -244,13 +245,14 @@ void GuiIconGrid::OnLeftClick(GuiButton *button, const GuiController *controller uint64_t newTitleId = position.at(offset); if(newTitleId > 0) { setSelectedGame(newTitleId); + gameSelectionChanged(this, selectedGame); } } void GuiIconGrid::OnRightClick(GuiButton *button, const GuiController *controller, GuiTrigger *trigger) { int32_t offset = offsetForTitleId(getSelectedGame()); - if(offset < 0){ + if(offset < 0) { return; } if((offset % MAX_COLS) == MAX_COLS - 1) { @@ -264,12 +266,13 @@ void GuiIconGrid::OnRightClick(GuiButton *button, const GuiController *controlle uint64_t newTitleId = position.at(offset); if(newTitleId > 0) { setSelectedGame(newTitleId); + gameSelectionChanged(this, selectedGame); } } void GuiIconGrid::OnDownClick(GuiButton *button, const GuiController *controller, GuiTrigger *trigger) { int32_t offset = offsetForTitleId(getSelectedGame()); - if(offset < 0){ + if(offset < 0) { return; } if(offset % (MAX_COLS * MAX_ROWS) < (MAX_COLS * MAX_ROWS) - MAX_COLS) { @@ -284,11 +287,12 @@ void GuiIconGrid::OnDownClick(GuiButton *button, const GuiController *controller uint64_t newTitleId = position.at(offset); if(newTitleId > 0) { setSelectedGame(newTitleId); + gameSelectionChanged(this, selectedGame); } } void GuiIconGrid::OnUpClick(GuiButton *button, const GuiController *controller, GuiTrigger *trigger) { int32_t offset = offsetForTitleId(getSelectedGame()); - if(offset < 0){ + if(offset < 0) { return; } if(offset % (MAX_COLS * MAX_ROWS) >= MAX_COLS) { @@ -303,6 +307,7 @@ void GuiIconGrid::OnUpClick(GuiButton *button, const GuiController *controller, uint64_t newTitleId = position.at(offset); if(newTitleId > 0) { setSelectedGame(newTitleId); + gameSelectionChanged(this, selectedGame); } } diff --git a/src/menu/MainWindow.cpp b/src/menu/MainWindow.cpp index af6986a..dcc951f 100644 --- a/src/menu/MainWindow.cpp +++ b/src/menu/MainWindow.cpp @@ -24,6 +24,7 @@ #include "gui/GuiIconGrid.h" #include #include +#include #include "utils/AsyncExecutor.h" MainWindow::MainWindow(int32_t w, int32_t h) @@ -120,7 +121,7 @@ void MainWindow::process() { mainSwitchButtonFrame->clearState(GuiElement::STATE_DISABLED); gameList.filterList(result.c_str()); - }else{ + } else { } } } @@ -371,6 +372,26 @@ void MainWindow::OnGameSelectionChange(GuiTitleBrowser *element, uint64_t select } } -void MainWindow::OnGameLaunch(GuiTitleBrowser *element, uint64_t selectedIdx) { +#define HBL_TITLE_ID (0x0005000013374842) +#define MII_MAKER_JPN_TITLE_ID (0x000500101004A000) +#define MII_MAKER_USA_TITLE_ID (0x000500101004A100) +#define MII_MAKER_EUR_TITLE_ID (0x000500101004A200) +extern "C" void _SYSLaunchTitleByPathFromLauncher(const char * path, int len, int); + +void MainWindow::OnGameLaunch(GuiTitleBrowser *element, uint64_t titleID) { + gameInfo * info = gameList.getGameInfo(titleID); + if(info != NULL) { + uint64_t titleID = OSGetTitleID(); + + if (titleID == HBL_TITLE_ID || + titleID == MII_MAKER_JPN_TITLE_ID || + titleID == MII_MAKER_USA_TITLE_ID || + titleID == MII_MAKER_EUR_TITLE_ID) { + SYSLaunchTitle(info->titleId); + } else { + const char* path = info->gamePath.c_str(); + _SYSLaunchTitleByPathFromLauncher(path, strlen(path),0); + } + } }