usbloadergx/source/menu.cpp
2009-05-16 20:10:29 +00:00

5066 lines
155 KiB
C++

/****************************************************************************
* libwiigui Template
* Tantric 2009
*
* menu.cpp
* Menu flow routines - handles all menu logic
***************************************************************************/
#include <gccore.h>
#include <ogcsys.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <wiiuse/wpad.h>
#include <stdio.h> //CLOCK
#include <time.h> //CLOCK
#include <dirent.h>
#include "libwiigui/gui.h"
#include "menu.h"
#include "main.h"
#include "input.h"
#include "http.h"
#include "dns.h"
#include "partition.h"
#include "wbfs.h"
#include "utils.h"
#include "usbstorage.h"
#include "disc.h"
#include "filelist.h"
#include "wdvd.h"
#include "libwbfs/libwbfs.h"
#include "sys.h"
#include "patchcode.h"
#include "wpad.h"
#include "cfg.h"
#include "language.h"
#include "libwiigui/gui_customoptionbrowser.h"
#include "libwiigui/gui_gamebrowser.h"
#include "mp3s.h"
#include "fatmounter.h"
#define MAX_CHARACTERS 38
extern FreeTypeGX *fontClock; //CLOCK
static GuiImage * coverImg = NULL;
static GuiImageData * cover = NULL;
//char GamesHDD[320][14];
static struct discHdr *gameList = NULL;
static GuiImageData * pointer[4];
static GuiImage * bgImg = NULL;
static GuiButton * btnLogo = NULL;
static GuiImageData * background = NULL;
static char prozent[10] = "0%";
static char timet[50] = " ";
static char sizeshow[20] = " ";
static GuiText prTxt(prozent, 26, (GXColor){0, 0, 0, 255});
static GuiText timeTxt(prozent, 26, (GXColor){0, 0, 0, 255});
static GuiText sizeTxt(sizeshow, 26, (GXColor){0, 0, 0, 255});
static GuiText *GameIDTxt = NULL;
static GuiText *GameRegionTxt = NULL;
static GuiSound * bgMusic = NULL;
static GuiSound * creditsMusic = NULL;
static wbfs_t *hdd = NULL;
static u32 gameCnt = 0;
static s32 gameSelected = 0, gameStart = 0;
static GuiWindow * mainWindow = NULL;
static lwp_t guithread = LWP_THREAD_NULL;
static bool guiHalt = true;
static GuiImageData progressbar(progressbar_png);
static GuiImage progressbarImg(&progressbar);
int godmode = 0;
int height = 224;
int width = 160;
static float gamesize = 0.00;
static int startat = 0;
static int offset = 0, networkisinitialized = 0;
int vol = Settings.volume;
static int datag = 0;
int datagB =0;
int dataed = -1;
int cosa=0,sina=0,offa=0;
//downloadvariables
static char missingFiles[500][12]; //fixed
static int cntMissFiles = 0;
int direction = 0; // direction the gameprompt slides in
static char gameregion[7];
//power button fix
extern u8 shutdown;
extern u8 reset;
//Wiilight stuff
static vu32 *_wiilight_reg = (u32*)0xCD0000C0;
void wiilight(int enable){ // Toggle wiilight (thanks Bool for wiilight source)
u32 val = (*_wiilight_reg&~0x20);
if(enable) val |= 0x20;
*_wiilight_reg=val;}
//Prototypes
int WindowPrompt(const char *title, const char *msg, const char *btn1Label, const char *btn2Label, const char *btn3Label, const char *btn4Label);
static void HaltGui();
static void ResumeGui();
extern const u8 data1;
bool findfile(const char * filename, const char * path)
{
DIR *dir;
struct dirent *file;
dir = opendir(path);
char temp[11];
while ((file = readdir(dir)))
{
snprintf(temp,sizeof(temp),"%s",file->d_name);
if (!strncmpi(temp,filename,11))
{
//WindowPrompt(path, filename,"go" ,0);
closedir(dir);
return true;
}
}
closedir(dir);
return false;
}
/****************************************************************************
* ResumeGui
*
* Signals the GUI thread to start, and resumes the thread. This is called
* after finishing the removal/insertion of new elements, and after initial
* GUI setup.
***************************************************************************/
static void
ResumeGui()
{
guiHalt = false;
LWP_ResumeThread (guithread);
}
/****************************************************************************
* HaltGui
*
* Signals the GUI thread to stop, and waits for GUI thread to stop
* This is necessary whenever removing/inserting new elements into the GUI.
* This eliminates the possibility that the GUI is in the middle of accessing
* an element that is being changed.
***************************************************************************/
static void
HaltGui()
{
guiHalt = true;
// wait for thread to finish
while(!LWP_ThreadIsSuspended(guithread))
usleep(50);
}
/****************************************************************************
* WindowCredits
* Display credits
***************************************************************************/
static void WindowCredits(void * ptr)
{
int angle = 0;
if(btnLogo->GetState() != STATE_CLICKED) {
return;
}
bgMusic->Stop();
creditsMusic = new GuiSound(credits_music_ogg, credits_music_ogg_size, SOUND_OGG, 55);
creditsMusic->SetVolume(55);
creditsMusic->SetLoop(1);
creditsMusic->Play();
btnLogo->ResetState();
bool exit = false;
int i = 0;
int y = 20;
GuiWindow creditsWindow(screenwidth,screenheight);
GuiWindow creditsWindowBox(580,448);
creditsWindowBox.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE);
GuiImageData creditsBox(credits_bg_png);
GuiImage creditsBoxImg(&creditsBox);
creditsBoxImg.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE);
creditsWindowBox.Append(&creditsBoxImg);
GuiImageData star(little_star_png);
GuiImage starImg(&star);
starImg.SetWidescreen(CFG.widescreen); //added
starImg.SetAlignment(ALIGN_LEFT, ALIGN_TOP);
starImg.SetPosition(500,335);
int numEntries = 25;
GuiText * txt[numEntries];
txt[i] = new GuiText(LANGUAGE.Credits, 26, (GXColor){255, 255, 255, 255});
txt[i]->SetAlignment(ALIGN_CENTRE, ALIGN_TOP); txt[i]->SetPosition(0,12); i++;
txt[i] = new GuiText("V 1 .0", 18, (GXColor){255, 255, 255, 255});
txt[i]->SetAlignment(ALIGN_RIGHT, ALIGN_TOP); txt[i]->SetPosition(0,y); i++; y+=34;
txt[i] = new GuiText("USB Loader GX", 24, (GXColor){255, 255, 255, 255});
txt[i]->SetAlignment(ALIGN_CENTRE, ALIGN_TOP); txt[i]->SetPosition(0,y); i++; y+=26;
txt[i] = new GuiText(": http://code.google.com/p/usbloader-gui/", 20, (GXColor){255, 255, 255, 255});
txt[i]->SetAlignment(ALIGN_CENTRE, ALIGN_TOP); txt[i]->SetPosition(50,y); i++; //y+=28;
txt[i] = new GuiText(LANGUAGE.OfficialSite, 20, (GXColor){255, 255, 255, 255});
txt[i]->SetAlignment(ALIGN_CENTRE, ALIGN_TOP); txt[i]->SetPosition(-180,y); i++; y+=28;
txt[i]->SetPresets(22, (GXColor){255, 255, 255, 255}, 0,
FTGX_JUSTIFY_LEFT | FTGX_ALIGN_TOP, ALIGN_LEFT, ALIGN_TOP);
txt[i] = new GuiText("Coding:");
txt[i]->SetAlignment(ALIGN_LEFT, ALIGN_TOP); txt[i]->SetPosition(170,y);
i++;
txt[i] = new GuiText("dimok");
txt[i]->SetAlignment(ALIGN_LEFT, ALIGN_TOP); txt[i]->SetPosition(320,y);
i++;
y+=22;
txt[i] = new GuiText("nIxx");
txt[i]->SetAlignment(ALIGN_LEFT, ALIGN_TOP); txt[i]->SetPosition(320,y);
i++;
y+=22;
txt[i] = new GuiText("hungyip84");
txt[i]->SetAlignment(ALIGN_LEFT, ALIGN_TOP); txt[i]->SetPosition(320,y);
i++;
y+=22;
txt[i] = new GuiText("giantpune");
txt[i]->SetAlignment(ALIGN_LEFT, ALIGN_TOP); txt[i]->SetPosition(320,y);
i++;
y+=24;
txt[i] = new GuiText("Design:");
txt[i]->SetAlignment(ALIGN_LEFT, ALIGN_TOP); txt[i]->SetPosition(170,y);
i++;
txt[i] = new GuiText("cyrex");
txt[i]->SetAlignment(ALIGN_LEFT, ALIGN_TOP); txt[i]->SetPosition(320,y);
i++;
y+=22;
txt[i] = new GuiText("NeoRame");
txt[i]->SetAlignment(ALIGN_LEFT, ALIGN_TOP); txt[i]->SetPosition(320,y);
i++;
y+=22;
txt[i] = new GuiText("WiiShizza");
txt[i]->SetAlignment(ALIGN_LEFT, ALIGN_TOP); txt[i]->SetPosition(320,y);
i++;
y+=28;
txt[i] = new GuiText(LANGUAGE.Specialthanksto);
txt[i]->SetAlignment(ALIGN_CENTRE, ALIGN_TOP); txt[i]->SetPosition(-50,y);
i++;
txt[i] = new GuiText(":");
txt[i]->SetAlignment(ALIGN_CENTRE, ALIGN_TOP); txt[i]->SetPosition(30,y+3);
i++;
y+=22;
txt[i] = new GuiText("Fishears/Nuke Ocarina & WiiPower Vidpatch");
txt[i]->SetAlignment(ALIGN_CENTRE, ALIGN_TOP); txt[i]->SetPosition(0,y);
i++;
txt[i] = new GuiText(LANGUAGE.For);
txt[i]->SetAlignment(ALIGN_CENTRE, ALIGN_TOP); txt[i]->SetPosition(-80,y);
i++;
txt[i] = new GuiText(LANGUAGE.For);
txt[i]->SetAlignment(ALIGN_CENTRE, ALIGN_TOP); txt[i]->SetPosition(130,y);
i++;
y+=22;
txt[i] = new GuiText("Tantric libwiigui");
txt[i]->SetAlignment(ALIGN_CENTRE, ALIGN_TOP); txt[i]->SetPosition(0,y);
i++;
txt[i] = new GuiText(LANGUAGE.For);
txt[i]->SetAlignment(ALIGN_CENTRE, ALIGN_TOP); txt[i]->SetPosition(-3,y);
i++;
y+=22;
txt[i] = new GuiText("Waninkoko & Kwiirk USB Loader");
txt[i]->SetAlignment(ALIGN_CENTRE, ALIGN_TOP); txt[i]->SetPosition(0,y);
i++;
txt[i] = new GuiText(LANGUAGE.For);
txt[i]->SetAlignment(ALIGN_CENTRE, ALIGN_TOP); txt[i]->SetPosition(30,y);
i++;
y+=22;
txt[i] = new GuiText(LANGUAGE.theUSBLoaderandreleasingthesourcecode);
txt[i]->SetAlignment(ALIGN_CENTRE, ALIGN_TOP); txt[i]->SetPosition(0,y);
i++;
y+=22;
for(i=0; i < numEntries; i++)
creditsWindowBox.Append(txt[i]);
creditsWindow.Append(&creditsWindowBox);
creditsWindow.Append(&starImg);
while(!exit)
{
creditsWindow.Draw();
angle ++;
angle = int(angle) % 360;
usleep(12000);
starImg.SetAngle(angle);
for(i=3; i >= 0; i--)
{
#ifdef HW_RVL
if(userInput[i].wpad.ir.valid)
Menu_DrawImg(userInput[i].wpad.ir.x-48, userInput[i].wpad.ir.y-48,
96, 96, pointer[i]->GetImage(), userInput[i].wpad.ir.angle, CFG.widescreen? 0.8 : 1, 1, 255);
if(Settings.rumble == RumbleOn){
DoRumble(i);
}
#endif
}
Menu_Render();
for(i=0; i < 4; i++)
{
if(userInput[i].wpad.btns_d || userInput[i].pad.btns_d)
exit = true;
}
}
// clear buttons pressed
for(i=0; i < 4; i++)
{
userInput[i].wpad.btns_d = 0;
userInput[i].pad.btns_d = 0;
}
creditsMusic->Stop();
for(i=0; i < numEntries; i++)
delete txt[i];
delete creditsMusic;
bgMusic->SetLoop(1);
bgMusic->Play();
}
/****************************************************************************
* WindowPrompt
*
* Displays a prompt window to user, with information, an error message, or
* presenting a user with a choice of up to 4 Buttons.
*
* Give him 1 Titel, 1 Subtitel and 4 Buttons
* If titel/subtitle or one of the buttons is not needed give him a 0 on that
* place.
***************************************************************************/
int
WindowPrompt(const char *title, const char *msg, const char *btn1Label,
const char *btn2Label, const char *btn3Label,
const char *btn4Label)
{
int choice = -1;
GuiWindow promptWindow(472,320);
promptWindow.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE);
promptWindow.SetPosition(0, -10);
GuiSound btnSoundOver(button_over_pcm, button_over_pcm_size, SOUND_PCM, vol);
GuiSound btnClick(button_click2_pcm, button_click2_pcm_size, SOUND_PCM, vol);
GuiImageData btnOutline(button_dialogue_box_png);
GuiTrigger trigA;
trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A);
GuiTrigger trigB;
trigB.SetButtonOnlyTrigger(-1, WPAD_BUTTON_B | WPAD_CLASSIC_BUTTON_B, PAD_BUTTON_B);
GuiImageData dialogBox(dialogue_box_png);
GuiImage dialogBoxImg(&dialogBox);
if (Settings.wsprompt == yes){
dialogBoxImg.SetWidescreen(CFG.widescreen);}///////////
GuiText titleTxt(title, 26, (GXColor){0, 0, 0, 255});
titleTxt.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
titleTxt.SetPosition(0,55);
GuiText msgTxt(msg, 22, (GXColor){0, 0, 0, 255});
msgTxt.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE);
msgTxt.SetPosition(0,-40);
msgTxt.SetMaxWidth(430);
GuiText btn1Txt(btn1Label, 22, (GXColor){0, 0, 0, 255});
GuiImage btn1Img(&btnOutline);
if (Settings.wsprompt == yes){
btn1Img.SetWidescreen(CFG.widescreen);}///////////
GuiButton btn1(btnOutline.GetWidth(), btnOutline.GetHeight());
btn1.SetLabel(&btn1Txt);
btn1.SetImage(&btn1Img);
btn1.SetSoundOver(&btnSoundOver);
btn1.SetSoundClick(&btnClick);
btn1.SetTrigger(&trigA);
btn1.SetState(STATE_SELECTED);
btn1.SetEffectGrow();
GuiText btn2Txt(btn2Label, 22, (GXColor){0, 0, 0, 255});
GuiImage btn2Img(&btnOutline);
if (Settings.wsprompt == yes){
btn2Img.SetWidescreen(CFG.widescreen);}///////////
GuiButton btn2(btnOutline.GetWidth(), btnOutline.GetHeight());
btn2.SetLabel(&btn2Txt);
btn2.SetImage(&btn2Img);
btn2.SetSoundOver(&btnSoundOver);
btn2.SetSoundClick(&btnClick);
if(!btn3Label && !btn4Label)
btn2.SetTrigger(&trigB);
btn2.SetTrigger(&trigA);
btn2.SetEffectGrow();
GuiText btn3Txt(btn3Label, 22, (GXColor){0, 0, 0, 255});
GuiImage btn3Img(&btnOutline);
if (Settings.wsprompt == yes){
btn3Img.SetWidescreen(CFG.widescreen);}///////////
GuiButton btn3(btnOutline.GetWidth(), btnOutline.GetHeight());
btn3.SetLabel(&btn3Txt);
btn3.SetImage(&btn3Img);
btn3.SetSoundOver(&btnSoundOver);
btn3.SetSoundClick(&btnClick);
if(!btn4Label)
btn3.SetTrigger(&trigB);
btn3.SetTrigger(&trigA);
btn3.SetEffectGrow();
GuiText btn4Txt(btn4Label, 22, (GXColor){0, 0, 0, 255});
GuiImage btn4Img(&btnOutline);
if (Settings.wsprompt == yes){
btn4Img.SetWidescreen(CFG.widescreen);}///////////
GuiButton btn4(btnOutline.GetWidth(), btnOutline.GetHeight());
btn4.SetLabel(&btn4Txt);
btn4.SetImage(&btn4Img);
btn4.SetSoundOver(&btnSoundOver);
btn4.SetSoundClick(&btnClick);
if(btn4Label)
btn4.SetTrigger(&trigB);
btn4.SetTrigger(&trigA);
btn4.SetEffectGrow();
if ((Settings.wsprompt == yes) && (CFG.widescreen)){/////////////adjust buttons for widescreen
msgTxt.SetMaxWidth(330);
btn1Txt.SetFontSize(20);
btn2Txt.SetFontSize(20);
btn3Txt.SetFontSize(20);
btn4Txt.SetFontSize(20);
if(btn2Label && !btn3Label && !btn4Label)
{
btn1.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM);
btn1.SetPosition(70, -80);
btn2.SetAlignment(ALIGN_RIGHT, ALIGN_BOTTOM);
btn2.SetPosition(-70, -80);
btn3.SetAlignment(ALIGN_RIGHT, ALIGN_BOTTOM);
btn3.SetPosition(-70, -55);
btn4.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM);
btn4.SetPosition(70, -55);
} else if(btn2Label && btn3Label && !btn4Label) {
btn1.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM);
btn1.SetPosition(70, -120);
btn2.SetAlignment(ALIGN_RIGHT, ALIGN_BOTTOM);
btn2.SetPosition(-70, -120);
btn3.SetAlignment(ALIGN_CENTRE, ALIGN_BOTTOM);
btn3.SetPosition(0, -55);
btn4.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM);
btn4.SetPosition(70, -55);
} else if(btn2Label && btn3Label && btn4Label) {
btn1.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM);
btn1.SetPosition(70, -120);
btn2.SetAlignment(ALIGN_RIGHT, ALIGN_BOTTOM);
btn2.SetPosition(-70, -120);
btn3.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM);
btn3.SetPosition(70, -55);
btn4.SetAlignment(ALIGN_RIGHT, ALIGN_BOTTOM);
btn4.SetPosition(-70, -55);
} else if(!btn2Label && btn3Label && btn4Label) {
btn1.SetAlignment(ALIGN_CENTRE, ALIGN_BOTTOM);
btn1.SetPosition(0, -120);
btn2.SetAlignment(ALIGN_RIGHT, ALIGN_BOTTOM);
btn2.SetPosition(-70, -120);
btn3.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM);
btn3.SetPosition(70, -55);
btn4.SetAlignment(ALIGN_RIGHT, ALIGN_BOTTOM);
btn4.SetPosition(-70, -55);
} else {
btn1.SetAlignment(ALIGN_CENTRE, ALIGN_BOTTOM);
btn1.SetPosition(0, -80);
btn2.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM);
btn2.SetPosition(70, -120);
btn3.SetAlignment(ALIGN_RIGHT, ALIGN_BOTTOM);
btn3.SetPosition(-70, -55);
btn4.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM);
btn4.SetPosition(70, -55);
}
} else {
if(btn2Label && !btn3Label && !btn4Label) {
btn1.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM);
btn1.SetPosition(40, -45);
btn2.SetAlignment(ALIGN_RIGHT, ALIGN_BOTTOM);
btn2.SetPosition(-40, -45);
btn3.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM);
btn3.SetPosition(50, -65);
btn4.SetAlignment(ALIGN_RIGHT, ALIGN_BOTTOM);
btn4.SetPosition(-50, -65);
} else if(btn2Label && btn3Label && !btn4Label) {
btn1.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM);
btn1.SetPosition(50, -120);
btn2.SetAlignment(ALIGN_RIGHT, ALIGN_BOTTOM);
btn2.SetPosition(-50, -120);
btn3.SetAlignment(ALIGN_CENTRE, ALIGN_BOTTOM);
btn3.SetPosition(0, -65);
btn4.SetAlignment(ALIGN_RIGHT, ALIGN_BOTTOM);
btn4.SetPosition(-50, -65);
} else if(btn2Label && btn3Label && btn4Label) {
btn1.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM);
btn1.SetPosition(50, -120);
btn2.SetAlignment(ALIGN_RIGHT, ALIGN_BOTTOM);
btn2.SetPosition(-50, -120);
btn3.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM);
btn3.SetPosition(50, -65);
btn4.SetAlignment(ALIGN_RIGHT, ALIGN_BOTTOM);
btn4.SetPosition(-50, -65);
} else if(!btn2Label && btn3Label && btn4Label) {
btn1.SetAlignment(ALIGN_CENTRE, ALIGN_BOTTOM);
btn1.SetPosition(0, -120);
btn2.SetAlignment(ALIGN_RIGHT, ALIGN_BOTTOM);
btn2.SetPosition(-50, -120);
btn3.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM);
btn3.SetPosition(50, -65);
btn4.SetAlignment(ALIGN_RIGHT, ALIGN_BOTTOM);
btn4.SetPosition(-50, -65);
} else {
btn1.SetAlignment(ALIGN_CENTRE, ALIGN_BOTTOM);
btn1.SetPosition(0, -45);
btn2.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM);
btn2.SetPosition(50, -120);
btn3.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM);
btn3.SetPosition(50, -65);
btn4.SetAlignment(ALIGN_RIGHT, ALIGN_BOTTOM);
btn4.SetPosition(-50, -65);
}
}
promptWindow.Append(&dialogBoxImg);
promptWindow.Append(&titleTxt);
promptWindow.Append(&msgTxt);
if(btn1Label)
promptWindow.Append(&btn1);
if(btn2Label)
promptWindow.Append(&btn2);
if(btn3Label)
promptWindow.Append(&btn3);
if(btn4Label)
promptWindow.Append(&btn4);
promptWindow.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_IN, 50);
HaltGui();
mainWindow->SetState(STATE_DISABLED);
mainWindow->Append(&promptWindow);
mainWindow->ChangeFocus(&promptWindow);
ResumeGui();
while(choice == -1)
{
VIDEO_WaitVSync();
if(shutdown == 1)
{
wiilight(0);
Sys_Shutdown();
}
if(reset == 1)
Sys_Reboot();
if(btn1.GetState() == STATE_CLICKED) {
choice = 1;
}
else if(btn2.GetState() == STATE_CLICKED) {
if(!btn3Label)
choice = 0;
else
choice = 2;
}
else if(btn3.GetState() == STATE_CLICKED) {
if(!btn4Label)
choice = 0;
else
choice = 3;
}
else if(btn4.GetState() == STATE_CLICKED) {
choice = 0;
}
}
promptWindow.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_OUT, 50);
while(promptWindow.GetEffect() > 0) usleep(50);
HaltGui();
mainWindow->Remove(&promptWindow);
mainWindow->SetState(STATE_DEFAULT);
ResumeGui();
return choice;
}
/****************************************************************************
* GameWindowPrompt
*
* Displays a prompt window to user, with information, an error message, or
* presenting a user with a choice
***************************************************************************/
int GameWindowPrompt()
{
int choice = -1, angle = 0;
char sizeText[15];
f32 size = 0.0;
char ID[4];
char IDFull[7];
char gameName[CFG.maxcharacters + 4];
GuiWindow promptWindow(472,320);
promptWindow.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE);
promptWindow.SetPosition(0, -10);
GuiSound btnSoundOver(button_over_pcm, button_over_pcm_size, SOUND_PCM, vol);
GuiSound btnClick(button_click2_pcm, button_click2_pcm_size, SOUND_PCM, vol);
GuiImageData btnOutline(button_dialogue_box_png);
GuiImageData imgLeft(startgame_arrow_left_png);
GuiImageData imgRight(startgame_arrow_right_png);
GuiTrigger trigA;
trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A);
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 trigPlus;
trigPlus.SetButtonOnlyTrigger(-1, WPAD_BUTTON_PLUS | WPAD_CLASSIC_BUTTON_PLUS, 0);
GuiTrigger trigMinus;
trigMinus.SetButtonOnlyTrigger(-1, WPAD_BUTTON_MINUS | WPAD_CLASSIC_BUTTON_MINUS, 0);
char imgPath[100];
if (CFG.widescreen)
snprintf(imgPath, sizeof(imgPath), "%swdialogue_box_startgame.png", CFG.theme_path);
else
snprintf(imgPath, sizeof(imgPath), "%sdialogue_box_startgame.png", CFG.theme_path);
GuiImageData dialogBox(imgPath, CFG.widescreen ? wdialogue_box_startgame_png : dialogue_box_startgame_png);
GuiImage dialogBoxImg(&dialogBox);
GuiTooltip nameBtnTT(LANGUAGE.RenameGameonWBFS);
if (Settings.wsprompt == yes)
nameBtnTT.SetWidescreen(CFG.widescreen);
GuiText msgTxt("", 22, (GXColor){50, 50, 50, 255});
GuiButton nameBtn(120,50);
nameBtn.SetLabel(&msgTxt);
nameBtn.SetLabelOver(&msgTxt);
nameBtn.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE);
nameBtn.SetPosition(0,-122);
nameBtn.SetSoundOver(&btnSoundOver);
nameBtn.SetSoundClick(&btnClick);
nameBtn.SetToolTip(&nameBtnTT,24,-30, ALIGN_LEFT);
if (CFG.godmode == 1){
nameBtn.SetTrigger(&trigA);
nameBtn.SetEffectGrow();
}
GuiText sizeTxt("", 22, (GXColor){50, 50, 50, 255}); //TODO: get the size here
sizeTxt.SetAlignment(ALIGN_RIGHT, ALIGN_TOP);
sizeTxt.SetPosition(-60,70);
GuiImage diskImg;
diskImg.SetWidescreen(CFG.widescreen);
diskImg.SetAlignment(ALIGN_LEFT, ALIGN_TOP);
diskImg.SetAngle(angle);
GuiButton btn1(160, 160);
btn1.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE);
btn1.SetPosition(0, -20);
btn1.SetImage(&diskImg);
btn1.SetSoundOver(&btnSoundOver);
btn1.SetSoundClick(&btnClick);
btn1.SetTrigger(&trigA);
btn1.SetState(STATE_SELECTED);
//btn1.SetEffectGrow(); just commented it out if anybody wants to use it again.
GuiText btn2Txt("Back", 22, (GXColor){0, 0, 0, 255});
GuiImage btn2Img(&btnOutline);
if (Settings.wsprompt == yes){
btn2Img.SetWidescreen(CFG.widescreen);}///////////
GuiButton btn2(btnOutline.GetWidth(), btnOutline.GetHeight());
//check if unlocked
if (CFG.godmode == 1)
{
btn2.SetAlignment(ALIGN_RIGHT, ALIGN_BOTTOM);
btn2.SetPosition(-50, -40);
}
else
{
btn2.SetAlignment(ALIGN_CENTRE, ALIGN_BOTTOM);
btn2.SetPosition(0, -40);
}
btn2.SetLabel(&btn2Txt);
btn2.SetImage(&btn2Img);
btn2.SetSoundOver(&btnSoundOver);
btn2.SetSoundClick(&btnClick);
btn2.SetTrigger(&trigB);
btn2.SetTrigger(&trigA);
btn2.SetEffectGrow();
GuiText btn3Txt(LANGUAGE.settings, 22, (GXColor){0, 0, 0, 255});
GuiImage btn3Img(&btnOutline);
if (Settings.wsprompt == yes){
btn3Img.SetWidescreen(CFG.widescreen);}///////////
GuiButton btn3(btnOutline.GetWidth(), btnOutline.GetHeight());
btn3.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM);
btn3.SetPosition(50, -40);
btn3.SetLabel(&btn3Txt);
btn3.SetImage(&btn3Img);
btn3.SetSoundOver(&btnSoundOver);
btn3.SetSoundClick(&btnClick);
btn3.SetTrigger(&trigA);
btn3.SetEffectGrow();
GuiImage btnLeftImg(&imgLeft);
GuiButton btnLeft(imgLeft.GetWidth(), imgLeft.GetHeight());
btnLeft.SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE);
btnLeft.SetPosition(20, 0);
btnLeft.SetImage(&btnLeftImg);
btnLeft.SetSoundOver(&btnSoundOver);
//btnLeft.SetSoundClick(&btnClick);
btnLeft.SetTrigger(&trigA);
btnLeft.SetTrigger(&trigL);
btnLeft.SetTrigger(&trigMinus);
btnLeft.SetEffectGrow();
GuiImage btnRightImg(&imgRight);
GuiButton btnRight(imgRight.GetWidth(), imgRight.GetHeight());
btnRight.SetAlignment(ALIGN_RIGHT, ALIGN_MIDDLE);
btnRight.SetPosition(-20, 0);
btnRight.SetImage(&btnRightImg);
btnRight.SetSoundOver(&btnSoundOver);
//btnRight.SetSoundClick(&btnClick);
btnRight.SetTrigger(&trigA);
btnRight.SetTrigger(&trigR);
btnRight.SetTrigger(&trigPlus);
btnRight.SetEffectGrow();
promptWindow.Append(&dialogBoxImg);
promptWindow.Append(&nameBtn);
promptWindow.Append(&sizeTxt);
promptWindow.Append(&btn1);
promptWindow.Append(&btn2);
promptWindow.Append(&btnLeft);
promptWindow.Append(&btnRight);
//check if unlocked
if (CFG.godmode == 1)
{
promptWindow.Append(&btn3);
}
short changed = 3;
GuiImageData * diskCover = NULL;
promptWindow.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_IN, 50);
while (changed)
{
if (changed == 1){
promptWindow.SetEffect(EFFECT_SLIDE_LEFT | EFFECT_SLIDE_IN, 50);
}
if (changed == 2){
promptWindow.SetEffect(EFFECT_SLIDE_RIGHT | EFFECT_SLIDE_IN, 50);
}
changed = 0;
//load disc image based or what game is seleted
struct discHdr * header = &gameList[gameSelected];
WBFS_GameSize(header->id, &size);
snprintf(sizeText, sizeof(sizeText), "%.2fGB", size); //set size text
snprintf (ID,sizeof(ID),"%c%c%c", header->id[0], header->id[1], header->id[2]);
snprintf (IDFull,sizeof(IDFull),"%c%c%c%c%c%c", header->id[0], header->id[1], header->id[2],header->id[3], header->id[4], header->id[5]);
//set name
if (strlen(get_title(header)) < (u32)(CFG.maxcharacters + 3)) {
sprintf(gameName, "%s", get_title(header));
}
else {
strncpy(gameName, get_title(header), CFG.maxcharacters);
gameName[CFG.maxcharacters] = '\0';
strncat(gameName, "...", 3);
}
snprintf(imgPath,sizeof(imgPath),"%s%s.png", CFG.disc_path, IDFull); //changed to current id
if (diskCover)
delete diskCover;
diskCover = new GuiImageData(imgPath,0);
if (!diskCover->GetImage())
{
delete diskCover;
snprintf(imgPath, sizeof(imgPath), "%s%s.png", CFG.disc_path, ID); //changed to current full id
diskCover = new GuiImageData(imgPath, 0);
if (!diskCover->GetImage())
{
delete diskCover;
diskCover = new GuiImageData(imgPath,nodisc_png);
}
}
diskImg.SetImage(diskCover);
sizeTxt.SetText(sizeText);
msgTxt.SetText(gameName);
char* pch;
pch=strrchr((gameName),'_');
if (pch!=NULL){msgTxt.SetPosition(0, 16);}
else {msgTxt.SetPosition(0, 1);}
HaltGui();
mainWindow->SetState(STATE_DISABLED);
mainWindow->Append(&promptWindow);
mainWindow->ChangeFocus(&promptWindow);
ResumeGui();
float speedup = 1; //speedup increases while disc is selected
while(choice == -1)
{
VIDEO_WaitVSync();
//angle++;
angle = int(angle+speedup) % 360;
//disc speedup and slowdown
if (btn1.GetState() == STATE_SELECTED) { //if mouse over
if (speedup < 11) // speed up
{
speedup = (speedup+0.20);
}
}
else //if not mouse over
{
if (speedup > 1) {speedup = (speedup-0.05);} //slow down
}
if (speedup < 1)
{
speedup = 1;
}
diskImg.SetAngle(angle);
if(shutdown == 1) //for power button
{
wiilight(0);
Sys_Shutdown();
}
if(reset == 1)
Sys_Reboot();
if(btn1.GetState() == STATE_CLICKED) { //boot
choice = 1;
SDCard_deInit();
}
else if(btn2.GetState() == STATE_CLICKED) { //back
choice = 0;
promptWindow.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_OUT, 50);
mainWindow->SetState(STATE_DEFAULT);
wiilight(0);
}
else if(btn3.GetState() == STATE_CLICKED) { //settings
choice = 2;
promptWindow.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_OUT, 50);
}
else if(nameBtn.GetState() == STATE_CLICKED) { //rename
choice = 3;
promptWindow.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_OUT, 50);
}
// this next part is long because nobody could agree on what the left/right buttons should do
else if((btnRight.GetState() == STATE_CLICKED) && (Settings.xflip == no)){//next game
promptWindow.SetEffect(EFFECT_SLIDE_RIGHT | EFFECT_SLIDE_OUT, 50);
changed = 1;
btnClick.Play();
gameSelected = (gameSelected + 1) % gameCnt;
btnRight.ResetState();
break;
}
else if((btnLeft.GetState() == STATE_CLICKED) && (Settings.xflip == no)){//previous game
promptWindow.SetEffect(EFFECT_SLIDE_LEFT | EFFECT_SLIDE_OUT, 50);
changed = 2;
btnClick.Play();
gameSelected = (gameSelected - 1 + gameCnt) % gameCnt;
btnLeft.ResetState();
break;
}
else if((btnRight.GetState() == STATE_CLICKED) && (Settings.xflip == yes)){//previous game
promptWindow.SetEffect(EFFECT_SLIDE_LEFT | EFFECT_SLIDE_OUT, 50);
changed = 2;
btnClick.Play();
gameSelected = (gameSelected - 1 + gameCnt) % gameCnt;
btnRight.ResetState();
break;
}
else if((btnLeft.GetState() == STATE_CLICKED) && (Settings.xflip == yes)){//netx game
promptWindow.SetEffect(EFFECT_SLIDE_RIGHT | EFFECT_SLIDE_OUT, 50);
changed = 1;
btnClick.Play();
gameSelected = (gameSelected + 1) % gameCnt;
btnLeft.ResetState();
break;
}
else if((btnRight.GetState() == STATE_CLICKED) && (Settings.xflip == sysmenu)){//previous game
promptWindow.SetEffect(EFFECT_SLIDE_LEFT | EFFECT_SLIDE_OUT, 50);
changed = 2;
btnClick.Play();
gameSelected = (gameSelected + 1) % gameCnt;
btnRight.ResetState();
break;
}
else if((btnLeft.GetState() == STATE_CLICKED) && (Settings.xflip == sysmenu)){//netx game
promptWindow.SetEffect(EFFECT_SLIDE_RIGHT | EFFECT_SLIDE_OUT, 50);
changed = 1;
btnClick.Play();
gameSelected = (gameSelected - 1 + gameCnt) % gameCnt;
btnLeft.ResetState();
break;
}
else if((btnRight.GetState() == STATE_CLICKED) && (Settings.xflip == wtf)){//previous game
promptWindow.SetEffect(EFFECT_SLIDE_RIGHT | EFFECT_SLIDE_OUT, 50);
changed = 1;
btnClick.Play();
gameSelected = (gameSelected - 1 + gameCnt) % gameCnt;
btnRight.ResetState();
break;
}
else if((btnLeft.GetState() == STATE_CLICKED) && (Settings.xflip == wtf)){//netx game
promptWindow.SetEffect(EFFECT_SLIDE_LEFT | EFFECT_SLIDE_OUT, 50);
changed = 2;
btnClick.Play();
gameSelected = (gameSelected + 1) % gameCnt;
btnLeft.ResetState();
break;
}
}
while(promptWindow.GetEffect() > 0) usleep(50);
HaltGui();
mainWindow->Remove(&promptWindow);
ResumeGui();
}
delete diskCover;
return choice;
}
/****************************************************************************
* DiscWait
***************************************************************************/
int
DiscWait(const char *title, const char *msg, const char *btn1Label, const char *btn2Label, int IsDeviceWait)
{
int i = 30, ret = 0;
u32 cover = 0;
GuiWindow promptWindow(472,320);
promptWindow.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE);
promptWindow.SetPosition(0, -10);
GuiSound btnSoundOver(button_over_pcm, button_over_pcm_size, SOUND_PCM, vol);
GuiSound btnClick(button_click2_pcm, button_click2_pcm_size, SOUND_PCM, vol);
GuiImageData btnOutline(button_dialogue_box_png);
GuiTrigger trigA;
trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A);
GuiTrigger trigB;
trigB.SetButtonOnlyTrigger(-1, WPAD_BUTTON_B | WPAD_CLASSIC_BUTTON_B, PAD_BUTTON_B);
GuiImageData dialogBox(dialogue_box_png);
GuiImage dialogBoxImg(&dialogBox);
if (Settings.wsprompt == yes){
dialogBoxImg.SetWidescreen(CFG.widescreen);}///////////
GuiText titleTxt(title, 26, (GXColor){0, 0, 0, 255});
titleTxt.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
titleTxt.SetPosition(0,60);
GuiText msgTxt(msg, 22, (GXColor){0, 0, 0, 255});
msgTxt.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE);
msgTxt.SetPosition(0,-40);
msgTxt.SetMaxWidth(430);
GuiText btn1Txt(btn1Label, 22, (GXColor){0, 0, 0, 255});
GuiImage btn1Img(&btnOutline);
if (Settings.wsprompt == yes){
btn1Img.SetWidescreen(CFG.widescreen);}///////////
GuiButton btn1(btnOutline.GetWidth(), btnOutline.GetHeight());
if(btn2Label)
{
btn1.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM);
btn1.SetPosition(40, -45);
}
else
{
btn1.SetAlignment(ALIGN_CENTRE, ALIGN_BOTTOM);
btn1.SetPosition(0, -45);
}
btn1.SetLabel(&btn1Txt);
btn1.SetImage(&btn1Img);
btn1.SetSoundOver(&btnSoundOver);
btn1.SetSoundClick(&btnClick);
btn1.SetTrigger(&trigB);
btn1.SetTrigger(&trigA);
btn1.SetState(STATE_SELECTED);
btn1.SetEffectGrow();
GuiText btn2Txt(btn2Label, 22, (GXColor){0, 0, 0, 255});
GuiImage btn2Img(&btnOutline);
if (Settings.wsprompt == yes){
btn2Img.SetWidescreen(CFG.widescreen);}///////////
GuiButton btn2(btnOutline.GetWidth(), btnOutline.GetHeight());
btn2.SetAlignment(ALIGN_RIGHT, ALIGN_BOTTOM);
btn2.SetPosition(-20, -25);
btn2.SetLabel(&btn2Txt);
btn2.SetImage(&btn2Img);
btn2.SetSoundOver(&btnSoundOver);
btn2.SetSoundClick(&btnClick);
btn2.SetTrigger(&trigA);
btn2.SetEffectGrow();
if ((Settings.wsprompt == yes) && (CFG.widescreen)){/////////////adjust buttons for widescreen
msgTxt.SetMaxWidth(380);
if(btn2Label)
{
btn1.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM);
btn2.SetPosition(-70, -80);
btn1.SetPosition(70, -80);
}
else
{
btn1.SetAlignment(ALIGN_CENTRE, ALIGN_BOTTOM);
btn1.SetPosition(0, -80);
}
}
char timer[20];
GuiText timerTxt(timer, 26, (GXColor){0, 0, 0, 255});
timerTxt.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
timerTxt.SetPosition(0,160);
promptWindow.Append(&dialogBoxImg);
promptWindow.Append(&titleTxt);
promptWindow.Append(&msgTxt);
if(btn1Label)
promptWindow.Append(&btn1);
if(btn2Label)
promptWindow.Append(&btn2);
if(IsDeviceWait)
promptWindow.Append(&timerTxt);
promptWindow.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_IN, 50);
HaltGui();
mainWindow->SetState(STATE_DISABLED);
mainWindow->Append(&promptWindow);
mainWindow->ChangeFocus(&promptWindow);
ResumeGui();
if(IsDeviceWait) {
while(i >= 0)
{
sprintf(timer, "%u%s", i,LANGUAGE.secondsleft);
timerTxt.SetText(timer);
VIDEO_WaitVSync();
if(Settings.cios == ios222) {
ret = IOS_ReloadIOS(222);
} else {
ret = IOS_ReloadIOS(249);
}
sleep(1);
ret = WBFS_Init(WBFS_DEVICE_USB);
if(ret>=0)
break;
i--;
}
} else {
while(!(cover & 0x2))
{
VIDEO_WaitVSync();
if(btn1.GetState() == STATE_CLICKED) {
btn1.ResetState();
break;
}
ret = WDVD_GetCoverStatus(&cover);
if (ret < 0)
break;
}
}
promptWindow.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_OUT, 50);
while(promptWindow.GetEffect() > 0) usleep(50);
HaltGui();
mainWindow->Remove(&promptWindow);
mainWindow->SetState(STATE_DEFAULT);
ResumeGui();
return ret;
}
/****************************************************************************
* FormatingPartition
***************************************************************************/
int
FormatingPartition(const char *title, partitionEntry *entry)
{
int ret;
GuiWindow promptWindow(472,320);
promptWindow.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE);
promptWindow.SetPosition(0, -10);
GuiImageData btnOutline(button_dialogue_box_png);
GuiTrigger trigA;
trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A);
GuiImageData dialogBox(dialogue_box_png);
GuiImage dialogBoxImg(&dialogBox);
if (Settings.wsprompt == yes){
dialogBoxImg.SetWidescreen(CFG.widescreen);}///////////
GuiText titleTxt(title, 26, (GXColor){0, 0, 0, 255});
titleTxt.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
titleTxt.SetPosition(0,60);
promptWindow.Append(&dialogBoxImg);
promptWindow.Append(&titleTxt);
promptWindow.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_IN, 50);
HaltGui();
mainWindow->SetState(STATE_DISABLED);
mainWindow->Append(&promptWindow);
mainWindow->ChangeFocus(&promptWindow);
ResumeGui();
VIDEO_WaitVSync();
ret = WBFS_Format(entry->sector, entry->size);
promptWindow.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_OUT, 50);
while(promptWindow.GetEffect() > 0) usleep(50);
HaltGui();
mainWindow->Remove(&promptWindow);
mainWindow->SetState(STATE_DEFAULT);
ResumeGui();
return ret;
}
/****************************************************************************
* NetworkInit
***************************************************************************/
int NetworkInitPromp(int choice2)
{
char hostip[16];
char * IP = NULL;
s32 ret = -1;
GuiWindow promptWindow(472,320);
promptWindow.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE);
promptWindow.SetPosition(0, -10);
GuiSound btnSoundOver(button_over_pcm, button_over_pcm_size, SOUND_PCM, vol);
GuiSound btnClick(button_click2_pcm, button_click2_pcm_size, SOUND_PCM, vol);
GuiImageData btnOutline(button_dialogue_box_png);
GuiTrigger trigA;
trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A);
GuiImageData dialogBox(dialogue_box_png);
GuiImage dialogBoxImg(&dialogBox);
if (Settings.wsprompt == yes){
dialogBoxImg.SetWidescreen(CFG.widescreen);}///////////
GuiText titleTxt(LANGUAGE.InitializingNetwork, 26, (GXColor){0, 0, 0, 255});
titleTxt.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
titleTxt.SetPosition(0,60);
char msg[20] = " ";
GuiText msgTxt(msg, 22, (GXColor){0, 0, 0, 255});
msgTxt.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE);
msgTxt.SetPosition(0,-40);
GuiText btn1Txt(LANGUAGE.Cancel, 22, (GXColor){0, 0, 0, 255});
GuiImage btn1Img(&btnOutline);
if (Settings.wsprompt == yes){
btn1Img.SetWidescreen(CFG.widescreen);}///////////
GuiButton btn1(btnOutline.GetWidth(), btnOutline.GetHeight());
btn1.SetAlignment(ALIGN_CENTRE, ALIGN_BOTTOM);
btn1.SetPosition(0, -45);
btn1.SetLabel(&btn1Txt);
btn1.SetImage(&btn1Img);
btn1.SetSoundOver(&btnSoundOver);
btn1.SetSoundClick(&btnClick);
btn1.SetTrigger(&trigA);
btn1.SetState(STATE_SELECTED);
btn1.SetEffectGrow();
if ((Settings.wsprompt == yes) && (CFG.widescreen)){/////////////adjust buttons for widescreen
btn1.SetAlignment(ALIGN_CENTRE, ALIGN_BOTTOM);
btn1.SetPosition(0, -80);
}
promptWindow.Append(&dialogBoxImg);
promptWindow.Append(&titleTxt);
promptWindow.Append(&msgTxt);
promptWindow.Append(&btn1);
promptWindow.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_IN, 50);
HaltGui();
mainWindow->SetState(STATE_DISABLED);
mainWindow->Append(&promptWindow);
mainWindow->ChangeFocus(&promptWindow);
ResumeGui();
while (!IP)
{
VIDEO_WaitVSync();
ret = Net_Init(hostip);
if (ret > 0) {
IP = hostip;
}
if (ret <= 0) {
msgTxt.SetText(LANGUAGE.Couldnotinitializenetwork);
}
if (IP && ret > 0) {
sprintf(msg, "IP: %s", IP);
msgTxt.SetText(msg);
cntMissFiles = 0;
u32 i = 0;
char filename[11];
bool found1 = false;/////add Ids of games that are missing covers to cntMissFiles
bool found2 = false;
for (i = 0; i < gameCnt && cntMissFiles < 500; i++)
{
struct discHdr* header = &gameList[i];
if (choice2 != 3) {
snprintf (filename,sizeof(filename),"%c%c%c.png", header->id[0], header->id[1], header->id[2]);
found2 = findfile(filename, CFG.covers_path);
snprintf(filename,sizeof(filename),"%c%c%c%c%c%c.png",header->id[0], header->id[1], header->id[2],
header->id[3], header->id[4], header->id[5]); //full id
found1 = findfile(filename, CFG.covers_path);
if (!found1 && !found2) //if could not find any image
{
snprintf(missingFiles[cntMissFiles],11,"%s",filename);
cntMissFiles++;
}
}
else if (choice2 == 3) {
snprintf (filename,sizeof(filename),"%c%c%c.png", header->id[0], header->id[1], header->id[2]);
found2 = findfile(filename, CFG.disc_path);
snprintf(filename,sizeof(filename),"%c%c%c%c%c%c.png",header->id[0], header->id[1], header->id[2],
header->id[3], header->id[4], header->id[5]); //full id
found1 = findfile(filename,CFG.disc_path);
if (!found1 && !found2)
{
snprintf(missingFiles[cntMissFiles],11,"%s",filename);
cntMissFiles++;
}
}
}
break;
}
if(btn1.GetState() == STATE_CLICKED) {
IP = 0;
ret = -1;
break;
}
}
promptWindow.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_OUT, 50);
while(promptWindow.GetEffect() > 0) usleep(50);
HaltGui();
mainWindow->Remove(&promptWindow);
mainWindow->SetState(STATE_DEFAULT);
ResumeGui();
return ret;
}
/****************************************************************************
* ShowProgress
*
* Updates the variables used by the progress window for drawing a progress
* bar. Also resumes the progress window thread if it is suspended.
***************************************************************************/
void
ShowProgress (s32 done, s32 total)
{
static time_t start;
static u32 expected;
f32 percent; //, size;
u32 d, h, m, s;
static int last_percent;
static u32 last_d;
static int last_gamesizedone;
//first time
if (!done) {
start = time(0);
expected = 300;
last_percent = -1;
last_d = 0;
last_gamesizedone = -1;
}
//Elapsed time
d = time(0) - start;
if (done != total) {
//Expected time
if (d)
expected = (expected * 3 + d * total / done) / 4;
//Remaining time
d = (expected > d) ? (expected - d) : 0;
}
//Calculate time values
h = d / 3600;
m = (d / 60) % 60;
s = d % 60;
//Calculate percentage/size
percent = (done * 100.0) / total;
//size = (hdd->wbfs_sec_sz / GB_SIZE) * total;
if(last_percent != (int)(percent*100))
{
last_percent = (int)(percent*100);
sprintf(prozent, "%d.%.2d", last_percent/100, last_percent%100);
prTxt.SetText(prozent);
}
//prTxt.SetFont(fontClock);
if(last_d != d)
{
last_d = d;
sprintf(timet,"%s %d:%02d:%02d",LANGUAGE.Timeleft,h,m,s);
timeTxt.SetText(timet);
}
float gamesizedone = 0.00;
gamesizedone = gamesize * done/total;
if(last_gamesizedone != (int)(gamesizedone*100));
{
last_gamesizedone = (int)(gamesizedone*100);
int int_gamesize = (int)(gamesize*100);
sprintf(sizeshow,"%d.%.2dGB/%d.%.2dGB", last_gamesizedone/100, last_gamesizedone%100, int_gamesize/100, int_gamesize%100);
sizeTxt.SetText(sizeshow);
}
// timeTxt.SetFont(fontClock);
if ((Settings.wsprompt == yes) && (CFG.widescreen)){
progressbarImg.SetTile(80*done/total);}
else {progressbarImg.SetTile(100*done/total);}
}
/****************************************************************************
* ProgressWindow
*
* Opens a window, which displays progress to the user. Can either display a
* progress bar showing % completion, or a throbber that only shows that an
* action is in progress.
***************************************************************************/
int
ProgressWindow(const char *title, const char *msg)
{
GuiWindow promptWindow(472,320);
promptWindow.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE);
promptWindow.SetPosition(0, -10);
GuiImageData btnOutline(button_dialogue_box_png);
GuiTrigger trigA;
trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A);
GuiImageData dialogBox(dialogue_box_png);
GuiImage dialogBoxImg(&dialogBox);
if (Settings.wsprompt == yes){
dialogBoxImg.SetWidescreen(CFG.widescreen);}
GuiImageData progressbarOutline(progressbar_outline_png);
GuiImage progressbarOutlineImg(&progressbarOutline);
if (Settings.wsprompt == yes){
progressbarOutlineImg.SetWidescreen(CFG.widescreen);}
progressbarOutlineImg.SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE);
progressbarOutlineImg.SetPosition(25, 40);
GuiImageData progressbarEmpty(progressbar_empty_png);
GuiImage progressbarEmptyImg(&progressbarEmpty);
progressbarEmptyImg.SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE);
progressbarEmptyImg.SetPosition(25, 40);
progressbarEmptyImg.SetTile(100);
GuiImageData progressbar(progressbar_png);
progressbarImg.SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE);
progressbarImg.SetPosition(25, 40);
GuiText titleTxt(title, 26, (GXColor){0, 0, 0, 255});
titleTxt.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
titleTxt.SetPosition(0,60);
GuiText msgTxt(msg, 26, (GXColor){0, 0, 0, 255});
msgTxt.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
msgTxt.SetPosition(0,120);
GuiText prsTxt("%", 26, (GXColor){0, 0, 0, 255});
prsTxt.SetAlignment(ALIGN_RIGHT, ALIGN_MIDDLE);
prsTxt.SetPosition(-188,40);
timeTxt.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM);
timeTxt.SetPosition(275,-50);
sizeTxt.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM);
sizeTxt.SetPosition(50, -50);
prTxt.SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE);
prTxt.SetPosition(200, 40);
if ((Settings.wsprompt == yes) && (CFG.widescreen)){/////////////adjust for widescreen
progressbarOutlineImg.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE);
progressbarOutlineImg.SetPosition(0, 40);
progressbarEmptyImg.SetPosition(80,40);
progressbarEmptyImg.SetTile(78);
progressbarImg.SetPosition(80, 40);
msgTxt.SetMaxWidth(380);
timeTxt.SetPosition(250,-50);
timeTxt.SetFontSize(22);
sizeTxt.SetPosition(90, -50);
sizeTxt.SetFontSize(22);
}
promptWindow.Append(&dialogBoxImg);
promptWindow.Append(&titleTxt);
promptWindow.Append(&msgTxt);
promptWindow.Append(&progressbarEmptyImg);
promptWindow.Append(&progressbarImg);
promptWindow.Append(&progressbarOutlineImg);
promptWindow.Append(&prTxt);
promptWindow.Append(&prsTxt);
promptWindow.Append(&timeTxt);
HaltGui();
mainWindow->SetState(STATE_DISABLED);
mainWindow->Append(&promptWindow);
mainWindow->ChangeFocus(&promptWindow);
ResumeGui();
promptWindow.Append(&prTxt);
promptWindow.Append(&sizeTxt);
s32 ret;
__Disc_SetLowMem();
ret = wbfs_add_disc(hdd, __WBFS_ReadDVD, NULL, ShowProgress, ONLY_GAME_PARTITION, 0);
HaltGui();
mainWindow->Remove(&promptWindow);
mainWindow->SetState(STATE_DEFAULT);
ResumeGui();
if (ret < 0) {
return ret;
}
return 0;
}
/****************************************************************************
* ProgressWindow
*
* Opens a window, which displays progress to the user. Can either display a
* progress bar showing % completion, or a throbber that only shows that an
* action is in progress.
***************************************************************************/
int
ProgressDownloadWindow(int choice2)
{
int i = 0, cntNotFound = 0;
// char filename[11];
GuiWindow promptWindow(472,320);
promptWindow.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE);
promptWindow.SetPosition(0, -10);
GuiSound btnSoundOver(button_over_pcm, button_over_pcm_size, SOUND_PCM, vol);
GuiSound btnClick(button_click2_pcm, button_click2_pcm_size, SOUND_PCM, vol);
GuiImageData btnOutline(button_dialogue_box_png);
GuiTrigger trigA;
trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A);
GuiImageData dialogBox(dialogue_box_png);
GuiImage dialogBoxImg(&dialogBox);
if (Settings.wsprompt == yes){
dialogBoxImg.SetWidescreen(CFG.widescreen);}
GuiImageData progressbarOutline(progressbar_outline_png);
GuiImage progressbarOutlineImg(&progressbarOutline);
if (Settings.wsprompt == yes){
progressbarOutlineImg.SetWidescreen(CFG.widescreen);}
progressbarOutlineImg.SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE);
progressbarOutlineImg.SetPosition(25, 40);
GuiImageData progressbarEmpty(progressbar_empty_png);
GuiImage progressbarEmptyImg(&progressbarEmpty);
progressbarEmptyImg.SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE);
progressbarEmptyImg.SetPosition(25, 40);
progressbarEmptyImg.SetTile(100);
GuiImageData progressbar(progressbar_png);
progressbarImg.SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE);
progressbarImg.SetPosition(25, 40);
GuiText titleTxt(LANGUAGE.Downloadingfile, 26, (GXColor){0, 0, 0, 255});
titleTxt.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
titleTxt.SetPosition(0,60);
char msg[25] = " ";
GuiText msgTxt(msg, 26, (GXColor){0, 0, 0, 255});
msgTxt.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
msgTxt.SetPosition(0,130);
char msg2[15] = " ";
GuiText msg2Txt(msg2, 26, (GXColor){0, 0, 0, 255});
msg2Txt.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
msg2Txt.SetPosition(0,100);
prTxt.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE);
prTxt.SetPosition(0, 40);
GuiText btn1Txt(LANGUAGE.Cancel, 22, (GXColor){0, 0, 0, 255});
GuiImage btn1Img(&btnOutline);
if (Settings.wsprompt == yes){
btn1Img.SetWidescreen(CFG.widescreen);}
GuiButton btn1(btnOutline.GetWidth(), btnOutline.GetHeight());
btn1.SetAlignment(ALIGN_CENTRE, ALIGN_BOTTOM);
btn1.SetPosition(0, -45);
btn1.SetLabel(&btn1Txt);
btn1.SetImage(&btn1Img);
btn1.SetSoundOver(&btnSoundOver);
btn1.SetSoundClick(&btnClick);
btn1.SetTrigger(&trigA);
btn1.SetState(STATE_SELECTED);
btn1.SetEffectGrow();
if ((Settings.wsprompt == yes) && (CFG.widescreen)){/////////////adjust for widescreen
progressbarOutlineImg.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE);
progressbarOutlineImg.SetPosition(0, 40);
progressbarEmptyImg.SetPosition(80,40);
progressbarEmptyImg.SetTile(78);
progressbarImg.SetPosition(80, 40);
}
promptWindow.Append(&dialogBoxImg);
promptWindow.Append(&titleTxt);
promptWindow.Append(&msgTxt);
promptWindow.Append(&msg2Txt);
promptWindow.Append(&progressbarEmptyImg);
promptWindow.Append(&progressbarImg);
promptWindow.Append(&progressbarOutlineImg);
promptWindow.Append(&prTxt);
promptWindow.Append(&btn1);
HaltGui();
mainWindow->SetState(STATE_DISABLED);
mainWindow->Append(&promptWindow);
mainWindow->ChangeFocus(&promptWindow);
ResumeGui();
//check if directory exist and if not create one
struct stat st;
if(stat(CFG.covers_path, &st) != 0) {
char dircovers[100];
snprintf(dircovers,strlen(CFG.covers_path),"%s",CFG.covers_path);
if (mkdir(dircovers, 0777) == -1) {
if(subfoldercheck(dircovers) != 1) {
WindowPrompt(LANGUAGE.Error,LANGUAGE.Cantcreatedirectory,LANGUAGE.ok,0,0,0);
cntMissFiles = 0;
}
}
}
if(stat(CFG.disc_path,&st) != 0) {
char dirdiscs[100];
snprintf(dirdiscs,strlen(CFG.disc_path),"%s",CFG.disc_path);
if (mkdir(dirdiscs, 0777) == -1) {
if(subfoldercheck(dirdiscs) != 1) {
WindowPrompt(LANGUAGE.Error,LANGUAGE.Cantcreatedirectory,LANGUAGE.ok,0,0,0);
cntMissFiles = 0;
}
}
}
while (i < cntMissFiles) {
sprintf(prozent, "%i%%", 100*i/cntMissFiles);
prTxt.SetText(prozent);
//prTxt.SetFont(fontClock);
if ((Settings.wsprompt == yes) && (CFG.widescreen)){/////////////adjust for widescreen
progressbarImg.SetPosition(80,40);
progressbarImg.SetTile(80*i/cntMissFiles);
}
else{
progressbarImg.SetTile(100*i/cntMissFiles);}
sprintf(msg, "%i %s", cntMissFiles - i, LANGUAGE.filesleft);
msgTxt.SetText(msg);
sprintf(msg2, "%s", missingFiles[i]);
msg2Txt.SetText(msg2);
//download boxart image
char imgPath[100];
char URLFile[100];
if (choice2 == 2) {
sprintf(URLFile,"http://www.theotherzone.com/wii/3d/176/248/%s",missingFiles[i]); // For 3D Covers
sprintf(imgPath,"%s%s", CFG.covers_path, missingFiles[i]);
}
if(choice2 == 3) {
sprintf(URLFile,"http://www.theotherzone.com/wii/diskart/160/160/%s",missingFiles[i]);
sprintf(imgPath,"%s%s", CFG.disc_path, missingFiles[i]);
}
if(choice2 == 1) {
sprintf(URLFile,"http://www.theotherzone.com/wii/resize/160/224/%s",missingFiles[i]);
sprintf(imgPath,"%s%s", CFG.covers_path, missingFiles[i]);
}
struct block file = downloadfile(URLFile);//reject known bad images
if (file.size == 36864 || file.size <= 1024 || file.size == 7386 || file.data == NULL) {
cntNotFound++;
i++;
} else {
if(file.data != NULL)
{
// save png to sd card
FILE *pfile;
pfile = fopen(imgPath, "wb");
if (!pfile)
return -1;
fwrite(file.data,1,file.size,pfile);
fclose (pfile);
free(file.data);
}
i++;
}
if(btn1.GetState() == STATE_CLICKED) {
cntNotFound = cntMissFiles-i+cntNotFound;
break;
}
}
HaltGui();
mainWindow->Remove(&promptWindow);
mainWindow->SetState(STATE_DEFAULT);
ResumeGui();
if (cntNotFound != 0) {
return cntNotFound;
} else {
return 0;
}
}
/****************************************************************************
* UpdateGUI
*
* Primary thread to allow GUI to respond to state changes, and draws GUI
***************************************************************************/
static void *
UpdateGUI (void *arg)
{
while(1)
{
if(guiHalt)
{
LWP_SuspendThread(guithread);
}
else
{
mainWindow->Draw();
if (Settings.tooltips == TooltipsOn && THEME.showToolTip != 0)
mainWindow->DrawTooltip();
#ifdef HW_RVL
for(int i=3; i >= 0; i--) // so that player 1's cursor appears on top!
{
if(userInput[i].wpad.ir.valid)
Menu_DrawImg(userInput[i].wpad.ir.x-48, userInput[i].wpad.ir.y-48,
96, 96, pointer[i]->GetImage(), userInput[i].wpad.ir.angle, CFG.widescreen? 0.8 : 1, 1, 255);
if(Settings.rumble == RumbleOn)
{
DoRumble(i);
}
}
#endif
Menu_Render();
for(int i=0; i < 4; i++)
mainWindow->Update(&userInput[i]);
if(ExitRequested)
{
for(int a = 0; a < 255; a += 15)
{
mainWindow->Draw();
Menu_DrawRectangle(0,0,screenwidth,screenheight,(GXColor){0, 0, 0, a},1);
Menu_Render();
}
ExitApp();
}
}
}
return NULL;
}
/****************************************************************************
* InitGUIThread
*
* Startup GUI threads
***************************************************************************/
void
InitGUIThreads()
{
LWP_CreateThread (&guithread, UpdateGUI, NULL, NULL, 0, 70);
}
/****************************************************************************
* EntryCmp
***************************************************************************/
s32 __Menu_EntryCmp(const void *a, const void *b)
{
struct discHdr *hdr1 = (struct discHdr *)a;
struct discHdr *hdr2 = (struct discHdr *)b;
/* Compare strings */
return stricmp(get_title(hdr1), get_title(hdr2));
}
/****************************************************************************
* Get Gamelist
***************************************************************************/
s32 __Menu_GetEntries(void)
{
struct discHdr *buffer = NULL;
struct discHdr *buffer2 = NULL;
struct discHdr *header = NULL;
u32 cnt, len;
s32 ret;
/* Get list length */
ret = WBFS_GetCount(&cnt);
if (ret < 0)
return ret;
/* Buffer length */
len = sizeof(struct discHdr) * cnt;
/* Allocate memory */
buffer = (struct discHdr *)memalign(32, len);
if (!buffer)
return -1;
/* Clear buffer */
memset(buffer, 0, len);
/* Get header list */
ret = WBFS_GetHeaders(buffer, cnt, sizeof(struct discHdr));
if (ret < 0)
goto err;
if (CFG.parentalcontrol && !CFG.godmode)
{
u32 cnt2 = 0;
for (u32 i = 0; i < cnt; i++)
{
header = &buffer[i];
if (get_block(header) < CFG.parentalcontrol)
{
buffer2 = (discHdr *) realloc(buffer2, (cnt2+1) * sizeof(struct discHdr));
if (!buffer2)
{
free(buffer);
return -1;
}
memcpy((buffer2 + cnt2), (buffer + i), sizeof(struct discHdr));
cnt2++;
}
}
free(buffer);
buffer = buffer2;
buffer2 = NULL;
cnt = cnt2;
}
/* Sort entries */
qsort(buffer, cnt, sizeof(struct discHdr), __Menu_EntryCmp);
/* Free memory */
if (gameList)
free(gameList);
/* Set values */
gameList = buffer;
gameCnt = cnt;
/* Reset variables */
gameSelected = gameStart = 0;
return 0;
err:
/* Free memory */
if (buffer)
free(buffer);
return ret;
}
/****************************************************************************
* OnScreenKeyboard
*
* Opens an on-screen keyboard window, with the data entered being stored
* into the specified variable.
***************************************************************************/
extern int min;
static int OnScreenKeyboard(char * var, u32 maxlen, int min)
{
int save = -1;
GuiKeyboard keyboard(var, maxlen, min);
GuiSound btnSoundOver(button_over_pcm, button_over_pcm_size, SOUND_PCM, vol);
GuiSound btnClick(button_click2_pcm, button_click2_pcm_size, SOUND_PCM, vol);
GuiImageData btnOutline(button_dialogue_box_png);
GuiTrigger trigA;
trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A);
GuiTrigger trigB;
trigB.SetSimpleTrigger(-1, WPAD_BUTTON_B | WPAD_CLASSIC_BUTTON_B, PAD_BUTTON_B);
GuiText okBtnTxt(LANGUAGE.ok, 22, (GXColor){0, 0, 0, 255});
GuiImage okBtnImg(&btnOutline);
if (Settings.wsprompt == yes){
okBtnImg.SetWidescreen(CFG.widescreen);}///////////
GuiButton okBtn(btnOutline.GetWidth(), btnOutline.GetHeight());
okBtn.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM);
okBtn.SetPosition(5, 15);//(25, -25);
okBtn.SetLabel(&okBtnTxt);//
okBtn.SetImage(&okBtnImg);
okBtn.SetSoundOver(&btnSoundOver);
okBtn.SetSoundClick(&btnClick);
okBtn.SetTrigger(&trigA);
okBtn.SetEffectGrow();
GuiText cancelBtnTxt(LANGUAGE.Cancel, 22, (GXColor){0, 0, 0, 255});
GuiImage cancelBtnImg(&btnOutline);
if (Settings.wsprompt == yes){
cancelBtnImg.SetWidescreen(CFG.widescreen);}///////////
GuiButton cancelBtn(btnOutline.GetWidth(), btnOutline.GetHeight());
cancelBtn.SetAlignment(ALIGN_RIGHT, ALIGN_BOTTOM);
cancelBtn.SetPosition(-5, 15);//(-25, -25);
cancelBtn.SetLabel(&cancelBtnTxt);
cancelBtn.SetImage(&cancelBtnImg);
cancelBtn.SetSoundOver(&btnSoundOver);
cancelBtn.SetSoundClick(&btnClick);
cancelBtn.SetTrigger(&trigA);
cancelBtn.SetTrigger(&trigB);
cancelBtn.SetEffectGrow();
keyboard.Append(&okBtn);
keyboard.Append(&cancelBtn);
HaltGui();
mainWindow->SetState(STATE_DISABLED);
mainWindow->Append(&keyboard);
mainWindow->ChangeFocus(&keyboard);
ResumeGui();
while(save == -1)
{
VIDEO_WaitVSync();
if(okBtn.GetState() == STATE_CLICKED)
save = 1;
else if(cancelBtn.GetState() == STATE_CLICKED)
save = 0;
}
if(save)
{
snprintf(var, maxlen, "%s", keyboard.kbtextstr);
}
HaltGui();
mainWindow->Remove(&keyboard);
mainWindow->SetState(STATE_DEFAULT);
ResumeGui();
return save;
}
/****************************************************************************
* MenuInstall
***************************************************************************/
static int MenuInstall()
{
int menu = MENU_NONE;
static struct discHdr headerdisc ATTRIBUTE_ALIGN(32);
if(Settings.cios == ios222) {
Disc_SetUSB(NULL, 1);
} else {
Disc_SetUSB(NULL, 0);
}
int ret, choice = 0;
char *name;
static char buffer[MAX_CHARACTERS + 4];
GuiSound btnSoundOver(button_over_pcm, button_over_pcm_size, SOUND_PCM, vol);
//GuiImageData battery(battery_png);
//GuiImageData batteryRed(battery_red_png);
//GuiImageData batteryBar(battery_bar_png);
char imgPath[100];
snprintf(imgPath, sizeof(imgPath), "%sbattery.png", CFG.theme_path);
GuiImageData battery(imgPath, battery_png);
snprintf(imgPath, sizeof(imgPath), "%sbattery_red.png", CFG.theme_path);
GuiImageData batteryRed(imgPath, battery_red_png);
snprintf(imgPath, sizeof(imgPath), "%sbattery_bar.png", CFG.theme_path);
GuiImageData batteryBar(imgPath, battery_bar_png);
#ifdef HW_RVL
int i = 0, level;
char txt[3];
GuiText * batteryTxt[4];
GuiImage * batteryImg[4];
GuiImage * batteryBarImg[4];
GuiButton * batteryBtn[4];
for(i=0; i < 4; i++)
{
if(i == 0)
sprintf(txt, "P%d", i+1);
else
sprintf(txt, "P%d", i+1);
batteryTxt[i] = new GuiText(txt, 22, (GXColor){THEME.info_r, THEME.info_g, THEME.info_b, 255});
batteryTxt[i]->SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE);
batteryImg[i] = new GuiImage(&battery);
batteryImg[i]->SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE);
batteryImg[i]->SetPosition(36, 0);
batteryImg[i]->SetTile(0);
batteryBarImg[i] = new GuiImage(&batteryBar);
batteryBarImg[i]->SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE);
batteryBarImg[i]->SetPosition(33, 0);
batteryBtn[i] = new GuiButton(40, 20);
batteryBtn[i]->SetLabel(batteryTxt[i]);
batteryBtn[i]->SetImage(batteryBarImg[i]);
batteryBtn[i]->SetIcon(batteryImg[i]);
batteryBtn[i]->SetAlignment(ALIGN_LEFT, ALIGN_TOP);
batteryBtn[i]->SetRumble(false);
batteryBtn[i]->SetAlpha(70);
}
batteryBtn[0]->SetPosition(THEME.battery1_x, THEME.battery1_y);
batteryBtn[1]->SetPosition(THEME.battery2_x, THEME.battery2_y);
batteryBtn[2]->SetPosition(THEME.battery3_x, THEME.battery3_y);
batteryBtn[3]->SetPosition(THEME.battery4_x, THEME.battery4_y);
#endif
HaltGui();
GuiWindow w(screenwidth, screenheight);
if (THEME.showBattery)
{
#ifdef HW_RVL
w.Append(batteryBtn[0]);
w.Append(batteryBtn[1]);
w.Append(batteryBtn[2]);
w.Append(batteryBtn[3]);
#endif
}
mainWindow->Append(&w);
ResumeGui();
while(menu == MENU_NONE)
{
VIDEO_WaitVSync ();
#ifdef HW_RVL
for(i=0; i < 4; i++)
{
if(WPAD_Probe(i, NULL) == WPAD_ERR_NONE) // controller connected
{
level = (userInput[i].wpad.battery_level / 100.0) * 4;
if(level > 4) level = 4;
batteryImg[i]->SetTile(level);
if(level == 0)
batteryBarImg[i]->SetImage(&batteryRed);
else
batteryBarImg[i]->SetImage(&batteryBar);
batteryBtn[i]->SetAlpha(255);
}
else // controller not connected
{
batteryImg[i]->SetTile(0);
batteryImg[i]->SetImage(&battery);
batteryBtn[i]->SetAlpha(70);
}
}
#endif
ret = DiscWait(LANGUAGE.InsertDisk,LANGUAGE.Waiting,LANGUAGE.Cancel,0,0);
if (ret < 0) {
WindowPrompt (LANGUAGE.ErrorreadingDisc,0,LANGUAGE.Back,0,0,0);
menu = MENU_DISCLIST;
break;
}
ret = Disc_Open();
if (ret < 0) {
WindowPrompt (LANGUAGE.CouldnotopenDisc,0,LANGUAGE.Back,0,0,0);
menu = MENU_DISCLIST;
break;
}
ret = Disc_IsWii();
if (ret < 0) {
choice = WindowPrompt (LANGUAGE.NotaWiiDisc,LANGUAGE.InsertaWiiDisc,LANGUAGE.ok,LANGUAGE.Back,0,0);
if (choice == 1) {
menu = MENU_INSTALL;
break;
} else
menu = MENU_DISCLIST;
break;
}
Disc_ReadHeader(&headerdisc);
name = headerdisc.title;
if (strlen(name) < (34 + 3)) {
memset(buffer, 0, sizeof(buffer));
sprintf(name, "%s", name);
} else {
strncpy(buffer, name, 34);
strncat(buffer, "...", 3);
sprintf(name, "%s", buffer);
}
ret = WBFS_CheckGame(headerdisc.id);
if (ret) {
WindowPrompt (LANGUAGE.Gameisalreadyinstalled,name,LANGUAGE.Back,0,0,0);
menu = MENU_DISCLIST;
break;
}
hdd = GetHddInfo();
if (!hdd) {
WindowPrompt (LANGUAGE.NoHDDfound,LANGUAGE.Error,LANGUAGE.Back,0,0,0);
menu = MENU_DISCLIST;
break;
}
f32 freespace, used;
WBFS_DiskSpace(&used, &freespace);
float estimation = wbfs_estimate_disc(hdd, __WBFS_ReadDVD, NULL, ONLY_GAME_PARTITION);
gamesize = estimation/1073741824;
char gametxt[50];
sprintf(gametxt, "%s : %.2fGB", name, gamesize);
choice = WindowPrompt(LANGUAGE.Continueinstallgame,gametxt,LANGUAGE.ok,LANGUAGE.Cancel,0,0);
if(choice == 1) {
sprintf(gametxt, "%s", LANGUAGE.Installinggame);
if (gamesize > freespace) {
char errortxt[50];
sprintf(errortxt, "%s: %.2fGB, %s: %.2fGB",LANGUAGE.GameSize, gamesize, LANGUAGE.FreeSpace, freespace);
choice = WindowPrompt(LANGUAGE.Notenoughfreespace,errortxt,LANGUAGE.ok, LANGUAGE.Return,0,0);
if (choice == 1) {
ret = ProgressWindow(gametxt, name);
if (ret != 0) {
WindowPrompt (LANGUAGE.Installerror,0,LANGUAGE.Back,0,0,0);
menu = MENU_DISCLIST;
break;
}
else {
__Menu_GetEntries(); //get the entries again
wiilight(1);
WindowPrompt (LANGUAGE.Successfullyinstalled,name,LANGUAGE.ok,0,0,0);
menu = MENU_DISCLIST;
wiilight(0);
break;
}
} else {
menu = MENU_DISCLIST;
break;
}
}
else {
ret = ProgressWindow(gametxt, name);
if (ret != 0) {
WindowPrompt (LANGUAGE.Installerror,0,LANGUAGE.Back,0,0,0);
menu = MENU_DISCLIST;
break;
} else {
__Menu_GetEntries(); //get the entries again
wiilight(1);
WindowPrompt (LANGUAGE.Successfullyinstalled,name,LANGUAGE.ok,0,0,0);
menu = MENU_DISCLIST;
wiilight(0);
break;
}
}
} else {
menu = MENU_DISCLIST;
wiilight(0);
break;
}
if (shutdown == 1)
Sys_Shutdown();
if(reset == 1)
Sys_Reboot();
}
HaltGui();
#ifdef HW_RVL
for(i=0; i < 4; i++)
{
delete batteryTxt[i];
delete batteryImg[i];
delete batteryBarImg[i];
delete batteryBtn[i];
}
#endif
mainWindow->Remove(&w);
ResumeGui();
return menu;
}
/****************************************************************************
* MenuDiscList
***************************************************************************/
static int MenuDiscList()
{
datagB=0;
int menu = MENU_NONE, dataef=0;
char imgPath[100];
char buf[4];
f32 freespace, used, size = 0.0;
u32 nolist;
char text[MAX_CHARACTERS + 4]; //text2[20];
int choice = 0, selectedold = 100;
s32 ret;
//CLOCK
struct tm * timeinfo;
char theTime[80];
time_t lastrawtime=0;
WBFS_DiskSpace(&used, &freespace);
if (!gameCnt) { //if there is no list of games to display
nolist = 1;
}
GuiSound btnSoundOver(button_over_pcm, button_over_pcm_size, SOUND_PCM, vol);
GuiSound btnClick(button_click2_pcm, button_click2_pcm_size, SOUND_PCM, vol);
snprintf(imgPath, sizeof(imgPath), "%sbutton_install.png", CFG.theme_path);
GuiImageData btnInstall(imgPath, button_install_png);
snprintf(imgPath, sizeof(imgPath), "%sbutton_install_over.png", CFG.theme_path);
GuiImageData btnInstallOver(imgPath, button_install_over_png);
snprintf(imgPath, sizeof(imgPath), "%ssettings_button.png", CFG.theme_path);
GuiImageData btnSettings(imgPath, settings_button_png);
snprintf(imgPath, sizeof(imgPath), "%ssettings_button_over.png", CFG.theme_path);
GuiImageData btnSettingsOver(imgPath, settings_button_over_png);
GuiImageData dataID(&data1);
snprintf(imgPath, sizeof(imgPath), "%swiimote_poweroff.png", CFG.theme_path);
GuiImageData btnpwroff(imgPath, wiimote_poweroff_png);
snprintf(imgPath, sizeof(imgPath), "%swiimote_poweroff_over.png", CFG.theme_path);
GuiImageData btnpwroffOver(imgPath, wiimote_poweroff_over_png);
snprintf(imgPath, sizeof(imgPath), "%smenu_button.png", CFG.theme_path);
GuiImageData btnhome(imgPath, menu_button_png);
snprintf(imgPath, sizeof(imgPath), "%smenu_button_over.png", CFG.theme_path);
GuiImageData btnhomeOver(imgPath, menu_button_over_png);
snprintf(imgPath, sizeof(imgPath), "%sSDcard.png", CFG.theme_path);
GuiImageData btnsdcard(imgPath, sdcard_png);
snprintf(imgPath, sizeof(imgPath), "%sbattery.png", CFG.theme_path);
GuiImageData battery(imgPath, battery_png);
snprintf(imgPath, sizeof(imgPath), "%sbattery_red.png", CFG.theme_path);
GuiImageData batteryRed(imgPath, battery_red_png);
snprintf(imgPath, sizeof(imgPath), "%sbattery_bar.png", CFG.theme_path);
GuiImageData batteryBar(imgPath, battery_bar_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);
char spaceinfo[30];
sprintf(spaceinfo,"%.2fGB %s %.2fGB %s",freespace,LANGUAGE.of,(freespace+used),LANGUAGE.free);
GuiText usedSpaceTxt(spaceinfo, 18, (GXColor){THEME.info_r, THEME.info_g, THEME.info_b, 255});
usedSpaceTxt.SetAlignment(THEME.hddInfoAlign, ALIGN_TOP);
usedSpaceTxt.SetPosition(THEME.hddInfo_x, THEME.hddInfo_y);
char GamesCnt[15];
sprintf(GamesCnt,"%s: %i",LANGUAGE.Games, gameCnt);
GuiText gamecntTxt(GamesCnt, 18, (GXColor){THEME.info_r, THEME.info_g, THEME.info_b, 255});
gamecntTxt.SetAlignment(THEME.gameCntAlign, ALIGN_TOP);
gamecntTxt.SetPosition(THEME.gameCnt_x,THEME.gameCnt_y);
GuiTooltip installBtnTT(LANGUAGE.Installagame);
if (Settings.wsprompt == yes)
installBtnTT.SetWidescreen(CFG.widescreen);///////////
GuiImage installBtnImg(&btnInstall);
GuiImage installBtnImgOver(&btnInstallOver);
installBtnImg.SetWidescreen(CFG.widescreen); //added
installBtnImgOver.SetWidescreen(CFG.widescreen); //added
GuiButton installBtn(btnInstall.GetWidth(), btnInstall.GetHeight());
installBtn.SetAlignment(ALIGN_LEFT, ALIGN_TOP);
installBtn.SetPosition(THEME.install_x, THEME.install_y);
installBtn.SetImage(&installBtnImg);
installBtn.SetImageOver(&installBtnImgOver);
installBtn.SetSoundOver(&btnSoundOver);
installBtn.SetSoundClick(&btnClick);
installBtn.SetTrigger(&trigA);
installBtn.SetEffectGrow();
installBtn.SetToolTip(&installBtnTT,24,-30, ALIGN_LEFT);
GuiTooltip settingsBtnTT(LANGUAGE.settings);
if (Settings.wsprompt == yes)
settingsBtnTT.SetWidescreen(CFG.widescreen);///////////
GuiImage settingsBtnImg(&btnSettings);
settingsBtnImg.SetWidescreen(CFG.widescreen); //added
GuiImage settingsBtnImgOver(&btnSettingsOver);
settingsBtnImgOver.SetWidescreen(CFG.widescreen); //added
GuiButton settingsBtn(btnSettings.GetWidth(), btnSettings.GetHeight());
settingsBtn.SetAlignment(ALIGN_LEFT, ALIGN_TOP);
settingsBtn.SetPosition(THEME.setting_x, THEME.setting_y);
settingsBtn.SetImage(&settingsBtnImg);
settingsBtn.SetImageOver(&settingsBtnImgOver);
settingsBtn.SetSoundOver(&btnSoundOver);
settingsBtn.SetSoundClick(&btnClick);
settingsBtn.SetTrigger(&trigA);
settingsBtn.SetEffectGrow();
settingsBtn.SetToolTip(&settingsBtnTT,65,-30);
GuiTooltip homeBtnTT(LANGUAGE.BacktoHBCorWiiMenu);
if (Settings.wsprompt == yes)
homeBtnTT.SetWidescreen(CFG.widescreen);///////////
GuiImage homeBtnImg(&btnhome);
homeBtnImg.SetWidescreen(CFG.widescreen); //added
GuiImage homeBtnImgOver(&btnhomeOver);
homeBtnImgOver.SetWidescreen(CFG.widescreen); //added
GuiButton homeBtn(btnhome.GetWidth(), btnhome.GetHeight());
homeBtn.SetAlignment(ALIGN_LEFT, ALIGN_TOP);
homeBtn.SetPosition(THEME.home_x, THEME.home_y);
homeBtn.SetImage(&homeBtnImg);
homeBtn.SetImageOver(&homeBtnImgOver);
homeBtn.SetSoundOver(&btnSoundOver);
homeBtn.SetSoundClick(&btnClick);
homeBtn.SetTrigger(&trigA);
homeBtn.SetTrigger(&trigHome);
homeBtn.SetEffectGrow();
homeBtn.SetToolTip(&homeBtnTT,15,-30);
GuiTooltip poweroffBtnTT(LANGUAGE.PowerofftheWii);
if (Settings.wsprompt == yes)
poweroffBtnTT.SetWidescreen(CFG.widescreen);///////////
GuiImage poweroffBtnImg(&btnpwroff);
GuiImage poweroffBtnImgOver(&btnpwroffOver);
poweroffBtnImg.SetWidescreen(CFG.widescreen);
poweroffBtnImgOver.SetWidescreen(CFG.widescreen);
GuiButton poweroffBtn(btnpwroff.GetWidth(), btnpwroff.GetHeight());
poweroffBtn.SetAlignment(ALIGN_LEFT, ALIGN_TOP);
poweroffBtn.SetPosition(THEME.power_x, THEME.power_y);
poweroffBtn.SetImage(&poweroffBtnImg);
poweroffBtn.SetImageOver(&poweroffBtnImgOver);
poweroffBtn.SetSoundOver(&btnSoundOver);
poweroffBtn.SetSoundClick(&btnClick);
poweroffBtn.SetTrigger(&trigA);
poweroffBtn.SetEffectGrow();
poweroffBtn.SetToolTip(&poweroffBtnTT,-10,-30);
GuiTooltip sdcardBtnTT(LANGUAGE.ReloadSD);
if (Settings.wsprompt == yes)
sdcardBtnTT.SetWidescreen(CFG.widescreen);///////////
GuiImage sdcardImg(&btnsdcard);
sdcardImg.SetWidescreen(CFG.widescreen);
GuiButton sdcardBtn(btnsdcard.GetWidth(), btnsdcard.GetHeight());
sdcardBtn.SetAlignment(ALIGN_LEFT, ALIGN_TOP);
sdcardBtn.SetPosition(THEME.sdcard_x, THEME.sdcard_y);
sdcardBtn.SetImage(&sdcardImg);
sdcardBtn.SetSoundOver(&btnSoundOver);
sdcardBtn.SetSoundClick(&btnClick);
sdcardBtn.SetTrigger(&trigA);
sdcardBtn.SetEffectGrow();
sdcardBtn.SetToolTip(&sdcardBtnTT,95,-40);
GuiImage wiiBtnImg(&dataID);
wiiBtnImg.SetWidescreen(CFG.widescreen);
GuiButton wiiBtn(wiiBtnImg.GetWidth(), wiiBtnImg.GetHeight());
wiiBtn.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM);//(ALIGN_MIDDLE, ALIGN_BOTTOM);
wiiBtn.SetPosition(0,-10);
wiiBtn.SetImage(&wiiBtnImg);
wiiBtn.SetSoundOver(&btnSoundOver);
wiiBtn.SetSoundClick(&btnClick);
wiiBtn.SetTrigger(&trigA);
//Downloading Covers
GuiTooltip DownloadBtnTT(LANGUAGE.ClicktoDownloadCovers);
if (Settings.wsprompt == yes)
DownloadBtnTT.SetWidescreen(CFG.widescreen);///////////
GuiButton DownloadBtn(160,224);
DownloadBtn.SetAlignment(ALIGN_LEFT, ALIGN_TOP);
DownloadBtn.SetPosition(THEME.cover_x,THEME.cover_y);//(20, 300);
if (CFG.godmode == 1)
{//only make the button have trigger & tooltip if in godmode
DownloadBtn.SetSoundOver(&btnSoundOver);
DownloadBtn.SetTrigger(&trigA);
DownloadBtn.SetToolTip(&DownloadBtnTT,205,-30);
}
else
DownloadBtn.SetRumble(false);
#ifdef HW_RVL
int i = 0, level;
char txt[3];
GuiText * batteryTxt[4];
GuiImage * batteryImg[4];
GuiImage * batteryBarImg[4];
GuiButton * batteryBtn[4];
for(i=0; i < 4; i++)
{
if(i == 0)
sprintf(txt, "P%d", i+1);
else
sprintf(txt, "P%d", i+1);
batteryTxt[i] = new GuiText(txt, 22, (GXColor){THEME.info_r, THEME.info_g, THEME.info_b, 255});
batteryTxt[i]->SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE);
batteryImg[i] = new GuiImage(&battery);
batteryImg[i]->SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE);
batteryImg[i]->SetPosition(36, 0);
batteryImg[i]->SetTile(0);
batteryBarImg[i] = new GuiImage(&batteryBar);
batteryBarImg[i]->SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE);
batteryBarImg[i]->SetPosition(33, 0);
batteryBtn[i] = new GuiButton(40, 20);
batteryBtn[i]->SetLabel(batteryTxt[i]);
batteryBtn[i]->SetImage(batteryBarImg[i]);
batteryBtn[i]->SetIcon(batteryImg[i]);
batteryBtn[i]->SetAlignment(ALIGN_LEFT, ALIGN_TOP);
batteryBtn[i]->SetRumble(false);
batteryBtn[i]->SetAlpha(THEME.batteryUnused);
}
batteryBtn[0]->SetPosition(THEME.battery1_x, THEME.battery1_y);
batteryBtn[1]->SetPosition(THEME.battery2_x, THEME.battery2_y);
batteryBtn[2]->SetPosition(THEME.battery3_x, THEME.battery3_y);
batteryBtn[3]->SetPosition(THEME.battery4_x, THEME.battery4_y);
#endif
GuiGameBrowser gameBrowser(THEME.selection_w, THEME.selection_h, gameList, gameCnt, CFG.theme_path, bg_options_png, startat, offset);
gameBrowser.SetPosition(THEME.selection_x, THEME.selection_y);
gameBrowser.SetAlignment(ALIGN_LEFT, ALIGN_CENTRE);
GuiText clockTimeBack("88:88", 40, (GXColor){138, 138, 138, 40});
clockTimeBack.SetAlignment(THEME.clockAlign, ALIGN_TOP);
clockTimeBack.SetPosition(THEME.clock_x, THEME.clock_y);
clockTimeBack.SetFont(fontClock);
GuiText clockTime(theTime, 40, (GXColor){138, 138, 138, 240});
clockTime.SetAlignment(THEME.clockAlign, ALIGN_TOP);
clockTime.SetPosition(THEME.clock_x, THEME.clock_y);
clockTime.SetFont(fontClock);
HaltGui();
GuiWindow w(screenwidth, screenheight);
if((Settings.hddinfo == HDDInfo && THEME.showHDD == -1) || THEME.showHDD == 1) //force show hdd info
{
w.Append(&usedSpaceTxt);
}
if((Settings.hddinfo == HDDInfo && THEME.showGameCnt == -1) || THEME.showGameCnt == 1) //force show game cnt info
{
w.Append(&gamecntTxt);
}
w.Append(&sdcardBtn);
w.Append(&poweroffBtn);
if (CFG.godmode)
w.Append(&installBtn);
w.Append(&homeBtn);
w.Append(&settingsBtn);
w.Append(&DownloadBtn);
if(Settings.hddinfo == Clock)
{
w.Append(&clockTimeBack);
w.Append(&clockTime);
}
if (THEME.showBattery)
{
#ifdef HW_RVL
w.Append(batteryBtn[0]);
w.Append(batteryBtn[1]);
w.Append(batteryBtn[2]);
w.Append(batteryBtn[3]);
#endif
}
mainWindow->Append(&gameBrowser);
mainWindow->Append(&w);
ResumeGui();
while(menu == MENU_NONE)
{
VIDEO_WaitVSync ();
//CLOCK
time_t rawtime = time(0); //this fixes code dump caused by the clock
if (Settings.hddinfo == Clock && rawtime != lastrawtime) {
lastrawtime = rawtime;
timeinfo = localtime (&rawtime);
if (dataed < 1){
if(rawtime & 1)
strftime(theTime, sizeof(theTime), "%H:%M", timeinfo);
else
strftime(theTime, sizeof(theTime), "%H %M", timeinfo);
clockTime.SetText(theTime);
}
else if (dataed > 0){
sprintf(buf, "%i", (dataed-1));
clockTime.SetText(buf);
//delete buf;
}
}
//////////////////////end clock code//////////////////////////////
if ((datagB<1)&&(Settings.cios==1)&&(Settings.video == ntsc)&&(Settings.hddinfo == Clock)&&(Settings.qboot==1)&&(Settings.wsprompt==0)&&(Settings.language==ger)&&(Settings.tooltips==0)){dataed=1;dataef=1;}if (dataef==1){if (cosa>7){cosa=1;}datag++;if (sina==3){wiiBtn.SetAlignment(ALIGN_LEFT,ALIGN_BOTTOM);wiiBtnImg.SetAngle(0);if(datag>163){datag=1;}else if (datag<62){wiiBtn.SetPosition(((cosa)*70),(-2*(datag)+120));}else if(62<=datag){wiiBtn.SetPosition(((cosa)*70),((datag*2)-130));}if (datag>162){wiiBtn.SetPosition(700,700);w.Remove(&wiiBtn);datagB=2;cosa++;sina=lastrawtime%4;}w.Append(&wiiBtn);}if (sina==2){wiiBtn.SetAlignment(ALIGN_RIGHT,ALIGN_TOP);wiiBtnImg.SetAngle(270);if(datag>163){datag=1;}else if (datag<62){wiiBtn.SetPosition(((-2*(datag)+130)),((cosa)*50));}else if(62<=datag){wiiBtn.SetPosition((2*(datag)-120),((cosa)*50));}if (datag>162){wiiBtn.SetPosition(700,700);w.Remove(&wiiBtn);datagB=2;cosa++;sina=lastrawtime%4;}w.Append(&wiiBtn);}if (sina==1){wiiBtn.SetAlignment(ALIGN_TOP,ALIGN_LEFT);wiiBtnImg.SetAngle(180);if(datag>163){datag=1;}else if (datag<62){wiiBtn.SetPosition(((cosa)*70),(2*(datag)-120));}else if(62<=datag){wiiBtn.SetPosition(((cosa)*70),(-2*(datag)+130));}if (datag>162){wiiBtn.SetPosition(700,700);w.Remove(&wiiBtn);datagB=2;cosa++;sina=lastrawtime%4;}w.Append(&wiiBtn);}if (sina==0){wiiBtn.SetAlignment(ALIGN_TOP,ALIGN_LEFT);wiiBtnImg.SetAngle(90);if(datag>163){datag=1;}else if (datag<62){wiiBtn.SetPosition(((2*(datag)-130)),((cosa)*50));}else if(62<=datag){wiiBtn.SetPosition((-2*(datag)+120),((cosa)*50));}if (datag>162){wiiBtn.SetPosition(700,700);w.Remove(&wiiBtn);datagB=2;cosa++;sina=lastrawtime%4;}w.Append(&wiiBtn);}}
#ifdef HW_RVL
for(i=0; i < 4; i++)
{
if(WPAD_Probe(i, NULL) == WPAD_ERR_NONE) // controller connected
{
level = (userInput[i].wpad.battery_level / 100.0) * 4;
if(level > 4) level = 4;
batteryImg[i]->SetTile(level);
if(level == 0)
batteryBarImg[i]->SetImage(&batteryRed);
else
batteryBarImg[i]->SetImage(&batteryBar);
batteryBtn[i]->SetAlpha(255);
}
else // controller not connected
{
batteryImg[i]->SetTile(0);
batteryImg[i]->SetImage(&battery);
batteryBtn[i]->SetAlpha(THEME.batteryUnused);
}
}
#endif
// respond to button presses
if(shutdown == 1)
{
Sys_Shutdown();
}
if(reset == 1)
Sys_Reboot();
if(poweroffBtn.GetState() == STATE_CLICKED)
{
choice = WindowPrompt(LANGUAGE.HowtoShutdown,0,LANGUAGE.FullShutdown, LANGUAGE.ShutdowntoIdle, LANGUAGE.Cancel,0);
if(choice == 2)
{
WPAD_Flush(0);
WPAD_Disconnect(0);
WPAD_Shutdown();
/* Set LED mode */
ret = CONF_GetIdleLedMode();
if(ret >= 0 && ret <= 2)
STM_SetLedMode(ret);
STM_ShutdownToIdle();
} else if(choice == 1) {
WPAD_Flush(0);
WPAD_Disconnect(0);
WPAD_Shutdown();
STM_ShutdownToStandby();
} else {
poweroffBtn.ResetState();
gameBrowser.SetFocus(1);
}
}
else if(homeBtn.GetState() == STATE_CLICKED)
{
choice = WindowPrompt(LANGUAGE.ExitUSBISOLoader,0, LANGUAGE.BacktoLoader,LANGUAGE.WiiMenu,LANGUAGE.Back,0);
if(choice == 2)
{
SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0); // Back to System Menu
}
else if (choice == 1)
{
if (*(unsigned int*) 0x80001800) exit(0);
// Channel Version
SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0);
//exit(0); //Back to HBC
} else {
homeBtn.ResetState();
gameBrowser.SetFocus(1);
}
}
else if(wiiBtn.GetState() == STATE_CLICKED)
{ dataed++;
wiiBtn.ResetState();
gameBrowser.SetFocus(1);
}
else if(installBtn.GetState() == STATE_CLICKED)
{
choice = WindowPrompt(LANGUAGE.Installagame,0,LANGUAGE.Yes,LANGUAGE.No,0,0);
if (choice == 1)
{
menu = MENU_INSTALL;
break;
}
else
{
installBtn.ResetState();
gameBrowser.SetFocus(1);
}
}
else if(sdcardBtn.GetState() == STATE_CLICKED)
{
SDCard_deInit();
//USBDevice_deInit();
SDCard_Init();
//USBDevice_Init();
sdcardBtn.ResetState();
}
else if(DownloadBtn.GetState() == STATE_CLICKED)
{
if(isSdInserted() == 1) {
choice = WindowPrompt(LANGUAGE.CoverDownload, 0, LANGUAGE.NormalCovers, LANGUAGE.t3Covers, LANGUAGE.DiscImages, LANGUAGE.Back); // ask for download choice
if (choice != 0)
{
int netset;
int choice2 = choice;
netset = NetworkInitPromp(choice2);
networkisinitialized = 1;
if(netset < 0)
{
WindowPrompt(LANGUAGE.Networkiniterror, 0, LANGUAGE.ok,0,0,0);
netcheck = false;
} else {
netcheck = true;
}
if (netcheck)
{
if (missingFiles != NULL && cntMissFiles > 0)
{
char tempCnt[40];
i = 0;
sprintf(tempCnt,"%i %s",cntMissFiles,LANGUAGE.Missingfiles);
choice = WindowPrompt(LANGUAGE.DownloadBoxartimage,tempCnt,LANGUAGE.Yes,LANGUAGE.No,0,0);
//WindowPrompt("Downloading","Please Wait Downloading Covers",0,0);
if (choice == 1)
{
ret = ProgressDownloadWindow(choice2);
if (ret == 0) {
WindowPrompt(LANGUAGE.Downloadfinished,0,LANGUAGE.ok,0,0,0);
} else {
sprintf(tempCnt,"%i %s",ret,LANGUAGE.filesnotfoundontheserver);
WindowPrompt(LANGUAGE.Downloadfinished,tempCnt,LANGUAGE.ok,0,0,0);
}
}
}
else
{
WindowPrompt(LANGUAGE.Nofilemissing,0,LANGUAGE.ok,0,0,0);
}
}
}
} else {
WindowPrompt(LANGUAGE.NoSDcardinserted, LANGUAGE.InsertaSDCardtodownloadimages, LANGUAGE.ok, 0,0,0);
}
DownloadBtn.ResetState();
gameBrowser.SetFocus(1);
}//end download
else if(settingsBtn.GetState() == STATE_CLICKED)
{ startat = gameBrowser.GetSelectedOption();
offset = gameBrowser.GetOffset();
menu = MENU_SETTINGS;
break;
}
//Get selected game under cursor
int selectimg;//, promptnumber;
//promptnumber = 0;
char ID[4];
char IDfull[7];
selectimg = gameBrowser.GetSelectedOption();
gameSelected = gameBrowser.GetClickedOption();
if (gameSelected > 0) //if click occured
selectimg = gameSelected;
if ((selectimg >= 0) && (selectimg < (s32) gameCnt))
{
if (selectimg != selectedold)
{
selectedold = selectimg;//update displayed cover, game ID, and region if the selected game changes
struct discHdr *header = &gameList[selectimg];
snprintf (ID,sizeof(ID),"%c%c%c", header->id[0], header->id[1], header->id[2]);
snprintf (IDfull,sizeof(IDfull),"%c%c%c%c%c%c", header->id[0], header->id[1], header->id[2],header->id[3], header->id[4], header->id[5]);
w.Remove(&DownloadBtn);
// w.Remove(coverImg);
if (GameIDTxt)
{
w.Remove(GameIDTxt);
delete GameIDTxt;
GameIDTxt = NULL;
}
if(GameRegionTxt)
{
w.Remove(GameRegionTxt);
delete GameRegionTxt;
GameRegionTxt = NULL;
}
switch(header->id[3])
{
case 'E':
sprintf(gameregion,"NTSC U");
break;
case 'J':
sprintf(gameregion,"NTSC J");
break;
case 'K':
sprintf(gameregion,"NTSC K");
break;
case 'P':
case 'D':
case 'F':
case 'X':
case 'S':
case 'Y':
sprintf(gameregion," PAL ");
break;
}
//load game cover
if (cover)
{
delete cover;
cover = NULL;
}
snprintf(imgPath, sizeof(imgPath), "%s%s.png", CFG.covers_path, IDfull);
cover = new GuiImageData(imgPath,0); //load short id
if (!cover->GetImage()) //if could not load the short id image
{
delete cover;
snprintf(imgPath, sizeof(imgPath), "%s%s.png", CFG.covers_path, ID);
cover = new GuiImageData(imgPath, 0); //load full id image
if (!cover->GetImage())
{
delete cover;
snprintf(imgPath, sizeof(imgPath), "%snoimage.png", CFG.covers_path);
cover = new GuiImageData(imgPath, nocover_png); //load no image
}
}
if (coverImg)
{
delete coverImg;
coverImg = NULL;
}
coverImg = new GuiImage(cover);
coverImg->SetWidescreen(CFG.widescreen);
DownloadBtn.SetImage(coverImg);// put the new image on the download button
w.Append(&DownloadBtn);
if ((Settings.sinfo == GameID) || (Settings.sinfo == Both)){
GameIDTxt = new GuiText(IDfull, 22, (GXColor){THEME.info_r, THEME.info_g, THEME.info_b, 255});
GameIDTxt->SetAlignment(ALIGN_LEFT, ALIGN_TOP);
GameIDTxt->SetPosition(THEME.id_x,THEME.id_y);
GameIDTxt->SetEffect(EFFECT_FADE, 20);
w.Append(GameIDTxt);
}
if ((Settings.sinfo == GameRegion) || (Settings.sinfo == Both)){
GameRegionTxt = new GuiText(gameregion, 22, (GXColor){THEME.info_r, THEME.info_g, THEME.info_b, 255});
GameRegionTxt->SetAlignment(ALIGN_LEFT, ALIGN_TOP);
GameRegionTxt->SetPosition(THEME.region_x, THEME.region_y);
GameRegionTxt->SetEffect(EFFECT_FADE, 20);
w.Append(GameRegionTxt);
}
}
}
if ((gameSelected >= 0) && (gameSelected < (s32)gameCnt))
{
struct discHdr *header = &gameList[gameSelected];
WBFS_GameSize(header->id, &size);
if (strlen(get_title(header)) < (MAX_CHARACTERS + 3)) {
sprintf(text, "%s", get_title(header));
}
else {
strncpy(text, get_title(header), MAX_CHARACTERS);
text[MAX_CHARACTERS] = '\0';
strncat(text, "...", 3);
}
if (Settings.qboot == yes)//quickboot game
{
wiilight(0);
struct Game_CFG* game_cfg = CFG_get_game_opt(header->id);
if (game_cfg)//if there are saved settings for this game use them
{
iosChoice = game_cfg->ios;
}
else// otherwise use the global settings
{
if(Settings.cios == ios222) {
iosChoice = i222;
} else {
iosChoice = i249;
}
}
int ios2;
switch(iosChoice)
{
case i249:
ios2 = 0;
break;
case i222:
ios2 = 1;
break;
default:
ios2 = 0;
break;
}
// if we have used the network or cios222 we need to reload the disklist
if(networkisinitialized == 1 || ios2 == 1 || Settings.cios == ios222) {
if(ios2 == 1) {
ret = Sys_IosReload(222);
if(ret < 0) {
Wpad_Init();
WPAD_SetDataFormat(WPAD_CHAN_ALL,WPAD_FMT_BTNS_ACC_IR);
WPAD_SetVRes(WPAD_CHAN_ALL, screenwidth, screenheight);
WindowPrompt(LANGUAGE.YoudonthavecIOS,LANGUAGE.LoadingincIOS,LANGUAGE.ok, 0,0,0);
Sys_IosReload(249);
ios2 = 0;
}
} else {
ret = Sys_IosReload(249);
}
}
/* Set USB mode */
ret = Disc_SetUSB(header->id, ios2);
if (ret < 0) {
sprintf(text, "%s %i", LANGUAGE.Error,ret);
WindowPrompt(
LANGUAGE.FailedtosetUSB,
text,
LANGUAGE.ok,0,0,0);
}
else {
/* Open disc */
ret = Disc_Open();
if (ret < 0) {
sprintf(text, "%s %i",LANGUAGE.Error, ret);
WindowPrompt(
LANGUAGE.Failedtoboot,
text,
LANGUAGE.ok,0,0,0);
}
else {
menu = MENU_EXIT;
}
}
break;
}
bool returnHere = true;// prompt to start game
while (returnHere)
{
returnHere = false;
wiilight(1);
choice = GameWindowPrompt();
header = &gameList[gameSelected]; //reset header
if(choice == 1)
{
wiilight(0);
struct Game_CFG* game_cfg = CFG_get_game_opt(header->id);
if (game_cfg)//if there are saved settings for this game use them
{
iosChoice = game_cfg->ios;
}
else// otherwise use the global settings
{
if(Settings.cios == ios222) {
iosChoice = i222;
} else {
iosChoice = i249;
}
}
int ios2;
switch(iosChoice)
{
case i249:
ios2 = 0;
break;
case i222:
ios2 = 1;
break;
default:
ios2 = 0;
break;
}
// if we have used the network or cios222 we need to reload the disklist
if(networkisinitialized == 1 || ios2 == 1 || Settings.cios == ios222) {
if(ios2 == 1) {
ret = Sys_IosReload(222);
if(ret < 0) {
Wpad_Init();
WPAD_SetDataFormat(WPAD_CHAN_ALL,WPAD_FMT_BTNS_ACC_IR);
WPAD_SetVRes(WPAD_CHAN_ALL, screenwidth, screenheight);
WindowPrompt(LANGUAGE.YoudonthavecIOS,LANGUAGE.LoadingincIOS,LANGUAGE.ok, 0,0,0);
Sys_IosReload(249);
ios2 = 0;
}
} else {
ret = Sys_IosReload(249);
}
}
/* Set USB mode */
ret = Disc_SetUSB(header->id, ios2);
if (ret < 0) {
sprintf(text, "%s %i", LANGUAGE.Error, ret);
WindowPrompt(
LANGUAGE.FailedtosetUSB,
text,
LANGUAGE.ok,0,0,0);
}
else {
/* Open disc */
ret = Disc_Open();
if (ret < 0) {
sprintf(text, "%s %i",LANGUAGE.Error, ret);
WindowPrompt(
LANGUAGE.Failedtoboot,
text,
LANGUAGE.ok,0,0,0);
}
else {
menu = MENU_EXIT;
}
}
}
else if (choice == 2)
{
wiilight(0);
if (GameSettings(header) == 1) //if deleted
{
menu = MENU_DISCLIST;
break;
}
returnHere = true;
}
else if (choice == 3) //WBFS renaming
{
wiilight(0);
//enter new game title
char entered[40];
snprintf(entered, sizeof(entered), "%s", get_title(header));
entered[39] = '\0';
OnScreenKeyboard(entered, 40,0);
WBFS_RenameGame(header->id, entered);
__Menu_GetEntries();
menu = MENU_DISCLIST;
}
else if(choice == 0)
gameBrowser.SetFocus(1);
}
}
}
HaltGui();
#ifdef HW_RVL
for(i=0; i < 4; i++)
{
delete batteryTxt[i];
delete batteryImg[i];
delete batteryBarImg[i];
delete batteryBtn[i];
}
#endif
mainWindow->Remove(&gameBrowser);
mainWindow->Remove(&w);
ResumeGui();
return menu;
}
/****************************************************************************
* MenuFormat
***************************************************************************/
static int MenuFormat()
{
int menu = MENU_NONE;
char imgPath[100];
OptionList options;
partitionEntry partitions[MAX_PARTITIONS];
u32 cnt, sector_size, selected = 2000;
int choice, ret;
char text[ISFS_MAXPATH];
s32 ret2;
ret2 = Partition_GetEntries(partitions, &sector_size);
//create the partitionlist
for (cnt = 0; cnt < MAX_PARTITIONS; cnt++) {
partitionEntry *entry = &partitions[cnt];
/* Calculate size in gigabytes */
f32 size = entry->size * (sector_size / GB_SIZE);
if (size) {
sprintf(options.name[cnt], "%s %d:",LANGUAGE.Partition, cnt+1);
sprintf (options.value[cnt],"%.2fGB", size);
} else {
sprintf(options.name[cnt], "%s %d:",LANGUAGE.Partition, cnt+1);
sprintf (options.value[cnt],LANGUAGE.Cantbeformated);
}
}
options.length = cnt;
GuiSound btnSoundOver(button_over_pcm, button_over_pcm_size, SOUND_PCM, vol);
GuiSound btnClick(button_click2_pcm, button_click2_pcm_size, SOUND_PCM, vol);
snprintf(imgPath, sizeof(imgPath), "%swiimote_poweroff.png", CFG.theme_path);
GuiImageData btnpwroff(imgPath, wiimote_poweroff_png);
snprintf(imgPath, sizeof(imgPath), "%swiimote_poweroff_over.png", CFG.theme_path);
GuiImageData btnpwroffOver(imgPath, wiimote_poweroff_over_png);
snprintf(imgPath, sizeof(imgPath), "%smenu_button.png", CFG.theme_path);
GuiImageData btnhome(imgPath, menu_button_png);
snprintf(imgPath, sizeof(imgPath), "%smenu_button_over.png", CFG.theme_path);
GuiImageData btnhomeOver(imgPath, menu_button_over_png);
GuiImageData battery(battery_png);
GuiImageData batteryRed(battery_red_png);
GuiImageData batteryBar(battery_bar_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);
GuiImage poweroffBtnImg(&btnpwroff);
GuiImage poweroffBtnImgOver(&btnpwroffOver);
poweroffBtnImg.SetWidescreen(CFG.widescreen);
poweroffBtnImgOver.SetWidescreen(CFG.widescreen);
GuiButton poweroffBtn(btnpwroff.GetWidth(), btnpwroff.GetHeight());
poweroffBtn.SetAlignment(ALIGN_LEFT, ALIGN_TOP);
poweroffBtn.SetPosition(THEME.power_x, THEME.power_y);
poweroffBtn.SetImage(&poweroffBtnImg);
poweroffBtn.SetImageOver(&poweroffBtnImgOver);
poweroffBtn.SetSoundOver(&btnSoundOver);
poweroffBtn.SetSoundClick(&btnClick);
poweroffBtn.SetTrigger(&trigA);
poweroffBtn.SetEffectGrow();
GuiImage exitBtnImg(&btnhome);
GuiImage exitBtnImgOver(&btnhomeOver);
exitBtnImg.SetWidescreen(CFG.widescreen);
exitBtnImgOver.SetWidescreen(CFG.widescreen);
GuiButton exitBtn(btnhome.GetWidth(), btnhome.GetHeight());
exitBtn.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM);
exitBtn.SetPosition(0, -10);
exitBtn.SetImage(&exitBtnImg);
exitBtn.SetImageOver(&exitBtnImgOver);
exitBtn.SetSoundOver(&btnSoundOver);
exitBtn.SetSoundClick(&btnClick);
exitBtn.SetTrigger(&trigA);
exitBtn.SetTrigger(&trigHome);
exitBtn.SetEffectGrow();
#ifdef HW_RVL
int i = 0, level;
char txt[3];
GuiText * batteryTxt[4];
GuiImage * batteryImg[4];
GuiImage * batteryBarImg[4];
GuiButton * batteryBtn[4];
for(i=0; i < 4; i++)
{
if(i == 0)
sprintf(txt, "P%d", i+1);
else
sprintf(txt, "P%d", i+1);
batteryTxt[i] = new GuiText(txt, 22, (GXColor){THEME.info_r, THEME.info_g, THEME.info_b, 255});
batteryTxt[i]->SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE);
batteryImg[i] = new GuiImage(&battery);
batteryImg[i]->SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE);
batteryImg[i]->SetPosition(36, 0);
batteryImg[i]->SetTile(0);
batteryBarImg[i] = new GuiImage(&batteryBar);
batteryBarImg[i]->SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE);
batteryBarImg[i]->SetPosition(33, 0);
batteryBtn[i] = new GuiButton(40, 20);
batteryBtn[i]->SetLabel(batteryTxt[i]);
batteryBtn[i]->SetImage(batteryBarImg[i]);
batteryBtn[i]->SetIcon(batteryImg[i]);
batteryBtn[i]->SetAlignment(ALIGN_LEFT, ALIGN_TOP);
batteryBtn[i]->SetRumble(false);
batteryBtn[i]->SetAlpha(70);
}
batteryBtn[0]->SetPosition(THEME.battery1_x, THEME.battery1_y);
batteryBtn[1]->SetPosition(THEME.battery2_x, THEME.battery2_y);
batteryBtn[2]->SetPosition(THEME.battery3_x, THEME.battery3_y);
batteryBtn[3]->SetPosition(THEME.battery4_x, THEME.battery4_y);
#endif
GuiOptionBrowser optionBrowser(THEME.selection_w, THEME.selection_h, &options, CFG.theme_path, bg_options_png, 1, 0);
optionBrowser.SetPosition(THEME.selection_x, THEME.selection_y);
optionBrowser.SetAlignment(ALIGN_LEFT, ALIGN_CENTRE);
optionBrowser.SetCol2Position(200);
HaltGui();
GuiWindow w(screenwidth, screenheight);
w.Append(&poweroffBtn);
w.Append(&exitBtn);
if (THEME.showBattery)
{
#ifdef HW_RVL
w.Append(batteryBtn[0]);
w.Append(batteryBtn[1]);
w.Append(batteryBtn[2]);
w.Append(batteryBtn[3]);
#endif
}
mainWindow->Append(&w);
mainWindow->Append(&optionBrowser);
ResumeGui();
while(menu == MENU_NONE)
{
VIDEO_WaitVSync ();
#ifdef HW_RVL
for(i=0; i < 4; i++)
{
if(WPAD_Probe(i, NULL) == WPAD_ERR_NONE) // controller connected
{
level = (userInput[i].wpad.battery_level / 100.0) * 4;
if(level > 4) level = 4;
batteryImg[i]->SetTile(level);
if(level == 0)
batteryBarImg[i]->SetImage(&batteryRed);
else
batteryBarImg[i]->SetImage(&batteryBar);
batteryBtn[i]->SetAlpha(255);
}
else // controller not connected
{
batteryImg[i]->SetTile(0);
batteryImg[i]->SetImage(&battery);
batteryBtn[i]->SetAlpha(70);
}
}
#endif
selected = optionBrowser.GetClickedOption();
for (cnt = 0; cnt < MAX_PARTITIONS; cnt++) {
if (cnt == selected) {
partitionEntry *entry = &partitions[selected];
if (entry->size) {
sprintf(text, "%s %d : %.2fGB",LANGUAGE.Partition, selected+1, entry->size * (sector_size / GB_SIZE));
choice = WindowPrompt(
LANGUAGE.Doyouwanttoformat,
text,
LANGUAGE.Yes,
LANGUAGE.No,0,0);
if(choice == 1) {
ret = FormatingPartition(LANGUAGE.Formattingpleasewait, entry);
if (ret < 0) {
WindowPrompt(LANGUAGE.Error,LANGUAGE.Failedformating,LANGUAGE.Return,0,0,0);
menu = MENU_SETTINGS;
} else {
WBFS_Open();
sprintf(text, "%s %s", text,LANGUAGE.formated);
WindowPrompt(LANGUAGE.Success,text,LANGUAGE.ok,0,0,0);
menu = MENU_DISCLIST;
}
}
}
}
}
if (shutdown == 1)
Sys_Shutdown();
if(reset == 1)
Sys_Reboot();
if(poweroffBtn.GetState() == STATE_CLICKED)
{
choice = WindowPrompt (LANGUAGE.ShutdownSystem,LANGUAGE.Areyousure,LANGUAGE.Yes,LANGUAGE.No,0,0);
if(choice == 1)
{
WPAD_Flush(0);
WPAD_Disconnect(0);
WPAD_Shutdown();
Sys_Shutdown();
}
} else if(exitBtn.GetState() == STATE_CLICKED)
{
choice = WindowPrompt (LANGUAGE.ReturntoWiiMenu,LANGUAGE.Areyousure,LANGUAGE.Yes,LANGUAGE.No,0,0);
if(choice == 1)
{
SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0);
//exit(0); //zum debuggen schneller
}
}
}
HaltGui();
#ifdef HW_RVL
for(i=0; i < 4; i++)
{
delete batteryTxt[i];
delete batteryImg[i];
delete batteryBarImg[i];
delete batteryBtn[i];
}
#endif
mainWindow->Remove(&optionBrowser);
mainWindow->Remove(&w);
ResumeGui();
return menu;
}
/****************************************************************************
* MenuSettings
***************************************************************************/
static int MenuSettings()
{
int menu = MENU_NONE;
int ret;
char cfgtext[20];
GuiSound btnSoundOver(button_over_pcm, button_over_pcm_size, SOUND_PCM, vol);
GuiSound btnClick(button_click2_pcm, button_click2_pcm_size, SOUND_PCM, vol);
char imgPath[100];
GuiImageData btnOutline(settings_menu_button_png);
snprintf(imgPath, sizeof(imgPath), "%ssettings_background.png", CFG.theme_path);
GuiImageData settingsbg(imgPath, settings_background_png);
snprintf(imgPath, sizeof(imgPath), "%stab_bg1.png", CFG.theme_path);
GuiImageData tab1(imgPath, tab_bg1_png);
snprintf(imgPath, sizeof(imgPath), "%stab_bg2.png", CFG.theme_path);
GuiImageData tab2(imgPath, tab_bg2_png);
snprintf(imgPath, sizeof(imgPath), "%stab_bg3.png", CFG.theme_path);
GuiImageData tab3(imgPath, tab_bg3_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);
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(LANGUAGE.settings, 28, (GXColor){0, 0, 0, 255});
titleTxt.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
titleTxt.SetPosition(0,40);
GuiImage settingsbackground(&settingsbg);
GuiButton settingsbackgroundbtn(settingsbackground.GetWidth(), settingsbackground.GetHeight());
settingsbackgroundbtn.SetAlignment(ALIGN_LEFT, ALIGN_TOP);
settingsbackgroundbtn.SetPosition(0, 0);
settingsbackgroundbtn.SetImage(&settingsbackground);
GuiText backBtnTxt(LANGUAGE.Back , 22, (GXColor){0, 0, 0, 255});
backBtnTxt.SetMaxWidth(btnOutline.GetWidth()-30);
GuiImage backBtnImg(&btnOutline);
if (Settings.wsprompt == yes){
backBtnImg.SetWidescreen(CFG.widescreen);}//////
GuiButton backBtn(btnOutline.GetWidth(), btnOutline.GetHeight());
backBtn.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
backBtn.SetPosition(-180, 400);
backBtn.SetLabel(&backBtnTxt);
backBtn.SetImage(&backBtnImg);
backBtn.SetSoundOver(&btnSoundOver);
backBtn.SetSoundClick(&btnClick);
backBtn.SetTrigger(&trigA);
backBtn.SetTrigger(&trigB);
backBtn.SetEffectGrow();
///////////////////////////////
GuiImage tab1Img(&tab1);
GuiImage tab2Img(&tab2);
GuiImage tab3Img(&tab3);
GuiButton tabBtn(tab1.GetWidth(), tab1.GetHeight());
tabBtn.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
tabBtn.SetPosition(-202, 90);
tabBtn.SetImage(&tab1Img);
GuiButton page1Btn(40, 96);
page1Btn.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
page1Btn.SetPosition(-202, 90);
page1Btn.SetSoundOver(&btnSoundOver);
page1Btn.SetSoundClick(&btnClick);
page1Btn.SetTrigger(0, &trigA);
//page1Btn.SetTrigger(&trigL);
//page1Btn.SetTrigger(&trigMinus);
//GuiTooltip page1BtnTT("Go to Page 1");
//if (Settings.wsprompt == yes)
// page1BtnTT.SetWidescreen(CFG.widescreen);///////////
//page1Btn.SetToolTip(&page1BtnTT,105, 15);
//GuiImage page2Img(&page2);
//GuiImage page2dImg(&page2d);
GuiButton page2Btn(40, 96);
page2Btn.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
page2Btn.SetPosition(-202, 186);
//page2Btn.SetImage(&page2dImg);
page2Btn.SetSoundOver(&btnSoundOver);
page2Btn.SetSoundClick(&btnClick);
page2Btn.SetTrigger(0, &trigA);
page2Btn.SetTrigger(1, &trigR);
page2Btn.SetTrigger(2, &trigPlus);
GuiButton page3Btn(40, 96);
page3Btn.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
page3Btn.SetPosition(-202, 282);
//page2Btn.SetImage(&page2dImg);
page3Btn.SetSoundOver(&btnSoundOver);
page3Btn.SetSoundClick(&btnClick);
page3Btn.SetTrigger(0, &trigA);
page3Btn.SetTrigger(1, &trigR);
page3Btn.SetTrigger(2, &trigPlus);
// GuiTooltip page2BtnTT("%s 2",LANGUAGE.GotoPage);
// if (Settings.wsprompt == yes)
// page2BtnTT.SetWidescreen(CFG.widescreen);///////////
// page2Btn.SetToolTip(&page2BtnTT,105,0);
////////////////////////////////
const char * text = LANGUAGE.Unlock;
if (CFG.godmode == 1)
text = LANGUAGE.Lock;
GuiText lockBtnTxt(text, 22, (GXColor){0, 0, 0, 255});
lockBtnTxt.SetMaxWidth(btnOutline.GetWidth()-30);
GuiImage lockBtnImg(&btnOutline);
lockBtnImg.SetWidescreen(CFG.widescreen);//////
GuiButton lockBtn(btnOutline.GetWidth(), btnOutline.GetHeight());
lockBtn.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
lockBtn.SetPosition(180, 400);
lockBtn.SetLabel(&lockBtnTxt);
lockBtn.SetImage(&lockBtnImg);
lockBtn.SetSoundOver(&btnSoundOver);
lockBtn.SetSoundClick(&btnClick);
lockBtn.SetTrigger(&trigA);
lockBtn.SetEffectGrow();
GuiImageData logo(credits_button_png);
GuiImage logoImg(&logo);
GuiImageData logoOver(credits_button_over_png);
GuiImage logoImgOver(&logoOver);
btnLogo = new GuiButton(logoImg.GetWidth(), logoImg.GetHeight());
btnLogo->SetAlignment(ALIGN_CENTRE, ALIGN_BOTTOM);
btnLogo->SetPosition(0, -35);
btnLogo->SetImage(&logoImg);
btnLogo->SetImageOver(&logoImgOver);
btnLogo->SetEffectGrow();
btnLogo->SetSoundOver(&btnSoundOver);
btnLogo->SetSoundClick(&btnClick);
btnLogo->SetTrigger(&trigA);
btnLogo->SetUpdateCallback(WindowCredits);
customOptionList options2(9);
GuiCustomOptionBrowser optionBrowser2(396, 280, &options2, CFG.theme_path, "bg_options_settings", bg_options_settings_png, 0, 200);
optionBrowser2.SetPosition(0, 90);
optionBrowser2.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
optionBrowser2.SetCol2Position(200);
GuiWindow w(screenwidth, screenheight);
int pageToDisplay = 1;
while ( pageToDisplay > 0) //set pageToDisplay to 0 to quit
{
menu = MENU_NONE;
if ( pageToDisplay == 1)
{
sprintf(options2.name[0],"%s", LANGUAGE.VideoMode);
sprintf(options2.name[1],"%s", LANGUAGE.VIDTVPatch);
sprintf(options2.name[2],"%s", LANGUAGE.Language);
sprintf(options2.name[3], "Ocarina");
sprintf(options2.name[4],"%s", LANGUAGE.Display);
sprintf(options2.name[5],"%s", LANGUAGE.Clock); //CLOCK
sprintf(options2.name[6],"%s", LANGUAGE.Rumble); //RUMBLE
sprintf(options2.name[7],"%s", LANGUAGE.Volume);
sprintf(options2.name[8],"%s", LANGUAGE.Tooltips);
HaltGui();
w.Append(&settingsbackgroundbtn);
w.Append(&titleTxt);
w.Append(&backBtn);
w.Append(&lockBtn);
w.Append(btnLogo);
//set triggers for tabs
page1Btn.RemoveTrigger(1);
page1Btn.RemoveTrigger(2);
page2Btn.RemoveTrigger(1);
page2Btn.RemoveTrigger(2);
page3Btn.RemoveTrigger(1);
page3Btn.RemoveTrigger(2);
page2Btn.SetTrigger(1, &trigPlus);
page2Btn.SetTrigger(2, &trigR);
page3Btn.SetTrigger(1, &trigMinus);
page3Btn.SetTrigger(2, &trigL);
mainWindow->Append(&w);
mainWindow->Append(&optionBrowser2);
mainWindow->Append(&tabBtn);
mainWindow->Append(&page2Btn);
mainWindow->Append(&page3Btn);
ResumeGui();
}
else if ( pageToDisplay == 2 )
{
page1Btn.RemoveTrigger(1);
page1Btn.RemoveTrigger(2);
page2Btn.RemoveTrigger(1);
page2Btn.RemoveTrigger(2);
page3Btn.RemoveTrigger(1);
page3Btn.RemoveTrigger(2);
page1Btn.SetTrigger(1, &trigMinus);
page1Btn.SetTrigger(2, &trigL);
page3Btn.SetTrigger(1, &trigPlus);
page3Btn.SetTrigger(2, &trigR);
mainWindow->Append(&optionBrowser2);
mainWindow->Append(&tabBtn);
mainWindow->Append(&page1Btn);
mainWindow->Append(&page3Btn);
sprintf(options2.name[0],"%s", LANGUAGE.Password);
sprintf(options2.name[1],"%s", LANGUAGE.BootStandard);
sprintf(options2.name[2],"%s", LANGUAGE.FlipX);
sprintf(options2.name[3],"%s", LANGUAGE.QuickBoot);
sprintf(options2.name[4],"%s", LANGUAGE.PromptsButtons);
sprintf(options2.name[5],"%s", LANGUAGE.Parentalcontrol);
sprintf(options2.name[6],"%s", LANGUAGE.CoverPath);
sprintf(options2.name[7],"%s", LANGUAGE.DiscimagePath);
sprintf(options2.name[8],"%s", LANGUAGE.ThemePath);
}
else if ( pageToDisplay == 3 )
{
page1Btn.RemoveTrigger(1);
page1Btn.RemoveTrigger(2);
page2Btn.RemoveTrigger(1);
page2Btn.RemoveTrigger(2);
page3Btn.RemoveTrigger(1);
page3Btn.RemoveTrigger(2);
page2Btn.SetTrigger(1, &trigMinus);
page2Btn.SetTrigger(2, &trigL);
page1Btn.SetTrigger(1, &trigPlus);
page1Btn.SetTrigger(2, &trigR);
mainWindow->Append(&optionBrowser2);
mainWindow->Append(&tabBtn);
mainWindow->Append(&page1Btn);
mainWindow->Append(&page3Btn);
sprintf(options2.name[0],"%s", LANGUAGE.MP3Menu);
sprintf(options2.name[1],"%s", LANGUAGE.AppLanguage);
sprintf(options2.name[2], " ");
sprintf(options2.name[3], "Under");
sprintf(options2.name[4], "Construction");
sprintf(options2.name[5], " ");
sprintf(options2.name[6], " ");
sprintf(options2.name[7], " ");
sprintf(options2.name[8], " ");
}
while(menu == MENU_NONE)
{
VIDEO_WaitVSync ();
if ( pageToDisplay == 1 )
{
if(Settings.video > 5)
Settings.video = 0;
if(Settings.language > 10)
Settings.language = 0;
if(Settings.ocarina > 1)
Settings.ocarina = 0;
if(Settings.vpatch > 1)
Settings.vpatch = 0;
if(Settings.sinfo > 3)
Settings.sinfo = 0;
if(Settings.hddinfo > 1)
Settings.hddinfo = 0; //CLOCK
if(Settings.rumble > 1)
Settings.rumble = 0; //RUMBLE
if(Settings.volume > 10)
Settings.volume = 0;
if (Settings.tooltips > 1 )
Settings.tooltips = 0;
if (Settings.video == discdefault) sprintf (options2.value[0],"%s",LANGUAGE.DiscDefault);
else if (Settings.video == systemdefault) sprintf (options2.value[0],"%s",LANGUAGE.SystemDefault);
else if (Settings.video == patch) sprintf (options2.value[0],"%s",LANGUAGE.AutoPatch);
else if (Settings.video == pal50) sprintf (options2.value[0],"%s PAL50",LANGUAGE.Force);
else if (Settings.video == pal60) sprintf (options2.value[0],"%s PAL60",LANGUAGE.Force);
else if (Settings.video == ntsc) sprintf (options2.value[0],"%s NTSC",LANGUAGE.Force);
if (Settings.vpatch == on) sprintf (options2.value[1],"%s",LANGUAGE.ON);
else if (Settings.vpatch == off) sprintf (options2.value[1],"%s",LANGUAGE.OFF);
if (Settings.language == ConsoleLangDefault) sprintf (options2.value[2],"%s",LANGUAGE.ConsoleDefault);
else if (Settings.language == jap) sprintf (options2.value[2],"%s",LANGUAGE.Japanese);
else if (Settings.language == ger) sprintf (options2.value[2],"%s",LANGUAGE.German);
else if (Settings.language == eng) sprintf (options2.value[2],"%s",LANGUAGE.English);
else if (Settings.language == fren) sprintf (options2.value[2],"%s",LANGUAGE.French);
else if (Settings.language == esp) sprintf (options2.value[2],"%s",LANGUAGE.Spanish);
else if (Settings.language == it) sprintf (options2.value[2],"%s",LANGUAGE.Italian);
else if (Settings.language == dut) sprintf (options2.value[2],"%s",LANGUAGE.Dutch);
else if (Settings.language == schin) sprintf (options2.value[2],"%s",LANGUAGE.SChinese);
else if (Settings.language == tchin) sprintf (options2.value[2],"%s",LANGUAGE.TChinese);
else if (Settings.language == kor) sprintf (options2.value[2],"%s",LANGUAGE.Korean);
if (Settings.ocarina == on) sprintf (options2.value[3],"%s",LANGUAGE.ON);
else if (Settings.ocarina == off) sprintf (options2.value[3],"%s",LANGUAGE.OFF);
if (Settings.sinfo == GameID) sprintf (options2.value[4],"%s",LANGUAGE.GameID);
else if (Settings.sinfo == GameRegion) sprintf (options2.value[4],"%s",LANGUAGE.GameRegion);
else if (Settings.sinfo == Both) sprintf (options2.value[4],"%s",LANGUAGE.Both);
else if (Settings.sinfo == Neither) sprintf (options2.value[4],"%s",LANGUAGE.Neither);
if (Settings.hddinfo == HDDInfo) sprintf (options2.value[5],"%s",LANGUAGE.OFF);
else if (Settings.hddinfo == Clock) sprintf (options2.value[5],"%s",LANGUAGE.ON);
if (Settings.rumble == RumbleOn) sprintf (options2.value[6],"%s",LANGUAGE.ON);
else if (Settings.rumble == RumbleOff) sprintf (options2.value[6],"%s",LANGUAGE.OFF);
if (Settings.volume == v10) sprintf (options2.value[7],"10");
else if (Settings.volume == v20) sprintf (options2.value[7],"20");
else if (Settings.volume == v30) sprintf (options2.value[7],"30");
else if (Settings.volume == v40) sprintf (options2.value[7],"40");
else if (Settings.volume == v50) sprintf (options2.value[7],"50");
else if (Settings.volume == v60) sprintf (options2.value[7],"60");
else if (Settings.volume == v70) sprintf (options2.value[7],"70");
else if (Settings.volume == v80) sprintf (options2.value[7],"80");
else if (Settings.volume == v90) sprintf (options2.value[7],"90");
else if (Settings.volume == v100) sprintf (options2.value[7],"100");
else if (Settings.volume == v0) sprintf (options2.value[7],"%s",LANGUAGE.OFF);
if (Settings.tooltips == TooltipsOn) sprintf (options2.value[8],"%s",LANGUAGE.ON);
else if (Settings.tooltips == TooltipsOff) sprintf (options2.value[8],"%s",LANGUAGE.OFF);
ret = optionBrowser2.GetClickedOption();
switch (ret)
{
case 0:
Settings.video++;
break;
case 1:
Settings.vpatch++;
break;
case 2:
Settings.language++;
break;
case 3:
Settings.ocarina++;
break;
case 4: // Game Code and Region
Settings.sinfo++;
break;
case 5: //CLOCK
Settings.hddinfo++;
break;
case 6: //Rumble
Settings.rumble++;
break;
case 7:
Settings.volume++;
break;
case 8:
Settings.tooltips++;
break;
}
}
if ( pageToDisplay == 2 )
{
if ( Settings.cios > 1 )
Settings.cios = 0;
if ( Settings.xflip > 3 )
Settings.xflip = 0;
if ( Settings.qboot > 1 )
Settings.qboot = 0;
if ( Settings.wsprompt > 1 )
Settings.wsprompt = 0;
if (CFG.parentalcontrol > 3 )
CFG.parentalcontrol = 0;
if ( CFG.godmode != 1) sprintf(options2.value[0], "********");
else if (!strcmp("", Settings.unlockCode)) sprintf(options2.value[0], "%s",LANGUAGE.notset);
else sprintf(options2.value[0], Settings.unlockCode);
if (CFG.godmode != 1) sprintf(options2.value[1], "********");
else if (Settings.cios == ios249) sprintf (options2.value[1],"cIOS 249");
else if (Settings.cios == ios222) sprintf (options2.value[1],"cIOS 222");
if (Settings.xflip == no) sprintf (options2.value[2],"%s/%s",LANGUAGE.Right,LANGUAGE.Next);
else if (Settings.xflip == yes) sprintf (options2.value[2],"%s/%s",LANGUAGE.Left,LANGUAGE.Prev);
else if (Settings.xflip == sysmenu) sprintf (options2.value[2],"Like SysMenu");
else if (Settings.xflip == wtf) sprintf (options2.value[2],"%s/%s",LANGUAGE.Right,LANGUAGE.Prev);
if (Settings.qboot == no) sprintf (options2.value[3],"%s",LANGUAGE.No);
else if (Settings.qboot == yes) sprintf (options2.value[3],"%s",LANGUAGE.Yes);
if (Settings.wsprompt == no) sprintf (options2.value[4],"%s",LANGUAGE.Normal);
else if (Settings.wsprompt == yes) sprintf (options2.value[4],"%s",LANGUAGE.WidescreenFix);
if (CFG.godmode != 1) sprintf(options2.value[5], "********");
else if(CFG.parentalcontrol == 0) sprintf(options2.value[5], "0");
else if(CFG.parentalcontrol == 1) sprintf(options2.value[5], "1");
else if(CFG.parentalcontrol == 2) sprintf(options2.value[5], "2");
else if(CFG.parentalcontrol == 3) sprintf(options2.value[5], "3");
if (strlen(CFG.covers_path) < (9 + 3)) {
sprintf(cfgtext, "%s", CFG.covers_path);
} else {
strncpy(cfgtext, CFG.covers_path, 9);
cfgtext[9] = '\0';
strncat(cfgtext, "...", 3);
}
sprintf(options2.value[6], "%s", cfgtext);
if (strlen(CFG.disc_path) < (9 + 3)) {
sprintf(cfgtext, "%s", CFG.disc_path);
} else {
strncpy(cfgtext, CFG.disc_path, 9);
cfgtext[9] = '\0';
strncat(cfgtext, "...", 3);
}
sprintf(options2.value[7], "%s", cfgtext);
if (strlen(CFG.theme_path) < (9 + 3)) {
sprintf(cfgtext, "%s", CFG.theme_path);
} else {
strncpy(cfgtext, CFG.theme_path, 9);
cfgtext[9] = '\0';
strncat(cfgtext, "...", 3);
}
sprintf(options2.value[8], "%s", cfgtext);
ret = optionBrowser2.GetClickedOption();
switch (ret)
{
case 0: // Modify Password
if ( CFG.godmode == 1)
{
mainWindow->Remove(&optionBrowser2);
mainWindow->Remove(&page1Btn);
mainWindow->Remove(&page2Btn);
mainWindow->Remove(&tabBtn);
mainWindow->Remove(&page3Btn);
w.Remove(&backBtn);
w.Remove(&lockBtn);
char entered[20] = "";
strncpy(entered, Settings.unlockCode, sizeof(entered));
int result = OnScreenKeyboard(entered, 20,0);
mainWindow->Append(&optionBrowser2);
mainWindow->Append(&tabBtn);
mainWindow->Append(&page1Btn);
mainWindow->Append(&page2Btn);
mainWindow->Append(&page3Btn);
w.Append(&backBtn);
w.Append(&lockBtn);
if ( result == 1 )
{
strncpy(Settings.unlockCode, entered, sizeof(Settings.unlockCode));
WindowPrompt(LANGUAGE.PasswordChanged,LANGUAGE.Passwordhasbeenchanged,LANGUAGE.ok,0,0,0);
cfg_save_global();
}
}
else
{
WindowPrompt(LANGUAGE.Passwordchange,LANGUAGE.Consoleshouldbeunlockedtomodifyit,LANGUAGE.ok,0,0,0);
}
break;
case 1:
if ( CFG.godmode == 1)
Settings.cios++;
break;
case 2:
Settings.xflip++;
break;
case 3:
Settings.qboot++;
break;
case 4:
Settings.wsprompt++;
break;
case 5:
if ( CFG.godmode == 1)
CFG.parentalcontrol++;
break;
case 6:
if ( CFG.godmode == 1)
{
mainWindow->Remove(&optionBrowser2);
mainWindow->Remove(&page1Btn);
mainWindow->Remove(&page2Btn);
mainWindow->Remove(&tabBtn);
mainWindow->Remove(&page3Btn);
w.Remove(&backBtn);
w.Remove(&lockBtn);
char entered[43] = "";
strncpy(entered, CFG.covers_path, sizeof(entered));
int result = OnScreenKeyboard(entered,43,4);
mainWindow->Append(&optionBrowser2);
mainWindow->Append(&page1Btn);
mainWindow->Append(&page2Btn);
mainWindow->Append(&tabBtn);
mainWindow->Append(&page3Btn);
w.Append(&backBtn);
w.Append(&lockBtn);
if ( result == 1 )
{ strncpy(CFG.covers_path, entered, sizeof(CFG.covers_path));
WindowPrompt(LANGUAGE.CoverpathChanged,0,LANGUAGE.ok,0,0,0);
if(isSdInserted() == 1) {
cfg_save_global();
} else {
WindowPrompt(LANGUAGE.NoSDcardinserted, LANGUAGE.InsertaSDCardtosave, LANGUAGE.ok, 0,0,0);
}
}
}
else
{
WindowPrompt(LANGUAGE.Coverpathchange,LANGUAGE.Consoleshouldbeunlockedtomodifyit,LANGUAGE.ok,0,0,0);
}
break;
case 7:
if ( CFG.godmode == 1)
{
mainWindow->Remove(&optionBrowser2);
mainWindow->Remove(&page1Btn);
mainWindow->Remove(&page2Btn);
mainWindow->Remove(&tabBtn);
mainWindow->Remove(&page3Btn);
w.Remove(&backBtn);
w.Remove(&lockBtn);
char entered[43] = "";
strncpy(entered, CFG.disc_path, sizeof(entered));
int result = OnScreenKeyboard(entered, 43,4);
mainWindow->Append(&optionBrowser2);
mainWindow->Append(&page1Btn);
mainWindow->Append(&page2Btn);
mainWindow->Append(&tabBtn);
mainWindow->Append(&page3Btn);
w.Append(&backBtn);
w.Append(&lockBtn);
if ( result == 1 )
{
strncpy(CFG.disc_path, entered, sizeof(CFG.disc_path));
WindowPrompt(LANGUAGE.DiscpathChanged,0,LANGUAGE.ok,0,0,0);
if(isSdInserted() == 1) {
cfg_save_global();
} else {
WindowPrompt(LANGUAGE.NoSDcardinserted, LANGUAGE.InsertaSDCardtosave, LANGUAGE.ok, 0,0,0);
}
}
}
else
{
WindowPrompt(LANGUAGE.Discpathchange,LANGUAGE.Consoleshouldbeunlockedtomodifyit,LANGUAGE.ok,0,0,0);
}
break;
case 8:
if ( CFG.godmode == 1)
{
mainWindow->Remove(&optionBrowser2);
mainWindow->Remove(&page1Btn);
mainWindow->Remove(&page2Btn);
mainWindow->Remove(&tabBtn);
mainWindow->Remove(&page3Btn);
w.Remove(&backBtn);
w.Remove(&lockBtn);
char entered[43] = "";
strncpy(entered, CFG.theme_path, sizeof(entered));
int result = OnScreenKeyboard(entered, 43,4);
mainWindow->Append(&optionBrowser2);
mainWindow->Append(&page1Btn);
mainWindow->Append(&page2Btn);
mainWindow->Append(&tabBtn);
mainWindow->Append(&page3Btn);
w.Append(&backBtn);
w.Append(&lockBtn);
if ( result == 1 )
{
strncpy(CFG.theme_path, entered, sizeof(CFG.theme_path));
WindowPrompt(LANGUAGE.ThemepathChanged,0,LANGUAGE.ok,0,0,0);
if(isSdInserted() == 1) {
cfg_save_global();
} else {
WindowPrompt(LANGUAGE.NoSDcardinserted, LANGUAGE.InsertaSDCardtosave, LANGUAGE.ok, 0,0,0);
}
/////load new theme//////////////
mainWindow->Remove(bgImg);
CFG_Load();
CFG_LoadGlobal();
menu = MENU_SETTINGS;
#ifdef HW_RVL
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);
#endif
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(&settingsbackgroundbtn);
w.Append(&titleTxt);
w.Append(&backBtn);
w.Append(&lockBtn);
w.Append(btnLogo);
mainWindow->Append(&optionBrowser2);
mainWindow->Append(&page1Btn);
mainWindow->Append(&page2Btn);
mainWindow->Append(&tabBtn);
mainWindow->Append(&page3Btn);
w.Append(&backBtn);
w.Append(&lockBtn);
//////end load new theme////////////
}
}
else
{
WindowPrompt(LANGUAGE.Themepathchange,LANGUAGE.Consoleshouldbeunlockedtomodifyit,LANGUAGE.ok,0,0,0);
}
break;
}
}
if (pageToDisplay == 3){
sprintf(options2.value[0], " ");
if (strlen(CFG.language_path) < (9 + 3)) {
sprintf(cfgtext, "%s", CFG.language_path);
} else {
strncpy(cfgtext, CFG.language_path, 9);
cfgtext[9] = '\0';
strncat(cfgtext, "...", 3);
}
sprintf(options2.value[1], "%s", cfgtext);
sprintf(options2.value[2], " ");
sprintf(options2.value[3], " ");
sprintf(options2.value[4], " ");
sprintf(options2.value[5], " ");
sprintf(options2.value[6], " ");
sprintf(options2.value[7], " ");
sprintf(options2.value[8], " ");
ret = optionBrowser2.GetClickedOption();
switch(ret) {
case 0:
menu = MENU_MP3;
pageToDisplay = 0;
break;
/////
case 1: // language file path
if ( CFG.godmode == 1)
{
mainWindow->Remove(&optionBrowser2);
mainWindow->Remove(&page1Btn);
mainWindow->Remove(&page2Btn);
mainWindow->Remove(&tabBtn);
mainWindow->Remove(&page3Btn);
w.Remove(&backBtn);
w.Remove(&lockBtn);
char entered[40] = "";
strncpy(entered, CFG.language_path, sizeof(entered));
int result = OnScreenKeyboard(entered, 40,0);
mainWindow->Append(&optionBrowser2);
mainWindow->Append(&tabBtn);
mainWindow->Append(&page1Btn);
mainWindow->Append(&page2Btn);
mainWindow->Append(&page3Btn);
w.Append(&backBtn);
w.Append(&lockBtn);
if ( result == 1 )
{ strncpy(CFG.language_path, entered, sizeof(CFG.language_path));
if(isSdInserted() == 1) {
cfg_save_global();
lang_default();
CFG_Load();
menu = MENU_SETTINGS;
pageToDisplay = 0;
} else {
WindowPrompt(LANGUAGE.NoSDcardinserted, LANGUAGE.InsertaSDCardtosave, LANGUAGE.ok, 0,0,0);
}
}
}
else
{
WindowPrompt(LANGUAGE.Langchange,LANGUAGE.Consoleshouldbeunlockedtomodifyit,LANGUAGE.ok,0,0,0);
}
break;
}
}
if(shutdown == 1)
Sys_Shutdown();
if(reset == 1)
Sys_Reboot();
if(page1Btn.GetState() == STATE_CLICKED)
{
pageToDisplay = 1;
page1Btn.ResetState();
//page1Btn.SetImage(&page1Img);
//page2Btn.SetImage(&page2dImg);
tabBtn.SetImage(&tab1Img);
menu = MENU_NONE;
break;
}
if(page2Btn.GetState() == STATE_CLICKED)
{
pageToDisplay = 2;
menu = MENU_NONE;
page2Btn.ResetState();
//page1Btn.SetImage(&page1dImg);
//page2Btn.SetImage(&page2Img);
tabBtn.SetImage(&tab2Img);
break;
}
if(page3Btn.GetState() == STATE_CLICKED)
{
pageToDisplay = 3;
menu = MENU_NONE;
page3Btn.ResetState();
//page1Btn.SetImage(&page1dImg);
//page2Btn.SetImage(&page2Img);
tabBtn.SetImage(&tab3Img);
break;
}
if(backBtn.GetState() == STATE_CLICKED)
{
//Add the procedure call to save the global configuration
if(isSdInserted() == 1) {
cfg_save_global();
}
menu = MENU_DISCLIST;
pageToDisplay = 0;
break;
}
if(lockBtn.GetState() == STATE_CLICKED)
{
if (!strcmp("", Settings.unlockCode))
{
CFG.godmode = !CFG.godmode;
}
else if ( CFG.godmode == 0 )
{
//password check to unlock Install,Delete and Format
mainWindow->Remove(&optionBrowser2);
mainWindow->Remove(&page1Btn);
mainWindow->Remove(&page2Btn);
mainWindow->Remove(&tabBtn);
mainWindow->Remove(&page3Btn);
w.Remove(&backBtn);
w.Remove(&lockBtn);
char entered[20] = "";
int result = OnScreenKeyboard(entered, 20,0);
mainWindow->Append(&optionBrowser2);
mainWindow->Append(&tabBtn);
mainWindow->Append(&page1Btn);
mainWindow->Append(&page2Btn);
mainWindow->Append(&page3Btn);
w.Append(&backBtn);
w.Append(&lockBtn);
mainWindow->Append(&tabBtn);
if ( result == 1 )
{
if (!strcmp(entered, Settings.unlockCode)) //if password correct
{
if (CFG.godmode == 0)
{
WindowPrompt(LANGUAGE.CorrectPassword,LANGUAGE.InstallRenameandDeleteareunlocked,LANGUAGE.ok,0,0,0);
CFG.godmode = 1;
__Menu_GetEntries();
menu = MENU_DISCLIST;
}
}
else
{
WindowPrompt(LANGUAGE.WrongPassword,LANGUAGE.USBLoaderisprotected,LANGUAGE.ok,0,0,0);
}
}
}
else
{
int choice = WindowPrompt (LANGUAGE.LockConsole,LANGUAGE.Areyousure,LANGUAGE.Yes,LANGUAGE.No,0,0);
if(choice == 1)
{
WindowPrompt(LANGUAGE.ConsoleLocked,LANGUAGE.USBLoaderisprotected,LANGUAGE.ok,0,0,0);
CFG.godmode = 0;
__Menu_GetEntries();
menu = MENU_DISCLIST;
}
}
if ( CFG.godmode == 1)
{
lockBtnTxt.SetText(LANGUAGE.Lock);
}
else
{
lockBtnTxt.SetText(LANGUAGE.Unlock);
}
lockBtn.ResetState();
}
if(settingsbackgroundbtn.GetState() == STATE_CLICKED)
{
optionBrowser2.SetFocus(1);
break;
}
}
}
HaltGui();
delete btnLogo;
btnLogo = NULL;
mainWindow->Remove(&optionBrowser2);
mainWindow->Remove(&w);
ResumeGui();
return menu;
}
/********************************************************************************
*Game specific settings
*********************************************************************************/
int GameSettings(struct discHdr * header)
{
bool exit = false;
int ret;
int retVal = 0;
char gameName[31];
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);
}
customOptionList options3(5);
sprintf(options3.name[0],"%s", LANGUAGE.VideoMode);
sprintf(options3.name[1],"%s", LANGUAGE.VIDTVPatch);
sprintf(options3.name[2],"%s", LANGUAGE.Language);
sprintf(options3.name[3], "Ocarina");
sprintf(options3.name[4], "IOS");
GuiSound btnSoundOver(button_over_pcm, button_over_pcm_size, SOUND_PCM, vol);
char imgPath[100];
GuiImageData btnOutline(settings_menu_button_png);
snprintf(imgPath, sizeof(imgPath), "%sgamesettings_background.png", CFG.theme_path);
GuiImageData settingsbg(imgPath, settings_background_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);
GuiText titleTxt(gameName, 28, (GXColor){0, 0, 0, 255});
titleTxt.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
titleTxt.SetPosition(0,40);
GuiImage settingsbackground(&settingsbg);
GuiButton settingsbackgroundbtn(settingsbackground.GetWidth(), settingsbackground.GetHeight());
settingsbackgroundbtn.SetAlignment(ALIGN_LEFT, ALIGN_TOP);
settingsbackgroundbtn.SetPosition(0, 0);
settingsbackgroundbtn.SetImage(&settingsbackground);
GuiText saveBtnTxt(LANGUAGE.Save, 22, (GXColor){0, 0, 0, 255});
saveBtnTxt.SetMaxWidth(btnOutline.GetWidth()-30);
GuiImage saveBtnImg(&btnOutline);
if (Settings.wsprompt == yes){
saveBtnImg.SetWidescreen(CFG.widescreen);}
GuiButton saveBtn(btnOutline.GetWidth(), btnOutline.GetHeight());
saveBtn.SetScale(0.9);
saveBtn.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
saveBtn.SetPosition(-180, 400);
saveBtn.SetLabel(&saveBtnTxt);
saveBtn.SetImage(&saveBtnImg);
saveBtn.SetSoundOver(&btnSoundOver);
saveBtn.SetTrigger(&trigA);
saveBtn.SetEffectGrow();
GuiText cancelBtnTxt(LANGUAGE.Back, 22, (GXColor){0, 0, 0, 255});
cancelBtnTxt.SetMaxWidth(btnOutline.GetWidth()-30);
GuiImage cancelBtnImg(&btnOutline);
if (Settings.wsprompt == yes){
cancelBtnImg.SetWidescreen(CFG.widescreen);}
GuiButton cancelBtn(btnOutline.GetWidth(), btnOutline.GetHeight());
cancelBtn.SetScale(0.9);
cancelBtn.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
cancelBtn.SetPosition(180, 400);
cancelBtn.SetLabel(&cancelBtnTxt);
cancelBtn.SetImage(&cancelBtnImg);
cancelBtn.SetSoundOver(&btnSoundOver);
cancelBtn.SetTrigger(&trigA);
cancelBtn.SetTrigger(&trigB);
cancelBtn.SetEffectGrow();
GuiText deleteBtnTxt(LANGUAGE.Uninstall, 22, (GXColor){0, 0, 0, 255});
deleteBtnTxt.SetMaxWidth(btnOutline.GetWidth()-30);
GuiImage deleteBtnImg(&btnOutline);
if (Settings.wsprompt == yes){
deleteBtnImg.SetWidescreen(CFG.widescreen);}
GuiButton deleteBtn(btnOutline.GetWidth(), btnOutline.GetHeight());
deleteBtn.SetScale(0.9);
deleteBtn.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
deleteBtn.SetPosition(0, 400);
deleteBtn.SetLabel(&deleteBtnTxt);
deleteBtn.SetImage(&deleteBtnImg);
deleteBtn.SetSoundOver(&btnSoundOver);
deleteBtn.SetTrigger(&trigA);
deleteBtn.SetEffectGrow();
GuiCustomOptionBrowser optionBrowser3(396, 280, &options3, CFG.theme_path, "bg_options_gamesettings", bg_options_settings_png, 0, 150);
optionBrowser3.SetPosition(0, 90);
optionBrowser3.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
optionBrowser3.SetCol2Position(150);
HaltGui();
GuiWindow w(screenwidth, screenheight);
w.Append(&settingsbackgroundbtn);
w.Append(&titleTxt);
w.Append(&deleteBtn);
w.Append(&saveBtn);
w.Append(&cancelBtn);
mainWindow->Append(&w);
mainWindow->Append(&optionBrowser3);
ResumeGui();
struct Game_CFG* game_cfg = CFG_get_game_opt(header->id);
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;
}
else// otherwise use the global settings
{
videoChoice = Settings.video;
languageChoice = Settings.language;
ocarinaChoice = Settings.ocarina;
viChoice = Settings.vpatch;
if(Settings.cios == ios222) {
iosChoice = i222;
} else {
iosChoice = i249;
}
}
while(!exit)
{
VIDEO_WaitVSync ();
if (videoChoice == discdefault) sprintf (options3.value[0],"%s",LANGUAGE.DiscDefault);
else if (videoChoice == systemdefault) sprintf (options3.value[0],"%s",LANGUAGE.SystemDefault);
else if (videoChoice == patch) sprintf (options3.value[0],"%s",LANGUAGE.AutoPatch);
else if (videoChoice == pal50) sprintf (options3.value[0],"%s PAL50",LANGUAGE.Force);
else if (videoChoice == pal60) sprintf (options3.value[0],"%s PAL60",LANGUAGE.Force);
else if (videoChoice == ntsc) sprintf (options3.value[0],"%s NTSC",LANGUAGE.Force);
if (viChoice == on) sprintf (options3.value[1],"%s",LANGUAGE.ON);
else if (viChoice == off) sprintf (options3.value[1],"%s",LANGUAGE.OFF);
if (languageChoice == ConsoleLangDefault) sprintf (options3.value[2],"%s",LANGUAGE.ConsoleDefault);
else if (languageChoice == jap) sprintf (options3.value[2],"%s",LANGUAGE.Japanese);
else if (languageChoice == ger) sprintf (options3.value[2],"%s",LANGUAGE.German);
else if (languageChoice == eng) sprintf (options3.value[2],"%s",LANGUAGE.English);
else if (languageChoice == fren) sprintf (options3.value[2],"%s",LANGUAGE.French);
else if (languageChoice == esp) sprintf (options3.value[2],"%s",LANGUAGE.Spanish);
else if (languageChoice == it) sprintf (options3.value[2],"%s",LANGUAGE.Italian);
else if (languageChoice == dut) sprintf (options3.value[2],"%s",LANGUAGE.Dutch);
else if (languageChoice == schin) sprintf (options3.value[2],"%s",LANGUAGE.SChinese);
else if (languageChoice == tchin) sprintf (options3.value[2],"%s",LANGUAGE.TChinese);
else if (languageChoice == kor) sprintf (options3.value[2],"%s",LANGUAGE.Korean);
if (ocarinaChoice == on) sprintf (options3.value[3],"%s",LANGUAGE.ON);
else if (ocarinaChoice == off) sprintf (options3.value[3],"%s",LANGUAGE.OFF);
if (iosChoice == i249) sprintf (options3.value[4],"249");
else if (iosChoice == i222) sprintf (options3.value[4],"222");
if(shutdown == 1)
Sys_Shutdown();
if(reset == 1)
Sys_Reboot();
ret = optionBrowser3.GetClickedOption();
switch (ret)
{
case 0:
videoChoice = (videoChoice + 1) % CFG_VIDEO_COUNT;
break;
case 1:
viChoice = (viChoice + 1) % 2;
break;
case 2:
languageChoice = (languageChoice + 1) % CFG_LANG_COUNT;
break;
case 3:
ocarinaChoice = (ocarinaChoice + 1) % 2;
break;
case 4:
iosChoice = (iosChoice + 1) % 2;
break;
}
if(saveBtn.GetState() == STATE_CLICKED)
{
if(isSdInserted() == 1) {
if (CFG_save_game_opt(header->id))
{
WindowPrompt(LANGUAGE.SuccessfullySaved, 0, LANGUAGE.ok, 0,0,0);
}
else
{
WindowPrompt(LANGUAGE.SaveFailed, 0, LANGUAGE.ok, 0,0,0);
}
} else {
WindowPrompt(LANGUAGE.NoSDcardinserted, LANGUAGE.InsertaSDCardtosave, LANGUAGE.ok, 0,0,0);
}
saveBtn.ResetState();
optionBrowser3.SetFocus(1);
}
if (cancelBtn.GetState() == STATE_CLICKED)
{
exit = true;
break;
}
if (deleteBtn.GetState() == STATE_CLICKED)
{
int choice = WindowPrompt(
LANGUAGE.Doyoureallywanttodelete,
gameName,
LANGUAGE.Yes,LANGUAGE.Cancel,0,0);
if (choice == 1)
{
ret = WBFS_RemoveGame(header->id);
if (ret < 0)
{
WindowPrompt(
LANGUAGE.Cantdelete,
gameName,
LANGUAGE.ok,0,0,0);
}
else {
__Menu_GetEntries();
WindowPrompt(
LANGUAGE.Successfullydeleted,
gameName,
LANGUAGE.ok,0,0,0);
retVal = 1;
}
break;
}
else if (choice == 0)
{
deleteBtn.ResetState();
optionBrowser3.SetFocus(1);
}
}
}
HaltGui();
mainWindow->Remove(&optionBrowser3);
mainWindow->Remove(&w);
ResumeGui();
return retVal;
}
/****************************************************************************
* MenuCheck
***************************************************************************/
static int MenuCheck()
{
int menu = MENU_NONE;
int i = 0;
int choice;
s32 ret2;
OptionList options;
options.length = i;
partitionEntry partitions[MAX_PARTITIONS];
VIDEO_WaitVSync ();
ret2 = WBFS_Init(WBFS_DEVICE_USB);
if (ret2 < 0)
{
//shutdown SD
SDCard_deInit();
//initialize WiiMote for Prompt
Wpad_Init();
WPAD_SetDataFormat(WPAD_CHAN_ALL,WPAD_FMT_BTNS_ACC_IR);
WPAD_SetVRes(WPAD_CHAN_ALL, screenwidth, screenheight);
ret2 = WindowPrompt(LANGUAGE.NoUSBDevicefound,
LANGUAGE.Doyouwanttoretryfor30secs,
"cIOS249", "cIOS222",
LANGUAGE.BacktoWiiMenu, 0);
if(ret2 == 1) {
Settings.cios = ios249;
} else if(ret2 == 2) {
Settings.cios = ios222;
} else {
SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0);
}
//shutdown WiiMote before IOS Reload
WPAD_Flush(0);
WPAD_Disconnect(0);
WPAD_Shutdown();
ret2 = DiscWait(LANGUAGE.NoUSBDevice, LANGUAGE.WaitingforUSBDevice, 0, 0, 1);
PAD_Init();
Wpad_Init();
WPAD_SetDataFormat(WPAD_CHAN_ALL,WPAD_FMT_BTNS_ACC_IR);
WPAD_SetVRes(WPAD_CHAN_ALL, screenwidth, screenheight);
SDCard_Init();
}
if (ret2 < 0) {
WindowPrompt (LANGUAGE.Error,LANGUAGE.USBDevicenotfound, LANGUAGE.ok, 0,0,0);
SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0);
} else {
PAD_Init();
Wpad_Init();
WPAD_SetDataFormat(WPAD_CHAN_ALL,WPAD_FMT_BTNS_ACC_IR);
WPAD_SetVRes(WPAD_CHAN_ALL, screenwidth, screenheight);
SDCard_Init();
}
ret2 = Disc_Init();
if (ret2 < 0) {
WindowPrompt (LANGUAGE.Error,LANGUAGE.CouldnotinitializeDIPmodule,LANGUAGE.ok, 0,0,0);
SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0);
}
ret2 = WBFS_Open();
if (ret2 < 0) {
choice = WindowPrompt(LANGUAGE.NoWBFSpartitionfound,
LANGUAGE.Youneedtoformatapartition,
LANGUAGE.Format,
LANGUAGE.Return,0,0);
if(choice == 0)
{
SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0);
} else {
/* Get partition entries */
u32 sector_size;
ret2 = Partition_GetEntries(partitions, &sector_size);
if (ret2 < 0) {
WindowPrompt (LANGUAGE.Nopartitionsfound,0, LANGUAGE.Restart, 0,0,0);
SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0);
}
menu = MENU_FORMAT;
}
}
if(shutdown == 1)
Sys_Shutdown();
if(reset == 1)
Sys_Reboot();
//Spieleliste laden
__Menu_GetEntries();
if(menu == MENU_NONE)
menu = MENU_DISCLIST;
return menu;
}
int MenuMp3()
{
int menu = MENU_NONE, cnt = 0;
int ret = 0;
int scrollon, i = 0;
char imgPath[100];
GuiSound btnSoundOver(button_over_pcm, button_over_pcm_size, SOUND_PCM, vol);
GuiSound btnClick(button_click2_pcm, button_click2_pcm_size, SOUND_PCM, vol);
GuiTrigger trigA;
trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A);
customOptionList options2(500);
char mp3path[30] = "SD:/mp3/";
char fullpath[110];
int countmp3 = GetFiles(mp3path);
for (cnt = 0; cnt < countmp3; cnt++) {
snprintf(options2.value[cnt], 30, "%s", mp3files[cnt]);
sprintf (options2.name[cnt],"%i.", cnt+1);
}
options2.length = cnt;
GuiImageData btnOutline(settings_menu_button_png);
if(cnt < 9) {
scrollon = 0;
} else {
scrollon = 1;
}
GuiCustomOptionBrowser optionBrowser4(396, 280, &options2, CFG.theme_path, "bg_options_settings", bg_options_settings_png, scrollon, 50);
optionBrowser4.SetPosition(0, 90);
optionBrowser4.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
optionBrowser4.SetCol2Position(65);
GuiText cancelBtnTxt(LANGUAGE.Back, 22, (GXColor){0, 0, 0, 255});
cancelBtnTxt.SetMaxWidth(btnOutline.GetWidth()-30);
GuiImage cancelBtnImg(&btnOutline);
if (Settings.wsprompt == yes){
cancelBtnImg.SetWidescreen(CFG.widescreen);}
GuiButton cancelBtn(btnOutline.GetWidth(), btnOutline.GetHeight());
cancelBtn.SetScale(0.9);
cancelBtn.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
cancelBtn.SetPosition(210, 400);
cancelBtn.SetLabel(&cancelBtnTxt);
cancelBtn.SetImage(&cancelBtnImg);
cancelBtn.SetSoundOver(&btnSoundOver);
cancelBtn.SetTrigger(&trigA);
cancelBtn.SetEffectGrow();
// bool isplaying = false;
int songPlaying=0;
GuiTrigger trigHome;
trigHome.SetButtonOnlyTrigger(-1, WPAD_BUTTON_HOME | WPAD_CLASSIC_BUTTON_HOME, 0);
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);
// int playerIsUp=0;
snprintf(imgPath, sizeof(imgPath), "%sarrow_next.png", CFG.theme_path);
GuiImageData next(imgPath, arrow_next_png);
snprintf(imgPath, sizeof(imgPath), "%sarrow_previous.png", CFG.theme_path);
GuiImageData prev(imgPath, arrow_previous_png);
snprintf(imgPath, sizeof(imgPath), "%smp3_stop.png", CFG.theme_path);
GuiImageData stop(imgPath, mp3_stop_png);
snprintf(imgPath, sizeof(imgPath), "%smp3_pause.png", CFG.theme_path);
GuiImageData pause(imgPath, mp3_pause_png);
snprintf(imgPath, sizeof(imgPath), "%sstartgame_arrow_right.png", CFG.theme_path);
GuiImageData play(imgPath, startgame_arrow_right_png);
GuiImage nextBtnImg(&next);
GuiButton nextBtn(next.GetWidth(), next.GetHeight());
nextBtn.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
nextBtn.SetPosition(100, 400);
nextBtn.SetImage(&nextBtnImg);
nextBtn.SetSoundOver(&btnSoundOver);
nextBtn.SetSoundClick(&btnClick);
nextBtn.SetTrigger(&trigA);
nextBtn.SetTrigger(&trigR);
nextBtn.SetEffectGrow();
GuiImage prevBtnImg(&prev);
prevBtnImg.SetWidescreen(CFG.widescreen);
GuiButton prevBtn(prev.GetWidth(), prev.GetHeight());
prevBtn.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
prevBtn.SetPosition(-100, 400);
prevBtn.SetImage(&prevBtnImg);
prevBtn.SetSoundOver(&btnSoundOver);
prevBtn.SetSoundClick(&btnClick);
prevBtn.SetTrigger(&trigA);
prevBtn.SetTrigger(&trigL);
prevBtn.SetEffectGrow();
GuiImage playBtnImg(&play);
playBtnImg.SetWidescreen(CFG.widescreen);
GuiButton playBtn(play.GetWidth(), play.GetHeight());
playBtn.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
playBtn.SetPosition(42, 400);
playBtn.SetImage(&playBtnImg);
playBtn.SetSoundOver(&btnSoundOver);
playBtn.SetSoundClick(&btnClick);
playBtn.SetTrigger(&trigA);
playBtn.SetTrigger(&trigPlus);
playBtn.SetEffectGrow();
GuiImage stopBtnImg(&stop);
stopBtnImg.SetWidescreen(CFG.widescreen);
GuiButton stopBtn(stop.GetWidth(), stop.GetHeight());
stopBtn.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
stopBtn.SetPosition(-27, 400);
stopBtn.SetImage(&stopBtnImg);
stopBtn.SetSoundOver(&btnSoundOver);
stopBtn.SetSoundClick(&btnClick);
stopBtn.SetTrigger(&trigA);
stopBtn.SetTrigger(&trigMinus);
stopBtn.SetEffectGrow();
GuiImage pauseBtnImg(&pause);
pauseBtnImg.SetWidescreen(CFG.widescreen);
HaltGui();
GuiWindow w(screenwidth, screenheight);
w.Append(&cancelBtn);
w.Append(&playBtn);
w.Append(&playBtn);
w.Append(&nextBtn);
w.Append(&prevBtn);
w.Append(&stopBtn);
mainWindow->Append(&optionBrowser4);
mainWindow->Append(&w);
ResumeGui();
while(menu == MENU_NONE)
{
if (cancelBtn.GetState() == STATE_CLICKED)
{
menu = MENU_DISCLIST;
CloseMp3();
bgMusic->Play();
break;
}
ret = optionBrowser4.GetClickedOption();
for(i = 0; i < countmp3; i++) {
if(i == ret) {
sprintf(fullpath,"%s%s", mp3path,mp3files[ret]);
PlayMp3(fullpath);
songPlaying=ret;
SetMp3Volume(127);
}
}
if (playBtn.GetState() == STATE_CLICKED) {
StopMp3();
ret = optionBrowser4.GetSelectedOption();
songPlaying=ret;
sprintf(fullpath,"%s%s", mp3path,mp3files[ret]);
PlayMp3(fullpath);
SetMp3Volume(127);
//playBtn.SetImage(&playBtnImg);isplaying=true;
//if (isplaying==true){playBtn.SetImage(&pauseBtnImg);isplaying=false;}
playBtn.ResetState();
}
if(nextBtn.GetState() == STATE_CLICKED)
{
StopMp3();
songPlaying++;
if (songPlaying>(countmp3 - 1)){songPlaying=0;}
//ret = (optionBrowser4.GetSelectedOption()+1);
sprintf(fullpath,"%s%s", mp3path,mp3files[songPlaying]);
PlayMp3(fullpath);
SetMp3Volume(127);
nextBtn.ResetState();
//break;
}
if(prevBtn.GetState() == STATE_CLICKED)
{
StopMp3();
songPlaying--;
if (songPlaying<0){songPlaying=(countmp3 - 1);}
//ret = (optionBrowser4.GetSelectedOption()-1);
sprintf(fullpath,"%s%s", mp3path,mp3files[songPlaying]);
PlayMp3(fullpath);
SetMp3Volume(127);
prevBtn.ResetState();
//break;
}
if(stopBtn.GetState() == STATE_CLICKED)
{ StopMp3();
stopBtn.ResetState();
playBtn.SetImage(&playBtnImg);
//break;
}
}
HaltGui();
w.Remove(&playBtn);
w.Remove(&nextBtn);
w.Remove(&prevBtn);
w.Remove(&stopBtn);
mainWindow->Remove(&optionBrowser4);
mainWindow->Remove(&w);
ResumeGui();
return menu;
return menu;
}
/****************************************************************************
* MainMenu
***************************************************************************/
int MainMenu(int menu)
{
int currentMenu = menu;
char imgPath[100];
#ifdef HW_RVL
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);
#endif
mainWindow = new GuiWindow(screenwidth, screenheight);
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);
GuiTrigger trigA;
trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A);
ResumeGui();
bgMusic = new GuiSound(bg_music_ogg, bg_music_ogg_size, SOUND_OGG, vol);
bgMusic->SetVolume(vol);
bgMusic->SetLoop(1); //loop music
bgMusic->Play(); // startup music
while(currentMenu != MENU_EXIT)
{
bgMusic->SetVolume(vol);
switch (currentMenu)
{
case MENU_CHECK:
currentMenu = MenuCheck();
break;
case MENU_FORMAT:
currentMenu = MenuFormat();
break;
case MENU_INSTALL:
currentMenu = MenuInstall();
break;
case MENU_SETTINGS:
currentMenu = MenuSettings();
break;
case MENU_DISCLIST:
currentMenu = MenuDiscList();
break;
case MENU_MP3:
currentMenu = MenuMp3();
break;
default: // unrecognized menu
currentMenu = MenuCheck();
break;
}
switch (Settings.volume)
{
case v10:
vol = 10;
break;
case v20:
vol = 20;
break;
case v30:
vol = 30;
break;
case v40:
vol = 40;
break;
case v50:
vol = 50;
break;
case v60:
vol = 60;
break;
case v70:
vol = 70;
break;
case v80:
vol = 80;
break;
case v90:
vol = 90;
break;
case v100:
vol = 100;
break;
case v0:
vol = 0;
break;
default:
vol = 80;
break;
}
}
bgMusic->Stop();
delete bgMusic;
delete background;
delete bgImg;
delete mainWindow;
delete pointer[0];
delete pointer[1];
delete pointer[2];
delete pointer[3];
delete cover;
delete coverImg;
mainWindow = NULL;
ExitApp();
struct discHdr *header = &gameList[gameSelected];
struct Game_CFG* game_cfg = CFG_get_game_opt(header->id);
if (game_cfg) {
videoChoice = game_cfg->video;
languageChoice = game_cfg->language;
ocarinaChoice = game_cfg->ocarina;
viChoice = game_cfg->vipatch;
} else {
videoChoice = Settings.video;
languageChoice = Settings.language;
ocarinaChoice = Settings.ocarina;
viChoice = Settings.vpatch;
}
switch(languageChoice)
{
case ConsoleLangDefault:
configbytes[0] = 0xCD;
break;
case jap:
configbytes[0] = 0x00;
break;
case eng:
configbytes[0] = 0x01;
break;
case ger:
configbytes[0] = 0x02;
break;
case fren:
configbytes[0] = 0x03;
break;
case esp:
configbytes[0] = 0x04;
break;
case it:
configbytes[0] = 0x05;
break;
case dut:
configbytes[0] = 0x06;
break;
case schin:
configbytes[0] = 0x07;
break;
case tchin:
configbytes[0] = 0x08;
break;
case kor:
configbytes[0] = 0x09;
break;
//wenn nicht genau klar ist welches
default:
configbytes[0] = 0xCD;
break;
}
u32 videoselected = 0;
switch(videoChoice)
{
case discdefault:
videoselected = 0;
break;
case pal50:
videoselected = 1;
break;
case pal60:
videoselected = 2;
break;
case ntsc:
videoselected = 3;
case systemdefault:
videoselected = 4;
break;
case patch:
videoselected = 5;
break;
default:
videoselected = 3;
break;
}
u32 cheat = 0;
switch(ocarinaChoice)
{
case on:
cheat = 1;
break;
case off:
cheat = 0;
break;
default:
cheat = 1;
break;
}
u8 vipatch = 0;
switch(viChoice)
{
case on:
vipatch = 1;
break;
case off:
vipatch = 0;
break;
default:
vipatch = 0;
break;
}
int ret = 0;
ret = Disc_WiiBoot(videoselected, cheat, vipatch);
if (ret < 0) {
printf("%s (ret = %d)\n",LANGUAGE.Error, ret);
SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0);
}
return 0;
}