mirror of
https://github.com/wiidev/usbloadergx.git
synced 2024-11-25 20:56:53 +01:00
8a4e192022
- Removed no disc in drive patch - DoGameHooks should be called always
3049 lines
100 KiB
C++
3049 lines
100 KiB
C++
#include <string.h>
|
|
#include <unistd.h>
|
|
|
|
#include "usbloader/wbfs.h"
|
|
#include "usbloader/getentries.h"
|
|
#include "language/gettext.h"
|
|
#include "libwiigui/gui.h"
|
|
#include "libwiigui/gui_customoptionbrowser.h"
|
|
#include "prompts/PromptWindows.h"
|
|
#include "prompts/DiscBrowser.h"
|
|
#include "settings/SettingsPrompts.h"
|
|
#include "prompts/filebrowser.h"
|
|
#include "cheats/cheatmenu.h"
|
|
#include "fatmounter.h"
|
|
#include "menu.h"
|
|
#include "menu/menus.h"
|
|
#include "filelist.h"
|
|
#include "listfiles.h"
|
|
#include "sys.h"
|
|
#include "cfg.h"
|
|
#include "usbloader/partition_usbloader.h"
|
|
#include "usbloader/utils.h"
|
|
#include "xml/xml.h"
|
|
|
|
#define MAXOPTIONS 13
|
|
|
|
/*** Extern functions ***/
|
|
extern void ResumeGui();
|
|
extern void HaltGui();
|
|
extern void titles_default();
|
|
|
|
/*** Extern variables ***/
|
|
extern GuiWindow * mainWindow;
|
|
extern GuiBGM * bgMusic;
|
|
extern GuiImage * bgImg;
|
|
extern GuiImageData * pointer[4];
|
|
extern GuiImageData * background;
|
|
extern u8 shutdown;
|
|
extern u8 reset;
|
|
extern u8 mountMethod;
|
|
extern struct discHdr *dvdheader;
|
|
extern PartList partitions;
|
|
extern char game_partition[6];
|
|
extern u8 load_from_fs;
|
|
|
|
static const char *opts_no_yes[settings_off_on_max] = {trNOOP("No"),trNOOP("Yes") };
|
|
static const char *opts_off_on[settings_off_on_max] = {trNOOP("OFF"),trNOOP("ON") };
|
|
static const char *opts_videomode[settings_language_max][2] = {{"",trNOOP("Disc Default")},{trNOOP("System Default"),""},{trNOOP("AutoPatch"),""},{trNOOP("Force"), " PAL50"},{trNOOP("Force")," PAL60"},{trNOOP("Force")," NTSC"}};
|
|
static const char *opts_language[settings_language_max] = {trNOOP("Console Default"),trNOOP("Japanese"),trNOOP("English"),trNOOP("German"),trNOOP("French"),trNOOP("Spanish"),trNOOP("Italian"),trNOOP("Dutch"),trNOOP("SChinese"),trNOOP("TChinese"),trNOOP("Korean")};
|
|
static const char *opts_cios[settings_ios_max] = {"IOS 249","IOS 222", "IOS 223", "IOS 250"};
|
|
static const char *opts_parentalcontrol[5] = {trNOOP("0 (Everyone)"),trNOOP("1 (Child 7+)"),trNOOP("2 (Teen 12+)"),trNOOP("3 (Mature 16+)"),trNOOP("4 (Adults Only 18+)")};
|
|
static const char *opts_error002[settings_error002_max] = {trNOOP("No"),trNOOP("Yes"),trNOOP("Anti")};
|
|
static const char *opts_partitions[settings_partitions_max] = {trNOOP("Game partition"),trNOOP("All partitions"), trNOOP("Remove update")};
|
|
static const char *opts_installdir[settings_installdir_max] = {trNOOP("None"), trNOOP("GAMEID_Gamename"), trNOOP("Gamename [GAMEID]")};
|
|
|
|
bool IsValidPartition(int fs_type, int cios) {
|
|
if (cios == 249 || cios == 250) {
|
|
return fs_type == FS_TYPE_WBFS;
|
|
} else {
|
|
return fs_type == FS_TYPE_WBFS || fs_type == FS_TYPE_FAT32 || fs_type == FS_TYPE_NTFS;
|
|
}
|
|
}
|
|
|
|
/****************************************************************************
|
|
* MenuSettings
|
|
***************************************************************************/
|
|
int MenuSettings()
|
|
{
|
|
int menu = MENU_NONE;
|
|
int ret;
|
|
int choice = 0;
|
|
bool exit = false;
|
|
|
|
// backup game language setting
|
|
char opt_lang[100];
|
|
strcpy(opt_lang,Settings.language_path);
|
|
// backup title override setting
|
|
int opt_override = Settings.titlesOverride;
|
|
// backup partition index
|
|
u8 settingspartitionold = Settings.partition;
|
|
|
|
|
|
enum
|
|
{
|
|
FADE,
|
|
LEFT,
|
|
RIGHT
|
|
};
|
|
|
|
int slidedirection = FADE;
|
|
|
|
GuiSound btnSoundOver(button_over_pcm, button_over_pcm_size, Settings.sfxvolume);
|
|
// because destroy GuiSound must wait while sound playing is finished, we use a global sound
|
|
if(!btnClick2) btnClick2=new GuiSound(button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume);
|
|
// GuiSound btnClick(button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume);
|
|
GuiSound btnClick1(button_click_pcm, button_click_pcm_size, Settings.sfxvolume);
|
|
|
|
char imgPath[100];
|
|
|
|
snprintf(imgPath, sizeof(imgPath), "%sbutton_dialogue_box.png", CFG.theme_path);
|
|
GuiImageData btnOutline(imgPath, button_dialogue_box_png);
|
|
snprintf(imgPath, sizeof(imgPath), "%ssettings_background.png", CFG.theme_path);
|
|
GuiImageData settingsbg(imgPath, settings_background_png);
|
|
|
|
snprintf(imgPath, sizeof(imgPath), "%ssettings_title.png", CFG.theme_path);
|
|
GuiImageData MainButtonImgData(imgPath, settings_title_png);
|
|
|
|
snprintf(imgPath, sizeof(imgPath), "%ssettings_title_over.png", CFG.theme_path);
|
|
GuiImageData MainButtonImgOverData(imgPath, settings_title_over_png);
|
|
|
|
snprintf(imgPath, sizeof(imgPath), "%spageindicator.png", CFG.theme_path);
|
|
GuiImageData PageindicatorImgData(imgPath, pageindicator_png);
|
|
|
|
snprintf(imgPath, sizeof(imgPath), "%sstartgame_arrow_left.png", CFG.theme_path);
|
|
GuiImageData arrow_left(imgPath, startgame_arrow_left_png);
|
|
|
|
snprintf(imgPath, sizeof(imgPath), "%sstartgame_arrow_right.png", CFG.theme_path);
|
|
GuiImageData arrow_right(imgPath, startgame_arrow_right_png);
|
|
|
|
snprintf(imgPath, sizeof(imgPath), "%scredits_button.png", CFG.theme_path);
|
|
GuiImageData creditsImgData(imgPath, credits_button_png);
|
|
|
|
snprintf(imgPath, sizeof(imgPath), "%scredits_button_over.png", CFG.theme_path);
|
|
GuiImageData creditsOver(imgPath, credits_button_over_png);
|
|
|
|
GuiImage creditsImg(&creditsImgData);
|
|
GuiImage creditsImgOver(&creditsOver);
|
|
|
|
GuiTrigger trigA;
|
|
trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A);
|
|
GuiTrigger trigHome;
|
|
trigHome.SetButtonOnlyTrigger(-1, WPAD_BUTTON_HOME | WPAD_CLASSIC_BUTTON_HOME, 0);
|
|
GuiTrigger trigB;
|
|
trigB.SetButtonOnlyTrigger(-1, WPAD_BUTTON_B | WPAD_CLASSIC_BUTTON_B, PAD_BUTTON_B);
|
|
GuiTrigger trigL;
|
|
trigL.SetButtonOnlyTrigger(-1, WPAD_BUTTON_LEFT | WPAD_CLASSIC_BUTTON_LEFT, PAD_BUTTON_LEFT);
|
|
GuiTrigger trigR;
|
|
trigR.SetButtonOnlyTrigger(-1, WPAD_BUTTON_RIGHT | WPAD_CLASSIC_BUTTON_RIGHT, PAD_BUTTON_RIGHT);
|
|
GuiTrigger trigMinus;
|
|
trigMinus.SetButtonOnlyTrigger(-1, WPAD_BUTTON_MINUS | WPAD_CLASSIC_BUTTON_MINUS, 0);
|
|
GuiTrigger trigPlus;
|
|
trigPlus.SetButtonOnlyTrigger(-1, WPAD_BUTTON_PLUS | WPAD_CLASSIC_BUTTON_PLUS, 0);
|
|
|
|
GuiText titleTxt(tr("Settings"), 28, (GXColor) {0, 0, 0, 255});
|
|
titleTxt.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
|
|
titleTxt.SetPosition(0,40);
|
|
|
|
GuiImage settingsbackground(&settingsbg);
|
|
|
|
GuiText backBtnTxt(tr("Back") , 22, THEME.prompttext);
|
|
backBtnTxt.SetMaxWidth(btnOutline.GetWidth()-30);
|
|
GuiImage backBtnImg(&btnOutline);
|
|
if (Settings.wsprompt == yes)
|
|
{
|
|
backBtnTxt.SetWidescreen(CFG.widescreen);
|
|
backBtnImg.SetWidescreen(CFG.widescreen);
|
|
}
|
|
GuiButton backBtn(&backBtnImg,&backBtnImg, 2, 3, -180, 400, &trigA, &btnSoundOver, btnClick2,1);
|
|
backBtn.SetLabel(&backBtnTxt);
|
|
backBtn.SetTrigger(&trigB);
|
|
|
|
GuiButton homo(1,1);
|
|
homo.SetTrigger(&trigHome);
|
|
|
|
GuiImage PageindicatorImg1(&PageindicatorImgData);
|
|
GuiText PageindicatorTxt1("1", 22, (GXColor) { 0, 0, 0, 255});
|
|
GuiButton PageIndicatorBtn1(PageindicatorImg1.GetWidth(), PageindicatorImg1.GetHeight());
|
|
PageIndicatorBtn1.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
|
|
PageIndicatorBtn1.SetPosition(165, 400);
|
|
PageIndicatorBtn1.SetImage(&PageindicatorImg1);
|
|
PageIndicatorBtn1.SetLabel(&PageindicatorTxt1);
|
|
PageIndicatorBtn1.SetSoundOver(&btnSoundOver);
|
|
PageIndicatorBtn1.SetSoundClick(&btnClick1);
|
|
PageIndicatorBtn1.SetTrigger(&trigA);
|
|
PageIndicatorBtn1.SetEffectGrow();
|
|
|
|
GuiImage PageindicatorImg2(&PageindicatorImgData);
|
|
GuiText PageindicatorTxt2("2", 22, (GXColor) {0, 0, 0, 255});
|
|
GuiButton PageIndicatorBtn2(PageindicatorImg2.GetWidth(), PageindicatorImg2.GetHeight());
|
|
PageIndicatorBtn2.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
|
|
PageIndicatorBtn2.SetPosition(200, 400);
|
|
PageIndicatorBtn2.SetImage(&PageindicatorImg2);
|
|
PageIndicatorBtn2.SetLabel(&PageindicatorTxt2);
|
|
PageIndicatorBtn2.SetSoundOver(&btnSoundOver);
|
|
PageIndicatorBtn2.SetSoundClick(&btnClick1);
|
|
PageIndicatorBtn2.SetTrigger(&trigA);
|
|
PageIndicatorBtn2.SetEffectGrow();
|
|
|
|
GuiImage PageindicatorImg3(&PageindicatorImgData);
|
|
GuiText PageindicatorTxt3("3", 22, (GXColor) {0, 0, 0, 255});
|
|
GuiButton PageIndicatorBtn3(PageindicatorImg3.GetWidth(), PageindicatorImg3.GetHeight());
|
|
PageIndicatorBtn3.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
|
|
PageIndicatorBtn3.SetPosition(235, 400);
|
|
PageIndicatorBtn3.SetImage(&PageindicatorImg3);
|
|
PageIndicatorBtn3.SetLabel(&PageindicatorTxt3);
|
|
PageIndicatorBtn3.SetSoundOver(&btnSoundOver);
|
|
PageIndicatorBtn3.SetSoundClick(&btnClick1);
|
|
PageIndicatorBtn3.SetTrigger(&trigA);
|
|
PageIndicatorBtn3.SetEffectGrow();
|
|
|
|
GuiImage GoLeftImg(&arrow_left);
|
|
GuiButton GoLeftBtn(GoLeftImg.GetWidth(), GoLeftImg.GetHeight());
|
|
GoLeftBtn.SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE);
|
|
GoLeftBtn.SetPosition(25, -25);
|
|
GoLeftBtn.SetImage(&GoLeftImg);
|
|
GoLeftBtn.SetSoundOver(&btnSoundOver);
|
|
GoLeftBtn.SetSoundClick(btnClick2);
|
|
GoLeftBtn.SetEffectGrow();
|
|
GoLeftBtn.SetTrigger(&trigA);
|
|
GoLeftBtn.SetTrigger(&trigL);
|
|
GoLeftBtn.SetTrigger(&trigMinus);
|
|
|
|
GuiImage GoRightImg(&arrow_right);
|
|
GuiButton GoRightBtn(GoRightImg.GetWidth(), GoRightImg.GetHeight());
|
|
GoRightBtn.SetAlignment(ALIGN_RIGHT, ALIGN_MIDDLE);
|
|
GoRightBtn.SetPosition(-25, -25);
|
|
GoRightBtn.SetImage(&GoRightImg);
|
|
GoRightBtn.SetSoundOver(&btnSoundOver);
|
|
GoRightBtn.SetSoundClick(btnClick2);
|
|
GoRightBtn.SetEffectGrow();
|
|
GoRightBtn.SetTrigger(&trigA);
|
|
GoRightBtn.SetTrigger(&trigR);
|
|
GoRightBtn.SetTrigger(&trigPlus);
|
|
|
|
char MainButtonText[50];
|
|
snprintf(MainButtonText, sizeof(MainButtonText), "%s", " ");
|
|
|
|
GuiImage MainButton1Img(&MainButtonImgData);
|
|
GuiImage MainButton1ImgOver(&MainButtonImgOverData);
|
|
GuiText MainButton1Txt(MainButtonText, 22, (GXColor) {0, 0, 0, 255});
|
|
MainButton1Txt.SetMaxWidth(MainButton1Img.GetWidth());
|
|
GuiButton MainButton1(MainButton1Img.GetWidth(), MainButton1Img.GetHeight());
|
|
MainButton1.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
|
|
MainButton1.SetPosition(0, 90);
|
|
MainButton1.SetImage(&MainButton1Img);
|
|
MainButton1.SetImageOver(&MainButton1ImgOver);
|
|
MainButton1.SetLabel(&MainButton1Txt);
|
|
MainButton1.SetSoundOver(&btnSoundOver);
|
|
MainButton1.SetSoundClick(&btnClick1);
|
|
MainButton1.SetEffectGrow();
|
|
MainButton1.SetTrigger(&trigA);
|
|
|
|
GuiImage MainButton2Img(&MainButtonImgData);
|
|
GuiImage MainButton2ImgOver(&MainButtonImgOverData);
|
|
GuiText MainButton2Txt(MainButtonText, 22, (GXColor) {0, 0, 0, 255 });
|
|
MainButton2Txt.SetMaxWidth(MainButton2Img.GetWidth());
|
|
GuiButton MainButton2(MainButton2Img.GetWidth(), MainButton2Img.GetHeight());
|
|
MainButton2.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
|
|
MainButton2.SetPosition(0, 160);
|
|
MainButton2.SetImage(&MainButton2Img);
|
|
MainButton2.SetImageOver(&MainButton2ImgOver);
|
|
MainButton2.SetLabel(&MainButton2Txt);
|
|
MainButton2.SetSoundOver(&btnSoundOver);
|
|
MainButton2.SetSoundClick(&btnClick1);
|
|
MainButton2.SetEffectGrow();
|
|
MainButton2.SetTrigger(&trigA);
|
|
|
|
GuiImage MainButton3Img(&MainButtonImgData);
|
|
GuiImage MainButton3ImgOver(&MainButtonImgOverData);
|
|
GuiText MainButton3Txt(MainButtonText, 22, (GXColor) {0, 0, 0, 255});
|
|
MainButton3Txt.SetMaxWidth(MainButton3Img.GetWidth());
|
|
GuiButton MainButton3(MainButton3Img.GetWidth(), MainButton3Img.GetHeight());
|
|
MainButton3.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
|
|
MainButton3.SetPosition(0, 230);
|
|
MainButton3.SetImage(&MainButton3Img);
|
|
MainButton3.SetImageOver(&MainButton3ImgOver);
|
|
MainButton3.SetLabel(&MainButton3Txt);
|
|
MainButton3.SetSoundOver(&btnSoundOver);
|
|
MainButton3.SetSoundClick(&btnClick1);
|
|
MainButton3.SetEffectGrow();
|
|
MainButton3.SetTrigger(&trigA);
|
|
|
|
GuiImage MainButton4Img(&MainButtonImgData);
|
|
GuiImage MainButton4ImgOver(&MainButtonImgOverData);
|
|
GuiText MainButton4Txt(MainButtonText, 22, (GXColor) {0, 0, 0, 255});
|
|
MainButton4Txt.SetMaxWidth(MainButton4Img.GetWidth());
|
|
GuiButton MainButton4(MainButton4Img.GetWidth(), MainButton4Img.GetHeight());
|
|
MainButton4.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
|
|
MainButton4.SetPosition(0, 300);
|
|
MainButton4.SetImage(&MainButton4Img);
|
|
MainButton4.SetImageOver(&MainButton4ImgOver);
|
|
MainButton4.SetLabel(&MainButton4Txt);
|
|
MainButton4.SetSoundOver(&btnSoundOver);
|
|
MainButton4.SetSoundClick(&btnClick1);
|
|
MainButton4.SetEffectGrow();
|
|
MainButton4.SetTrigger(&trigA);
|
|
|
|
customOptionList options2(MAXOPTIONS);
|
|
GuiCustomOptionBrowser optionBrowser2(396, 280, &options2, CFG.theme_path, "bg_options_settings.png", bg_options_settings_png, 0, 150);
|
|
optionBrowser2.SetPosition(0, 90);
|
|
optionBrowser2.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
|
|
|
|
GuiWindow w(screenwidth, screenheight);
|
|
|
|
int pageToDisplay = 1;
|
|
while ( pageToDisplay > 0) { //set pageToDisplay to 0 to quit
|
|
VIDEO_WaitVSync ();
|
|
|
|
menu = MENU_NONE;
|
|
|
|
if ( pageToDisplay == 1)
|
|
{
|
|
/** Standard procedure made in all pages **/
|
|
MainButton1.StopEffect();
|
|
MainButton2.StopEffect();
|
|
MainButton3.StopEffect();
|
|
MainButton4.StopEffect();
|
|
|
|
if (slidedirection == RIGHT)
|
|
{
|
|
MainButton1.SetEffect(EFFECT_SLIDE_LEFT | EFFECT_SLIDE_OUT, 35);
|
|
MainButton2.SetEffect(EFFECT_SLIDE_LEFT | EFFECT_SLIDE_OUT, 35);
|
|
MainButton3.SetEffect(EFFECT_SLIDE_LEFT | EFFECT_SLIDE_OUT, 35);
|
|
MainButton4.SetEffect(EFFECT_SLIDE_LEFT | EFFECT_SLIDE_OUT, 35);
|
|
while (MainButton1.GetEffect()>0) usleep(50);
|
|
}
|
|
else if (slidedirection == LEFT)
|
|
{
|
|
MainButton1.SetEffect(EFFECT_SLIDE_RIGHT | EFFECT_SLIDE_OUT, 35);
|
|
MainButton2.SetEffect(EFFECT_SLIDE_RIGHT | EFFECT_SLIDE_OUT, 35);
|
|
MainButton3.SetEffect(EFFECT_SLIDE_RIGHT | EFFECT_SLIDE_OUT, 35);
|
|
MainButton4.SetEffect(EFFECT_SLIDE_RIGHT | EFFECT_SLIDE_OUT, 35);
|
|
while (MainButton1.GetEffect()>0) usleep(50);
|
|
}
|
|
|
|
HaltGui();
|
|
|
|
snprintf(MainButtonText, sizeof(MainButtonText), "%s", tr("GUI Settings"));
|
|
MainButton1Txt.SetText(MainButtonText);
|
|
snprintf(MainButtonText, sizeof(MainButtonText), "%s", tr("Game Load"));
|
|
MainButton2Txt.SetText(MainButtonText);
|
|
snprintf(MainButtonText, sizeof(MainButtonText), "%s", tr("Parental Control"));
|
|
MainButton3Txt.SetText(MainButtonText);
|
|
snprintf(MainButtonText, sizeof(MainButtonText), "%s", tr("Sound"));
|
|
MainButton4Txt.SetText(MainButtonText);
|
|
|
|
mainWindow->RemoveAll();
|
|
mainWindow->Append(&w);
|
|
w.RemoveAll();
|
|
w.Append(&settingsbackground);
|
|
w.Append(&PageIndicatorBtn1);
|
|
w.Append(&PageIndicatorBtn2);
|
|
w.Append(&PageIndicatorBtn3);
|
|
w.Append(&titleTxt);
|
|
w.Append(&backBtn);
|
|
w.Append(&homo);
|
|
w.Append(&GoRightBtn);
|
|
w.Append(&GoLeftBtn);
|
|
w.Append(&MainButton1);
|
|
w.Append(&MainButton2);
|
|
w.Append(&MainButton3);
|
|
w.Append(&MainButton4);
|
|
|
|
PageIndicatorBtn1.SetAlpha(255);
|
|
PageIndicatorBtn2.SetAlpha(50);
|
|
PageIndicatorBtn3.SetAlpha(50);
|
|
|
|
/** Creditsbutton change **/
|
|
MainButton4.SetImage(&MainButton4Img);
|
|
MainButton4.SetImageOver(&MainButton4ImgOver);
|
|
|
|
/** Disable ability to click through MainButtons */
|
|
optionBrowser2.SetClickable(false);
|
|
/** Default no scrollbar and reset position **/
|
|
// optionBrowser2.SetScrollbar(0);
|
|
optionBrowser2.SetOffset(0);
|
|
|
|
MainButton1.StopEffect();
|
|
MainButton2.StopEffect();
|
|
MainButton3.StopEffect();
|
|
MainButton4.StopEffect();
|
|
|
|
MainButton1.SetEffectGrow();
|
|
MainButton2.SetEffectGrow();
|
|
MainButton3.SetEffectGrow();
|
|
MainButton4.SetEffectGrow();
|
|
|
|
if (slidedirection == FADE)
|
|
{
|
|
MainButton1.SetEffect(EFFECT_FADE, 20);
|
|
MainButton2.SetEffect(EFFECT_FADE, 20);
|
|
MainButton3.SetEffect(EFFECT_FADE, 20);
|
|
MainButton4.SetEffect(EFFECT_FADE, 20);
|
|
}
|
|
else if (slidedirection == LEFT)
|
|
{
|
|
MainButton1.SetEffect(EFFECT_SLIDE_LEFT | EFFECT_SLIDE_IN, 35);
|
|
MainButton2.SetEffect(EFFECT_SLIDE_LEFT | EFFECT_SLIDE_IN, 35);
|
|
MainButton3.SetEffect(EFFECT_SLIDE_LEFT | EFFECT_SLIDE_IN, 35);
|
|
MainButton4.SetEffect(EFFECT_SLIDE_LEFT | EFFECT_SLIDE_IN, 35);
|
|
}
|
|
else if (slidedirection == RIGHT)
|
|
{
|
|
MainButton1.SetEffect(EFFECT_SLIDE_RIGHT | EFFECT_SLIDE_IN, 35);
|
|
MainButton2.SetEffect(EFFECT_SLIDE_RIGHT | EFFECT_SLIDE_IN, 35);
|
|
MainButton3.SetEffect(EFFECT_SLIDE_RIGHT | EFFECT_SLIDE_IN, 35);
|
|
MainButton4.SetEffect(EFFECT_SLIDE_RIGHT | EFFECT_SLIDE_IN, 35);
|
|
}
|
|
|
|
mainWindow->Append(&w);
|
|
|
|
ResumeGui();
|
|
|
|
while (MainButton1.GetEffect() > 0) usleep(50);
|
|
|
|
}
|
|
else if ( pageToDisplay == 2 )
|
|
{
|
|
/** Standard procedure made in all pages **/
|
|
MainButton1.StopEffect();
|
|
MainButton2.StopEffect();
|
|
MainButton3.StopEffect();
|
|
MainButton4.StopEffect();
|
|
|
|
if (slidedirection == RIGHT)
|
|
{
|
|
MainButton1.SetEffect(EFFECT_SLIDE_LEFT | EFFECT_SLIDE_OUT, 35);
|
|
MainButton2.SetEffect(EFFECT_SLIDE_LEFT | EFFECT_SLIDE_OUT, 35);
|
|
MainButton3.SetEffect(EFFECT_SLIDE_LEFT | EFFECT_SLIDE_OUT, 35);
|
|
MainButton4.SetEffect(EFFECT_SLIDE_LEFT | EFFECT_SLIDE_OUT, 35);
|
|
while (MainButton1.GetEffect()>0) usleep(50);
|
|
}
|
|
else if (slidedirection == LEFT)
|
|
{
|
|
MainButton1.SetEffect(EFFECT_SLIDE_RIGHT | EFFECT_SLIDE_OUT, 35);
|
|
MainButton2.SetEffect(EFFECT_SLIDE_RIGHT | EFFECT_SLIDE_OUT, 35);
|
|
MainButton3.SetEffect(EFFECT_SLIDE_RIGHT | EFFECT_SLIDE_OUT, 35);
|
|
MainButton4.SetEffect(EFFECT_SLIDE_RIGHT | EFFECT_SLIDE_OUT, 35);
|
|
while (MainButton1.GetEffect()>0) usleep(50);
|
|
}
|
|
|
|
HaltGui();
|
|
|
|
snprintf(MainButtonText, sizeof(MainButtonText), "%s", tr("Custom Paths"));
|
|
MainButton1Txt.SetText(MainButtonText);
|
|
snprintf(MainButtonText, sizeof(MainButtonText), "%s", tr("Update"));
|
|
MainButton2Txt.SetText(MainButtonText);
|
|
snprintf(MainButtonText, sizeof(MainButtonText), "%s", tr("Default Settings"));
|
|
MainButton3Txt.SetText(MainButtonText);
|
|
snprintf(MainButtonText, sizeof(MainButtonText), "%s", tr("Credits"));
|
|
MainButton4Txt.SetText(MainButtonText);
|
|
|
|
mainWindow->RemoveAll();
|
|
mainWindow->Append(&w);
|
|
w.RemoveAll();
|
|
w.Append(&settingsbackground);
|
|
w.Append(&PageIndicatorBtn1);
|
|
w.Append(&PageIndicatorBtn2);
|
|
w.Append(&PageIndicatorBtn3);
|
|
w.Append(&titleTxt);
|
|
w.Append(&backBtn);
|
|
w.Append(&homo);
|
|
w.Append(&GoRightBtn);
|
|
w.Append(&GoLeftBtn);
|
|
w.Append(&MainButton1);
|
|
w.Append(&MainButton2);
|
|
w.Append(&MainButton3);
|
|
w.Append(&MainButton4);
|
|
|
|
PageIndicatorBtn1.SetAlpha(50);
|
|
PageIndicatorBtn2.SetAlpha(255);
|
|
PageIndicatorBtn3.SetAlpha(50);
|
|
|
|
/** Creditsbutton change **/
|
|
MainButton4.SetImage(&creditsImg);
|
|
MainButton4.SetImageOver(&creditsImgOver);
|
|
|
|
/** Disable ability to click through MainButtons */
|
|
optionBrowser2.SetClickable(false);
|
|
/** Default no scrollbar and reset position **/
|
|
// optionBrowser2.SetScrollbar(0);
|
|
optionBrowser2.SetOffset(0);
|
|
|
|
MainButton1.StopEffect();
|
|
MainButton2.StopEffect();
|
|
MainButton3.StopEffect();
|
|
MainButton4.StopEffect();
|
|
|
|
MainButton1.SetEffectGrow();
|
|
MainButton2.SetEffectGrow();
|
|
MainButton3.SetEffectGrow();
|
|
MainButton4.SetEffectGrow();
|
|
|
|
if (slidedirection == FADE)
|
|
{
|
|
MainButton1.SetEffect(EFFECT_FADE, 20);
|
|
MainButton2.SetEffect(EFFECT_FADE, 20);
|
|
MainButton3.SetEffect(EFFECT_FADE, 20);
|
|
MainButton4.SetEffect(EFFECT_FADE, 20);
|
|
}
|
|
else if (slidedirection == LEFT)
|
|
{
|
|
MainButton1.SetEffect(EFFECT_SLIDE_LEFT | EFFECT_SLIDE_IN, 35);
|
|
MainButton2.SetEffect(EFFECT_SLIDE_LEFT | EFFECT_SLIDE_IN, 35);
|
|
MainButton3.SetEffect(EFFECT_SLIDE_LEFT | EFFECT_SLIDE_IN, 35);
|
|
MainButton4.SetEffect(EFFECT_SLIDE_LEFT | EFFECT_SLIDE_IN, 35);
|
|
}
|
|
else if (slidedirection == RIGHT)
|
|
{
|
|
MainButton1.SetEffect(EFFECT_SLIDE_RIGHT | EFFECT_SLIDE_IN, 35);
|
|
MainButton2.SetEffect(EFFECT_SLIDE_RIGHT | EFFECT_SLIDE_IN, 35);
|
|
MainButton3.SetEffect(EFFECT_SLIDE_RIGHT | EFFECT_SLIDE_IN, 35);
|
|
MainButton4.SetEffect(EFFECT_SLIDE_RIGHT | EFFECT_SLIDE_IN, 35);
|
|
}
|
|
|
|
mainWindow->Append(&w);
|
|
|
|
ResumeGui();
|
|
|
|
while (MainButton1.GetEffect() > 0) usleep(50);
|
|
|
|
}
|
|
else if ( pageToDisplay == 3 )
|
|
{
|
|
/** Standard procedure made in all pages **/
|
|
MainButton1.StopEffect();
|
|
MainButton2.StopEffect();
|
|
MainButton3.StopEffect();
|
|
MainButton4.StopEffect();
|
|
|
|
if (slidedirection == RIGHT)
|
|
{
|
|
MainButton1.SetEffect(EFFECT_SLIDE_LEFT | EFFECT_SLIDE_OUT, 35);
|
|
MainButton2.SetEffect(EFFECT_SLIDE_LEFT | EFFECT_SLIDE_OUT, 35);
|
|
MainButton3.SetEffect(EFFECT_SLIDE_LEFT | EFFECT_SLIDE_OUT, 35);
|
|
MainButton4.SetEffect(EFFECT_SLIDE_LEFT | EFFECT_SLIDE_OUT, 35);
|
|
while (MainButton1.GetEffect()>0) usleep(50);
|
|
}
|
|
else if (slidedirection == LEFT)
|
|
{
|
|
MainButton1.SetEffect(EFFECT_SLIDE_RIGHT | EFFECT_SLIDE_OUT, 35);
|
|
MainButton2.SetEffect(EFFECT_SLIDE_RIGHT | EFFECT_SLIDE_OUT, 35);
|
|
MainButton3.SetEffect(EFFECT_SLIDE_RIGHT | EFFECT_SLIDE_OUT, 35);
|
|
MainButton4.SetEffect(EFFECT_SLIDE_RIGHT | EFFECT_SLIDE_OUT, 35);
|
|
while (MainButton1.GetEffect()>0) usleep(50);
|
|
}
|
|
|
|
HaltGui();
|
|
|
|
snprintf(MainButtonText, sizeof(MainButtonText), "%s", tr("Theme Downloader"));
|
|
MainButton1Txt.SetText(MainButtonText);
|
|
snprintf(MainButtonText, sizeof(MainButtonText), "%s", tr(" "));
|
|
MainButton2Txt.SetText(MainButtonText);
|
|
snprintf(MainButtonText, sizeof(MainButtonText), "%s", tr(" "));
|
|
MainButton3Txt.SetText(MainButtonText);
|
|
snprintf(MainButtonText, sizeof(MainButtonText), "%s", tr(" "));
|
|
MainButton4Txt.SetText(MainButtonText);
|
|
|
|
mainWindow->RemoveAll();
|
|
mainWindow->Append(&w);
|
|
w.RemoveAll();
|
|
w.Append(&settingsbackground);
|
|
w.Append(&PageIndicatorBtn1);
|
|
w.Append(&PageIndicatorBtn2);
|
|
w.Append(&PageIndicatorBtn3);
|
|
w.Append(&titleTxt);
|
|
w.Append(&backBtn);
|
|
w.Append(&homo);
|
|
w.Append(&GoRightBtn);
|
|
w.Append(&GoLeftBtn);
|
|
w.Append(&MainButton1);
|
|
|
|
PageIndicatorBtn1.SetAlpha(50);
|
|
PageIndicatorBtn2.SetAlpha(50);
|
|
PageIndicatorBtn3.SetAlpha(255);
|
|
|
|
/** Disable ability to click through MainButtons */
|
|
optionBrowser2.SetClickable(false);
|
|
/** Default no scrollbar and reset position **/
|
|
// optionBrowser2.SetScrollbar(0);
|
|
optionBrowser2.SetOffset(0);
|
|
|
|
MainButton1.StopEffect();
|
|
MainButton2.StopEffect();
|
|
MainButton3.StopEffect();
|
|
MainButton4.StopEffect();
|
|
|
|
MainButton1.SetEffectGrow();
|
|
MainButton2.SetEffectGrow();
|
|
MainButton3.SetEffectGrow();
|
|
MainButton4.SetEffectGrow();
|
|
|
|
if (slidedirection == FADE)
|
|
{
|
|
MainButton1.SetEffect(EFFECT_FADE, 20);
|
|
MainButton2.SetEffect(EFFECT_FADE, 20);
|
|
MainButton3.SetEffect(EFFECT_FADE, 20);
|
|
MainButton4.SetEffect(EFFECT_FADE, 20);
|
|
}
|
|
else if (slidedirection == LEFT)
|
|
{
|
|
MainButton1.SetEffect(EFFECT_SLIDE_LEFT | EFFECT_SLIDE_IN, 35);
|
|
MainButton2.SetEffect(EFFECT_SLIDE_LEFT | EFFECT_SLIDE_IN, 35);
|
|
MainButton3.SetEffect(EFFECT_SLIDE_LEFT | EFFECT_SLIDE_IN, 35);
|
|
MainButton4.SetEffect(EFFECT_SLIDE_LEFT | EFFECT_SLIDE_IN, 35);
|
|
}
|
|
else if (slidedirection == RIGHT)
|
|
{
|
|
MainButton1.SetEffect(EFFECT_SLIDE_RIGHT | EFFECT_SLIDE_IN, 35);
|
|
MainButton2.SetEffect(EFFECT_SLIDE_RIGHT | EFFECT_SLIDE_IN, 35);
|
|
MainButton3.SetEffect(EFFECT_SLIDE_RIGHT | EFFECT_SLIDE_IN, 35);
|
|
MainButton4.SetEffect(EFFECT_SLIDE_RIGHT | EFFECT_SLIDE_IN, 35);
|
|
}
|
|
|
|
mainWindow->Append(&w);
|
|
|
|
ResumeGui();
|
|
|
|
while (MainButton1.GetEffect() > 0) usleep(50);
|
|
}
|
|
|
|
while (menu == MENU_NONE)
|
|
{
|
|
VIDEO_WaitVSync ();
|
|
|
|
if (shutdown == 1)
|
|
Sys_Shutdown();
|
|
if (reset == 1)
|
|
Sys_Reboot();
|
|
|
|
if ( pageToDisplay == 1 )
|
|
{
|
|
if (MainButton1.GetState() == STATE_CLICKED)
|
|
{
|
|
MainButton1.SetEffect(EFFECT_FADE, -20);
|
|
MainButton2.SetEffect(EFFECT_FADE, -20);
|
|
MainButton3.SetEffect(EFFECT_FADE, -20);
|
|
MainButton4.SetEffect(EFFECT_FADE, -20);
|
|
while (MainButton1.GetEffect() > 0) usleep(50);
|
|
HaltGui();
|
|
w.Remove(&PageIndicatorBtn1);
|
|
w.Remove(&PageIndicatorBtn2);
|
|
w.Remove(&PageIndicatorBtn3);
|
|
w.Remove(&GoRightBtn);
|
|
w.Remove(&GoLeftBtn);
|
|
w.Remove(&MainButton1);
|
|
w.Remove(&MainButton2);
|
|
w.Remove(&MainButton3);
|
|
w.Remove(&MainButton4);
|
|
titleTxt.SetText(tr("GUI Settings"));
|
|
exit = false;
|
|
options2.SetLength(0);
|
|
// optionBrowser2.SetScrollbar(1);
|
|
w.Append(&optionBrowser2);
|
|
optionBrowser2.SetClickable(true);
|
|
ResumeGui();
|
|
|
|
VIDEO_WaitVSync ();
|
|
optionBrowser2.SetEffect(EFFECT_FADE, 20);
|
|
while (optionBrowser2.GetEffect() > 0) usleep(50);
|
|
|
|
int returnhere = 1;
|
|
char * languagefile;
|
|
languagefile = strrchr(Settings.language_path, '/')+1;
|
|
|
|
bool firstRun = true;
|
|
while (!exit)
|
|
{
|
|
VIDEO_WaitVSync ();
|
|
|
|
returnhere = 1;
|
|
|
|
if (shutdown == 1)
|
|
Sys_Shutdown();
|
|
if (reset == 1)
|
|
Sys_Reboot();
|
|
|
|
else if (backBtn.GetState() == STATE_CLICKED)
|
|
{
|
|
backBtn.ResetState();
|
|
exit = true;
|
|
break;
|
|
}
|
|
|
|
else if (menu == MENU_DISCLIST)
|
|
{
|
|
w.Remove(&optionBrowser2);
|
|
w.Remove(&backBtn);
|
|
WindowCredits();
|
|
w.Append(&optionBrowser2);
|
|
w.Append(&backBtn);
|
|
}
|
|
|
|
else if (homo.GetState() == STATE_CLICKED)
|
|
{
|
|
cfg_save_global();
|
|
optionBrowser2.SetState(STATE_DISABLED);
|
|
bgMusic->Pause();
|
|
choice = WindowExitPrompt();
|
|
bgMusic->Resume();
|
|
if (choice == 3)
|
|
Sys_LoadMenu(); // Back to System Menu
|
|
else if (choice == 2)
|
|
Sys_BackToLoader();
|
|
else
|
|
homo.ResetState();
|
|
optionBrowser2.SetState(STATE_DEFAULT);
|
|
}
|
|
|
|
ret = optionBrowser2.GetClickedOption();
|
|
|
|
if(firstRun || ret >= 0)
|
|
{
|
|
int Idx = -1;
|
|
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx, "%s",tr("App Language"));
|
|
if(ret == Idx)
|
|
{
|
|
if (isInserted(bootDevice))
|
|
{
|
|
if ( Settings.godmode == 1)
|
|
{
|
|
w.SetEffect(EFFECT_FADE, -20);
|
|
while (w.GetEffect()>0) usleep(50);
|
|
mainWindow->Remove(&w);
|
|
while (returnhere == 1)
|
|
returnhere = MenuLanguageSelect();
|
|
if (returnhere == 2)
|
|
{
|
|
menu = MENU_SETTINGS;
|
|
pageToDisplay = 0;
|
|
exit = true;
|
|
mainWindow->Append(&w);
|
|
break;
|
|
}
|
|
else
|
|
{
|
|
HaltGui();
|
|
mainWindow->Append(&w);
|
|
w.SetEffect(EFFECT_FADE, 20);
|
|
ResumeGui();
|
|
while (w.GetEffect()>0) usleep(50);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
WindowPrompt(tr("Language change:"),tr("Console should be unlocked to modify it."),tr("OK"));
|
|
}
|
|
}
|
|
else
|
|
{
|
|
WindowPrompt(tr("No SD-Card inserted!"),tr("Insert an SD-Card to use this option."),tr("OK"));
|
|
}
|
|
}
|
|
|
|
if (!strcmp("notset", Settings.language_path))
|
|
options2.SetValue(Idx, "%s", tr("Default"));
|
|
else
|
|
options2.SetValue(Idx, "%s", languagefile);
|
|
}
|
|
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx, "%s",tr("Display"));
|
|
if(ret == Idx && ++Settings.sinfo >= settings_sinfo_max)
|
|
Settings.sinfo = 0;
|
|
static const char *opts[settings_sinfo_max] = {trNOOP("Game ID"),trNOOP("Game Region"),trNOOP("Both"),trNOOP("Neither")};
|
|
options2.SetValue(Idx,"%s",tr(opts[Settings.sinfo]));
|
|
}
|
|
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx, "%s",tr("Clock"));
|
|
if(ret == Idx && ++Settings.hddinfo >= settings_clock_max)
|
|
Settings.hddinfo = 0; //CLOCK
|
|
if (Settings.hddinfo == hr12) options2.SetValue(Idx,"12 %s",tr("Hour"));
|
|
else if (Settings.hddinfo == hr24) options2.SetValue(Idx,"24 %s",tr("Hour"));
|
|
else if (Settings.hddinfo == Off) options2.SetValue(Idx,"%s",tr("OFF"));
|
|
}
|
|
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx, "%s",tr("Tooltips"));
|
|
if(ret == Idx && ++Settings.tooltips >= settings_tooltips_max)
|
|
Settings.tooltips = 0;
|
|
options2.SetValue(Idx,"%s",tr(opts_off_on[Settings.tooltips]));
|
|
}
|
|
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx, "%s",tr("Flip-X"));
|
|
if(ret == Idx && ++Settings.xflip >= settings_xflip_max)
|
|
Settings.xflip = 0;
|
|
static const char *opts[settings_xflip_max][3] = { {trNOOP("Right"),"/",trNOOP("Next")},
|
|
{trNOOP("Left"),"/",trNOOP("Prev")},
|
|
{trNOOP("Like SysMenu"),"",""},
|
|
{trNOOP("Right"),"/",trNOOP("Prev")},
|
|
{trNOOP("DiskFlip"),"",""}};
|
|
options2.SetValue(Idx,"%s%s%s",tr(opts[Settings.xflip][0]),opts[Settings.xflip][1],tr(opts[Settings.xflip][2]));
|
|
}
|
|
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx, "%s",tr("Prompts Buttons"));
|
|
if(ret == Idx && ++Settings.wsprompt >= settings_off_on_max )
|
|
Settings.wsprompt = 0;
|
|
static const char *opts[settings_off_on_max] = {trNOOP("Normal"),trNOOP("Widescreen Fix")};
|
|
options2.SetValue(Idx,"%s",tr(opts[Settings.wsprompt]));
|
|
}
|
|
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx, "%s",tr("Keyboard"));
|
|
if(ret == Idx && ++Settings.keyset >= settings_keyset_max)
|
|
Settings.keyset = 0;
|
|
static const char *opts[settings_keyset_max] = {"QWERTY","QWERTY 2","DVORAK","QWERTZ","AZERTY"};
|
|
options2.SetValue(Idx,"%s", opts[Settings.keyset]);
|
|
}
|
|
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx, "%s",tr("Disc Artwork Download"));
|
|
if(ret == Idx && ++Settings.discart >= 4)
|
|
Settings.discart = 0;
|
|
static const char *opts[4] = {trNOOP("Only Original"),trNOOP("Only Customs"),trNOOP("Original/Customs"),trNOOP("Customs/Original")};
|
|
options2.SetValue(Idx,"%s",tr(opts[Settings.discart]));
|
|
}
|
|
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx, "%s",tr("Wiilight"));
|
|
if(ret == Idx && ++Settings.wiilight >= settings_wiilight_max )
|
|
Settings.wiilight = 0;
|
|
static const char *opts[settings_wiilight_max] = {trNOOP("OFF"),trNOOP("ON"),trNOOP("Only for Install")};
|
|
options2.SetValue(Idx,"%s",tr(opts[Settings.wiilight]));
|
|
}
|
|
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx, "%s",tr("Rumble"));
|
|
if(ret == Idx && ++Settings.rumble >= settings_rumble_max)
|
|
Settings.rumble = 0; //RUMBLE
|
|
options2.SetValue(Idx,"%s",tr(opts_off_on[Settings.rumble]));
|
|
}
|
|
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx, "%s",tr("AutoInit Network"));
|
|
if(ret == Idx && ++Settings.autonetwork >= settings_off_on_max)
|
|
Settings.autonetwork = 0;
|
|
options2.SetValue(Idx,"%s",tr(opts_off_on[Settings.autonetwork]));
|
|
}
|
|
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx, "%s", tr("BETA revisions"));
|
|
if(ret == Idx && ++Settings.beta_upgrades >= settings_off_on_max)
|
|
Settings.beta_upgrades = 0;
|
|
options2.SetValue(Idx,"%s",tr(opts_off_on[Settings.beta_upgrades]));
|
|
}
|
|
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx, "%s",tr("Titles from WiiTDB"));
|
|
if(ret == Idx && ++Settings.titlesOverride >= settings_off_on_max)
|
|
Settings.titlesOverride = 0;
|
|
options2.SetValue(Idx,"%s",tr(opts_off_on[Settings.titlesOverride]));
|
|
}
|
|
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx, "%s",tr("Screensaver"));
|
|
if(ret == Idx && ++Settings.screensaver >= settings_screensaver_max)
|
|
Settings.screensaver = 0; //RUMBLE
|
|
static const char *opts[settings_screensaver_max] = {trNOOP("OFF"),trNOOP("3 min"),trNOOP("5 min"),trNOOP("10 min"),trNOOP("20 min"),trNOOP("30 min"),trNOOP("1 hour")};
|
|
options2.SetValue(Idx,"%s",tr(opts[Settings.screensaver]));
|
|
}
|
|
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx, "%s",tr("Mark new games"));
|
|
if(ret == Idx && ++Settings.marknewtitles >= settings_off_on_max)
|
|
Settings.marknewtitles = 0;
|
|
options2.SetValue(Idx,"%s",tr(opts_off_on[Settings.marknewtitles]));
|
|
}
|
|
|
|
firstRun = false;
|
|
}
|
|
}
|
|
optionBrowser2.SetEffect(EFFECT_FADE, -20);
|
|
while (optionBrowser2.GetEffect() > 0) usleep(50);
|
|
titleTxt.SetText(tr("Settings"));
|
|
slidedirection = FADE;
|
|
if (returnhere != 2)
|
|
pageToDisplay = 1;
|
|
MainButton1.ResetState();
|
|
break;
|
|
}
|
|
|
|
else if (MainButton2.GetState() == STATE_CLICKED)
|
|
{
|
|
MainButton1.SetEffect(EFFECT_FADE, -20);
|
|
MainButton2.SetEffect(EFFECT_FADE, -20);
|
|
MainButton3.SetEffect(EFFECT_FADE, -20);
|
|
MainButton4.SetEffect(EFFECT_FADE, -20);
|
|
while (MainButton2.GetEffect() > 0) usleep(50);
|
|
HaltGui();
|
|
w.Remove(&PageIndicatorBtn1);
|
|
w.Remove(&PageIndicatorBtn2);
|
|
w.Remove(&PageIndicatorBtn3);
|
|
w.Remove(&GoRightBtn);
|
|
w.Remove(&GoLeftBtn);
|
|
w.Remove(&MainButton1);
|
|
w.Remove(&MainButton2);
|
|
w.Remove(&MainButton3);
|
|
w.Remove(&MainButton4);
|
|
titleTxt.SetText(tr("Game Load"));
|
|
exit = false;
|
|
options2.SetLength(0);
|
|
w.Append(&optionBrowser2);
|
|
optionBrowser2.SetClickable(true);
|
|
ResumeGui();
|
|
|
|
VIDEO_WaitVSync ();
|
|
optionBrowser2.SetEffect(EFFECT_FADE, 20);
|
|
while (optionBrowser2.GetEffect() > 0) usleep(50);
|
|
|
|
bool firstRun = true;
|
|
while (!exit)
|
|
{
|
|
VIDEO_WaitVSync ();
|
|
|
|
if (shutdown == 1)
|
|
Sys_Shutdown();
|
|
if (reset == 1)
|
|
Sys_Reboot();
|
|
|
|
else if (backBtn.GetState() == STATE_CLICKED)
|
|
{
|
|
backBtn.ResetState();
|
|
exit = true;
|
|
break;
|
|
}
|
|
|
|
else if (homo.GetState() == STATE_CLICKED)
|
|
{
|
|
cfg_save_global();
|
|
optionBrowser2.SetState(STATE_DISABLED);
|
|
bgMusic->Pause();
|
|
choice = WindowExitPrompt();
|
|
bgMusic->Resume();
|
|
if (choice == 3)
|
|
Sys_LoadMenu(); // Back to System Menu
|
|
if (choice == 2)
|
|
Sys_BackToLoader();
|
|
else
|
|
homo.ResetState();
|
|
optionBrowser2.SetState(STATE_DEFAULT);
|
|
}
|
|
|
|
ret = optionBrowser2.GetClickedOption();
|
|
|
|
if(firstRun || ret >= 0)
|
|
{
|
|
int Idx = -1;
|
|
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx, "%s",tr("Video Mode"));
|
|
if(ret == Idx && ++Settings.video >= settings_video_max)
|
|
Settings.video = 0;
|
|
options2.SetValue(Idx,"%s%s",opts_videomode[Settings.video][0], tr(opts_videomode[Settings.video][1]));
|
|
}
|
|
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx, "%s",tr("VIDTV Patch"));
|
|
if(ret == Idx && ++Settings.vpatch >= settings_off_on_max)
|
|
Settings.vpatch = 0;
|
|
options2.SetValue(Idx,"%s",tr(opts_off_on[Settings.vpatch]));
|
|
}
|
|
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx, "%s",tr("Game Language"));
|
|
if(ret == Idx && ++Settings.language >= settings_language_max)
|
|
Settings.language = 0;
|
|
options2.SetValue(Idx,"%s",tr(opts_language[Settings.language]));
|
|
}
|
|
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx, "%s",tr("Patch Country Strings"));
|
|
if(ret == Idx && ++Settings.patchcountrystrings >= settings_off_on_max)
|
|
Settings.patchcountrystrings = 0;
|
|
options2.SetValue(Idx,"%s",tr(opts_off_on[Settings.patchcountrystrings]));
|
|
}
|
|
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx, "Ocarina");
|
|
if(ret == Idx && ++Settings.ocarina >= settings_off_on_max)
|
|
Settings.ocarina = 0;
|
|
options2.SetValue(Idx,"%s",tr(opts_off_on[Settings.ocarina]));
|
|
}
|
|
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx,"%s", tr("Boot/Standard"));
|
|
if(ret == Idx && Settings.godmode == 1) {
|
|
if (++Settings.cios >= settings_cios_max) {
|
|
Settings.cios = 0;
|
|
}
|
|
if ((Settings.cios == 1 && ios222rev!=4) || (Settings.cios == 2 && ios223rev != 4)) {
|
|
WindowPrompt(tr("Hermes CIOS"),tr("USB Loader GX will only run with Hermes CIOS rev 4! Please make sure you have revision 4 installed!"),tr("OK"));
|
|
}
|
|
}
|
|
if (Settings.godmode == 1)
|
|
options2.SetValue(Idx, "%s", opts_cios[Settings.cios]);
|
|
else
|
|
options2.SetValue(Idx, "********");
|
|
}
|
|
|
|
if (ret == ++Idx || firstRun)
|
|
{
|
|
if (firstRun) options2.SetName(Idx, "%s", tr("Partition"));
|
|
if (ret == Idx) {
|
|
// Select the next valid partition, even if that's the same one
|
|
do
|
|
{
|
|
Settings.partition = Settings.partition + 1 == partitions.num ? 0 : Settings.partition + 1;
|
|
}
|
|
while (!IsValidPartition(partitions.pinfo[Settings.partition].fs_type, Settings.cios));
|
|
}
|
|
|
|
PartInfo pInfo = partitions.pinfo[Settings.partition];
|
|
f32 partition_size = partitions.pentry[Settings.partition].size * (partitions.sector_size / GB_SIZE);
|
|
|
|
// Get the partition name and it's size in GB's
|
|
options2.SetValue(Idx,"%s%d (%.2fGB)", pInfo.fs_type == FS_TYPE_FAT32 ? "FAT" : pInfo.fs_type == FS_TYPE_NTFS ? "NTFS" : "WBFS",
|
|
pInfo.index,
|
|
partition_size);
|
|
}
|
|
|
|
if (ret == ++Idx || firstRun)
|
|
{
|
|
if (firstRun) options2.SetName(Idx, "%s", tr("FAT: Use directories"));
|
|
if (ret == Idx && ++Settings.FatInstallToDir >= settings_installdir_max)
|
|
Settings.FatInstallToDir = 0;
|
|
options2.SetValue(Idx, "%s", tr(opts_installdir[Settings.FatInstallToDir]));
|
|
}
|
|
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx, "%s",tr("Quick Boot"));
|
|
if(ret == Idx && ++Settings.qboot >= settings_off_on_max)
|
|
Settings.qboot = 0;
|
|
options2.SetValue(Idx,"%s",tr(opts_no_yes[Settings.qboot]));
|
|
}
|
|
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx, "%s",tr("Error 002 fix"));
|
|
if(ret == Idx && ++Settings.error002 >= settings_error002_max)
|
|
Settings.error002 = 0;
|
|
options2.SetValue(Idx,"%s",tr(opts_error002[Settings.error002]));
|
|
}
|
|
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx, "%s",tr("Install partitions"));
|
|
if(ret == Idx && ++Settings.partitions_to_install >= settings_partitions_max)
|
|
Settings.partitions_to_install = 0;
|
|
options2.SetValue(Idx,"%s",tr(opts_partitions[Settings.partitions_to_install]));
|
|
}
|
|
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx, "%s",tr("Install 1:1 Copy"));
|
|
if(ret == Idx) {
|
|
Settings.fullcopy = Settings.fullcopy == 0 ? 1 : 0;
|
|
}
|
|
options2.SetValue(Idx,"%s",tr(opts_no_yes[Settings.fullcopy]));
|
|
}
|
|
|
|
firstRun = false;
|
|
}
|
|
}
|
|
optionBrowser2.SetEffect(EFFECT_FADE, -20);
|
|
while (optionBrowser2.GetEffect() > 0) usleep(50);
|
|
titleTxt.SetText(tr("Settings"));
|
|
slidedirection = FADE;
|
|
pageToDisplay = 1;
|
|
MainButton2.ResetState();
|
|
break;
|
|
}
|
|
|
|
else if (MainButton3.GetState() == STATE_CLICKED)
|
|
{
|
|
MainButton1.SetEffect(EFFECT_FADE, -20);
|
|
MainButton2.SetEffect(EFFECT_FADE, -20);
|
|
MainButton3.SetEffect(EFFECT_FADE, -20);
|
|
MainButton4.SetEffect(EFFECT_FADE, -20);
|
|
while (MainButton3.GetEffect() > 0) usleep(50);
|
|
HaltGui();
|
|
w.Remove(&PageIndicatorBtn1);
|
|
w.Remove(&PageIndicatorBtn2);
|
|
w.Remove(&PageIndicatorBtn3);
|
|
w.Remove(&GoRightBtn);
|
|
w.Remove(&GoLeftBtn);
|
|
w.Remove(&MainButton1);
|
|
w.Remove(&MainButton2);
|
|
w.Remove(&MainButton3);
|
|
w.Remove(&MainButton4);
|
|
titleTxt.SetText(tr("Parental Control"));
|
|
exit = false;
|
|
options2.SetLength(0);
|
|
w.Append(&optionBrowser2);
|
|
optionBrowser2.SetClickable(true);
|
|
ResumeGui();
|
|
|
|
VIDEO_WaitVSync ();
|
|
optionBrowser2.SetEffect(EFFECT_FADE, 20);
|
|
while (optionBrowser2.GetEffect() > 0) usleep(50);
|
|
|
|
bool firstRun = true;
|
|
while (!exit)
|
|
{
|
|
VIDEO_WaitVSync ();
|
|
|
|
if (shutdown == 1)
|
|
Sys_Shutdown();
|
|
if (reset == 1)
|
|
Sys_Reboot();
|
|
|
|
else if (backBtn.GetState() == STATE_CLICKED)
|
|
{
|
|
backBtn.ResetState();
|
|
exit = true;
|
|
break;
|
|
}
|
|
|
|
else if (homo.GetState() == STATE_CLICKED)
|
|
{
|
|
cfg_save_global();
|
|
optionBrowser2.SetState(STATE_DISABLED);
|
|
bgMusic->Pause();
|
|
choice = WindowExitPrompt();
|
|
bgMusic->Resume();
|
|
if (choice == 3)
|
|
Sys_LoadMenu(); // Back to System Menu
|
|
else if (choice == 2)
|
|
Sys_BackToLoader();
|
|
else
|
|
homo.ResetState();
|
|
optionBrowser2.SetState(STATE_DEFAULT);
|
|
}
|
|
|
|
ret = optionBrowser2.GetClickedOption();
|
|
|
|
if(firstRun || ret >= 0)
|
|
{
|
|
|
|
int Idx = -1;
|
|
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx, "%s",tr("Console"));
|
|
if(ret == Idx)
|
|
{
|
|
if (!strcmp("", Settings.unlockCode) && Settings.parental.enabled == 0)
|
|
{
|
|
Settings.godmode = !Settings.godmode;
|
|
}
|
|
else if ( Settings.godmode == 0 )
|
|
{
|
|
char entered[20];
|
|
memset(entered, 0, 20);
|
|
|
|
//password check to unlock Install,Delete and Format
|
|
w.Remove(&optionBrowser2);
|
|
w.Remove(&backBtn);
|
|
int result = Settings.parental.enabled == 0 ? OnScreenKeyboard(entered, 20,0) : OnScreenNumpad(entered, 5);
|
|
w.Append(&optionBrowser2);
|
|
w.Append(&backBtn);
|
|
if ( result == 1 )
|
|
{
|
|
if (!strcmp(entered, Settings.unlockCode) || !memcmp(entered, Settings.parental.pin, 4)) { //if password correct
|
|
if (Settings.godmode == 0)
|
|
{
|
|
WindowPrompt(tr("Correct Password"),tr("All the features of USB Loader GX are unlocked."),tr("OK"));
|
|
Settings.godmode = 1;
|
|
menu = MENU_DISCLIST;
|
|
}
|
|
}
|
|
else
|
|
WindowPrompt(tr("Wrong Password"),tr("USB Loader GX is protected"),tr("OK"));
|
|
}
|
|
}
|
|
else
|
|
{
|
|
int choice = WindowPrompt (tr("Lock Console"),tr("Are you sure?"),tr("Yes"),tr("No"));
|
|
if (choice == 1)
|
|
{
|
|
WindowPrompt(tr("Console Locked"),tr("USB Loader GX is protected"),tr("OK"));
|
|
Settings.godmode = 0;
|
|
menu = MENU_DISCLIST;
|
|
}
|
|
}
|
|
}
|
|
static const char *opts[] = {trNOOP("Locked"),trNOOP("Unlocked")};
|
|
options2.SetValue(Idx,"%s",tr(opts[Settings.godmode]));
|
|
}
|
|
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx, "%s",tr("Password"));
|
|
if(ret == Idx)
|
|
{
|
|
if ( Settings.godmode == 1)
|
|
{
|
|
w.Remove(&optionBrowser2);
|
|
w.Remove(&backBtn);
|
|
char entered[20] = "";
|
|
strlcpy(entered, Settings.unlockCode, sizeof(entered));
|
|
int result = OnScreenKeyboard(entered, 20,0);
|
|
w.Append(&optionBrowser2);
|
|
w.Append(&backBtn);
|
|
if ( result == 1 )
|
|
{
|
|
strlcpy(Settings.unlockCode, entered, sizeof(Settings.unlockCode));
|
|
WindowPrompt(tr("Password Changed"),tr("Password has been changed"),tr("OK"));
|
|
}
|
|
}
|
|
else
|
|
{
|
|
WindowPrompt(tr("Password Changed"),tr("Console should be unlocked to modify it."),tr("OK"));
|
|
}
|
|
}
|
|
if ( Settings.godmode != 1) options2.SetValue(Idx, "********");
|
|
else if (!strcmp("", Settings.unlockCode)) options2.SetValue(Idx, "%s",tr("not set"));
|
|
else options2.SetValue(Idx, Settings.unlockCode);
|
|
}
|
|
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx, "%s",tr("Controllevel"));
|
|
if(ret == Idx && Settings.godmode == 1 && ++Settings.parentalcontrol >= 5 )
|
|
Settings.parentalcontrol = 0;
|
|
if (Settings.godmode == 1)
|
|
options2.SetValue(Idx,"%s",tr(opts_parentalcontrol[Settings.parentalcontrol]));
|
|
else
|
|
options2.SetValue(Idx, "********");
|
|
}
|
|
|
|
firstRun = false;
|
|
}
|
|
}
|
|
optionBrowser2.SetEffect(EFFECT_FADE, -20);
|
|
while (optionBrowser2.GetEffect() > 0) usleep(50);
|
|
titleTxt.SetText(tr("Settings"));
|
|
slidedirection = FADE;
|
|
pageToDisplay = 1;
|
|
MainButton3.ResetState();
|
|
break;
|
|
}
|
|
|
|
else if (MainButton4.GetState() == STATE_CLICKED)
|
|
{
|
|
MainButton1.SetEffect(EFFECT_FADE, -20);
|
|
MainButton2.SetEffect(EFFECT_FADE, -20);
|
|
MainButton3.SetEffect(EFFECT_FADE, -20);
|
|
MainButton4.SetEffect(EFFECT_FADE, -20);
|
|
while (MainButton4.GetEffect() > 0) usleep(50);
|
|
HaltGui();
|
|
w.Remove(&PageIndicatorBtn1);
|
|
w.Remove(&PageIndicatorBtn2);
|
|
w.Remove(&PageIndicatorBtn3);
|
|
w.Remove(&GoRightBtn);
|
|
w.Remove(&GoLeftBtn);
|
|
w.Remove(&MainButton1);
|
|
w.Remove(&MainButton2);
|
|
w.Remove(&MainButton3);
|
|
w.Remove(&MainButton4);
|
|
titleTxt.SetText(tr("Sound"));
|
|
exit = false;
|
|
options2.SetLength(0);
|
|
w.Append(&optionBrowser2);
|
|
optionBrowser2.SetClickable(true);
|
|
ResumeGui();
|
|
|
|
VIDEO_WaitVSync ();
|
|
optionBrowser2.SetEffect(EFFECT_FADE, 20);
|
|
while (optionBrowser2.GetEffect() > 0) usleep(50);
|
|
|
|
|
|
bool firstRun = true;
|
|
while (!exit)
|
|
{
|
|
VIDEO_WaitVSync ();
|
|
|
|
bool returnhere = true;
|
|
|
|
if (shutdown == 1)
|
|
Sys_Shutdown();
|
|
if (reset == 1)
|
|
Sys_Reboot();
|
|
else if (backBtn.GetState() == STATE_CLICKED)
|
|
{
|
|
backBtn.ResetState();
|
|
exit = true;
|
|
break;
|
|
}
|
|
|
|
else if (homo.GetState() == STATE_CLICKED)
|
|
{
|
|
cfg_save_global();
|
|
optionBrowser2.SetState(STATE_DISABLED);
|
|
bgMusic->Pause();
|
|
choice = WindowExitPrompt();
|
|
bgMusic->Resume();
|
|
if (choice == 3)
|
|
Sys_LoadMenu(); // Back to System Menu
|
|
else if (choice == 2)
|
|
Sys_BackToLoader();
|
|
else
|
|
homo.ResetState();
|
|
optionBrowser2.SetState(STATE_DEFAULT);
|
|
}
|
|
|
|
ret = optionBrowser2.GetClickedOption();
|
|
|
|
if(firstRun || ret >= 0)
|
|
{
|
|
int Idx = -1;
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx, "%s",tr("Backgroundmusic"));
|
|
if(ret == Idx)
|
|
{
|
|
if (isInserted(bootDevice))
|
|
{
|
|
w.SetEffect(EFFECT_FADE, -20);
|
|
while (w.GetEffect()>0) usleep(50);
|
|
mainWindow->Remove(&w);
|
|
|
|
returnhere = MenuBackgroundMusic();
|
|
|
|
HaltGui();
|
|
mainWindow->Append(&w);
|
|
w.SetEffect(EFFECT_FADE, 20);
|
|
ResumeGui();
|
|
while (w.GetEffect()>0) usleep(50);
|
|
} else
|
|
WindowPrompt(tr("No SD-Card inserted!"),tr("Insert an SD-Card to use this option."),tr("OK"));
|
|
}
|
|
|
|
char * filename = strrchr(Settings.ogg_path, '/');
|
|
if(filename)
|
|
{
|
|
filename += 1;
|
|
options2.SetValue(Idx, "%s", filename);
|
|
}
|
|
else
|
|
options2.SetValue(Idx, "%s", tr("Standard"));
|
|
}
|
|
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx, "%s",tr("Music Volume"));
|
|
if(ret == Idx)
|
|
{
|
|
Settings.volume += 10;
|
|
if (Settings.volume > 100)
|
|
Settings.volume = 0;
|
|
bgMusic->SetVolume(Settings.volume);
|
|
}
|
|
if (Settings.volume > 0)
|
|
options2.SetValue(Idx,"%i", Settings.volume);
|
|
else
|
|
options2.SetValue(Idx,"%s", tr("OFF"));
|
|
}
|
|
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx, "%s",tr("SFX Volume"));
|
|
if(ret == Idx)
|
|
{
|
|
Settings.sfxvolume += 10;
|
|
if (Settings.sfxvolume > 100)
|
|
Settings.sfxvolume = 0;
|
|
btnSoundOver.SetVolume(Settings.sfxvolume);
|
|
btnClick2->SetVolume(Settings.sfxvolume);
|
|
btnClick1.SetVolume(Settings.sfxvolume);
|
|
}
|
|
if (Settings.sfxvolume > 0)
|
|
options2.SetValue(Idx,"%i", Settings.sfxvolume);
|
|
else
|
|
options2.SetValue(Idx,"%s", tr("OFF"));
|
|
}
|
|
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx, "%s",tr("Game Sound Mode"));
|
|
if(ret == Idx)
|
|
{
|
|
Settings.gamesound++;
|
|
if (Settings.gamesound > 2)
|
|
Settings.gamesound = 0;
|
|
}
|
|
|
|
if(Settings.gamesound == 1)
|
|
options2.SetValue(Idx,"%s", tr("Sound+BGM"));
|
|
else if(Settings.gamesound == 2)
|
|
options2.SetValue(Idx,"%s", tr("Loop Sound"));
|
|
else
|
|
options2.SetValue(Idx,"%s", tr("Sound+Quiet"));
|
|
}
|
|
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx, "%s",tr("Game Sound Volume"));
|
|
if(ret == Idx)
|
|
{
|
|
Settings.gamesoundvolume += 10;
|
|
if (Settings.gamesoundvolume > 100)
|
|
Settings.gamesoundvolume = 0;
|
|
}
|
|
|
|
if (Settings.gamesoundvolume > 0)
|
|
options2.SetValue(Idx,"%i", Settings.gamesoundvolume);
|
|
else
|
|
options2.SetValue(Idx,"%s", tr("OFF"));
|
|
}
|
|
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx, "%s",tr("Music Loop Mode"));
|
|
if(ret == Idx)
|
|
{
|
|
Settings.musicloopmode++;
|
|
if (Settings.musicloopmode > 3)
|
|
Settings.musicloopmode = 0;
|
|
bgMusic->SetLoop(Settings.musicloopmode);
|
|
}
|
|
|
|
if (Settings.musicloopmode == ONCE)
|
|
options2.SetValue(Idx, tr("Play Once"));
|
|
else if(Settings.musicloopmode == LOOP)
|
|
options2.SetValue(Idx, tr("Loop Music"));
|
|
else if(Settings.musicloopmode == DIR_LOOP)
|
|
options2.SetValue(Idx, tr("Loop Directory"));
|
|
else if(Settings.musicloopmode == RANDOM_BGM)
|
|
options2.SetValue(Idx, tr("Random Directory Music"));
|
|
}
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx, "%s",tr("Reset BG Music"));
|
|
if(ret == Idx)
|
|
{
|
|
int result = WindowPrompt(tr("Reset to standard BGM?"), 0, tr("Yes"), tr("No"));
|
|
if(result)
|
|
{
|
|
bgMusic->LoadStandard();
|
|
bgMusic->Play();
|
|
options2.SetValue(Idx, "%s", tr("Standard"));
|
|
}
|
|
}
|
|
options2.SetValue(Idx,tr(" "));
|
|
}
|
|
|
|
firstRun = false;
|
|
}
|
|
}
|
|
optionBrowser2.SetEffect(EFFECT_FADE, -20);
|
|
while (optionBrowser2.GetEffect() > 0) usleep(50);
|
|
titleTxt.SetText(tr("Settings"));
|
|
slidedirection = FADE;
|
|
pageToDisplay = 1;
|
|
MainButton4.ResetState();
|
|
break;
|
|
}
|
|
}
|
|
|
|
else if ( pageToDisplay == 2)
|
|
{
|
|
if (MainButton1.GetState() == STATE_CLICKED)
|
|
{
|
|
MainButton1.SetEffect(EFFECT_FADE, -20);
|
|
MainButton2.SetEffect(EFFECT_FADE, -20);
|
|
MainButton3.SetEffect(EFFECT_FADE, -20);
|
|
MainButton4.SetEffect(EFFECT_FADE, -20);
|
|
while (MainButton1.GetEffect() > 0) usleep(50);
|
|
HaltGui();
|
|
w.Remove(&PageIndicatorBtn1);
|
|
w.Remove(&PageIndicatorBtn2);
|
|
w.Remove(&PageIndicatorBtn3);
|
|
w.Remove(&GoRightBtn);
|
|
w.Remove(&GoLeftBtn);
|
|
w.Remove(&MainButton1);
|
|
w.Remove(&MainButton2);
|
|
w.Remove(&MainButton3);
|
|
w.Remove(&MainButton4);
|
|
titleTxt.SetText(tr("Custom Paths"));
|
|
exit = false;
|
|
options2.SetLength(0);
|
|
// optionBrowser2.SetScrollbar(1);
|
|
w.Append(&optionBrowser2);
|
|
optionBrowser2.SetClickable(true);
|
|
ResumeGui();
|
|
|
|
VIDEO_WaitVSync ();
|
|
optionBrowser2.SetEffect(EFFECT_FADE, 20);
|
|
while (optionBrowser2.GetEffect() > 0) usleep(50);
|
|
|
|
if (Settings.godmode)
|
|
{
|
|
bool firstRun = true;
|
|
while (!exit)
|
|
{
|
|
VIDEO_WaitVSync ();
|
|
|
|
if (shutdown == 1)
|
|
Sys_Shutdown();
|
|
if (reset == 1)
|
|
Sys_Reboot();
|
|
|
|
else if (backBtn.GetState() == STATE_CLICKED)
|
|
{
|
|
backBtn.ResetState();
|
|
exit = true;
|
|
break;
|
|
}
|
|
|
|
else if (homo.GetState() == STATE_CLICKED)
|
|
{
|
|
cfg_save_global();
|
|
optionBrowser2.SetState(STATE_DISABLED);
|
|
bgMusic->Pause();
|
|
choice = WindowExitPrompt();
|
|
bgMusic->Resume();
|
|
if (choice == 3)
|
|
Sys_LoadMenu(); // Back to System Menu
|
|
else if (choice == 2)
|
|
Sys_BackToLoader();
|
|
else
|
|
homo.ResetState();
|
|
optionBrowser2.SetState(STATE_DEFAULT);
|
|
}
|
|
|
|
ret = optionBrowser2.GetClickedOption();
|
|
|
|
if(firstRun || ret >= 0)
|
|
{
|
|
|
|
int Idx = -1;
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx, "%s", tr("3D Cover Path"));
|
|
if(ret == Idx)
|
|
{
|
|
w.Remove(&optionBrowser2);
|
|
w.Remove(&backBtn);
|
|
char entered[100] = "";
|
|
strlcpy(entered, Settings.covers_path, sizeof(entered));
|
|
titleTxt.SetText(tr("3D Cover Path"));
|
|
int result = BrowseDevice(entered, sizeof(entered), FB_DEFAULT, noFILES);
|
|
titleTxt.SetText(tr("Custom Paths"));
|
|
w.Append(&optionBrowser2);
|
|
w.Append(&backBtn);
|
|
if ( result == 1 )
|
|
{
|
|
int len = (strlen(entered)-1);
|
|
if (entered[len] !='/')
|
|
strncat (entered, "/", 1);
|
|
strlcpy(Settings.covers_path, entered, sizeof(Settings.covers_path));
|
|
WindowPrompt(tr("Cover Path Changed"),0,tr("OK"));
|
|
if (!isInserted(bootDevice))
|
|
WindowPrompt(tr("No SD-Card inserted!"),tr("Insert an SD-Card to save."),tr("OK"));
|
|
}
|
|
}
|
|
options2.SetValue(Idx, "%s", Settings.covers_path);
|
|
}
|
|
|
|
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx, "%s", tr("2D Cover Path"));
|
|
if(ret == Idx)
|
|
{
|
|
w.Remove(&optionBrowser2);
|
|
w.Remove(&backBtn);
|
|
char entered[100] = "";
|
|
strlcpy(entered, Settings.covers2d_path, sizeof(entered));
|
|
titleTxt.SetText(tr("2D Cover Path"));
|
|
int result = BrowseDevice(entered, sizeof(entered), FB_DEFAULT, noFILES);
|
|
titleTxt.SetText(tr("Custom Paths"));
|
|
w.Append(&optionBrowser2);
|
|
w.Append(&backBtn);
|
|
if ( result == 1 )
|
|
{
|
|
int len = (strlen(entered)-1);
|
|
if (entered[len] !='/')
|
|
strncat (entered, "/", 1);
|
|
strlcpy(Settings.covers2d_path, entered, sizeof(Settings.covers2d_path));
|
|
WindowPrompt(tr("Cover Path Changed"),0,tr("OK"));
|
|
if (!isInserted(bootDevice))
|
|
WindowPrompt(tr("No SD-Card inserted!"),tr("Insert an SD-Card to save."),tr("OK"));
|
|
}
|
|
}
|
|
options2.SetValue(Idx, "%s", Settings.covers2d_path);
|
|
}
|
|
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx, "%s", tr("Disc Artwork Path"));
|
|
if(ret == Idx)
|
|
{
|
|
w.Remove(&optionBrowser2);
|
|
w.Remove(&backBtn);
|
|
char entered[100] = "";
|
|
strlcpy(entered, Settings.disc_path, sizeof(entered));
|
|
titleTxt.SetText(tr("Disc Artwork Path"));
|
|
int result = BrowseDevice(entered, sizeof(entered), FB_DEFAULT, noFILES);
|
|
titleTxt.SetText(tr("Custom Paths"));
|
|
w.Append(&optionBrowser2);
|
|
w.Append(&backBtn);
|
|
if ( result == 1 )
|
|
{
|
|
int len = (strlen(entered)-1);
|
|
if (entered[len] !='/')
|
|
strncat (entered, "/", 1);
|
|
strlcpy(Settings.disc_path, entered, sizeof(Settings.disc_path));
|
|
WindowPrompt(tr("Disc Path Changed"),0,tr("OK"));
|
|
if (!isInserted(bootDevice))
|
|
WindowPrompt(tr("No SD-Card inserted!"),tr("Insert an SD-Card to save."),tr("OK"));
|
|
}
|
|
}
|
|
options2.SetValue(Idx, "%s", Settings.disc_path);
|
|
}
|
|
|
|
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx, "%s", tr("Theme Path"));
|
|
if(ret == Idx)
|
|
{
|
|
w.Remove(&optionBrowser2);
|
|
w.Remove(&backBtn);
|
|
char entered[100] = "";
|
|
titleTxt.SetText(tr("Theme Path"));
|
|
strlcpy(entered, CFG.theme_path, sizeof(entered));
|
|
int result = BrowseDevice(entered, sizeof(entered), FB_DEFAULT, noFILES);
|
|
HaltGui();
|
|
w.RemoveAll();
|
|
if ( result == 1 )
|
|
{
|
|
int len = (strlen(entered)-1);
|
|
if (entered[len] !='/')
|
|
strncat (entered, "/", 1);
|
|
strlcpy(CFG.theme_path, entered, sizeof(CFG.theme_path));
|
|
WindowPrompt(tr("Theme Path Changed"),0,tr("OK"));
|
|
if (!isInserted(bootDevice))
|
|
WindowPrompt(tr("No SD-Card inserted!"),tr("Insert an SD-Card to save."),tr("OK"));
|
|
else
|
|
cfg_save_global();
|
|
mainWindow->Remove(bgImg);
|
|
HaltGui();
|
|
CFG_Load();
|
|
CFG_LoadGlobal();
|
|
ResumeGui();
|
|
menu = MENU_SETTINGS;
|
|
snprintf(imgPath, sizeof(imgPath), "%splayer1_point.png", CFG.theme_path);
|
|
pointer[0] = new GuiImageData(imgPath, player1_point_png);
|
|
snprintf(imgPath, sizeof(imgPath), "%splayer2_point.png", CFG.theme_path);
|
|
pointer[1] = new GuiImageData(imgPath, player2_point_png);
|
|
snprintf(imgPath, sizeof(imgPath), "%splayer3_point.png", CFG.theme_path);
|
|
pointer[2] = new GuiImageData(imgPath, player3_point_png);
|
|
snprintf(imgPath, sizeof(imgPath), "%splayer4_point.png", CFG.theme_path);
|
|
pointer[3] = new GuiImageData(imgPath, player4_point_png);
|
|
if (CFG.widescreen)
|
|
snprintf(imgPath, sizeof(imgPath), "%swbackground.png", CFG.theme_path);
|
|
else
|
|
snprintf(imgPath, sizeof(imgPath), "%sbackground.png", CFG.theme_path);
|
|
|
|
background = new GuiImageData(imgPath, CFG.widescreen? wbackground_png : background_png);
|
|
|
|
bgImg = new GuiImage(background);
|
|
mainWindow->Append(bgImg);
|
|
mainWindow->Append(&w);
|
|
}
|
|
w.Append(&settingsbackground);
|
|
w.Append(&titleTxt);
|
|
titleTxt.SetText(tr("Custom Paths"));
|
|
w.Append(&backBtn);
|
|
w.Append(&optionBrowser2);
|
|
ResumeGui();
|
|
}
|
|
options2.SetValue(Idx, "%s", CFG.theme_path);
|
|
}
|
|
|
|
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx, "%s", tr("WiiTDB Path"));
|
|
if(ret == Idx)
|
|
{
|
|
w.Remove(&optionBrowser2);
|
|
w.Remove(&backBtn);
|
|
char entered[100] = "";
|
|
titleTxt.SetText(tr("WiiTDB Path"));
|
|
strlcpy(entered, Settings.titlestxt_path, sizeof(entered));
|
|
int result = BrowseDevice(entered, sizeof(entered), FB_DEFAULT, noFILES);
|
|
w.Append(&optionBrowser2);
|
|
titleTxt.SetText(tr("Custom Paths"));
|
|
w.Append(&backBtn);
|
|
if ( result == 1 )
|
|
{
|
|
int len = (strlen(entered)-1);
|
|
if (entered[len] !='/')
|
|
strncat (entered, "/", 1);
|
|
strlcpy(Settings.titlestxt_path, entered, sizeof(Settings.titlestxt_path));
|
|
WindowPrompt(tr("WiiTDB Path changed."),0,tr("OK"));
|
|
if (isInserted(bootDevice))
|
|
{
|
|
cfg_save_global();
|
|
HaltGui();
|
|
CFG_Load();
|
|
ResumeGui();
|
|
}
|
|
else
|
|
WindowPrompt(tr("No SD-Card inserted!"),tr("Insert an SD-Card to save."),tr("OK"));
|
|
}
|
|
}
|
|
options2.SetValue(Idx, "%s", Settings.titlestxt_path);
|
|
}
|
|
|
|
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx, "%s", tr("Update Path"));
|
|
if(ret == Idx)
|
|
{
|
|
w.Remove(&optionBrowser2);
|
|
w.Remove(&backBtn);
|
|
char entered[100] = "";
|
|
strlcpy(entered, Settings.update_path, sizeof(entered));
|
|
titleTxt.SetText(tr("Update Path"));
|
|
int result = BrowseDevice(entered, sizeof(entered), FB_DEFAULT, noFILES);
|
|
titleTxt.SetText(tr("Custom Paths"));
|
|
w.Append(&optionBrowser2);
|
|
w.Append(&backBtn);
|
|
if ( result == 1 )
|
|
{
|
|
int len = (strlen(entered)-1);
|
|
if (entered[len] !='/')
|
|
strncat (entered, "/", 1);
|
|
strlcpy(Settings.update_path, entered, sizeof(Settings.update_path));
|
|
WindowPrompt(tr("Update Path changed."),0,tr("OK"));
|
|
}
|
|
}
|
|
options2.SetValue(Idx, "%s", Settings.update_path);
|
|
}
|
|
|
|
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx, "%s", tr("GCT Cheatcodes Path"));
|
|
if(ret == Idx)
|
|
{
|
|
w.Remove(&optionBrowser2);
|
|
w.Remove(&backBtn);
|
|
char entered[100] = "";
|
|
strlcpy(entered, Settings.Cheatcodespath, sizeof(entered));
|
|
titleTxt.SetText(tr("GCT Cheatcodes Path"));
|
|
int result = BrowseDevice(entered, sizeof(entered), FB_DEFAULT, noFILES);
|
|
titleTxt.SetText(tr("Custom Paths"));
|
|
w.Append(&optionBrowser2);
|
|
w.Append(&backBtn);
|
|
if ( result == 1 )
|
|
{
|
|
int len = (strlen(entered)-1);
|
|
if (entered[len] !='/')
|
|
strncat (entered, "/", 1);
|
|
strlcpy(Settings.Cheatcodespath, entered, sizeof(Settings.Cheatcodespath));
|
|
WindowPrompt(tr("GCT Cheatcodes Path changed"),0,tr("OK"));
|
|
}
|
|
}
|
|
options2.SetValue(Idx, "%s", Settings.Cheatcodespath);
|
|
}
|
|
|
|
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx, "%s", tr("TXT Cheatcodes Path"));
|
|
if(ret == Idx)
|
|
{
|
|
w.Remove(&optionBrowser2);
|
|
w.Remove(&backBtn);
|
|
char entered[100] = "";
|
|
strlcpy(entered, Settings.TxtCheatcodespath, sizeof(entered));
|
|
titleTxt.SetText(tr("TXT Cheatcodes Path"));
|
|
int result = BrowseDevice(entered, sizeof(entered), FB_DEFAULT, noFILES);
|
|
titleTxt.SetText(tr("Custom Paths"));
|
|
w.Append(&optionBrowser2);
|
|
w.Append(&backBtn);
|
|
if ( result == 1 )
|
|
{
|
|
int len = (strlen(entered)-1);
|
|
if (entered[len] !='/')
|
|
strncat (entered, "/", 1);
|
|
strlcpy(Settings.TxtCheatcodespath, entered, sizeof(Settings.TxtCheatcodespath));
|
|
WindowPrompt(tr("TXT Cheatcodes Path changed"),0,tr("OK"));
|
|
}
|
|
}
|
|
options2.SetValue(Idx, "%s", Settings.TxtCheatcodespath);
|
|
}
|
|
|
|
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx, "%s", tr("DOL Path"));
|
|
if(ret == Idx)
|
|
{
|
|
w.Remove(&optionBrowser2);
|
|
w.Remove(&backBtn);
|
|
char entered[100] = "";
|
|
strlcpy(entered, Settings.dolpath, sizeof(entered));
|
|
titleTxt.SetText(tr("DOL Path"));
|
|
int result = BrowseDevice(entered, sizeof(entered), FB_DEFAULT, noFILES);
|
|
titleTxt.SetText(tr("Custom Paths"));
|
|
w.Append(&optionBrowser2);
|
|
w.Append(&backBtn);
|
|
if ( result == 1 )
|
|
{
|
|
int len = (strlen(entered)-1);
|
|
if (entered[len] !='/')
|
|
strncat (entered, "/", 1);
|
|
strlcpy(Settings.dolpath, entered, sizeof(Settings.dolpath));
|
|
WindowPrompt(tr("DOL path changed"),0,tr("OK"));
|
|
if (!isInserted(bootDevice))
|
|
{
|
|
WindowPrompt(tr("No SD-Card inserted!"),tr("Insert an SD-Card to save."),tr("OK"));
|
|
}
|
|
}
|
|
}
|
|
options2.SetValue(Idx, "%s", Settings.dolpath);
|
|
}
|
|
|
|
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx, "%s", tr("Homebrew Apps Path"));
|
|
if(ret == Idx)
|
|
{
|
|
w.Remove(&optionBrowser2);
|
|
w.Remove(&backBtn);
|
|
char entered[100] = "";
|
|
strlcpy(entered, Settings.homebrewapps_path, sizeof(entered));
|
|
titleTxt.SetText(tr("Homebrew Apps Path"));
|
|
int result = BrowseDevice(entered, sizeof(entered), FB_DEFAULT, noFILES);
|
|
titleTxt.SetText(tr("Custom Paths"));
|
|
w.Append(&optionBrowser2);
|
|
w.Append(&backBtn);
|
|
if ( result == 1 )
|
|
{
|
|
int len = (strlen(entered)-1);
|
|
if (entered[len] !='/')
|
|
strncat (entered, "/", 1);
|
|
strlcpy(Settings.homebrewapps_path, entered, sizeof(Settings.homebrewapps_path));
|
|
WindowPrompt(tr("Homebrew Appspath changed"),0,tr("OK"));
|
|
if (!isInserted(bootDevice))
|
|
{
|
|
WindowPrompt(tr("No SD-Card inserted!"),tr("Insert an SD-Card to save."),tr("OK"));
|
|
}
|
|
}
|
|
}
|
|
options2.SetValue(Idx, "%s", Settings.homebrewapps_path);
|
|
}
|
|
|
|
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx, "%s", tr("Theme Download Path"));
|
|
if(ret == Idx)
|
|
{
|
|
w.Remove(&optionBrowser2);
|
|
w.Remove(&backBtn);
|
|
char entered[100] = "";
|
|
strlcpy(entered, Settings.theme_downloadpath, sizeof(entered));
|
|
titleTxt.SetText(tr("Theme Download Path"));
|
|
int result = BrowseDevice(entered, sizeof(entered), FB_DEFAULT, noFILES);
|
|
titleTxt.SetText(tr("Custom Paths"));
|
|
w.Append(&optionBrowser2);
|
|
w.Append(&backBtn);
|
|
if ( result == 1 )
|
|
{
|
|
int len = (strlen(entered)-1);
|
|
if (entered[len] !='/')
|
|
strncat (entered, "/", 1);
|
|
strlcpy(Settings.theme_downloadpath, entered, sizeof(Settings.theme_downloadpath));
|
|
WindowPrompt(tr("Theme Download Path changed"),0,tr("OK"));
|
|
if (!isInserted(bootDevice))
|
|
WindowPrompt(tr("No SD-Card inserted!"),tr("Insert an SD-Card to save."),tr("OK"));
|
|
}
|
|
}
|
|
options2.SetValue(Idx, "%s", Settings.theme_downloadpath);
|
|
}
|
|
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx, "%s", tr("BCA Codes Path"));
|
|
if(ret == Idx)
|
|
{
|
|
w.Remove(&optionBrowser2);
|
|
w.Remove(&backBtn);
|
|
char entered[100] = "";
|
|
strlcpy(entered, Settings.BcaCodepath, sizeof(entered));
|
|
titleTxt.SetText(tr("BCA Codes Path"));
|
|
int result = BrowseDevice(entered, sizeof(entered), FB_DEFAULT, noFILES);
|
|
titleTxt.SetText(tr("Custom Paths"));
|
|
w.Append(&optionBrowser2);
|
|
w.Append(&backBtn);
|
|
if ( result == 1 )
|
|
{
|
|
int len = (strlen(entered)-1);
|
|
if (entered[len] !='/')
|
|
strncat (entered, "/", 1);
|
|
strlcpy(Settings.BcaCodepath, entered, sizeof(Settings.BcaCodepath));
|
|
WindowPrompt(tr("BCA Codes Path changed"),0,tr("OK"));
|
|
if (!isInserted(bootDevice))
|
|
WindowPrompt(tr("No SD-Card inserted!"),tr("Insert an SD-Card to save."),tr("OK"));
|
|
}
|
|
}
|
|
options2.SetValue(Idx, "%s", Settings.BcaCodepath);
|
|
}
|
|
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx, "%s", tr("WIP Patches Path"));
|
|
if(ret == Idx)
|
|
{
|
|
w.Remove(&optionBrowser2);
|
|
w.Remove(&backBtn);
|
|
char entered[100] = "";
|
|
strlcpy(entered, Settings.WipCodepath, sizeof(entered));
|
|
titleTxt.SetText(tr("WIP Patches Path"));
|
|
int result = BrowseDevice(entered, sizeof(entered), FB_DEFAULT, noFILES);
|
|
titleTxt.SetText(tr("Custom Paths"));
|
|
w.Append(&optionBrowser2);
|
|
w.Append(&backBtn);
|
|
if ( result == 1 )
|
|
{
|
|
int len = (strlen(entered)-1);
|
|
if (entered[len] !='/')
|
|
strncat (entered, "/", 1);
|
|
strlcpy(Settings.WipCodepath, entered, sizeof(Settings.WipCodepath));
|
|
WindowPrompt(tr("WIP Patches Path changed"),0,tr("OK"));
|
|
if (!isInserted(bootDevice))
|
|
WindowPrompt(tr("No SD-Card inserted!"),tr("Insert an SD-Card to save."),tr("OK"));
|
|
}
|
|
}
|
|
options2.SetValue(Idx, "%s", Settings.WipCodepath);
|
|
}
|
|
|
|
firstRun = false;
|
|
}
|
|
}
|
|
/** If not godmode don't let him inside **/
|
|
}
|
|
else
|
|
WindowPrompt(tr("Console Locked"),tr("Unlock console to use this option."),tr("OK"));
|
|
optionBrowser2.SetEffect(EFFECT_FADE, -20);
|
|
while (optionBrowser2.GetEffect() > 0) usleep(50);
|
|
titleTxt.SetText(tr("Settings"));
|
|
slidedirection = FADE;
|
|
pageToDisplay = 2;
|
|
MainButton1.ResetState();
|
|
break;
|
|
}
|
|
|
|
else if (MainButton2.GetState() == STATE_CLICKED)
|
|
{
|
|
MainButton1.SetEffect(EFFECT_FADE, -20);
|
|
MainButton2.SetEffect(EFFECT_FADE, -20);
|
|
MainButton3.SetEffect(EFFECT_FADE, -20);
|
|
MainButton4.SetEffect(EFFECT_FADE, -20);
|
|
while (MainButton2.GetEffect() > 0) usleep(50);
|
|
w.Remove(&PageIndicatorBtn1);
|
|
w.Remove(&PageIndicatorBtn2);
|
|
w.Remove(&PageIndicatorBtn3);
|
|
w.Remove(&GoRightBtn);
|
|
w.Remove(&GoLeftBtn);
|
|
w.Remove(&MainButton1);
|
|
w.Remove(&MainButton2);
|
|
w.Remove(&MainButton3);
|
|
w.Remove(&MainButton4);
|
|
if (isInserted(bootDevice) && Settings.godmode)
|
|
{
|
|
w.Remove(&optionBrowser2);
|
|
w.Remove(&backBtn);
|
|
int ret = ProgressUpdateWindow();
|
|
if (ret < 0)
|
|
WindowPrompt(tr("Update failed"),0,tr("OK"));
|
|
w.Append(&optionBrowser2);
|
|
w.Append(&backBtn);
|
|
}
|
|
else
|
|
WindowPrompt(tr("Console Locked"),tr("Unlock console to use this option."),tr("OK"));
|
|
slidedirection = FADE;
|
|
pageToDisplay = 2;
|
|
MainButton2.ResetState();
|
|
break;
|
|
}
|
|
|
|
else if (MainButton3.GetState() == STATE_CLICKED)
|
|
{
|
|
MainButton1.SetEffect(EFFECT_FADE, -20);
|
|
MainButton2.SetEffect(EFFECT_FADE, -20);
|
|
MainButton3.SetEffect(EFFECT_FADE, -20);
|
|
MainButton4.SetEffect(EFFECT_FADE, -20);
|
|
while (MainButton3.GetEffect() > 0) usleep(50);
|
|
w.Remove(&PageIndicatorBtn1);
|
|
w.Remove(&PageIndicatorBtn2);
|
|
w.Remove(&PageIndicatorBtn3);
|
|
w.Remove(&GoRightBtn);
|
|
w.Remove(&GoLeftBtn);
|
|
w.Remove(&MainButton1);
|
|
w.Remove(&MainButton2);
|
|
w.Remove(&MainButton3);
|
|
w.Remove(&MainButton4);
|
|
w.Remove(&backBtn);
|
|
w.Remove(&optionBrowser2);
|
|
if (Settings.godmode)
|
|
{
|
|
int choice = WindowPrompt(tr("Are you sure?"), 0, tr("Yes"), tr("Cancel"));
|
|
if (choice == 1)
|
|
{
|
|
if (isInserted(bootDevice))
|
|
{
|
|
char GXGlobal_cfg[26];
|
|
sprintf(GXGlobal_cfg, "%s/config/GXGlobal.cfg", bootDevice);
|
|
remove(GXGlobal_cfg);
|
|
}
|
|
gettextCleanUp();
|
|
HaltGui();
|
|
CFG_Load();
|
|
ResumeGui();
|
|
menu = MENU_SETTINGS;
|
|
pageToDisplay = 0;
|
|
}
|
|
}
|
|
else
|
|
WindowPrompt(tr("Console Locked"),tr("Unlock console to use this option."),tr("OK"));
|
|
w.Append(&backBtn);
|
|
w.Append(&optionBrowser2);
|
|
slidedirection = FADE;
|
|
pageToDisplay = 2;
|
|
MainButton3.ResetState();
|
|
break;
|
|
}
|
|
|
|
else if (MainButton4.GetState() == STATE_CLICKED)
|
|
{
|
|
MainButton1.SetEffect(EFFECT_FADE, -20);
|
|
MainButton2.SetEffect(EFFECT_FADE, -20);
|
|
MainButton3.SetEffect(EFFECT_FADE, -20);
|
|
MainButton4.SetEffect(EFFECT_FADE, -20);
|
|
while (MainButton4.GetEffect() > 0) usleep(50);
|
|
w.Remove(&PageIndicatorBtn1);
|
|
w.Remove(&PageIndicatorBtn2);
|
|
w.Remove(&PageIndicatorBtn3);
|
|
w.Remove(&GoRightBtn);
|
|
w.Remove(&GoLeftBtn);
|
|
w.Remove(&MainButton1);
|
|
w.Remove(&MainButton2);
|
|
w.Remove(&MainButton3);
|
|
w.Remove(&MainButton4);
|
|
WindowCredits();
|
|
slidedirection = FADE;
|
|
pageToDisplay = 2;
|
|
MainButton4.ResetState();
|
|
break;
|
|
}
|
|
}
|
|
|
|
else if(pageToDisplay == 3)
|
|
{
|
|
if (MainButton1.GetState() == STATE_CLICKED)
|
|
{
|
|
if (isInserted(bootDevice))
|
|
cfg_save_global();
|
|
menu = MENU_THEMEDOWNLOADER;
|
|
pageToDisplay = 0;
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
if (backBtn.GetState() == STATE_CLICKED)
|
|
{
|
|
//Add the procedure call to save the global configuration
|
|
if (isInserted(bootDevice))
|
|
cfg_save_global();
|
|
menu = MENU_DISCLIST;
|
|
pageToDisplay = 0;
|
|
break;
|
|
}
|
|
|
|
else if (GoLeftBtn.GetState() == STATE_CLICKED)
|
|
{
|
|
pageToDisplay--;
|
|
/** Change direction of the flying buttons **/
|
|
if (pageToDisplay < 1)
|
|
pageToDisplay = 3;
|
|
slidedirection = LEFT;
|
|
GoLeftBtn.ResetState();
|
|
break;
|
|
}
|
|
|
|
else if (GoRightBtn.GetState() == STATE_CLICKED)
|
|
{
|
|
pageToDisplay++;
|
|
/** Change direction of the flying buttons **/
|
|
if (pageToDisplay > 3)
|
|
pageToDisplay = 1;
|
|
slidedirection = RIGHT;
|
|
GoRightBtn.ResetState();
|
|
break;
|
|
}
|
|
else if (PageIndicatorBtn1.GetState() == STATE_CLICKED)
|
|
{
|
|
if (pageToDisplay > 1)
|
|
{
|
|
slidedirection = LEFT;
|
|
pageToDisplay = 1;
|
|
PageIndicatorBtn1.ResetState();
|
|
break;
|
|
}
|
|
PageIndicatorBtn1.ResetState();
|
|
}
|
|
else if (PageIndicatorBtn2.GetState() == STATE_CLICKED)
|
|
{
|
|
if (pageToDisplay < 2)
|
|
{
|
|
slidedirection = RIGHT;
|
|
pageToDisplay = 2;
|
|
PageIndicatorBtn2.ResetState();
|
|
break;
|
|
}
|
|
else if (pageToDisplay > 2)
|
|
{
|
|
slidedirection = LEFT;
|
|
pageToDisplay = 2;
|
|
PageIndicatorBtn2.ResetState();
|
|
break;
|
|
}
|
|
else
|
|
PageIndicatorBtn2.ResetState();
|
|
}
|
|
else if (PageIndicatorBtn3.GetState() == STATE_CLICKED)
|
|
{
|
|
if (pageToDisplay < 3)
|
|
{
|
|
slidedirection = RIGHT;
|
|
pageToDisplay = 3;
|
|
PageIndicatorBtn3.ResetState();
|
|
break;
|
|
}
|
|
else
|
|
PageIndicatorBtn3.ResetState();
|
|
}
|
|
else if (homo.GetState() == STATE_CLICKED)
|
|
{
|
|
cfg_save_global();
|
|
optionBrowser2.SetState(STATE_DISABLED);
|
|
bgMusic->Pause();
|
|
choice = WindowExitPrompt();
|
|
bgMusic->Resume();
|
|
|
|
if (choice == 3)
|
|
Sys_LoadMenu(); // Back to System Menu
|
|
else if (choice == 2)
|
|
Sys_BackToLoader();
|
|
else
|
|
homo.ResetState();
|
|
optionBrowser2.SetState(STATE_DEFAULT);
|
|
}
|
|
}
|
|
}
|
|
|
|
w.SetEffect(EFFECT_FADE, -20);
|
|
while (w.GetEffect()>0) usleep(50);
|
|
|
|
// if partition has changed, Reinitialize it
|
|
if (Settings.partition != settingspartitionold) {
|
|
PartInfo pinfo = partitions.pinfo[Settings.partition];
|
|
partitionEntry pentry = partitions.pentry[Settings.partition];
|
|
WBFS_OpenPart(pinfo.part_fs, pinfo.index, pentry.sector, pentry.size, (char *) &game_partition);
|
|
load_from_fs = pinfo.part_fs;
|
|
}
|
|
|
|
// if language has changed, reload titles
|
|
char opt_langnew[100];
|
|
strcpy(opt_langnew,Settings.language_path);
|
|
int opt_overridenew = Settings.titlesOverride;
|
|
bool reloaddatabasefile = false;
|
|
if (strcmp(opt_lang,opt_langnew) || (opt_override != opt_overridenew && Settings.titlesOverride==1) || (Settings.partition != settingspartitionold)) {
|
|
if (Settings.partition != settingspartitionold) {
|
|
reloaddatabasefile = true;
|
|
CloseXMLDatabase();
|
|
CFG_Cleanup();
|
|
}
|
|
OpenXMLDatabase(Settings.titlestxt_path, Settings.db_language, Settings.db_JPtoEN, reloaddatabasefile, Settings.titlesOverride==1?true:false, true); // open file, reload titles, keep in memory
|
|
}
|
|
// disable titles from database if setting has changed
|
|
if (opt_override != opt_overridenew && Settings.titlesOverride==0)
|
|
titles_default();
|
|
|
|
HaltGui();
|
|
|
|
mainWindow->RemoveAll();
|
|
mainWindow->Append(bgImg);
|
|
|
|
ResumeGui();
|
|
return menu;
|
|
}
|
|
|
|
|
|
/********************************************************************************
|
|
*Game specific settings
|
|
*********************************************************************************/
|
|
int GameSettings(struct discHdr * header)
|
|
{
|
|
int menu = MENU_NONE;
|
|
int ret;
|
|
int choice = 0;
|
|
bool exit = false;
|
|
|
|
int retVal = 0;
|
|
|
|
GuiSound btnSoundOver(button_over_pcm, button_over_pcm_size, Settings.sfxvolume);
|
|
// because destroy GuiSound must wait while sound playing is finished, we use a global sound
|
|
if(!btnClick2) btnClick2=new GuiSound(button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume);
|
|
// GuiSound btnClick(button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume);
|
|
GuiSound btnClick1(button_click_pcm, button_click_pcm_size, Settings.sfxvolume);
|
|
|
|
char imgPath[100];
|
|
|
|
snprintf(imgPath, sizeof(imgPath), "%sbutton_dialogue_box.png", CFG.theme_path);
|
|
GuiImageData btnOutline(imgPath, button_dialogue_box_png);
|
|
snprintf(imgPath, sizeof(imgPath), "%ssettings_background.png", CFG.theme_path);
|
|
GuiImageData settingsbg(imgPath, settings_background_png);
|
|
|
|
snprintf(imgPath, sizeof(imgPath), "%ssettings_title.png", CFG.theme_path);
|
|
GuiImageData MainButtonImgData(imgPath, settings_title_png);
|
|
|
|
snprintf(imgPath, sizeof(imgPath), "%ssettings_title_over.png", CFG.theme_path);
|
|
GuiImageData MainButtonImgOverData(imgPath, settings_title_over_png);
|
|
|
|
GuiTrigger trigA;
|
|
trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A);
|
|
GuiTrigger trigHome;
|
|
trigHome.SetButtonOnlyTrigger(-1, WPAD_BUTTON_HOME | WPAD_CLASSIC_BUTTON_HOME, 0);
|
|
GuiTrigger trigB;
|
|
trigB.SetButtonOnlyTrigger(-1, WPAD_BUTTON_B | WPAD_CLASSIC_BUTTON_B, PAD_BUTTON_B);
|
|
|
|
char gameName[31];
|
|
if (!mountMethod)
|
|
{
|
|
if (strlen(get_title(header)) < (27 + 3))
|
|
sprintf(gameName, "%s", get_title(header));
|
|
else
|
|
{
|
|
strncpy(gameName, get_title(header), 27);
|
|
gameName[27] = '\0';
|
|
strncat(gameName, "...", 3);
|
|
}
|
|
}
|
|
else
|
|
sprintf(gameName, "%c%c%c%c%c%c", header->id[0], header->id[1], header->id[2],header->id[3], header->id[4], header->id[5]);
|
|
|
|
GuiText titleTxt(!mountMethod?get_title(header):gameName, 28, (GXColor) {0, 0, 0, 255});
|
|
titleTxt.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
|
|
titleTxt.SetPosition(12,40);
|
|
titleTxt.SetMaxWidth(356, GuiText::SCROLL);
|
|
|
|
GuiImage settingsbackground(&settingsbg);
|
|
|
|
GuiText backBtnTxt(tr("Back"), 22, THEME.prompttext);
|
|
backBtnTxt.SetMaxWidth(btnOutline.GetWidth()-30);
|
|
GuiImage backBtnImg(&btnOutline);
|
|
if (Settings.wsprompt == yes)
|
|
{
|
|
backBtnTxt.SetWidescreen(CFG.widescreen);
|
|
backBtnImg.SetWidescreen(CFG.widescreen);
|
|
}
|
|
GuiButton backBtn(&backBtnImg,&backBtnImg, 2, 3, -180, 400, &trigA, &btnSoundOver, btnClick2,1);
|
|
backBtn.SetLabel(&backBtnTxt);
|
|
backBtn.SetTrigger(&trigB);
|
|
|
|
GuiButton homo(1,1);
|
|
homo.SetTrigger(&trigHome);
|
|
|
|
GuiText saveBtnTxt(tr("Save"), 22, THEME.prompttext);
|
|
saveBtnTxt.SetMaxWidth(btnOutline.GetWidth()-30);
|
|
GuiImage saveBtnImg(&btnOutline);
|
|
if (Settings.wsprompt == yes)
|
|
{
|
|
saveBtnTxt.SetWidescreen(CFG.widescreen);
|
|
saveBtnImg.SetWidescreen(CFG.widescreen);
|
|
}
|
|
GuiButton saveBtn(&saveBtnImg,&saveBtnImg, 2, 3, 180, 400, &trigA, &btnSoundOver, btnClick2,1);
|
|
saveBtn.SetLabel(&saveBtnTxt);
|
|
|
|
|
|
|
|
char MainButtonText[50];
|
|
snprintf(MainButtonText, sizeof(MainButtonText), "%s", " ");
|
|
|
|
GuiImage MainButton1Img(&MainButtonImgData);
|
|
GuiImage MainButton1ImgOver(&MainButtonImgOverData);
|
|
GuiText MainButton1Txt(MainButtonText, 22, (GXColor) {0, 0, 0, 255});
|
|
MainButton1Txt.SetMaxWidth(MainButton1Img.GetWidth());
|
|
GuiButton MainButton1(MainButton1Img.GetWidth(), MainButton1Img.GetHeight());
|
|
MainButton1.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
|
|
MainButton1.SetPosition(0, 90);
|
|
MainButton1.SetImage(&MainButton1Img);
|
|
MainButton1.SetImageOver(&MainButton1ImgOver);
|
|
MainButton1.SetLabel(&MainButton1Txt);
|
|
MainButton1.SetSoundOver(&btnSoundOver);
|
|
MainButton1.SetSoundClick(&btnClick1);
|
|
MainButton1.SetEffectGrow();
|
|
MainButton1.SetTrigger(&trigA);
|
|
|
|
GuiImage MainButton2Img(&MainButtonImgData);
|
|
GuiImage MainButton2ImgOver(&MainButtonImgOverData);
|
|
GuiText MainButton2Txt(MainButtonText, 22, (GXColor) {0, 0, 0, 255});
|
|
MainButton2Txt.SetMaxWidth(MainButton2Img.GetWidth());
|
|
GuiButton MainButton2(MainButton2Img.GetWidth(), MainButton2Img.GetHeight());
|
|
MainButton2.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
|
|
MainButton2.SetPosition(0, 160);
|
|
MainButton2.SetImage(&MainButton2Img);
|
|
MainButton2.SetImageOver(&MainButton2ImgOver);
|
|
MainButton2.SetLabel(&MainButton2Txt);
|
|
MainButton2.SetSoundOver(&btnSoundOver);
|
|
MainButton2.SetSoundClick(&btnClick1);
|
|
MainButton2.SetEffectGrow();
|
|
MainButton2.SetTrigger(&trigA);
|
|
|
|
GuiImage MainButton3Img(&MainButtonImgData);
|
|
GuiImage MainButton3ImgOver(&MainButtonImgOverData);
|
|
GuiText MainButton3Txt(MainButtonText, 22, (GXColor) {0, 0, 0, 255});
|
|
MainButton3Txt.SetMaxWidth(MainButton3Img.GetWidth());
|
|
GuiButton MainButton3(MainButton3Img.GetWidth(), MainButton3Img.GetHeight());
|
|
MainButton3.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
|
|
MainButton3.SetPosition(0, 230);
|
|
MainButton3.SetImage(&MainButton3Img);
|
|
MainButton3.SetImageOver(&MainButton3ImgOver);
|
|
MainButton3.SetLabel(&MainButton3Txt);
|
|
MainButton3.SetSoundOver(&btnSoundOver);
|
|
MainButton3.SetSoundClick(&btnClick1);
|
|
MainButton3.SetEffectGrow();
|
|
MainButton3.SetTrigger(&trigA);
|
|
|
|
GuiImage MainButton4Img(&MainButtonImgData);
|
|
GuiImage MainButton4ImgOver(&MainButtonImgOverData);
|
|
GuiText MainButton4Txt(MainButtonText, 22, (GXColor) {0, 0, 0, 255});
|
|
MainButton4Txt.SetMaxWidth(MainButton4Img.GetWidth());
|
|
GuiButton MainButton4(MainButton4Img.GetWidth(), MainButton4Img.GetHeight());
|
|
MainButton4.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
|
|
MainButton4.SetPosition(0, 300);
|
|
MainButton4.SetImage(&MainButton4Img);
|
|
MainButton4.SetImageOver(&MainButton4ImgOver);
|
|
MainButton4.SetLabel(&MainButton4Txt);
|
|
MainButton4.SetSoundOver(&btnSoundOver);
|
|
MainButton4.SetSoundClick(&btnClick1);
|
|
MainButton4.SetEffectGrow();
|
|
MainButton4.SetTrigger(&trigA);
|
|
|
|
customOptionList options2(MAXOPTIONS);
|
|
GuiCustomOptionBrowser optionBrowser2(396, 280, &options2, CFG.theme_path, "bg_options_settings.png", bg_options_settings_png, 0, 150);
|
|
optionBrowser2.SetPosition(0, 90);
|
|
optionBrowser2.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
|
|
|
|
GuiWindow w(screenwidth, screenheight);
|
|
//int opt_lang = languageChoice; // backup language setting
|
|
struct Game_CFG* game_cfg = CFG_get_game_opt(header->id);
|
|
|
|
int pageToDisplay = 1;
|
|
while ( pageToDisplay > 0) { //set pageToDisplay to 0 to quit
|
|
VIDEO_WaitVSync ();
|
|
|
|
menu = MENU_NONE;
|
|
|
|
/** Standard procedure made in all pages **/
|
|
MainButton1.StopEffect();
|
|
MainButton2.StopEffect();
|
|
MainButton3.StopEffect();
|
|
MainButton4.StopEffect();
|
|
|
|
HaltGui();
|
|
|
|
snprintf(MainButtonText, sizeof(MainButtonText), "%s", tr("Game Load"));
|
|
MainButton1Txt.SetText(MainButtonText);
|
|
snprintf(MainButtonText, sizeof(MainButtonText), "Ocarina");
|
|
MainButton2Txt.SetText(MainButtonText);
|
|
snprintf(MainButtonText, sizeof(MainButtonText), "%s", tr("Uninstall Menu"));
|
|
MainButton3Txt.SetText(MainButtonText);
|
|
snprintf(MainButtonText, sizeof(MainButtonText), "%s", tr("Default Gamesettings"));
|
|
MainButton4Txt.SetText(MainButtonText);
|
|
|
|
mainWindow->RemoveAll();
|
|
mainWindow->Append(&w);
|
|
w.RemoveAll();
|
|
w.Append(&settingsbackground);
|
|
w.Append(&titleTxt);
|
|
w.Append(&backBtn);
|
|
w.Append(&homo);
|
|
w.Append(&MainButton1);
|
|
w.Append(&MainButton2);
|
|
w.Append(&MainButton3);
|
|
w.Append(&MainButton4);
|
|
|
|
/** Disable ability to click through MainButtons */
|
|
optionBrowser2.SetClickable(false);
|
|
/** Default no scrollbar and reset position **/
|
|
// optionBrowser2.SetScrollbar(0);
|
|
optionBrowser2.SetOffset(0);
|
|
|
|
MainButton1.StopEffect();
|
|
MainButton2.StopEffect();
|
|
MainButton3.StopEffect();
|
|
MainButton4.StopEffect();
|
|
|
|
MainButton1.SetEffectGrow();
|
|
MainButton2.SetEffectGrow();
|
|
MainButton3.SetEffectGrow();
|
|
MainButton4.SetEffectGrow();
|
|
|
|
|
|
MainButton1.SetEffect(EFFECT_FADE, 20);
|
|
MainButton2.SetEffect(EFFECT_FADE, 20);
|
|
MainButton3.SetEffect(EFFECT_FADE, 20);
|
|
MainButton4.SetEffect(EFFECT_FADE, 20);
|
|
|
|
mainWindow->Append(&w);
|
|
|
|
|
|
|
|
if (game_cfg) { //if there are saved settings for this game use them
|
|
videoChoice = game_cfg->video;
|
|
languageChoice = game_cfg->language;
|
|
ocarinaChoice = game_cfg->ocarina;
|
|
viChoice = game_cfg->vipatch;
|
|
iosChoice = game_cfg->ios;
|
|
parentalcontrolChoice = game_cfg->parentalcontrol;
|
|
fix002 = game_cfg->errorfix002;
|
|
countrystrings = game_cfg->patchcountrystrings;
|
|
alternatedol = game_cfg->loadalternatedol;
|
|
alternatedoloffset = game_cfg->alternatedolstart;
|
|
reloadblock = game_cfg->iosreloadblock;
|
|
strlcpy(alternatedname, game_cfg->alternatedolname, sizeof(alternatedname));
|
|
}
|
|
else
|
|
{
|
|
videoChoice = Settings.video;
|
|
languageChoice = Settings.language;
|
|
ocarinaChoice = Settings.ocarina;
|
|
viChoice = Settings.vpatch;
|
|
if (Settings.cios == ios222)
|
|
iosChoice = i222;
|
|
else if (Settings.cios == ios250)
|
|
iosChoice = i250;
|
|
else if (Settings.cios == ios223)
|
|
iosChoice = i223;
|
|
else
|
|
iosChoice = i249;
|
|
parentalcontrolChoice = 0;
|
|
fix002 = Settings.error002;
|
|
countrystrings = Settings.patchcountrystrings;
|
|
alternatedol = off;
|
|
alternatedoloffset = 0;
|
|
reloadblock = off;
|
|
strcpy(alternatedname, "");
|
|
}
|
|
|
|
ResumeGui();
|
|
|
|
while (MainButton1.GetEffect() > 0) usleep(50);
|
|
|
|
|
|
|
|
while (menu == MENU_NONE)
|
|
{
|
|
VIDEO_WaitVSync ();
|
|
|
|
if (shutdown == 1)
|
|
Sys_Shutdown();
|
|
if (reset == 1)
|
|
Sys_Reboot();
|
|
|
|
if (MainButton1.GetState() == STATE_CLICKED)
|
|
{
|
|
w.Append(&saveBtn);
|
|
MainButton1.SetEffect(EFFECT_FADE, -20);
|
|
MainButton2.SetEffect(EFFECT_FADE, -20);
|
|
MainButton3.SetEffect(EFFECT_FADE, -20);
|
|
MainButton4.SetEffect(EFFECT_FADE, -20);
|
|
while (MainButton1.GetEffect() > 0) usleep(50);
|
|
HaltGui();
|
|
w.Remove(&MainButton1);
|
|
w.Remove(&MainButton2);
|
|
w.Remove(&MainButton3);
|
|
w.Remove(&MainButton4);
|
|
exit = false;
|
|
options2.SetLength(0);
|
|
// optionBrowser2.SetScrollbar(1);
|
|
w.Append(&optionBrowser2);
|
|
optionBrowser2.SetClickable(true);
|
|
ResumeGui();
|
|
|
|
VIDEO_WaitVSync ();
|
|
optionBrowser2.SetEffect(EFFECT_FADE, 20);
|
|
while (optionBrowser2.GetEffect() > 0) usleep(50);
|
|
|
|
int returnhere = 1;
|
|
char * languagefile;
|
|
languagefile = strrchr(Settings.language_path, '/')+1;
|
|
|
|
bool firstRun = true;
|
|
while (!exit)
|
|
{
|
|
VIDEO_WaitVSync ();
|
|
|
|
returnhere = 1;
|
|
|
|
if (shutdown == 1)
|
|
Sys_Shutdown();
|
|
if (reset == 1)
|
|
Sys_Reboot();
|
|
if (backBtn.GetState() == STATE_CLICKED)
|
|
{
|
|
backBtn.ResetState();
|
|
exit = true;
|
|
break;
|
|
}
|
|
|
|
else if (menu == MENU_DISCLIST)
|
|
{
|
|
w.Remove(&optionBrowser2);
|
|
w.Remove(&backBtn);
|
|
WindowCredits();
|
|
w.Append(&optionBrowser2);
|
|
w.Append(&backBtn);
|
|
}
|
|
|
|
else if (homo.GetState() == STATE_CLICKED)
|
|
{
|
|
cfg_save_global();
|
|
optionBrowser2.SetState(STATE_DISABLED);
|
|
bgMusic->Pause();
|
|
choice = WindowExitPrompt();
|
|
bgMusic->Resume();
|
|
if (choice == 3)
|
|
Sys_LoadMenu(); // Back to System Menu
|
|
else if (choice == 2)
|
|
Sys_BackToLoader();
|
|
else
|
|
homo.ResetState();
|
|
optionBrowser2.SetState(STATE_DEFAULT);
|
|
}
|
|
|
|
else if (saveBtn.GetState() == STATE_CLICKED)
|
|
{
|
|
if (isInserted(bootDevice))
|
|
{
|
|
if (CFG_save_game_opt(header->id))
|
|
{
|
|
/* commented because the database language now depends on the main language setting, this could be enabled again if there is a separate language setting for the database
|
|
// if game language has changed when saving game settings, reload titles
|
|
int opt_langnew = 0;
|
|
game_cfg = CFG_get_game_opt(header->id);
|
|
if (game_cfg) opt_langnew = game_cfg->language;
|
|
if (Settings.titlesOverride==1 && opt_lang != opt_langnew)
|
|
OpenXMLDatabase(Settings.titlestxt_path, Settings.db_language, Settings.db_JPtoEN, true, true, false); // open file, reload titles, do not keep in memory
|
|
// titles are refreshed in menu.cpp as soon as this function returns
|
|
*/
|
|
game_cfg = CFG_get_game_opt(header->id); // needed here for "if (game_cfg)" earlier in case it's the first time settings are saved for a game
|
|
WindowPrompt(tr("Successfully Saved"),0,tr("OK"));
|
|
}
|
|
else
|
|
WindowPrompt(tr("Save Failed"),0,tr("OK"));
|
|
}
|
|
else
|
|
WindowPrompt(tr("No SD-Card inserted!"),tr("Insert an SD-Card to save."),tr("OK"));
|
|
|
|
saveBtn.ResetState();
|
|
optionBrowser2.SetFocus(1);
|
|
}
|
|
|
|
ret = optionBrowser2.GetClickedOption();
|
|
|
|
if(ret >= 0 || firstRun == true)
|
|
{
|
|
int Idx = -1;
|
|
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx, "%s",tr("Video Mode"));
|
|
if(ret == Idx && ++videoChoice >= settings_video_max)
|
|
videoChoice = 0;
|
|
options2.SetValue(Idx,"%s%s",opts_videomode[videoChoice][0], tr(opts_videomode[videoChoice][1]));
|
|
}
|
|
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx, "%s",tr("VIDTV Patch"));
|
|
if(ret == Idx && ++viChoice >= settings_off_on_max)
|
|
viChoice = 0;
|
|
options2.SetValue(Idx,"%s",tr(opts_off_on[viChoice]));
|
|
|
|
}
|
|
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx, "%s", tr("Game Language"));
|
|
if(ret == Idx && ++languageChoice >= settings_language_max)
|
|
languageChoice = 0;
|
|
options2.SetValue(Idx,"%s",tr(opts_language[languageChoice]));
|
|
}
|
|
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx, "Ocarina");
|
|
if(ret == Idx && ++ocarinaChoice >= settings_off_on_max)
|
|
ocarinaChoice = 0;
|
|
options2.SetValue(Idx,"%s",tr(opts_off_on[ocarinaChoice]));
|
|
}
|
|
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx, "IOS");
|
|
if(ret == Idx && ++iosChoice >= settings_ios_max)
|
|
iosChoice = 0;
|
|
options2.SetValue(Idx,"%s",opts_cios[iosChoice]);
|
|
}
|
|
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx, "%s", tr("Parental Control"));
|
|
if(ret == Idx && ++parentalcontrolChoice >= 5)
|
|
parentalcontrolChoice = 0;
|
|
options2.SetValue(Idx,"%s", tr(opts_parentalcontrol[parentalcontrolChoice]));
|
|
}
|
|
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx, "%s", tr("Error 002 fix"));
|
|
if(ret == Idx && ++fix002 >= settings_error002_max)
|
|
fix002 = 0;
|
|
options2.SetValue(Idx,"%s", tr(opts_error002[fix002]));
|
|
}
|
|
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx, "%s", tr("Patch Country Strings"));
|
|
if(ret == Idx && ++countrystrings >= settings_off_on_max)
|
|
countrystrings = 0;
|
|
options2.SetValue(Idx,"%s", tr(opts_off_on[countrystrings]));
|
|
}
|
|
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx, "%s", tr("Alternate DOL"));
|
|
int last_alternatedol = alternatedol;
|
|
if(ret == Idx && (alternatedol = (alternatedol+2) % 3) >= 3) // 0->2->1->0
|
|
alternatedol = 0;
|
|
static const char *opts[] = {trNOOP("Default"),trNOOP("Load From SD/USB"),trNOOP("Select a DOL")};
|
|
options2.SetValue(Idx,"%s", tr(opts[alternatedol]));
|
|
if(last_alternatedol != 1)
|
|
{
|
|
firstRun = true; // force re-init follow Entries
|
|
options2.SetLength(Idx+1);
|
|
}
|
|
}
|
|
|
|
|
|
if(alternatedol == 2 && (ret == ++Idx || firstRun))
|
|
{
|
|
if(firstRun) options2.SetName(Idx, "%s", tr("Selected DOL"));
|
|
if(ret == Idx)
|
|
{
|
|
if (alternatedol == 2)
|
|
{
|
|
char filename[10];
|
|
snprintf(filename,sizeof(filename),"%c%c%c%c%c%c",header->id[0], header->id[1], header->id[2],
|
|
header->id[3],header->id[4], header->id[5]);
|
|
int dolchoice = 0;
|
|
//alt dol menu for games that require more than a single alt dol
|
|
int autodol = autoSelectDolMenu(filename, false);
|
|
|
|
if (autodol>0)
|
|
{
|
|
alternatedoloffset = autodol;
|
|
snprintf(alternatedname, sizeof(alternatedname), "%s <%i>", tr("AUTO"), autodol);
|
|
}
|
|
else if (autodol == 0)
|
|
alternatedol = 0; // default was chosen
|
|
else
|
|
{
|
|
//check to see if we already know the offset of the correct dol
|
|
int autodol = autoSelectDol(filename, false);
|
|
//if we do know that offset ask if they want to use it
|
|
if (autodol>0)
|
|
{
|
|
dolchoice = WindowPrompt(0,tr("Do you want to use the alternate DOL that is known to be correct?"),tr("Yes"),tr("Pick from a list"),tr("Cancel"));
|
|
if (dolchoice==0)
|
|
alternatedol = 0;
|
|
else if (dolchoice==1)
|
|
{
|
|
alternatedoloffset = autodol;
|
|
snprintf(alternatedname, sizeof(alternatedname), "%s <%i>", tr("AUTO"),autodol);
|
|
}
|
|
else if (dolchoice==2) //they want to search for the correct dol themselves
|
|
{
|
|
int res = DiscBrowse(header);
|
|
if ((res >= 0)&&(res !=696969)) //if res==696969 they pressed the back button
|
|
alternatedoloffset = res;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
int res = DiscBrowse(header);
|
|
if ((res >= 0)&&(res !=696969))
|
|
{
|
|
alternatedoloffset = res;
|
|
char tmp[170];
|
|
snprintf(tmp,sizeof(tmp),"%s %s - %i",tr("It seems that you have some information that will be helpful to us. Please pass this information along to the DEV team.") ,filename,alternatedoloffset);
|
|
WindowPrompt(0,tmp,tr("OK"));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if(alternatedol == 0)
|
|
{
|
|
firstRun = true; // force re-init follow Entries
|
|
options2.SetLength(Idx--); // remove this Entry
|
|
options2.SetValue(Idx, "%s", tr("Default")); // re-set prev Entry
|
|
}
|
|
else
|
|
options2.SetValue(Idx, alternatedname);
|
|
}
|
|
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx, "%s", tr("Block IOS Reload"));
|
|
if(ret == Idx && ++reloadblock >= settings_off_on_max)
|
|
reloadblock = 0;
|
|
options2.SetValue(Idx,"%s", tr(opts_off_on[reloadblock]));
|
|
}
|
|
|
|
firstRun = false;
|
|
}
|
|
}
|
|
|
|
optionBrowser2.SetEffect(EFFECT_FADE, -20);
|
|
while (optionBrowser2.GetEffect() > 0) usleep(50);
|
|
MainButton1.ResetState();
|
|
break;
|
|
w.Remove(&saveBtn);
|
|
}
|
|
|
|
else if (MainButton2.GetState() == STATE_CLICKED)
|
|
{
|
|
char ID[7];
|
|
snprintf (ID,sizeof(ID),"%c%c%c%c%c%c", header->id[0], header->id[1], header->id[2],header->id[3], header->id[4], header->id[5]);
|
|
CheatMenu(ID);
|
|
MainButton2.ResetState();
|
|
break;
|
|
}
|
|
|
|
else if (MainButton3.GetState() == STATE_CLICKED)
|
|
{
|
|
MainButton1.SetEffect(EFFECT_FADE, -20);
|
|
MainButton2.SetEffect(EFFECT_FADE, -20);
|
|
MainButton3.SetEffect(EFFECT_FADE, -20);
|
|
MainButton4.SetEffect(EFFECT_FADE, -20);
|
|
while (MainButton3.GetEffect() > 0) usleep(50);
|
|
HaltGui();
|
|
w.Remove(&MainButton1);
|
|
w.Remove(&MainButton2);
|
|
w.Remove(&MainButton3);
|
|
w.Remove(&MainButton4);
|
|
exit = false;
|
|
options2.SetLength(0);
|
|
w.Append(&optionBrowser2);
|
|
optionBrowser2.SetClickable(true);
|
|
ResumeGui();
|
|
|
|
bool firstRun = true;
|
|
|
|
optionBrowser2.SetEffect(EFFECT_FADE, 20);
|
|
while (optionBrowser2.GetEffect() > 0) usleep(50);
|
|
|
|
while (!exit)
|
|
{
|
|
VIDEO_WaitVSync ();
|
|
|
|
if (shutdown == 1)
|
|
Sys_Shutdown();
|
|
if (reset == 1)
|
|
Sys_Reboot();
|
|
if (backBtn.GetState() == STATE_CLICKED)
|
|
{
|
|
backBtn.ResetState();
|
|
exit = true;
|
|
break;
|
|
}
|
|
|
|
else if (homo.GetState() == STATE_CLICKED)
|
|
{
|
|
cfg_save_global();
|
|
optionBrowser2.SetState(STATE_DISABLED);
|
|
bgMusic->Pause();
|
|
choice = WindowExitPrompt();
|
|
bgMusic->Resume();
|
|
if (choice == 3)
|
|
Sys_LoadMenu(); // Back to System Menu
|
|
else if (choice == 2)
|
|
Sys_BackToLoader();
|
|
else
|
|
homo.ResetState();
|
|
optionBrowser2.SetState(STATE_DEFAULT);
|
|
}
|
|
|
|
ret = optionBrowser2.GetClickedOption();
|
|
|
|
if(firstRun || ret >= 0)
|
|
{
|
|
int Idx = -1;
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx,"%s", tr("Uninstall Game"));
|
|
if(ret == Idx)
|
|
{
|
|
int choice1 = WindowPrompt(tr("Do you really want to delete:"),gameName,tr("Yes"),tr("Cancel"));
|
|
if (choice1 == 1 && !mountMethod)
|
|
{
|
|
CFG_forget_game_opt(header->id);
|
|
CFG_forget_game_num(header->id);
|
|
ret = WBFS_RemoveGame(header->id);
|
|
if (ret < 0)
|
|
{
|
|
WindowPrompt(
|
|
tr("Can't delete:"),
|
|
gameName,
|
|
tr("OK"));
|
|
}
|
|
else
|
|
{
|
|
WindowPrompt(tr("Successfully deleted:"),gameName,tr("OK"));
|
|
retVal = 1;
|
|
}
|
|
}
|
|
else if (choice1 == 0)
|
|
optionBrowser2.SetFocus(1);
|
|
}
|
|
}
|
|
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx,"%s", tr("Reset Playcounter"));
|
|
if(ret == Idx)
|
|
{
|
|
int result = WindowPrompt(tr("Are you sure?"),0,tr("Yes"),tr("Cancel"));
|
|
if (result == 1)
|
|
{
|
|
if (isInserted(bootDevice))
|
|
{
|
|
struct Game_NUM* game_num = CFG_get_game_num(header->id);
|
|
if (game_num)
|
|
{
|
|
favoritevar = game_num->favorite;
|
|
playcount = game_num->count;
|
|
}
|
|
else
|
|
{
|
|
favoritevar = 0;
|
|
playcount = 0;
|
|
}
|
|
playcount = 0;
|
|
CFG_save_game_num(header->id);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx,"%s", tr("Delete Cover Artwork"));
|
|
if(ret == Idx)
|
|
{
|
|
char tmp[200];
|
|
snprintf(tmp,sizeof(tmp),"%s%c%c%c%c%c%c.png", Settings.covers_path, header->id[0], header->id[1], header->id[2],header->id[3], header->id[4], header->id[5]);
|
|
|
|
int choice1 = WindowPrompt(tr("Delete"),tmp,tr("Yes"),tr("No"));
|
|
if (choice1==1)
|
|
{
|
|
if (checkfile(tmp))
|
|
remove(tmp);
|
|
}
|
|
}
|
|
}
|
|
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx,"%s", tr("Delete Disc Artwork"));
|
|
if(ret == Idx)
|
|
{
|
|
char tmp[200];
|
|
snprintf(tmp,sizeof(tmp),"%s%c%c%c%c%c%c.png", Settings.disc_path, header->id[0], header->id[1], header->id[2],header->id[3], header->id[4], header->id[5]);
|
|
|
|
int choice1 = WindowPrompt(tr("Delete"),tmp,tr("Yes"),tr("No"));
|
|
if (choice1==1)
|
|
{
|
|
if (checkfile(tmp))
|
|
remove(tmp);
|
|
}
|
|
}
|
|
}
|
|
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx,"%s", tr("Delete Cheat TXT"));
|
|
if(ret == Idx)
|
|
{
|
|
char tmp[200];
|
|
snprintf(tmp,sizeof(tmp),"%s%c%c%c%c%c%c.txt", Settings.TxtCheatcodespath, header->id[0], header->id[1], header->id[2],header->id[3], header->id[4], header->id[5]);
|
|
|
|
int choice1 = WindowPrompt(tr("Delete"),tmp,tr("Yes"),tr("No"));
|
|
if (choice1==1)
|
|
{
|
|
if (checkfile(tmp))
|
|
remove(tmp);
|
|
}
|
|
}
|
|
}
|
|
|
|
if(ret == ++Idx || firstRun)
|
|
{
|
|
if(firstRun) options2.SetName(Idx,"%s", tr("Delete Cheat GCT"));
|
|
if(ret == Idx)
|
|
{
|
|
char tmp[200];
|
|
snprintf(tmp,sizeof(tmp),"%s%c%c%c%c%c%c.gct", Settings.Cheatcodespath, header->id[0], header->id[1], header->id[2],header->id[3], header->id[4], header->id[5]);
|
|
|
|
int choice1 = WindowPrompt(tr("Delete"),tmp,tr("Yes"),tr("No"));
|
|
if (choice1==1)
|
|
{
|
|
if (checkfile(tmp))
|
|
remove(tmp);
|
|
}
|
|
}
|
|
}
|
|
|
|
firstRun = false;
|
|
}
|
|
}
|
|
optionBrowser2.SetEffect(EFFECT_FADE, -20);
|
|
while (optionBrowser2.GetEffect() > 0) usleep(50);
|
|
pageToDisplay = 1;
|
|
MainButton3.ResetState();
|
|
break;
|
|
}
|
|
|
|
else if (MainButton4.GetState() == STATE_CLICKED)
|
|
{
|
|
int choice1 = WindowPrompt(tr("Are you sure?"),0,tr("Yes"),tr("Cancel"));
|
|
if (choice1 == 1)
|
|
{
|
|
videoChoice = Settings.video;
|
|
viChoice = Settings.vpatch;
|
|
languageChoice = Settings.language;
|
|
ocarinaChoice = Settings.ocarina;
|
|
fix002 = Settings.error002;
|
|
countrystrings = Settings.patchcountrystrings;
|
|
alternatedol = off;
|
|
alternatedoloffset = 0;
|
|
reloadblock = off;
|
|
if (Settings.cios == ios222)
|
|
iosChoice = i222;
|
|
else if (Settings.cios == ios250)
|
|
iosChoice = i250;
|
|
else if (Settings.cios == ios223)
|
|
iosChoice = i223;
|
|
else
|
|
iosChoice = i249;
|
|
parentalcontrolChoice = 0;
|
|
strcpy(alternatedname, "");
|
|
CFG_forget_game_opt(header->id);
|
|
/* commented because the database language now depends on the main language setting, this could be enabled again if there is a separate language setting for the database
|
|
// if default language is different than language from main settings, reload titles
|
|
int opt_langnew = 0;
|
|
opt_langnew = Settings.language;
|
|
if (Settings.titlesOverride==1 && opt_lang != opt_langnew)
|
|
OpenXMLDatabase(Settings.titlestxt_path, Settings.db_language, Settings.db_JPtoEN, true, true, false); // open file, reload titles, do not keep in memory
|
|
// titles are refreshed in menu.cpp as soon as this function returns
|
|
*/
|
|
}
|
|
|
|
pageToDisplay = 1;
|
|
MainButton4.ResetState();
|
|
break;
|
|
}
|
|
|
|
|
|
else if (backBtn.GetState() == STATE_CLICKED)
|
|
{
|
|
menu = MENU_DISCLIST;
|
|
pageToDisplay = 0;
|
|
break;
|
|
}
|
|
|
|
else if (homo.GetState() == STATE_CLICKED)
|
|
{
|
|
cfg_save_global();
|
|
optionBrowser2.SetState(STATE_DISABLED);
|
|
bgMusic->Pause();
|
|
choice = WindowExitPrompt();
|
|
bgMusic->Resume();
|
|
|
|
if (choice == 3)
|
|
Sys_LoadMenu(); // Back to System Menu
|
|
else if (choice == 2)
|
|
Sys_BackToLoader();
|
|
else
|
|
homo.ResetState();
|
|
optionBrowser2.SetState(STATE_DEFAULT);
|
|
}
|
|
}
|
|
}
|
|
w.SetEffect(EFFECT_FADE, -20);
|
|
while (w.GetEffect()>0) usleep(50);
|
|
|
|
|
|
|
|
HaltGui();
|
|
|
|
mainWindow->RemoveAll();
|
|
mainWindow->Append(bgImg);
|
|
|
|
ResumeGui();
|
|
return retVal;
|
|
}
|