mirror of
https://github.com/wiidev/usbloadergx.git
synced 2024-12-23 02:11:55 +01:00
df76e45150
- This allows you to play your Wii games from an SD card - It currently only supports 1 partition - I've tested it with a 256GB Amazon Basics microSDXC card
1710 lines
59 KiB
C++
1710 lines
59 KiB
C++
#include <unistd.h>
|
|
#include "GameBrowseMenu.hpp"
|
|
#include "banner/BannerAsync.h"
|
|
#include "Controls/DeviceHandler.hpp"
|
|
#include "GUI/gui_gamelist.h"
|
|
#include "GUI/gui_gamegrid.h"
|
|
#include "GUI/gui_gamecarousel.h"
|
|
#include "GUI/GuiBannerGrid.h"
|
|
#include "GUI/LoadCoverImage.h"
|
|
#include "prompts/PromptWindows.h"
|
|
#include "prompts/gameinfo.h"
|
|
#include "prompts/DiscBrowser.h"
|
|
#include "prompts/GameWindow.hpp"
|
|
#include "prompts/BannerWindow.hpp"
|
|
#include "prompts/CategorySwitchPrompt.hpp"
|
|
#include "prompts/CheckboxPrompt.hpp"
|
|
#include "themes/CTheme.h"
|
|
#include "language/gettext.h"
|
|
#include "usbloader/wbfs.h"
|
|
#include "usbloader/wdvd.h"
|
|
#include "usbloader/GameList.h"
|
|
#include "network/networkops.h"
|
|
#include "network/update.h"
|
|
#include "network/ImageDownloader.h"
|
|
#include "settings/CSettings.h"
|
|
#include "settings/CGameStatistics.h"
|
|
#include "settings/CGameSettings.h"
|
|
#include "settings/GameTitles.h"
|
|
#include "SystemMenu/SystemMenuResources.h"
|
|
#include "system/IosLoader.h"
|
|
#include "utils/StringTools.h"
|
|
#include "utils/rockout.h"
|
|
#include "utils/ShowError.h"
|
|
#include "utils/tools.h"
|
|
#include "utils/PasswordCheck.h"
|
|
#include "xml/GameTDB.hpp"
|
|
#include "gecko.h"
|
|
#include "menus.h"
|
|
#include "wpad.h"
|
|
#include "sys.h"
|
|
|
|
struct discHdr *dvdheader = NULL;
|
|
|
|
GameBrowseMenu::GameBrowseMenu()
|
|
: GuiWindow(screenwidth, screenheight)
|
|
{
|
|
returnMenu = MENU_NONE;
|
|
gameSelectedOld = -1;
|
|
lastrawtime = 0;
|
|
show_searchwindow = false;
|
|
gameBrowser = NULL;
|
|
searchBar = NULL;
|
|
gameCover = NULL;
|
|
gameCoverImg = NULL;
|
|
GameIDTxt = NULL;
|
|
GameRegionTxt = NULL;
|
|
listBackground = NULL;
|
|
carouselBackground = NULL;
|
|
gridBackground = NULL;
|
|
WDVD_GetCoverStatus(&DiscDriveCoverOld);
|
|
gameList.FilterList();
|
|
HDDSizeCallback.SetCallback(this, &GameBrowseMenu::UpdateFreeSpace);
|
|
|
|
btnInstall = Resources::GetImageData("button_install.png");
|
|
btnInstallOver = Resources::GetImageData("button_install_over.png");
|
|
btnSettings = Resources::GetImageData("settings_button.png");
|
|
btnSettingsOver = Resources::GetImageData("settings_button_over.png");
|
|
btnpwroff = Resources::GetImageData("wiimote_poweroff.png");
|
|
btnpwroffOver = Resources::GetImageData("wiimote_poweroff_over.png");
|
|
btnhome = Resources::GetImageData("menu_button.png");
|
|
btnhomeOver = Resources::GetImageData("menu_button_over.png");
|
|
btnsdcardOver = Resources::GetImageData("sdcard_over.png");
|
|
btnsdcard = Resources::GetImageData("sdcard.png");
|
|
|
|
imgfavIcon = Resources::GetImageData("favIcon.png");
|
|
imgfavIcon_gray = Resources::GetImageData("favIcon_gray.png");
|
|
imgsearchIcon = Resources::GetImageData("searchIcon.png");
|
|
imgsearchIcon_gray = Resources::GetImageData("searchIcon_gray.png");
|
|
imgabcIcon = Resources::GetImageData("abcIcon.png");
|
|
imgrankIcon = Resources::GetImageData("rankIcon.png");
|
|
imgplayCountIcon = Resources::GetImageData("playCountIcon.png");
|
|
imgplayersSortIcon = Resources::GetImageData("playersSort.png");
|
|
imgarrangeGrid = Resources::GetImageData("arrangeGrid.png");
|
|
imgarrangeGrid_gray = Resources::GetImageData("arrangeGrid_gray.png");
|
|
imgarrangeList = Resources::GetImageData("arrangeList.png");
|
|
imgarrangeList_gray = Resources::GetImageData("arrangeList_gray.png");
|
|
imgarrangeCarousel = Resources::GetImageData("arrangeCarousel.png");
|
|
imgarrangeCarousel_gray = Resources::GetImageData("arrangeCarousel_gray.png");
|
|
imgBannerGrid = Resources::GetImageData("arrangeBannerGrid.png");
|
|
imgBannerGrid_gray = Resources::GetImageData("arrangeBannerGrid_gray.png");
|
|
imgdvd = Resources::GetImageData("dvd.png");
|
|
imgdvd_gray = Resources::GetImageData("dvd_gray.png");
|
|
imgLock = Resources::GetImageData("lock.png");
|
|
imgLock_gray = Resources::GetImageData("lock_gray.png");
|
|
imgUnlock = Resources::GetImageData("unlock.png");
|
|
imgUnlock_gray = Resources::GetImageData("unlock_gray.png");
|
|
imgCategory = Resources::GetImageData("category.png");
|
|
imgCategory_gray = Resources::GetImageData("category_gray.png");
|
|
imgLoaderMode = Resources::GetImageData("loader_mode.png");
|
|
|
|
homebrewImgData = Resources::GetImageData("browser.png");
|
|
homebrewImgDataOver = Resources::GetImageData("browser_over.png");
|
|
|
|
trigA = new GuiTrigger;
|
|
trigA->SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A);
|
|
trigHome = new GuiTrigger;
|
|
trigHome->SetButtonOnlyTrigger(-1, WPAD_BUTTON_HOME | WPAD_CLASSIC_BUTTON_HOME, PAD_BUTTON_START);
|
|
trig2 = new GuiTrigger;
|
|
trig2->SetButtonOnlyTrigger(-1, WPAD_BUTTON_2 | WPAD_CLASSIC_BUTTON_X, PAD_BUTTON_Y);
|
|
trig1 = new GuiTrigger;
|
|
trig1->SetButtonOnlyTrigger(-1, WPAD_BUTTON_1 | WPAD_CLASSIC_BUTTON_Y, PAD_BUTTON_X);
|
|
|
|
usedSpaceTxt = new GuiText(" ", 18, thColor("r=55 g=190 b=237 a=255 - hdd info color"));
|
|
usedSpaceTxt->SetAlignment(thAlign("center - hdd info align hor"), thAlign("top - hdd info align ver"));
|
|
usedSpaceTxt->SetPosition(thInt("0 - hdd info pos x"), thInt("400 - hdd info pos y"));
|
|
usedSpaceTxt->SetVisible(false);
|
|
SetFreeSpace(0.0f, 0.0f);
|
|
|
|
gamecntTxt = new GuiText((char *) NULL, 18, thColor("r=55 g=190 b=237 a=255 - game count color"));
|
|
gamecntBtn = new GuiButton(100, 18);
|
|
gamecntBtn->SetAlignment(thAlign("center - game count align hor"), thAlign("top - game count align ver"));
|
|
gamecntBtn->SetPosition(thInt("0 - game count pos x"), thInt("420 - game count pos y"));
|
|
gamecntBtn->SetLabel(gamecntTxt);
|
|
gamecntBtn->SetEffectGrow();
|
|
gamecntBtn->SetTrigger(trigA);
|
|
|
|
installBtnTT = new GuiTooltip(tr( "Install a game" ));
|
|
if (Settings.wsprompt) installBtnTT->SetWidescreen(Settings.widescreen);
|
|
installBtnTT->SetAlpha(thInt("255 - tooltip alpha"));
|
|
installBtnImg = new GuiImage(btnInstall);
|
|
installBtnImgOver = new GuiImage(btnInstallOver);
|
|
installBtnImg->SetWidescreen(Settings.widescreen);
|
|
installBtnImgOver->SetWidescreen(Settings.widescreen);
|
|
|
|
installBtn = new GuiButton(installBtnImg, installBtnImgOver, ALIGN_LEFT, ALIGN_TOP,
|
|
thInt("16 - install btn pos x"), thInt("355 - install btn pos y"),
|
|
trigA, btnSoundOver, btnSoundClick2, 1, installBtnTT, 24, -30, 0, 5);
|
|
|
|
settingsBtnTT = new GuiTooltip(tr( "Settings" ));
|
|
if (Settings.wsprompt) settingsBtnTT->SetWidescreen(Settings.widescreen);
|
|
settingsBtnTT->SetAlpha(thInt("255 - tooltip alpha"));
|
|
settingsBtnImg = new GuiImage(btnSettings);
|
|
settingsBtnImg->SetWidescreen(Settings.widescreen);
|
|
settingsBtnImgOver = new GuiImage(btnSettingsOver);
|
|
settingsBtnImgOver->SetWidescreen(Settings.widescreen);
|
|
settingsBtn = new GuiButton(settingsBtnImg, settingsBtnImgOver, 0, 3,
|
|
thInt("64 - settings btn pos x"), thInt("371 - settings btn pos y"),
|
|
trigA, btnSoundOver, btnSoundClick2, 1, settingsBtnTT, 65, -30, 0, 5);
|
|
|
|
homeBtnTT = new GuiTooltip(tr( "Back to HBC or Wii Menu" ));
|
|
if (Settings.wsprompt) homeBtnTT->SetWidescreen(Settings.widescreen);
|
|
homeBtnTT->SetAlpha(thInt("255 - tooltip alpha"));
|
|
homeBtnImg = new GuiImage(btnhome);
|
|
homeBtnImg->SetWidescreen(Settings.widescreen);
|
|
homeBtnImgOver = new GuiImage(btnhomeOver);
|
|
homeBtnImgOver->SetWidescreen(Settings.widescreen);
|
|
homeBtn = new GuiButton(homeBtnImg, homeBtnImgOver, 0, 3,
|
|
thInt("489 - home menu btn pos x"), thInt("371 - home menu btn pos y"),
|
|
trigA, btnSoundOver, btnSoundClick2, 1, homeBtnTT, 15, -30, 1, 5);
|
|
homeBtn->RemoveSoundClick();
|
|
homeBtn->SetTrigger(trigHome);
|
|
|
|
poweroffBtnTT = new GuiTooltip(tr( "Power off the Wii" ));
|
|
if (Settings.wsprompt) poweroffBtnTT->SetWidescreen(Settings.widescreen);
|
|
poweroffBtnTT->SetAlpha(thInt("255 - tooltip alpha"));
|
|
poweroffBtnImg = new GuiImage(btnpwroff);
|
|
poweroffBtnImgOver = new GuiImage(btnpwroffOver);
|
|
poweroffBtnImg->SetWidescreen(Settings.widescreen);
|
|
poweroffBtnImgOver->SetWidescreen(Settings.widescreen);
|
|
poweroffBtn = new GuiButton(poweroffBtnImg, poweroffBtnImgOver, 0, 3,
|
|
thInt("576 - power off btn pos x"), thInt("355 - power off btn pos y"),
|
|
trigA, btnSoundOver, btnSoundClick2, 1, poweroffBtnTT, -10, -30, 1, 5);
|
|
|
|
sdcardBtnTT = new GuiTooltip(tr( "Reload SD" ));
|
|
if (Settings.wsprompt) sdcardBtnTT->SetWidescreen(Settings.widescreen);
|
|
sdcardBtnTT->SetAlpha(thInt("255 - tooltip alpha"));
|
|
sdcardImg = new GuiImage(btnsdcard);
|
|
sdcardImgOver = new GuiImage(btnsdcardOver);
|
|
sdcardImg->SetWidescreen(Settings.widescreen);
|
|
sdcardImgOver->SetWidescreen(Settings.widescreen);
|
|
sdcardBtn = new GuiButton(sdcardImg, sdcardImgOver, 0, 3,
|
|
thInt("160 - sd card btn pos x"), thInt("395 - sd card btn pos y"),
|
|
trigA, btnSoundOver, btnSoundClick2, 1, sdcardBtnTT, 15, -30, 0, 5);
|
|
|
|
gameInfo = new GuiButton(0, 0);
|
|
gameInfo->SetTrigger(trig2);
|
|
gameInfo->SetSoundClick(btnSoundClick2);
|
|
|
|
favoriteBtnTT = new GuiTooltip(tr( "Display favorites only" ));
|
|
if (Settings.wsprompt) favoriteBtnTT->SetWidescreen(Settings.widescreen);
|
|
favoriteBtnTT->SetAlpha(thInt("255 - tooltip alpha"));
|
|
favoriteBtnImg = new GuiImage(imgfavIcon);
|
|
favoriteBtnImg->SetWidescreen(Settings.widescreen);
|
|
favoriteBtnImg_g = new GuiImage(imgfavIcon_gray);
|
|
favoriteBtnImg_g->SetWidescreen(Settings.widescreen);
|
|
favoriteBtn = new GuiButton(favoriteBtnImg_g, favoriteBtnImg_g, ALIGN_LEFT, ALIGN_TOP, 0, 0,
|
|
trigA, btnSoundOver, btnSoundClick2, 1, favoriteBtnTT, -15, 52, 0, 3);
|
|
favoriteBtn->SetSelectable(false);
|
|
|
|
searchBtnTT = new GuiTooltip(tr( "Set Search-Filter" ));
|
|
if (Settings.wsprompt) searchBtnTT->SetWidescreen(Settings.widescreen);
|
|
searchBtnTT->SetAlpha(thInt("255 - tooltip alpha"));
|
|
searchBtnImg = new GuiImage(imgsearchIcon);
|
|
searchBtnImg->SetWidescreen(Settings.widescreen);
|
|
searchBtnImg_g = new GuiImage(imgsearchIcon_gray);
|
|
searchBtnImg_g->SetWidescreen(Settings.widescreen);
|
|
searchBtn = new GuiButton(searchBtnImg_g, searchBtnImg_g, ALIGN_LEFT, ALIGN_TOP, 0, 0,
|
|
trigA, btnSoundOver, btnSoundClick2, 1, searchBtnTT, -15, 52, 0, 3);
|
|
searchBtn->SetSelectable(false);
|
|
|
|
sortBtnTT = new GuiTooltip(" ");
|
|
if (Settings.wsprompt) sortBtnTT->SetWidescreen(Settings.widescreen);
|
|
sortBtnTT->SetAlpha(thInt("255 - tooltip alpha"));
|
|
|
|
sortBtnImg = new GuiImage(imgabcIcon);
|
|
sortBtnImg->SetWidescreen(Settings.widescreen);
|
|
sortBtn = new GuiButton(sortBtnImg, sortBtnImg, ALIGN_LEFT, ALIGN_TOP, 0, 0, trigA, btnSoundOver, btnSoundClick2, 1, sortBtnTT, -15, 52, 0, 3);
|
|
sortBtn->SetSelectable(false);
|
|
|
|
loaderModeBtnTT = new GuiTooltip(tr("Select loader mode"));
|
|
if (Settings.wsprompt) loaderModeBtnTT->SetWidescreen(Settings.widescreen);
|
|
loaderModeBtnTT->SetAlpha(thInt("255 - tooltip alpha"));
|
|
|
|
loaderModeBtnImg = new GuiImage(imgLoaderMode);
|
|
loaderModeBtnImg->SetWidescreen(Settings.widescreen);
|
|
loaderModeBtn = new GuiButton(loaderModeBtnImg, loaderModeBtnImg, ALIGN_LEFT, ALIGN_TOP, 0, 0, trigA, btnSoundOver, btnSoundClick2, 1, loaderModeBtnTT, -15, 52, 0, 3);
|
|
loaderModeBtn->SetSelectable(false);
|
|
|
|
categBtnTT = new GuiTooltip(tr("Select game categories"));
|
|
if (Settings.wsprompt) categBtnTT->SetWidescreen(Settings.widescreen);
|
|
categBtnTT->SetAlpha(thInt("255 - tooltip alpha"));
|
|
|
|
categBtnImg = new GuiImage(imgCategory);
|
|
categBtnImg->SetWidescreen(Settings.widescreen);
|
|
categBtnImg_g = new GuiImage(imgCategory_gray);
|
|
categBtnImg_g->SetWidescreen(Settings.widescreen);
|
|
categBtn = new GuiButton(categBtnImg, categBtnImg, ALIGN_LEFT, ALIGN_TOP, 0, 0, trigA, btnSoundOver, btnSoundClick2, 1, categBtnTT, -15, 52, 0, 3);
|
|
categBtn->SetSelectable(false);
|
|
|
|
listBtnTT = new GuiTooltip(tr( "Display as a list" ));
|
|
if (Settings.wsprompt) listBtnTT->SetWidescreen(Settings.widescreen);
|
|
listBtnTT->SetAlpha(thInt("255 - tooltip alpha"));
|
|
listBtnImg = new GuiImage(imgarrangeList);
|
|
listBtnImg->SetWidescreen(Settings.widescreen);
|
|
listBtnImg_g = new GuiImage(imgarrangeList_gray);
|
|
listBtnImg_g->SetWidescreen(Settings.widescreen);
|
|
listBtn = new GuiButton(listBtnImg_g, listBtnImg_g, ALIGN_LEFT, ALIGN_TOP, 0, 0, trigA, btnSoundOver, btnSoundClick2, 1, listBtnTT, 15, 52, 1, 3);
|
|
listBtn->SetSelectable(false);
|
|
|
|
gridBtnTT = new GuiTooltip(tr( "Display as a grid" ));
|
|
if (Settings.wsprompt) gridBtnTT->SetWidescreen(Settings.widescreen);
|
|
gridBtnTT->SetAlpha(thInt("255 - tooltip alpha"));
|
|
gridBtnImg = new GuiImage(imgarrangeGrid);
|
|
gridBtnImg->SetWidescreen(Settings.widescreen);
|
|
gridBtnImg_g = new GuiImage(imgarrangeGrid_gray);
|
|
gridBtnImg_g->SetWidescreen(Settings.widescreen);
|
|
gridBtn = new GuiButton(gridBtnImg_g, gridBtnImg_g, ALIGN_LEFT, ALIGN_TOP, 0, 0, trigA, btnSoundOver, btnSoundClick2, 1, gridBtnTT, 15, 52, 1, 3);
|
|
gridBtn->SetSelectable(false);
|
|
|
|
carouselBtnTT = new GuiTooltip(tr( "Display as a carousel" ));
|
|
if (Settings.wsprompt) carouselBtnTT->SetWidescreen(Settings.widescreen);
|
|
carouselBtnTT->SetAlpha(thInt("255 - tooltip alpha"));
|
|
carouselBtnImg = new GuiImage(imgarrangeCarousel);
|
|
carouselBtnImg->SetWidescreen(Settings.widescreen);
|
|
carouselBtnImg_g = new GuiImage(imgarrangeCarousel_gray);
|
|
carouselBtnImg_g->SetWidescreen(Settings.widescreen);
|
|
carouselBtn = new GuiButton(carouselBtnImg_g, carouselBtnImg_g, ALIGN_LEFT, ALIGN_TOP, 0, 0, trigA, btnSoundOver, btnSoundClick2, 1, carouselBtnTT, 15, 52, 1, 3);
|
|
carouselBtn->SetSelectable(false);
|
|
|
|
bannerGridBtnTT = new GuiTooltip(tr( "Display as a channel grid" ));
|
|
if (Settings.wsprompt) bannerGridBtnTT->SetWidescreen(Settings.widescreen);
|
|
bannerGridBtnTT->SetAlpha(thInt("255 - tooltip alpha"));
|
|
bannerGridBtnImg = new GuiImage(imgBannerGrid);
|
|
bannerGridBtnImg->SetWidescreen(Settings.widescreen);
|
|
bannerGridBtnImg_g = new GuiImage(imgBannerGrid_gray);
|
|
bannerGridBtnImg_g->SetWidescreen(Settings.widescreen);
|
|
bannerGridBtn = new GuiButton(bannerGridBtnImg_g, bannerGridBtnImg_g, ALIGN_LEFT, ALIGN_TOP, 0, 0, trigA, btnSoundOver, btnSoundClick2, 1, bannerGridBtnTT, 15, 52, 1, 3);
|
|
bannerGridBtn->SetSelectable(false);
|
|
|
|
lockBtnTT = new GuiTooltip(NULL);
|
|
if (Settings.wsprompt) lockBtnTT->SetWidescreen(Settings.widescreen);
|
|
lockBtnTT->SetAlpha(thInt("255 - tooltip alpha"));
|
|
lockBtnImg = new GuiImage(imgLock);
|
|
lockBtnImg->SetWidescreen(Settings.widescreen);
|
|
lockBtnImg_g = new GuiImage(imgLock_gray);
|
|
lockBtnImg_g->SetWidescreen(Settings.widescreen);
|
|
lockBtn = new GuiButton(lockBtnImg_g, lockBtnImg_g, ALIGN_LEFT, ALIGN_TOP, 0, 0, trigA, btnSoundOver, btnSoundClick2, 1, lockBtnTT, 15, 52, 1, 3);
|
|
lockBtn->SetSelectable(false);
|
|
|
|
unlockBtnImg = new GuiImage(imgUnlock);
|
|
unlockBtnImg->SetWidescreen(Settings.widescreen);
|
|
unlockBtnImg_g = new GuiImage(imgUnlock_gray);
|
|
unlockBtnImg_g->SetWidescreen(Settings.widescreen);
|
|
|
|
dvdBtnTT = new GuiTooltip(tr( "Mount DVD drive" ));
|
|
if (Settings.wsprompt) dvdBtnTT->SetWidescreen(Settings.widescreen);
|
|
dvdBtnTT->SetAlpha(thInt("255 - tooltip alpha"));
|
|
dvdBtnImg = new GuiImage(imgdvd);
|
|
dvdBtnImg->SetWidescreen(Settings.widescreen);
|
|
dvdBtnImg_g = new GuiImage(imgdvd_gray);
|
|
dvdBtnImg_g->SetWidescreen(Settings.widescreen);
|
|
dvdBtn = new GuiButton(dvdBtnImg_g, 0, ALIGN_LEFT, ALIGN_TOP, 0, 0,
|
|
trigA, btnSoundOver, btnSoundClick2, 1, dvdBtnTT, 15, 52, 1, 3);
|
|
dvdBtn->SetSelectable(false);
|
|
|
|
homebrewBtnTT = new GuiTooltip(tr( "Homebrew Launcher" ));
|
|
if (Settings.wsprompt) homebrewBtnTT->SetWidescreen(Settings.widescreen);
|
|
homebrewBtnTT->SetAlpha(thInt("255 - tooltip alpha"));
|
|
homebrewImg = new GuiImage(homebrewImgData);
|
|
homebrewImgOver = new GuiImage(homebrewImgDataOver);
|
|
homebrewImg->SetWidescreen(Settings.widescreen);
|
|
homebrewImgOver->SetWidescreen(Settings.widescreen);
|
|
homebrewBtn = new GuiButton(homebrewImg, homebrewImgOver, ALIGN_LEFT, ALIGN_TOP, thInt("410 - HBC btn pos x"), thInt("405 - HBC btn pos y"),
|
|
trigA, btnSoundOver, btnSoundClick2, 1, homebrewBtnTT, 15, -30, 1, 5);
|
|
|
|
if (Settings.CoverAction == COVER_ACTION_DOWNLOAD)
|
|
listCoverBtnTT = new GuiTooltip(tr( "Click to download covers" ));
|
|
else
|
|
listCoverBtnTT = new GuiTooltip(tr( "Click to view information" ));
|
|
if (Settings.wsprompt) listCoverBtnTT->SetWidescreen(Settings.widescreen);
|
|
listCoverBtnTT->SetAlpha(thInt("255 - tooltip alpha"));
|
|
listCoverBtn = new GuiButton (0, 0);
|
|
listCoverBtn->SetAlignment(ALIGN_LEFT, ALIGN_TOP);
|
|
listCoverBtn->SetPosition(thInt("26 - cover/download btn pos x"), thInt("58 - cover/download btn pos y"));
|
|
listCoverBtn->SetSoundOver(btnSoundOver);
|
|
listCoverBtn->SetToolTip(listCoverBtnTT, 205, -30);
|
|
listCoverBtn->SetTrigger(trigA);
|
|
listCoverBtn->SetSelectable(false);
|
|
|
|
//Downloading Covers
|
|
DownloadBtn = new GuiButton (0, 0);
|
|
DownloadBtn->SetTrigger(1, trig1);
|
|
DownloadBtn->SetSelectable(false);
|
|
|
|
gameCoverImg = new GuiImage();
|
|
gameCoverImg->SetPosition(thInt("26 - cover/download btn pos x"), thInt("58 - cover/download btn pos y"));
|
|
gameCoverImg->SetWidescreen(Settings.widescreen);
|
|
|
|
GXColor clockColor = thColor("r=138 g=138 b=138 a=240 - clock color");
|
|
float clockFontScaleFactor = thFloat("1.0 - Overrided clock scale factor. 1.0=allow user setting") != 1.0f ? thFloat("1.0 - Overrided clock scale factor. 1.0=allow user setting") : Settings.ClockFontScaleFactor;
|
|
clockTimeBack = new GuiText("88:88", 40 / Settings.FontScaleFactor * clockFontScaleFactor, (GXColor) {clockColor.r, clockColor.g, clockColor.b, (u8)(clockColor.a / 6)});
|
|
clockTimeBack->SetAlignment(thAlign("left - clock align hor"), thAlign("top - clock align ver"));
|
|
clockTimeBack->SetPosition(thInt("275 - clock pos x"), thInt("335 - clock pos y"));
|
|
clockTimeBack->SetFont(Resources::GetFile("clock.ttf"), Resources::GetFileSize("clock.ttf"));
|
|
|
|
clockTime = new GuiText("", 40 / Settings.FontScaleFactor * clockFontScaleFactor, clockColor);
|
|
clockTime->SetAlignment(thAlign("left - clock align hor"), thAlign("top - clock align ver"));
|
|
clockTime->SetPosition(thInt("275 - clock pos x"), thInt("335 - clock pos y"));
|
|
clockTime->SetFont(Resources::GetFile("clock.ttf"), Resources::GetFileSize("clock.ttf"));
|
|
|
|
ToolBar.push_back(favoriteBtn);
|
|
ToolBar.push_back(searchBtn);
|
|
ToolBar.push_back(sortBtn);
|
|
ToolBar.push_back(categBtn);
|
|
ToolBar.push_back(listBtn);
|
|
ToolBar.push_back(gridBtn);
|
|
ToolBar.push_back(loaderModeBtn);
|
|
ToolBar.push_back(carouselBtn);
|
|
ToolBar.push_back(bannerGridBtn);
|
|
ToolBar.push_back(lockBtn);
|
|
ToolBar.push_back(dvdBtn);
|
|
SetUpdateCallback(UpdateCallback);
|
|
|
|
ReloadBrowser();
|
|
}
|
|
|
|
GameBrowseMenu::~GameBrowseMenu()
|
|
{
|
|
ResumeGui();
|
|
|
|
SetEffect(EFFECT_FADE, -20);
|
|
while(parentElement && this->GetEffect() > 0) usleep(100);
|
|
|
|
HaltGui();
|
|
if(parentElement)
|
|
((GuiWindow *) parentElement)->Remove(this);
|
|
|
|
RemoveAll();
|
|
|
|
//! Reset optional background image
|
|
bgImg->SetImage(background);
|
|
|
|
delete listBackground;
|
|
delete carouselBackground;
|
|
delete gridBackground;
|
|
delete btnInstall;
|
|
delete btnInstallOver;
|
|
delete btnSettings;
|
|
delete btnSettingsOver;
|
|
delete btnpwroff;
|
|
delete btnpwroffOver;
|
|
delete btnhome;
|
|
delete btnhomeOver;
|
|
delete btnsdcardOver;
|
|
delete btnsdcard;
|
|
delete imgfavIcon;
|
|
delete imgfavIcon_gray;
|
|
delete imgsearchIcon;
|
|
delete imgsearchIcon_gray;
|
|
delete imgabcIcon;
|
|
delete imgrankIcon;
|
|
delete imgplayCountIcon;
|
|
delete imgplayersSortIcon;
|
|
delete imgarrangeGrid;
|
|
delete imgarrangeGrid_gray;
|
|
delete imgarrangeCarousel;
|
|
delete imgarrangeCarousel_gray;
|
|
delete imgBannerGrid;
|
|
delete imgBannerGrid_gray;
|
|
delete imgarrangeList;
|
|
delete imgarrangeList_gray;
|
|
delete imgdvd;
|
|
delete imgdvd_gray;
|
|
delete imgLock;
|
|
delete imgLock_gray;
|
|
delete imgUnlock;
|
|
delete imgUnlock_gray;
|
|
delete imgCategory;
|
|
delete imgCategory_gray;
|
|
delete imgLoaderMode;
|
|
delete homebrewImgData;
|
|
delete homebrewImgDataOver;
|
|
delete gameCover;
|
|
|
|
delete trigA;
|
|
delete trigHome;
|
|
delete trig1;
|
|
delete trig2;
|
|
|
|
delete installBtnImg;
|
|
delete installBtnImgOver;
|
|
delete settingsBtnImg;
|
|
delete settingsBtnImgOver;
|
|
delete homeBtnImg;
|
|
delete homeBtnImgOver;
|
|
delete poweroffBtnImg;
|
|
delete poweroffBtnImgOver;
|
|
delete sdcardImg;
|
|
delete sdcardImgOver;
|
|
delete favoriteBtnImg;
|
|
delete favoriteBtnImg_g;
|
|
delete searchBtnImg;
|
|
delete searchBtnImg_g;
|
|
delete sortBtnImg;
|
|
delete listBtnImg;
|
|
delete listBtnImg_g;
|
|
delete gridBtnImg;
|
|
delete gridBtnImg_g;
|
|
delete carouselBtnImg;
|
|
delete carouselBtnImg_g;
|
|
delete bannerGridBtnImg;
|
|
delete bannerGridBtnImg_g;
|
|
delete lockBtnImg;
|
|
delete lockBtnImg_g;
|
|
delete unlockBtnImg;
|
|
delete unlockBtnImg_g;
|
|
delete dvdBtnImg;
|
|
delete dvdBtnImg_g;
|
|
delete categBtnImg;
|
|
delete categBtnImg_g;
|
|
delete loaderModeBtnImg;
|
|
delete homebrewImg;
|
|
delete homebrewImgOver;
|
|
delete gameCoverImg;
|
|
|
|
delete GameIDTxt;
|
|
delete GameRegionTxt;
|
|
delete usedSpaceTxt;
|
|
delete gamecntTxt;
|
|
delete clockTimeBack;
|
|
delete clockTime;
|
|
|
|
delete gamecntBtn;
|
|
delete installBtn;
|
|
delete settingsBtn;
|
|
delete homeBtn;
|
|
delete poweroffBtn;
|
|
delete sdcardBtn;
|
|
delete gameInfo;
|
|
delete favoriteBtn;
|
|
delete searchBtn;
|
|
delete sortBtn;
|
|
delete listBtn;
|
|
delete gridBtn;
|
|
delete carouselBtn;
|
|
delete bannerGridBtn;
|
|
delete lockBtn;
|
|
delete dvdBtn;
|
|
delete categBtn;
|
|
delete loaderModeBtn;
|
|
delete homebrewBtn;
|
|
delete listCoverBtn;
|
|
delete DownloadBtn;
|
|
|
|
delete installBtnTT;
|
|
delete settingsBtnTT;
|
|
delete homeBtnTT;
|
|
delete poweroffBtnTT;
|
|
delete sdcardBtnTT;
|
|
delete favoriteBtnTT;
|
|
delete searchBtnTT;
|
|
delete sortBtnTT;
|
|
delete listBtnTT;
|
|
delete gridBtnTT;
|
|
delete carouselBtnTT;
|
|
delete bannerGridBtnTT;
|
|
delete lockBtnTT;
|
|
delete dvdBtnTT;
|
|
delete categBtnTT;
|
|
delete loaderModeBtnTT;
|
|
delete homebrewBtnTT;
|
|
delete listCoverBtnTT;
|
|
|
|
delete gameBrowser;
|
|
mainWindow->Remove(searchBar);
|
|
delete searchBar;
|
|
|
|
ResumeGui();
|
|
}
|
|
|
|
int GameBrowseMenu::Execute()
|
|
{
|
|
int retMenu = MENU_NONE;
|
|
|
|
GameBrowseMenu * Menu = new GameBrowseMenu();
|
|
mainWindow->Append(Menu);
|
|
|
|
if(Settings.ShowFreeSpace)
|
|
{
|
|
ThreadedTask::Instance()->AddCallback(&Menu->HDDSizeCallback);
|
|
ThreadedTask::Instance()->Execute();
|
|
}
|
|
|
|
while(retMenu == MENU_NONE)
|
|
{
|
|
usleep(50000);
|
|
|
|
if (shutdown)
|
|
Sys_Shutdown();
|
|
if (reset)
|
|
Sys_Reboot();
|
|
|
|
retMenu = Menu->MainLoop();
|
|
}
|
|
|
|
delete Menu;
|
|
|
|
return retMenu;
|
|
}
|
|
|
|
void GameBrowseMenu::ReloadBrowser()
|
|
{
|
|
ResumeGui();
|
|
|
|
SetEffect(EFFECT_FADE, -40);
|
|
while(parentElement && this->GetEffect() > 0) usleep(100);
|
|
|
|
HaltGui();
|
|
RemoveAll();
|
|
mainWindow->Remove(searchBar);
|
|
|
|
gamecntTxt->SetText(fmt("%s: %i", tr( "Games" ), gameList.size()));
|
|
|
|
const char * sortTTText = NULL;
|
|
GuiImageData * sortImgData = NULL;
|
|
|
|
if(Settings.GameSort & SORT_RANKING)
|
|
{
|
|
sortTTText = tr( "Sort by rank" );
|
|
sortImgData = imgrankIcon;
|
|
}
|
|
else if(Settings.GameSort & SORT_PLAYCOUNT)
|
|
{
|
|
sortTTText = tr( "Sort order by most played");
|
|
sortImgData = imgplayCountIcon;
|
|
}
|
|
else if(Settings.GameSort & SORT_PLAYERS)
|
|
{
|
|
sortTTText = tr( "Sort by number of players");
|
|
sortImgData = imgplayersSortIcon;
|
|
}
|
|
else
|
|
{
|
|
sortTTText = tr("Sort alphabetically");
|
|
sortImgData = imgabcIcon;
|
|
}
|
|
|
|
sortBtnTT->SetText(sortTTText);
|
|
sortBtnImg->SetImage(sortImgData);
|
|
|
|
if(DiscDriveCoverOld & 0x02)
|
|
dvdBtn->SetImage(dvdBtnImg);
|
|
else
|
|
dvdBtn->SetImage(dvdBtnImg_g);
|
|
|
|
if (Settings.GameSort & SORT_FAVORITE)
|
|
{
|
|
favoriteBtn->SetImage(favoriteBtnImg);
|
|
favoriteBtn->SetImageOver(favoriteBtnImg);
|
|
}
|
|
else
|
|
{
|
|
favoriteBtn->SetImage(favoriteBtnImg_g);
|
|
favoriteBtn->SetImageOver(favoriteBtnImg_g);
|
|
}
|
|
|
|
if (*gameList.GetCurrentFilter())
|
|
{
|
|
if (!show_searchwindow) searchBtn->SetEffect(EFFECT_PULSE, 10, 105);
|
|
searchBtn->SetImage(searchBtnImg);
|
|
searchBtn->SetImageOver(searchBtnImg);
|
|
}
|
|
else if(!show_searchwindow)
|
|
{
|
|
searchBtn->SetImage(searchBtnImg_g);
|
|
searchBtn->SetImageOver(searchBtnImg_g);
|
|
}
|
|
|
|
if (Settings.godmode)
|
|
{
|
|
GuiImage * unlockImage = strcmp(Settings.unlockCode, "") == 0 ? unlockBtnImg_g : unlockBtnImg;
|
|
lockBtn->SetImage(unlockImage);
|
|
lockBtn->SetImageOver(unlockImage);
|
|
lockBtnTT->SetText(tr( "Lock USB Loader GX" ));
|
|
}
|
|
else
|
|
{
|
|
lockBtn->SetImage(lockBtnImg);
|
|
lockBtn->SetImageOver(lockBtnImg);
|
|
lockBtnTT->SetText(tr( "Unlock USB Loader GX" ));
|
|
}
|
|
|
|
categBtn->SetImage(categBtnImg);
|
|
for(u32 n = 0; n < Settings.EnabledCategories.size(); ++n)
|
|
{
|
|
if(Settings.EnabledCategories[n] == 0)
|
|
{
|
|
categBtn->SetImage(categBtnImg_g);
|
|
break;
|
|
}
|
|
}
|
|
|
|
//! Check if the loaded setting is still in range
|
|
if (Settings.RememberLastGame)
|
|
{
|
|
Settings.SelectedGame = LIMIT(Settings.SelectedGame, 0, gameList.size()-1);
|
|
Settings.GameListOffset = LIMIT(Settings.GameListOffset, 0, gameList.size()-1);
|
|
}
|
|
else
|
|
{
|
|
Settings.SelectedGame = 0;
|
|
Settings.GameListOffset = 0;
|
|
}
|
|
|
|
delete gameBrowser;
|
|
delete searchBar;
|
|
gameBrowser = NULL;
|
|
searchBar = NULL;
|
|
|
|
if (Settings.gameDisplay == LIST_MODE)
|
|
{
|
|
//! only one image, reload it since it won't be changeable later
|
|
if(gameList.size() == 1)
|
|
LoadCover(gameList[0]);
|
|
if(gameList.size() > 0)
|
|
Append(gameCoverImg);
|
|
listCoverBtn->SetSize(160, 224);
|
|
listBtn->SetImage(listBtnImg);
|
|
listBtn->SetImageOver(listBtnImg);
|
|
gridBtn->SetImage(gridBtnImg_g);
|
|
gridBtn->SetImageOver(gridBtnImg_g);
|
|
carouselBtn->SetImage(carouselBtnImg_g);
|
|
carouselBtn->SetImageOver(carouselBtnImg_g);
|
|
bannerGridBtn->SetImage(bannerGridBtnImg_g);
|
|
bannerGridBtn->SetImageOver(bannerGridBtnImg_g);
|
|
|
|
favoriteBtn->SetPosition(Settings.widescreen ? thInt("214 - list layout favorite btn pos x widescreen") : thInt("168 - list layout favorite btn pos x"),
|
|
thInt("13 - list layout favorite btn pos y"));
|
|
searchBtn->SetPosition(Settings.widescreen ? thInt("246 - list layout search btn pos x widescreen") : thInt("208 - list layout search btn pos x"),
|
|
thInt("13 - list layout search btn pos y"));
|
|
sortBtn->SetPosition(Settings.widescreen ? thInt("278 - list layout abc/sort btn pos x widescreen") : thInt("248 - list layout abc/sort btn pos x"),
|
|
thInt("13 - list layout abc/sort btn pos y"));
|
|
loaderModeBtn->SetPosition(Settings.widescreen ? thInt("310 - list layout loadermode btn pos x widescreen") : thInt("288 - list layout loadermode btn pos x"),
|
|
thInt("13 - list layout loadermode btn pos y"));
|
|
categBtn->SetPosition(Settings.widescreen ? thInt("342 - list layout category btn pos x widescreen") : thInt("328 - list layout category btn pos x"),
|
|
thInt("13 - list layout category btn pos y"));
|
|
listBtn->SetPosition(Settings.widescreen ? thInt("374 - list layout list btn pos x widescreen") : thInt("368 - list layout list btn pos x"),
|
|
thInt("13 - list layout list btn pos y"));
|
|
gridBtn->SetPosition(Settings.widescreen ? thInt("406 - list layout grid btn pos x widescreen") : thInt("408 - list layout grid btn pos x"),
|
|
thInt("13 - list layout grid btn pos y"));
|
|
carouselBtn->SetPosition(Settings.widescreen ? thInt("438 - list layout carousel btn pos x widescreen") : thInt("448 - list layout carousel btn pos x"),
|
|
thInt("13 - list layout carousel btn pos y"));
|
|
bannerGridBtn->SetPosition(Settings.widescreen ? thInt("470 - list layout bannergrid btn pos x widescreen") : thInt("488 - list layout bannergrid btn pos x"),
|
|
thInt("13 - list layout bannergrid btn pos y"));
|
|
lockBtn->SetPosition(Settings.widescreen ? thInt("502 - list layout lock btn pos x widescreen") : thInt("528 - list layout lock btn pos x"),
|
|
thInt("13 - list layout lock btn pos y"));
|
|
dvdBtn->SetPosition(Settings.widescreen ? thInt("534 - list layout dvd btn pos x widescreen") : thInt("568 - list layout dvd btn pos x"),
|
|
thInt("13 - list layout dvd btn pos y"));
|
|
|
|
gameBrowser = new GuiGameList(thInt("396 - game list layout width"), thInt("280 - game list layout height"), Settings.GameListOffset);
|
|
gameBrowser->SetPosition(thInt("200 - game list layout pos x"), thInt("49 - game list layout pos y"));
|
|
gameBrowser->SetAlignment(ALIGN_LEFT, ALIGN_CENTER);
|
|
gameBrowser->SetSelectedOption(Settings.SelectedGame);
|
|
|
|
//! Setup optional background image
|
|
if(!listBackground)
|
|
listBackground = Resources::GetImageData("listBackground.png");
|
|
if(listBackground)
|
|
bgImg->SetImage(listBackground);
|
|
else
|
|
bgImg->SetImage(background);
|
|
}
|
|
else if (Settings.gameDisplay == GRID_MODE)
|
|
{
|
|
listCoverBtn->SetSize(0, 0);
|
|
UpdateGameInfoText(NULL);
|
|
gridBtn->SetImage(gridBtnImg);
|
|
gridBtn->SetImageOver(gridBtnImg);
|
|
listBtn->SetImage(listBtnImg_g);
|
|
listBtn->SetImageOver(listBtnImg_g);
|
|
carouselBtn->SetImage(carouselBtnImg_g);
|
|
carouselBtn->SetImageOver(carouselBtnImg_g);
|
|
bannerGridBtn->SetImage(bannerGridBtnImg_g);
|
|
bannerGridBtn->SetImageOver(bannerGridBtnImg_g);
|
|
|
|
favoriteBtn->SetPosition(Settings.widescreen ? thInt("144 - grid layout favorite btn pos x widescreen") : thInt("100 - grid layout favorite btn pos x"),
|
|
thInt("13 - grid layout favorite btn pos y"));
|
|
searchBtn->SetPosition(Settings.widescreen ? thInt("176 - grid layout search btn pos x widescreen") : thInt("140 - grid layout search btn pos x"),
|
|
thInt("13 - grid layout search btn pos y"));
|
|
sortBtn->SetPosition(Settings.widescreen ? thInt("208 - grid layout abc/sort btn pos x widescreen") : thInt("180 - grid layout abc/sort btn pos x"),
|
|
thInt("13 - grid layout abc/sort btn pos y"));
|
|
loaderModeBtn->SetPosition(Settings.widescreen ? thInt("240 - grid layout loadermode btn pos x widescreen") : thInt("220 - grid layout loadermode btn pos x"),
|
|
thInt("13 - grid layout loadermode btn pos y"));
|
|
categBtn->SetPosition(Settings.widescreen ? thInt("272 - grid layout category btn pos x widescreen") : thInt("260 - grid layout category btn pos x"),
|
|
thInt("13 - grid layout category btn pos y"));
|
|
listBtn->SetPosition(Settings.widescreen ? thInt("304 - grid layout list btn pos x widescreen") : thInt("300 - grid layout list btn pos x"),
|
|
thInt("13 - grid layout list btn pos y"));
|
|
gridBtn->SetPosition(Settings.widescreen ? thInt("336 - grid layout grid btn pos x widescreen") : thInt("340 - grid layout grid btn pos x"),
|
|
thInt("13 - grid layout grid btn pos y"));
|
|
carouselBtn->SetPosition(Settings.widescreen ? thInt("368 - grid layout carousel btn pos x widescreen") : thInt("380 - grid layout carousel btn pos x"),
|
|
thInt("13 - grid layout carousel btn pos y"));
|
|
bannerGridBtn->SetPosition(Settings.widescreen ? thInt("400 - grid layout bannergrid btn pos x widescreen") : thInt("420 - grid layout bannergrid btn pos x"),
|
|
thInt("13 - grid layout bannergrid btn pos y"));
|
|
lockBtn->SetPosition(Settings.widescreen ? thInt("432 - grid layout lock btn pos x widescreen") : thInt("460 - grid layout lock btn pos x"),
|
|
thInt("13 - grid layout lock btn pos y"));
|
|
dvdBtn->SetPosition(Settings.widescreen ? thInt("464 - grid layout dvd btn pos x widescreen") : thInt("500 - grid layout dvd btn pos x"),
|
|
thInt("13 - grid layout dvd btn pos y"));
|
|
|
|
gameBrowser = new GuiGameGrid(thInt("640 - game grid layout width"), thInt("400 - game grid layout height"), Settings.theme_path, Settings.GameListOffset);
|
|
gameBrowser->SetPosition(thInt("0 - game grid layout pos x"), thInt("20 - game grid layout pos y"));
|
|
gameBrowser->SetAlignment(ALIGN_LEFT, ALIGN_CENTER);
|
|
|
|
//! Setup optional background image
|
|
if(!gridBackground)
|
|
gridBackground = Resources::GetImageData("gridBackground.png");
|
|
if(gridBackground)
|
|
bgImg->SetImage(gridBackground);
|
|
else
|
|
bgImg->SetImage(background);
|
|
}
|
|
else if (Settings.gameDisplay == CAROUSEL_MODE)
|
|
{
|
|
listCoverBtn->SetSize(0, 0);
|
|
UpdateGameInfoText(NULL);
|
|
carouselBtn->SetImage(carouselBtnImg);
|
|
carouselBtn->SetImageOver(carouselBtnImg);
|
|
listBtn->SetImage(listBtnImg_g);
|
|
listBtn->SetImageOver(listBtnImg_g);
|
|
gridBtn->SetImage(gridBtnImg_g);
|
|
gridBtn->SetImageOver(gridBtnImg_g);
|
|
bannerGridBtn->SetImage(bannerGridBtnImg_g);
|
|
bannerGridBtn->SetImageOver(bannerGridBtnImg_g);
|
|
|
|
favoriteBtn->SetPosition(Settings.widescreen ? thInt("144 - carousel layout favorite btn pos x widescreen") : thInt("100 - carousel layout favorite btn pos x"),
|
|
thInt("13 - carousel layout favorite btn pos y"));
|
|
searchBtn->SetPosition(Settings.widescreen ? thInt("176 - carousel layout search btn pos x widescreen") : thInt("140 - carousel layout search btn pos x"),
|
|
thInt("13 - carousel layout search btn pos y"));
|
|
sortBtn->SetPosition(Settings.widescreen ? thInt("208 - carousel layout abc/sort btn pos x widescreen") : thInt("180 - carousel layout abc/sort btn pos x"),
|
|
thInt("13 - carousel layout abc/sort btn pos y"));
|
|
loaderModeBtn->SetPosition(Settings.widescreen ? thInt("240 - carousel layout loadermode btn pos x widescreen") : thInt("220 - carousel layout loadermode btn pos x"),
|
|
thInt("13 - carousel layout loadermode btn pos y"));
|
|
categBtn->SetPosition(Settings.widescreen ? thInt("272 - carousel layout category btn pos x widescreen") : thInt("260 - carousel layout category btn pos x"),
|
|
thInt("13 - carousel layout category btn pos y"));
|
|
listBtn->SetPosition(Settings.widescreen ? thInt("304 - carousel layout list btn pos x widescreen") : thInt("300 - carousel layout list btn pos x"),
|
|
thInt("13 - carousel layout list btn pos y"));
|
|
gridBtn->SetPosition(Settings.widescreen ? thInt("336 - carousel layout grid btn pos x widescreen") : thInt("340 - carousel layout grid btn pos x"),
|
|
thInt("13 - carousel layout grid btn pos y"));
|
|
carouselBtn->SetPosition(Settings.widescreen ? thInt("368 - carousel layout carousel btn pos x widescreen") : thInt("380 - carousel layout carousel btn pos x"),
|
|
thInt("13 - carousel layout carousel btn pos y"));
|
|
bannerGridBtn->SetPosition(Settings.widescreen ? thInt("400 - carousel layout bannergrid btn pos x widescreen") : thInt("420 - carousel layout bannergrid btn pos x"),
|
|
thInt("13 - carousel layout bannergrid btn pos y"));
|
|
lockBtn->SetPosition(Settings.widescreen ? thInt("432 - carousel layout lock btn pos x widescreen") : thInt("460 - carousel layout lock btn pos x"),
|
|
thInt("13 - carousel layout lock btn pos y"));
|
|
dvdBtn->SetPosition(Settings.widescreen ? thInt("464 - carousel layout dvd btn pos x widescreen") : thInt("500 - carousel layout dvd btn pos x"),
|
|
thInt("13 - carousel layout dvd btn pos y"));
|
|
|
|
gameBrowser = new GuiGameCarousel(thInt("640 - game carousel layout width"), thInt("400 - game carousel layout height"), Settings.theme_path, Settings.GameListOffset);
|
|
gameBrowser->SetPosition(thInt("0 - game carousel layout pos x"), thInt("-20 - game carousel layout pos y"));
|
|
gameBrowser->SetAlignment(ALIGN_LEFT, ALIGN_CENTER);
|
|
|
|
//! Setup optional background image
|
|
if(!carouselBackground)
|
|
carouselBackground = Resources::GetImageData("carouselBackground.png");
|
|
if(carouselBackground)
|
|
bgImg->SetImage(carouselBackground);
|
|
else
|
|
bgImg->SetImage(background);
|
|
}
|
|
else if(Settings.gameDisplay == BANNERGRID_MODE)
|
|
{
|
|
listCoverBtn->SetSize(0, 0);
|
|
UpdateGameInfoText(NULL);
|
|
bannerGridBtn->SetImage(bannerGridBtnImg);
|
|
bannerGridBtn->SetImageOver(bannerGridBtnImg);
|
|
listBtn->SetImage(listBtnImg_g);
|
|
listBtn->SetImageOver(listBtnImg_g);
|
|
gridBtn->SetImage(gridBtnImg_g);
|
|
gridBtn->SetImageOver(gridBtnImg_g);
|
|
carouselBtn->SetImage(carouselBtnImg_g);
|
|
carouselBtn->SetImageOver(carouselBtnImg_g);
|
|
|
|
favoriteBtn->SetPosition(Settings.widescreen ? thInt("144 - bannergrid layout favorite btn pos x widescreen") : thInt("100 - bannergrid layout favorite btn pos x"),
|
|
thInt("13 - bannergrid layout favorite btn pos y"));
|
|
searchBtn->SetPosition(Settings.widescreen ? thInt("176 - bannergrid layout search btn pos x widescreen") : thInt("140 - bannergrid layout search btn pos x"),
|
|
thInt("13 - bannergrid layout search btn pos y"));
|
|
sortBtn->SetPosition(Settings.widescreen ? thInt("208 - bannergrid layout abc/sort btn pos x widescreen") : thInt("180 - bannergrid layout abc/sort btn pos x"),
|
|
thInt("13 - bannergrid layout abc/sort btn pos y"));
|
|
loaderModeBtn->SetPosition(Settings.widescreen ? thInt("240 - bannergrid layout loadermode btn pos x widescreen") : thInt("220 - bannergrid layout loadermode btn pos x"),
|
|
thInt("13 - bannergrid layout loadermode btn pos y"));
|
|
categBtn->SetPosition(Settings.widescreen ? thInt("272 - bannergrid layout category btn pos x widescreen") : thInt("260 - bannergrid layout category btn pos x"),
|
|
thInt("13 - bannergrid layout category btn pos y"));
|
|
listBtn->SetPosition(Settings.widescreen ? thInt("304 - bannergrid layout list btn pos x widescreen") : thInt("300 - bannergrid layout list btn pos x"),
|
|
thInt("13 - bannergrid layout list btn pos y"));
|
|
gridBtn->SetPosition(Settings.widescreen ? thInt("336 - bannergrid layout grid btn pos x widescreen") : thInt("340 - bannergrid layout grid btn pos x"),
|
|
thInt("13 - bannergrid layout grid btn pos y"));
|
|
carouselBtn->SetPosition(Settings.widescreen ? thInt("368 - bannergrid layout carousel btn pos x widescreen") : thInt("380 - bannergrid layout carousel btn pos x"),
|
|
thInt("13 - bannergrid layout carousel btn pos y"));
|
|
bannerGridBtn->SetPosition(Settings.widescreen ? thInt("400 - bannergrid layout bannergrid btn pos x widescreen") : thInt("420 - bannergrid layout bannergrid btn pos x"),
|
|
thInt("13 - bannergrid layout bannergrid btn pos y"));
|
|
lockBtn->SetPosition(Settings.widescreen ? thInt("432 - bannergrid layout lock btn pos x widescreen") : thInt("460 - bannergrid layout lock btn pos x"),
|
|
thInt("13 - bannergrid layout lock btn pos y"));
|
|
dvdBtn->SetPosition(Settings.widescreen ? thInt("464 - bannergrid layout dvd btn pos x widescreen") : thInt("500 - bannergrid layout dvd btn pos x"),
|
|
thInt("13 - bannergrid layout dvd btn pos y"));
|
|
|
|
gameBrowser = new GuiBannerGrid(Settings.GameListOffset + Settings.SelectedGame);
|
|
}
|
|
|
|
if (thInt("1 - show hdd info: 1 for on and 0 for off") == 1) //force show hdd info
|
|
Append(usedSpaceTxt);
|
|
if (thInt("1 - show game count: 1 for on and 0 for off") == 1) //force show game cnt info
|
|
Append(gamecntBtn);
|
|
if (!Settings.ShowGameCount)
|
|
Remove(gamecntBtn);
|
|
if (Settings.godmode || !(Settings.ParentalBlocks & BLOCK_SD_RELOAD_BUTTON))
|
|
Append(sdcardBtn);
|
|
Append(poweroffBtn);
|
|
Append(gameInfo);
|
|
Append(homeBtn);
|
|
Append(settingsBtn);
|
|
|
|
if (Settings.godmode || !(Settings.ParentalBlocks & BLOCK_HBC_MENU))
|
|
Append(homebrewBtn);
|
|
|
|
if (Settings.godmode || !(Settings.ParentalBlocks & BLOCK_GAME_INSTALL))
|
|
Append(installBtn);
|
|
|
|
if (Settings.godmode || !(Settings.ParentalBlocks & BLOCK_COVER_DOWNLOADS))
|
|
{
|
|
Append(DownloadBtn);
|
|
Append(listCoverBtn);
|
|
}
|
|
else if (Settings.CoverAction == COVER_ACTION_INFO)
|
|
Append(listCoverBtn);
|
|
|
|
Append(favoriteBtn);
|
|
Append(searchBtn);
|
|
Append(sortBtn);
|
|
Append(categBtn);
|
|
Append(listBtn);
|
|
Append(gridBtn);
|
|
Append(loaderModeBtn);
|
|
Append(carouselBtn);
|
|
Append(bannerGridBtn);
|
|
Append(lockBtn);
|
|
Append(dvdBtn);
|
|
|
|
if ((Settings.hddinfo == CLOCK_HR12) || (Settings.hddinfo == CLOCK_HR24))
|
|
{
|
|
Append(clockTimeBack);
|
|
Append(clockTime);
|
|
}
|
|
|
|
if (gameBrowser)
|
|
Append(gameBrowser);
|
|
|
|
if (show_searchwindow)
|
|
{
|
|
searchBar = new GuiSearchBar;
|
|
mainWindow->Append(searchBar);
|
|
}
|
|
|
|
SetEffect(EFFECT_FADE, 40);
|
|
ResumeGui();
|
|
|
|
while(parentElement && this->GetEffect() > 0) usleep(100);
|
|
}
|
|
|
|
int GameBrowseMenu::MainLoop()
|
|
{
|
|
UpdateClock();
|
|
CheckDiscSlotUpdate();
|
|
|
|
if (poweroffBtn->GetState() == STATE_CLICKED)
|
|
{
|
|
gprintf("\tpoweroffBtn clicked\n");
|
|
int choice = 0;
|
|
if(isWiiU())
|
|
choice = WindowPrompt(tr( "How to Shutdown?" ), 0, tr( "Full shutdown" ), tr("Cancel"));
|
|
else
|
|
choice = WindowPrompt(tr( "How to Shutdown?" ), 0, tr( "Full shutdown" ), tr( "Standby" ), tr( "Cancel" ));
|
|
|
|
if (choice == 2)
|
|
Sys_ShutdownToIdle();
|
|
else if (choice == 1)
|
|
Sys_ShutdownToStandby();
|
|
|
|
poweroffBtn->ResetState();
|
|
}
|
|
else if (gamecntBtn->GetState() == STATE_CLICKED)
|
|
{
|
|
gprintf("\tgameCntBtn clicked\n");
|
|
gamecntBtn->ResetState();
|
|
|
|
int choice = WindowPrompt(0, fmt("%s %sGameList ?", tr( "Save Game List to" ), Settings.ConfigPath), "TXT", "CSV", tr( "Back" ));
|
|
if (choice)
|
|
{
|
|
if (save_gamelist(choice == 2))
|
|
WindowPrompt(0, tr( "Saved" ), tr( "OK" ));
|
|
else
|
|
WindowPrompt(tr( "Error" ), tr( "Could not save." ), tr( "OK" ));
|
|
}
|
|
}
|
|
else if (homeBtn->GetState() == STATE_CLICKED)
|
|
{
|
|
gprintf("\thomeBtn clicked\n");
|
|
WindowExitPrompt();
|
|
|
|
homeBtn->ResetState();
|
|
}
|
|
else if (installBtn->GetState() == STATE_CLICKED)
|
|
{
|
|
if(!Settings.godmode && (Settings.ParentalBlocks & BLOCK_GAME_INSTALL))
|
|
{
|
|
WindowPrompt(tr( "Permission denied." ), tr( "Console must be unlocked for this option." ), tr( "OK" ));
|
|
installBtn->ResetState();
|
|
return MENU_NONE;
|
|
}
|
|
|
|
int choice = WindowPrompt(tr( "Install a game" ), 0, tr( "Yes" ), tr( "No" ));
|
|
if (choice == 1)
|
|
{
|
|
this->SetState(STATE_DISABLED);
|
|
if (!(Settings.LoaderMode & MODE_WIIGAMES) && (gameList.GameCount() == 0))
|
|
{
|
|
if (WBFS_ReInit(Settings.SDMode ? WBFS_DEVICE_SDHC : WBFS_DEVICE_USB) < 0)
|
|
ShowError(tr("Failed to initialize the USB storage device."));
|
|
else
|
|
{
|
|
gameList.ReadGameList();
|
|
GameTitles.LoadTitlesFromGameTDB(Settings.titlestxt_path);
|
|
if(Settings.ShowFreeSpace)
|
|
{
|
|
ThreadedTask::Instance()->AddCallback(&HDDSizeCallback);
|
|
ThreadedTask::Instance()->Execute();
|
|
}
|
|
int res = MenuInstall();
|
|
WDVD_StopMotor();
|
|
return res;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
int res = MenuInstall();
|
|
WDVD_StopMotor();
|
|
return res;
|
|
}
|
|
|
|
this->SetState(STATE_DEFAULT);
|
|
}
|
|
installBtn->ResetState();
|
|
}
|
|
else if (sdcardBtn->GetState() == STATE_CLICKED)
|
|
{
|
|
gprintf("\tsdCardBtn Clicked\n");
|
|
if(WindowPrompt(tr("Are you sure you want to remount SD?"), tr("The application might crash if there is currently a read/write access to the SD card!"), tr("Yes"), tr("Cancel")))
|
|
{
|
|
HaltGui();
|
|
BannerAsync::HaltThread();
|
|
bgMusic->Pause();
|
|
Settings.Save();
|
|
DeviceHandler::Instance()->UnMountSD();
|
|
DeviceHandler::Instance()->MountSD();
|
|
gprintf("\tLoading config...%s\n", Settings.Load() ? "done" : "failed");
|
|
gprintf("\tLoading language...%s\n", Settings.LoadLanguage(Settings.language_path, CONSOLE_DEFAULT) ? "done" : "failed");
|
|
gprintf("\tLoading game settings...%s\n", GameSettings.Load(Settings.ConfigPath) ? "done" : "failed");
|
|
gprintf("\tLoading game statistics...%s\n", GameStatistics.Load(Settings.ConfigPath) ? "done" : "failed");
|
|
gprintf("\tLoading font...%s\n", Theme::LoadFont(Settings.theme_path) ? "done" : "failed (using default)");
|
|
gprintf("\tLoading theme...%s\n", Theme::Load(Settings.theme) ? "done" : "failed (using default)");
|
|
bgMusic->Resume();
|
|
gameList.FilterList();
|
|
ReloadBrowser();
|
|
BannerAsync::ResumeThread();
|
|
ResumeGui();
|
|
}
|
|
sdcardBtn->ResetState();
|
|
}
|
|
|
|
else if (listCoverBtn->GetState() == STATE_CLICKED)
|
|
{
|
|
gprintf("\tcoverBtn Clicked\n");
|
|
if (Settings.CoverAction == COVER_ACTION_DOWNLOAD)
|
|
{
|
|
ImageDownloader::DownloadImages();
|
|
gameList.FilterList();
|
|
ReloadBrowser();
|
|
listCoverBtn->ResetState();
|
|
}
|
|
else
|
|
{
|
|
int SelectedGame = GetSelectedGame();
|
|
listCoverBtn->ResetState();
|
|
if (SelectedGame >= 0 && SelectedGame < (s32) gameList.size())
|
|
{
|
|
rockout(gameList[SelectedGame]);
|
|
SetState(STATE_DISABLED);
|
|
int choice = showGameInfo(SelectedGame, 0);
|
|
SetState(STATE_DEFAULT);
|
|
rockout(0);
|
|
if (choice == 2)
|
|
homeBtn->SetState(STATE_CLICKED);
|
|
}
|
|
}
|
|
}
|
|
|
|
else if (DownloadBtn->GetState() == STATE_CLICKED)
|
|
{
|
|
gprintf("\tDownloadBtn Clicked\n");
|
|
ImageDownloader::DownloadImages();
|
|
gameList.FilterList();
|
|
ReloadBrowser();
|
|
DownloadBtn->ResetState();
|
|
}
|
|
|
|
else if (settingsBtn->GetState() == STATE_CLICKED)
|
|
{
|
|
if (!Settings.godmode && (Settings.ParentalBlocks & BLOCK_GLOBAL_SETTINGS))
|
|
{
|
|
WindowPrompt(tr( "Permission denied." ), tr( "Console must be unlocked for this option." ), tr( "OK" ));
|
|
settingsBtn->ResetState();
|
|
return MENU_NONE;
|
|
}
|
|
|
|
return MENU_SETTINGS;
|
|
}
|
|
|
|
else if (favoriteBtn->GetState() == STATE_CLICKED)
|
|
{
|
|
favoriteBtn->ResetState();
|
|
gprintf("\tfavoriteBtn Clicked\n");
|
|
|
|
if(Settings.GameSort & SORT_FAVORITE)
|
|
Settings.GameSort &= ~SORT_FAVORITE;
|
|
else
|
|
Settings.GameSort |= SORT_FAVORITE;
|
|
|
|
gameList.FilterList();
|
|
|
|
if((Settings.GameSort & SORT_FAVORITE) && gameList.size() == 0)
|
|
{
|
|
Settings.GameSort &= ~SORT_FAVORITE;
|
|
gameList.FilterList();
|
|
ShowError(tr("No favorites selected."));
|
|
}
|
|
else
|
|
ReloadBrowser();
|
|
}
|
|
|
|
else if (searchBtn->GetState() == STATE_CLICKED)
|
|
{
|
|
gprintf("\tsearchBtn Clicked\n");
|
|
show_searchwindow = !show_searchwindow;
|
|
gameList.FilterList();
|
|
ReloadBrowser();
|
|
searchBtn->ResetState();
|
|
if(show_searchwindow && wcslen(gameList.GetCurrentFilter()) == 0)
|
|
GridRowsPreSearch = Settings.gridRows; //! store old rows amount
|
|
}
|
|
|
|
else if (searchBar && (searchChar = searchBar->GetClicked()))
|
|
{
|
|
if (searchChar > 27) //! Character clicked
|
|
{
|
|
int len = gameList.GetCurrentFilter() ? wcslen(gameList.GetCurrentFilter()) : 0;
|
|
wchar_t newFilter[len + 2];
|
|
if (gameList.GetCurrentFilter()) wcscpy(newFilter, gameList.GetCurrentFilter());
|
|
newFilter[len] = searchChar;
|
|
newFilter[len + 1] = 0;
|
|
|
|
gameList.FilterList(newFilter);
|
|
}
|
|
else if (searchChar == 27) //! Close
|
|
{
|
|
show_searchwindow = false;
|
|
searchBtn->StopEffect();
|
|
}
|
|
else if (searchChar == 7) //! Clear
|
|
{
|
|
gameList.FilterList(L"");
|
|
Settings.gridRows = GridRowsPreSearch; //! restore old rows amount so we don't stay on one row
|
|
}
|
|
else if (searchChar == 8) //! Backspace
|
|
{
|
|
int len = wcslen(gameList.GetCurrentFilter());
|
|
wchar_t newFilter[len + 1];
|
|
if (gameList.GetCurrentFilter()) wcscpy(newFilter, gameList.GetCurrentFilter());
|
|
newFilter[len > 0 ? len - 1 : 0] = 0;
|
|
gameList.FilterList(newFilter);
|
|
if(len == 1)
|
|
Settings.gridRows = GridRowsPreSearch; //! restore old rows amount so we don't stay on one row
|
|
}
|
|
else if (searchChar == 6)
|
|
{
|
|
Settings.SearchMode = Settings.SearchMode == SEARCH_BEGINNING ? SEARCH_CONTENT : SEARCH_BEGINNING;
|
|
gameList.FilterList();
|
|
}
|
|
ReloadBrowser();
|
|
return MENU_NONE;
|
|
}
|
|
|
|
else if (sortBtn->GetState() == STATE_CLICKED)
|
|
{
|
|
sortBtn->ResetState();
|
|
gprintf("\tsortBtn clicked\n");
|
|
if(Settings.GameSort & SORT_ABC)
|
|
{
|
|
Settings.GameSort &= ~SORT_ABC;
|
|
Settings.GameSort |= SORT_RANKING;
|
|
}
|
|
else if(Settings.GameSort & SORT_RANKING)
|
|
{
|
|
Settings.GameSort &= ~SORT_RANKING;
|
|
Settings.GameSort |= SORT_PLAYCOUNT;
|
|
}
|
|
else if(Settings.GameSort & SORT_PLAYCOUNT)
|
|
{
|
|
Settings.GameSort &= ~SORT_PLAYCOUNT;
|
|
Settings.GameSort |= SORT_PLAYERS;
|
|
}
|
|
else if(Settings.GameSort & SORT_PLAYERS)
|
|
{
|
|
Settings.GameSort &= ~SORT_PLAYERS;
|
|
Settings.GameSort |= SORT_ABC;
|
|
}
|
|
|
|
gameList.FilterList();
|
|
ReloadBrowser();
|
|
}
|
|
|
|
else if (listBtn->GetState() == STATE_CLICKED)
|
|
{
|
|
if (!Settings.godmode && (Settings.ParentalBlocks & BLOCK_LOADER_LAYOUT_BUTTON))
|
|
{
|
|
WindowPrompt(tr( "Permission denied." ), tr( "Console must be unlocked for this option." ), tr( "OK" ));
|
|
listBtn->ResetState();
|
|
return returnMenu;
|
|
}
|
|
gprintf("\tlistBtn Clicked\n");
|
|
if (Settings.gameDisplay != LIST_MODE)
|
|
{
|
|
Settings.gameDisplay = LIST_MODE;
|
|
ReloadBrowser();
|
|
}
|
|
listBtn->ResetState();
|
|
}
|
|
|
|
else if (gridBtn->GetState() == STATE_CLICKED)
|
|
{
|
|
if (!Settings.godmode && (Settings.ParentalBlocks & BLOCK_LOADER_LAYOUT_BUTTON))
|
|
{
|
|
WindowPrompt(tr( "Permission denied." ), tr( "Console must be unlocked for this option." ), tr( "OK" ));
|
|
gridBtn->ResetState();
|
|
return returnMenu;
|
|
}
|
|
gprintf("\tgridBtn Clicked\n");
|
|
if (Settings.gameDisplay != GRID_MODE)
|
|
{
|
|
Settings.gameDisplay = GRID_MODE;
|
|
ReloadBrowser();
|
|
}
|
|
gridBtn->ResetState();
|
|
}
|
|
|
|
else if (carouselBtn->GetState() == STATE_CLICKED)
|
|
{
|
|
if (!Settings.godmode && (Settings.ParentalBlocks & BLOCK_LOADER_LAYOUT_BUTTON))
|
|
{
|
|
WindowPrompt(tr( "Permission denied." ), tr( "Console must be unlocked for this option." ), tr( "OK" ));
|
|
carouselBtn->ResetState();
|
|
return returnMenu;
|
|
}
|
|
gprintf("\tcarouselBtn Clicked\n");
|
|
if (Settings.gameDisplay != CAROUSEL_MODE)
|
|
{
|
|
Settings.gameDisplay = CAROUSEL_MODE;
|
|
ReloadBrowser();
|
|
}
|
|
carouselBtn->ResetState();
|
|
}
|
|
|
|
else if (bannerGridBtn->GetState() == STATE_CLICKED)
|
|
{
|
|
if (!Settings.godmode && (Settings.ParentalBlocks & BLOCK_LOADER_LAYOUT_BUTTON))
|
|
{
|
|
WindowPrompt(tr( "Permission denied." ), tr( "Console must be unlocked for this option." ), tr( "OK" ));
|
|
bannerGridBtn->ResetState();
|
|
return returnMenu;
|
|
}
|
|
gprintf("\tbannerGridBtn Clicked\n");
|
|
if(!SystemMenuResources::Instance()->IsLoaded()) {
|
|
WindowPrompt(tr( "Error:" ), tr( "Banner grid layout is only available with AHBPROT! Please consider installing new HBC version." ), tr( "OK" ));
|
|
bannerGridBtn->ResetState();
|
|
return MENU_NONE;
|
|
}
|
|
if (Settings.gameDisplay != BANNERGRID_MODE)
|
|
{
|
|
Settings.gameDisplay = BANNERGRID_MODE;
|
|
ReloadBrowser();
|
|
}
|
|
bannerGridBtn->ResetState();
|
|
}
|
|
|
|
else if (homebrewBtn->GetState() == STATE_CLICKED)
|
|
{
|
|
gprintf("\thomebrewBtn Clicked\n");
|
|
return MENU_HOMEBREWBROWSE;
|
|
}
|
|
|
|
else if (gameInfo->GetState() == STATE_CLICKED)
|
|
{
|
|
gprintf("\tgameinfo Clicked\n");
|
|
int SelectedGame = GetSelectedGame();
|
|
gameInfo->ResetState();
|
|
if (SelectedGame >= 0 && SelectedGame < (s32) gameList.size())
|
|
{
|
|
rockout(gameList[SelectedGame]);
|
|
SetState(STATE_DISABLED);
|
|
int choice = showGameInfo(SelectedGame, 0);
|
|
SetState(STATE_DEFAULT);
|
|
rockout(0);
|
|
if (choice == 2)
|
|
homeBtn->SetState(STATE_CLICKED);
|
|
}
|
|
}
|
|
else if (lockBtn->GetState() == STATE_CLICKED)
|
|
{
|
|
gprintf("\tlockBtn clicked\n");
|
|
lockBtn->ResetState();
|
|
if (Settings.godmode)
|
|
{
|
|
if(WindowPrompt(tr( "Parental Control" ), tr( "Are you sure you want to lock USB Loader GX?" ), tr( "Yes" ), tr( "No" )) == 1)
|
|
{
|
|
Settings.godmode = 0;
|
|
gameList.FilterList();
|
|
ReloadBrowser();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
//password check to unlock Install,Delete and Format
|
|
SetState(STATE_DISABLED);
|
|
int result = PasswordCheck(Settings.unlockCode);
|
|
SetState(STATE_DEFAULT);
|
|
if (result > 0)
|
|
{
|
|
if(result == 1)
|
|
WindowPrompt( tr( "Correct Password" ), tr( "All the features of USB Loader GX are unlocked." ), tr( "OK" ));
|
|
Settings.godmode = 1;
|
|
gameList.FilterList();
|
|
ReloadBrowser();
|
|
}
|
|
else if(result < 0)
|
|
WindowPrompt(tr( "Wrong Password" ), tr( "USB Loader GX is protected" ), tr( "OK" ));
|
|
}
|
|
}
|
|
|
|
else if(categBtn->GetState() == STATE_CLICKED)
|
|
{
|
|
if (!Settings.godmode && (Settings.ParentalBlocks & BLOCK_CATEGORIES_MENU))
|
|
{
|
|
WindowPrompt(tr( "Permission denied." ), tr( "Console must be unlocked for this option." ), tr( "OK" ));
|
|
categBtn->ResetState();
|
|
return returnMenu;
|
|
}
|
|
|
|
mainWindow->SetState(STATE_DISABLED);
|
|
CategorySwitchPrompt promptMenu;
|
|
promptMenu.SetAlignment(thAlign("center - category switch prompt align hor"), thAlign("middle - category switch prompt align ver"));
|
|
promptMenu.SetPosition(thInt("0 - category switch prompt pos x"), thInt("0 - category switch prompt pos y"));
|
|
promptMenu.SetEffect(EFFECT_FADE, 20);
|
|
mainWindow->Append(&promptMenu);
|
|
|
|
promptMenu.Show();
|
|
|
|
promptMenu.SetEffect(EFFECT_FADE, -20);
|
|
while(promptMenu.GetEffect() > 0) usleep(100);
|
|
mainWindow->Remove(&promptMenu);
|
|
categBtn->ResetState();
|
|
mainWindow->SetState(STATE_DEFAULT);
|
|
if(promptMenu.categoriesChanged())
|
|
{
|
|
gameList.FilterList();
|
|
ReloadBrowser();
|
|
}
|
|
}
|
|
|
|
else if(loaderModeBtn->GetState() == STATE_CLICKED)
|
|
{
|
|
if (!Settings.godmode && (Settings.ParentalBlocks & BLOCK_LOADER_MODE_BUTTON))
|
|
{
|
|
WindowPrompt(tr( "Permission denied." ), tr( "Console must be unlocked for this option." ), tr( "OK" ));
|
|
loaderModeBtn->ResetState();
|
|
return returnMenu;
|
|
}
|
|
|
|
int choice = CheckboxWindow(tr( "Select titles sources." ), 0, tr( "Wii Games" ), tr( "NAND Channels" ), tr("EmuNAND Channels"), tr("GC Games"), 0, 0, Settings.LoaderMode);
|
|
if(choice != CheckedNone && choice != Settings.LoaderMode)
|
|
{
|
|
Settings.LoaderMode = choice;
|
|
|
|
if((Settings.LoaderMode & MODE_WIIGAMES) && (gameList.GameCount() == 0))
|
|
{
|
|
s32 wbfsinit = WBFS_Init(Settings.SDMode ? WBFS_DEVICE_SDHC : WBFS_DEVICE_USB);
|
|
if (wbfsinit < 0)
|
|
{
|
|
// This shouldn't ever fail in SD card mode
|
|
ShowError("%s %s", tr( "USB Device not initialized." ), tr("Switching to channel list mode."));
|
|
Settings.LoaderMode &= ~MODE_WIIGAMES;
|
|
Settings.LoaderMode |= MODE_NANDCHANNELS;
|
|
}
|
|
else
|
|
{
|
|
WBFS_ReInit(Settings.SDMode ? WBFS_DEVICE_SDHC : WBFS_DEVICE_USB);
|
|
}
|
|
gameList.ReadGameList(true);
|
|
|
|
if(Settings.ShowFreeSpace)
|
|
{
|
|
ThreadedTask::Instance()->AddCallback(&HDDSizeCallback);
|
|
ThreadedTask::Instance()->Execute();
|
|
}
|
|
}
|
|
|
|
wString oldFilter(gameList.GetCurrentFilter());
|
|
GameTitles.LoadTitlesFromGameTDB(Settings.titlestxt_path);
|
|
gameList.FilterList(oldFilter.c_str());
|
|
ReloadBrowser();
|
|
}
|
|
loaderModeBtn->ResetState();
|
|
}
|
|
else if (Settings.gameDisplay == LIST_MODE && GetSelectedGame() != gameSelectedOld)
|
|
{
|
|
gameSelectedOld = GetSelectedGame();
|
|
int gameSelected = gameSelectedOld;
|
|
if(gameSelected >= 0 && gameSelected < (s32) gameList.size())
|
|
{
|
|
struct discHdr *header = gameList[gameSelected];
|
|
LoadCover(header);
|
|
UpdateGameInfoText(header);
|
|
}
|
|
}
|
|
|
|
if(gameBrowser)
|
|
{
|
|
//! This is bad, but for saving pupose it will be in main loop
|
|
Settings.GameListOffset = gameBrowser->getListOffset();
|
|
Settings.SelectedGame = gameBrowser->GetSelectedOption()-Settings.GameListOffset;
|
|
}
|
|
|
|
gameClicked = gameBrowser ? gameBrowser->GetClickedOption() : -1;
|
|
|
|
if(gameClicked >= 0 && gameClicked < (s32) gameList.size())
|
|
OpenClickedGame(gameList[gameClicked]);
|
|
|
|
return returnMenu;
|
|
}
|
|
|
|
void GameBrowseMenu::CheckDiscSlotUpdate()
|
|
{
|
|
// No need to update every 1 ms
|
|
static u32 delayCounter = 0;
|
|
if(++delayCounter < 100)
|
|
return;
|
|
|
|
delayCounter = 0;
|
|
u32 DiscDriveCover = 0;
|
|
WDVD_GetCoverStatus(&DiscDriveCover);//for detecting if a disc has been inserted
|
|
|
|
if ((DiscDriveCover & 0x02) && (DiscDriveCover != DiscDriveCoverOld))
|
|
{
|
|
int choice = WindowPrompt(tr( "Disc Insert Detected" ), 0, tr( "Install" ), tr( "Mount DVD drive" ), tr( "Cancel" ));
|
|
if (choice == 1)
|
|
installBtn->SetState(STATE_CLICKED);
|
|
else if (choice == 2)
|
|
dvdBtn->SetState(STATE_CLICKED);
|
|
}
|
|
else if (dvdBtn->GetState() == STATE_CLICKED)
|
|
{
|
|
gprintf("\tdvdBtn Clicked\n");
|
|
if(DiscDriveCover & 0x02)
|
|
{
|
|
if(!dvdheader)
|
|
dvdheader = new struct discHdr;
|
|
|
|
if(Disc_Mount(dvdheader) < 0)
|
|
{
|
|
delete dvdheader;
|
|
dvdheader = NULL;
|
|
ShowError(tr("Can't mount or unknown disc format."));
|
|
}
|
|
else
|
|
OpenClickedGame(dvdheader);
|
|
}
|
|
else
|
|
WindowPrompt(tr( "No disc inserted." ), 0, tr( "OK" ));
|
|
|
|
dvdBtn->ResetState();
|
|
}
|
|
|
|
if(DiscDriveCoverOld != DiscDriveCover)
|
|
{
|
|
if(DiscDriveCover & 0x02)
|
|
dvdBtn->SetImage(dvdBtnImg);
|
|
else
|
|
dvdBtn->SetImage(dvdBtnImg_g);
|
|
|
|
DiscDriveCoverOld = DiscDriveCover;
|
|
}
|
|
}
|
|
|
|
void GameBrowseMenu::UpdateClock()
|
|
{
|
|
if(Settings.hddinfo != CLOCK_HR12 && Settings.hddinfo != CLOCK_HR24)
|
|
return;
|
|
|
|
time_t rawtime = time(0);
|
|
if(rawtime == lastrawtime) //! Only update every 1 second
|
|
return;
|
|
|
|
lastrawtime = rawtime;
|
|
|
|
char theTime[50];
|
|
theTime[0] = 0;
|
|
|
|
struct tm * timeinfo = localtime(&rawtime);
|
|
if (Settings.hddinfo == CLOCK_HR12)
|
|
{
|
|
if (rawtime & 1)
|
|
strftime(theTime, sizeof(theTime), "%I:%M", timeinfo);
|
|
else
|
|
strftime(theTime, sizeof(theTime), "%I %M", timeinfo);
|
|
}
|
|
if (Settings.hddinfo == CLOCK_HR24)
|
|
{
|
|
if (rawtime & 1)
|
|
strftime(theTime, sizeof(theTime), "%H:%M", timeinfo);
|
|
else
|
|
strftime(theTime, sizeof(theTime), "%H %M", timeinfo);
|
|
}
|
|
clockTime->SetText(theTime);
|
|
|
|
if (Settings.screensaver != 0 && ControlActivityTimeout())
|
|
{
|
|
WindowScreensaver();
|
|
}
|
|
}
|
|
|
|
void GameBrowseMenu::UpdateGameInfoText(struct discHdr *header)
|
|
{
|
|
if (!header)
|
|
{
|
|
Remove(GameRegionTxt);
|
|
delete GameRegionTxt;
|
|
GameRegionTxt = NULL;
|
|
Remove(GameIDTxt);
|
|
delete GameIDTxt;
|
|
GameIDTxt = NULL;
|
|
return;
|
|
}
|
|
|
|
std::string gameregion;
|
|
char IDfull[7];
|
|
snprintf(IDfull, sizeof(IDfull), (char *) header->id);
|
|
|
|
const char *region = GameTitles.GetRegion(IDfull);
|
|
if (strcmp(region, "NULL") != 0)
|
|
gameregion = region;
|
|
else
|
|
{
|
|
char sys[2];
|
|
char reg[2];
|
|
snprintf(sys, sizeof(sys), "%c", IDfull[0]);
|
|
snprintf(reg, sizeof(reg), "%c", IDfull[3]);
|
|
if (header->type >= TYPE_GAME_NANDCHAN)
|
|
{
|
|
// Force some homebrew to display as region free
|
|
char regions[] = "ABDEFHIJKLMNPQRSTUVW";
|
|
char systems[] = "CEFHJLMNPQWX";
|
|
if (!(strstr(systems, sys) && strstr(regions, reg)))
|
|
reg[0] = 'A';
|
|
if (memcmp(IDfull, "JODI", 4) == 0)
|
|
reg[0] = 'A';
|
|
if (memcmp(IDfull, "IDCL", 4) == 0)
|
|
reg[0] = 'A';
|
|
}
|
|
|
|
switch (reg[0])
|
|
{
|
|
case 'P': // Europe
|
|
case 'D': // Germany
|
|
case 'F': // France
|
|
case 'H': // Netherlands
|
|
case 'I': // Italy
|
|
case 'L': // Japanese import to Europe
|
|
case 'M': // American import to Europe
|
|
case 'R': // Russia
|
|
case 'S': // Spain
|
|
case 'U': // Australia
|
|
case 'V': // Scandinavia
|
|
gameregion = "PAL";
|
|
break;
|
|
case 'E': // USA
|
|
case 'N': // Japanese import to USA
|
|
gameregion = "NTSC-U";
|
|
break;
|
|
case 'J': // Japan
|
|
gameregion = "NTSC-J";
|
|
break;
|
|
case 'K': // Korea
|
|
case 'Q': // Japanese import to Korea
|
|
case 'T': // American import to Korea
|
|
gameregion = "NTSC-K";
|
|
break;
|
|
case 'W': // Taiwan / Hong Kong / Macau
|
|
gameregion = "NTSC-T";
|
|
break;
|
|
case 'X': // Europe / USA special releases
|
|
case 'Y': // Europe / USA special releases
|
|
case 'Z': // Europe / USA special releases
|
|
gameregion = "PAL / NTSC-U";
|
|
break;
|
|
default:
|
|
gameregion = tr("Region Free");
|
|
}
|
|
}
|
|
|
|
HaltGui();
|
|
if (Settings.sinfo == GAMEINFO_ID || Settings.sinfo == GAMEINFO_BOTH)
|
|
{
|
|
Remove(GameIDTxt);
|
|
delete GameIDTxt;
|
|
GameIDTxt = new GuiText(IDfull, 22, thColor("r=55 g=190 b=237 a=255 - game id text color"));
|
|
GameIDTxt->SetAlignment(ALIGN_LEFT, ALIGN_TOP);
|
|
GameIDTxt->SetPosition(thInt("68 - gameID btn pos x"), thInt("305 - gameID btn pos y"));
|
|
GameIDTxt->SetEffect(EFFECT_FADE, 20);
|
|
Append(GameIDTxt);
|
|
}
|
|
//don't try to show region for channels because all the custom channels wont follow the rules
|
|
if ((Settings.sinfo == GAMEINFO_REGION) || (Settings.sinfo == GAMEINFO_BOTH))
|
|
{
|
|
Remove(GameRegionTxt);
|
|
delete GameRegionTxt;
|
|
GameRegionTxt = new GuiText(gameregion.c_str(), 22, thColor("r=55 g=190 b=237 a=255 - region info text color"));
|
|
GameRegionTxt->SetAlignment(ALIGN_LEFT, ALIGN_TOP);
|
|
GameRegionTxt->SetPosition(thInt("68 - region info text pos x"), thInt("30 - region info text pos y"));
|
|
GameRegionTxt->SetEffect(EFFECT_FADE, 20);
|
|
Append(GameRegionTxt);
|
|
}
|
|
ResumeGui();
|
|
}
|
|
|
|
int GameBrowseMenu::OpenClickedGame(struct discHdr *header)
|
|
{
|
|
int choice = -1;
|
|
|
|
if (searchBar)
|
|
{
|
|
HaltGui();
|
|
mainWindow->Remove(searchBar);
|
|
ResumeGui();
|
|
}
|
|
|
|
rockout(header);
|
|
|
|
SetAllowDim(false);
|
|
SetState(STATE_DISABLED);
|
|
if(gameBrowser)
|
|
gameBrowser->SetState(STATE_DISABLED);
|
|
|
|
if (Settings.wiilight == ON)
|
|
wiilight(1);
|
|
|
|
if (Settings.quickboot) { //quickboot game
|
|
GameWindow::BootGame(header);
|
|
}
|
|
else if((Settings.GameWindowMode == GAMEWINDOW_BANNER) ||
|
|
(Settings.GameWindowMode == GAMEWINDOW_BOTH && Settings.gameDisplay == BANNERGRID_MODE))
|
|
{
|
|
BannerWindow GamePrompt(this, header);
|
|
mainWindow->Append(&GamePrompt);
|
|
|
|
choice = GamePrompt.Run();
|
|
}
|
|
else if((Settings.GameWindowMode == GAMEWINDOW_DISC) ||
|
|
(Settings.GameWindowMode == GAMEWINDOW_BOTH && Settings.gameDisplay != BANNERGRID_MODE))
|
|
{
|
|
SetAllowDim(true);
|
|
GameWindow GamePrompt(this, header);
|
|
mainWindow->Append(&GamePrompt);
|
|
|
|
choice = GamePrompt.Run();
|
|
}
|
|
|
|
if (choice == 1)
|
|
{
|
|
gameList.FilterList();
|
|
ReloadBrowser();
|
|
if(Settings.ShowFreeSpace)
|
|
{
|
|
ThreadedTask::Instance()->AddCallback(&HDDSizeCallback);
|
|
ThreadedTask::Instance()->Execute();
|
|
}
|
|
}
|
|
|
|
wiilight(0);
|
|
rockout(0);
|
|
WDVD_StopMotor();
|
|
|
|
SetState(STATE_DEFAULT);
|
|
SetAllowDim(true);
|
|
|
|
if(gameBrowser)
|
|
gameBrowser->SetState(STATE_DEFAULT);
|
|
|
|
if (searchBar)
|
|
{
|
|
HaltGui();
|
|
mainWindow->Append(searchBar);
|
|
ResumeGui();
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
void GameBrowseMenu::LoadCover(struct discHdr *header)
|
|
{
|
|
gameCoverImg->SetImage(NULL);
|
|
|
|
delete gameCover;
|
|
gameCover = LoadCoverImage(header);
|
|
|
|
gameCoverImg->SetImage(gameCover);// put the new image on the download button
|
|
}
|
|
|
|
void GameBrowseMenu::UpdateCallback(void * e)
|
|
{
|
|
//! Draw the selected Icon allways on top
|
|
GameBrowseMenu * w = (GameBrowseMenu *) e;
|
|
|
|
for(u32 i = 0; i < w->ToolBar.size(); ++i)
|
|
{
|
|
if(w->ToolBar[i]->GetState() == STATE_SELECTED)
|
|
{
|
|
w->Remove(w->ToolBar[i]);
|
|
w->Append(w->ToolBar[i]);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
void GameBrowseMenu::SetFreeSpace(float freespace, float used)
|
|
{
|
|
if (strcmp(Settings.db_language, "JA") == 0)
|
|
usedSpaceTxt->SetText(fmt("%.2fGB %s %.2fGB %s", freespace + used, tr( "of" ), freespace, tr( "free" )));
|
|
else
|
|
usedSpaceTxt->SetText(fmt("%.2fGB %s %.2fGB %s", freespace, tr( "of" ), freespace + used, tr( "free" )));
|
|
}
|
|
|
|
void GameBrowseMenu::UpdateFreeSpace(void * arg)
|
|
{
|
|
if (Settings.ShowFreeSpace)
|
|
{
|
|
float freespace = 0.0, used = 0.0;
|
|
usedSpaceTxt->SetVisible(true);
|
|
int ret = WBFS_DiskSpace(&used, &freespace);
|
|
if (ret >= 0)
|
|
SetFreeSpace(freespace, used);
|
|
}
|
|
}
|
|
|