made new exit menu
@ -236,6 +236,12 @@ extern const u32 battery_png_size;
|
||||
extern const u8 battery_bar_png[];
|
||||
extern const u32 battery_bar_png_size;
|
||||
|
||||
extern const u8 battery_white_png[];
|
||||
extern const u32 battery_white_png_size;
|
||||
|
||||
extern const u8 battery_bar_white_png[];
|
||||
extern const u32 battery_bar_white_png_size;
|
||||
|
||||
extern const u8 battery_red_png[];
|
||||
extern const u32 battery_red_png_size;
|
||||
|
||||
@ -248,6 +254,21 @@ extern const u32 arrow_previous_png_size;
|
||||
extern const u8 mp3_pause_png[];
|
||||
extern const u32 mp3_pause_png_size;
|
||||
|
||||
extern const u8 exit_top_png[];
|
||||
extern const u32 exit_top_png_size;
|
||||
|
||||
extern const u8 exit_top_over_png[];
|
||||
extern const u32 exit_top_over_png_size;
|
||||
|
||||
extern const u8 exit_bottom_png[];
|
||||
extern const u32 exit_bottom_png_size;
|
||||
|
||||
extern const u8 exit_bottom_over_png[];
|
||||
extern const u32 exit_bottom_over_png_size;
|
||||
|
||||
extern const u8 exit_button_png[];
|
||||
extern const u32 exit_button_png_size;
|
||||
|
||||
extern const u8 mp3_stop_png[];
|
||||
extern const u32 mp3_stop_png_size;
|
||||
|
||||
|
BIN
source/images/battery_bar_white.png
Normal file
After Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 225 B After Width: | Height: | Size: 2.8 KiB |
BIN
source/images/battery_white.png
Normal file
After Width: | Height: | Size: 2.7 KiB |
BIN
source/images/exit_bottom.png
Normal file
After Width: | Height: | Size: 4.7 KiB |
BIN
source/images/exit_bottom_over.png
Normal file
After Width: | Height: | Size: 5.5 KiB |
BIN
source/images/exit_button.png
Normal file
After Width: | Height: | Size: 8.7 KiB |
BIN
source/images/exit_top.png
Normal file
After Width: | Height: | Size: 9.7 KiB |
BIN
source/images/exit_top_over.png
Normal file
After Width: | Height: | Size: 9.9 KiB |
263
source/menu.cpp
@ -644,6 +644,263 @@ WindowPrompt(const char *title, const char *msg, const char *btn1Label,
|
||||
return choice;
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* WindowExitPrompt
|
||||
*
|
||||
* 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
|
||||
WindowExitPrompt(const char *title, const char *msg, const char *btn1Label,
|
||||
const char *btn2Label, const char *btn3Label,
|
||||
const char *btn4Label)
|
||||
{
|
||||
int choice = -1;
|
||||
char imgPath[100];
|
||||
GuiWindow promptWindow(640,480);
|
||||
promptWindow.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE);
|
||||
promptWindow.SetPosition(0, 0);
|
||||
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 top(exit_top_png);
|
||||
GuiImageData topOver(exit_top_over_png);
|
||||
GuiImageData bottom(exit_bottom_png);
|
||||
GuiImageData bottomOver(exit_bottom_over_png);
|
||||
GuiImageData button(exit_button_png);
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%sbattery_white.png", CFG.theme_path);
|
||||
GuiImageData battery(imgPath, battery_white_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%sbattery_red.png", CFG.theme_path);
|
||||
GuiImageData batteryRed(imgPath, battery_red_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%sbattery_bar_white.png", CFG.theme_path);
|
||||
GuiImageData batteryBar(imgPath, battery_bar_white_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){255,255,255, 255});
|
||||
batteryTxt[i]->SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE);
|
||||
//batteryTxt[i]->SetEffect(EFFECT_SLIDE_BOTTOM | EFFECT_SLIDE_OUT, 50);
|
||||
batteryImg[i] = new GuiImage(&battery);
|
||||
batteryImg[i]->SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE);
|
||||
//batteryImg[i]->SetEffect(EFFECT_SLIDE_BOTTOM | EFFECT_SLIDE_OUT, 50);
|
||||
batteryImg[i]->SetPosition(36, 0);
|
||||
batteryImg[i]->SetTile(0);
|
||||
batteryBarImg[i] = new GuiImage(&batteryBar);
|
||||
batteryBarImg[i]->SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE);
|
||||
//batteryBarImg[i]->SetEffect(EFFECT_SLIDE_BOTTOM | EFFECT_SLIDE_OUT, 50);
|
||||
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_MIDDLE);
|
||||
batteryBtn[i]->SetRumble(false);
|
||||
batteryBtn[i]->SetAlpha(70);
|
||||
batteryBtn[i]->SetEffect(EFFECT_SLIDE_BOTTOM | EFFECT_SLIDE_IN, 50);
|
||||
}
|
||||
|
||||
|
||||
batteryBtn[0]->SetPosition(180,150);
|
||||
batteryBtn[1]->SetPosition(284, 150);
|
||||
batteryBtn[2]->SetPosition(388, 150);
|
||||
batteryBtn[3]->SetPosition(494, 150);
|
||||
#endif
|
||||
|
||||
|
||||
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 trigHome;
|
||||
trigHome.SetButtonOnlyTrigger(-1, WPAD_BUTTON_HOME | WPAD_CLASSIC_BUTTON_HOME, 0);
|
||||
|
||||
|
||||
|
||||
GuiText titleTxt("HOME Menu", 36, (GXColor){255, 255, 255, 255});
|
||||
titleTxt.SetAlignment(ALIGN_LEFT, ALIGN_TOP);
|
||||
titleTxt.SetPosition(50,40);
|
||||
/*GuiText msgTxt(msg, 22, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); //{0, 0, 0, 255});
|
||||
msgTxt.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE);
|
||||
msgTxt.SetPosition(0,-40);
|
||||
msgTxt.SetMaxWidth(430);*/
|
||||
|
||||
GuiText btn1Txt("Close", 22, (GXColor){0, 0, 0, 255});
|
||||
btn1Txt.SetAlignment(ALIGN_TOP, ALIGN_RIGHT);
|
||||
btn1Txt.SetPosition(-50, 50);
|
||||
|
||||
GuiImage btn1Img(&top);
|
||||
GuiImage btn1OverImg(&topOver);
|
||||
GuiButton btn1(top.GetWidth(), top.GetHeight());
|
||||
btn1.SetLabel(&btn1Txt);
|
||||
btn1.SetImage(&btn1Img);
|
||||
btn1.SetImageOver(&btn1OverImg);
|
||||
btn1.SetSoundOver(&btnSoundOver);
|
||||
btn1.SetSoundClick(&btnClick);
|
||||
btn1.SetTrigger(&trigA);
|
||||
btn1.SetTrigger(&trigB);
|
||||
btn1.SetTrigger(&trigHome);
|
||||
//btn1.SetState(STATE_SELECTED);
|
||||
//btn1.SetEffectGrow();
|
||||
btn1.SetAlignment(ALIGN_LEFT, ALIGN_TOP);
|
||||
btn1.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_IN, 50);
|
||||
btn1.SetPosition(0, 0);
|
||||
|
||||
GuiText btn2Txt(btn1Label, 38, (GXColor){0, 0, 0, 255});
|
||||
GuiImage btn2Img(&button);
|
||||
if (Settings.wsprompt == yes){
|
||||
btn2Img.SetWidescreen(CFG.widescreen);}///////////
|
||||
GuiButton btn2(button.GetWidth(), button.GetHeight());
|
||||
btn2.SetLabel(&btn2Txt);
|
||||
btn2.SetImage(&btn2Img);
|
||||
btn2.SetSoundOver(&btnSoundOver);
|
||||
btn2.SetSoundClick(&btnClick);
|
||||
btn2.SetTrigger(&trigA);
|
||||
btn2.SetEffectGrow();
|
||||
btn2.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE);
|
||||
btn2.SetPosition(-150, 0);
|
||||
|
||||
GuiText btn3Txt(btn2Label, 38, (GXColor){0, 0, 0, 255});
|
||||
GuiImage btn3Img(&button);
|
||||
if (Settings.wsprompt == yes){
|
||||
btn3Img.SetWidescreen(CFG.widescreen);}///////////
|
||||
GuiButton btn3(button.GetWidth(), button.GetHeight());
|
||||
btn3.SetLabel(&btn3Txt);
|
||||
btn3.SetImage(&btn3Img);
|
||||
btn3.SetSoundOver(&btnSoundOver);
|
||||
btn3.SetSoundClick(&btnClick);
|
||||
btn3.SetTrigger(&trigA);
|
||||
btn3.SetEffectGrow();
|
||||
btn3.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE);
|
||||
btn3.SetPosition(150, 0);
|
||||
|
||||
//GuiText btn4Txt("EAT A DICK", 28, (GXColor){255, 255, 255, 255});
|
||||
btn1Txt.SetAlignment(ALIGN_BOTTOM, ALIGN_CENTRE);
|
||||
btn1Txt.SetPosition(0, -50);
|
||||
GuiImage btn4Img(&bottom);
|
||||
GuiImage btn4OverImg(&bottomOver);
|
||||
GuiButton btn4(bottom.GetWidth(), bottom.GetHeight());
|
||||
//btn4.SetLabel(&btn4Txt);
|
||||
btn4.SetImage(&btn4Img);
|
||||
btn4.SetImageOver(&btn4OverImg);
|
||||
btn4.SetSoundOver(&btnSoundOver);
|
||||
btn4.SetSoundClick(&btnClick);
|
||||
btn4.SetTrigger(&trigA);
|
||||
//btn4.SetEffectGrow();
|
||||
btn4.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM);
|
||||
btn4.SetPosition(0,0);//(0, -120);
|
||||
btn4.SetEffect(EFFECT_SLIDE_BOTTOM | EFFECT_SLIDE_IN, 50);
|
||||
|
||||
btn2Txt.SetFontSize(22);
|
||||
btn3Txt.SetFontSize(22);
|
||||
|
||||
|
||||
promptWindow.Append(&btn1);
|
||||
promptWindow.Append(&btn2);
|
||||
promptWindow.Append(&btn3);
|
||||
promptWindow.Append(&btn4);
|
||||
promptWindow.Append(&titleTxt);
|
||||
#ifdef HW_RVL
|
||||
promptWindow.Append(batteryBtn[0]);
|
||||
promptWindow.Append(batteryBtn[1]);
|
||||
promptWindow.Append(batteryBtn[2]);
|
||||
promptWindow.Append(batteryBtn[3]);
|
||||
batteryBtn[0]->SetEffect(EFFECT_SLIDE_BOTTOM | EFFECT_SLIDE_OUT, 50);
|
||||
batteryBtn[1]->SetEffect(EFFECT_SLIDE_BOTTOM | EFFECT_SLIDE_OUT, 50);
|
||||
batteryBtn[2]->SetEffect(EFFECT_SLIDE_BOTTOM | EFFECT_SLIDE_OUT, 50);
|
||||
batteryBtn[3]->SetEffect(EFFECT_SLIDE_BOTTOM | EFFECT_SLIDE_OUT, 50);
|
||||
#endif
|
||||
|
||||
HaltGui();
|
||||
mainWindow->SetState(STATE_DISABLED);
|
||||
mainWindow->Append(&promptWindow);
|
||||
mainWindow->ChangeFocus(&promptWindow);
|
||||
ResumeGui();
|
||||
|
||||
while(choice == -1)
|
||||
{
|
||||
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
|
||||
|
||||
|
||||
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) {
|
||||
btn1.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_OUT, 50);
|
||||
btn2.SetEffect(EFFECT_SLIDE_BOTTOM | EFFECT_SLIDE_OUT, 50);
|
||||
while(btn2.GetEffect() > 0) usleep(50);
|
||||
choice = 2;
|
||||
}
|
||||
else if(btn3.GetState() == STATE_CLICKED) {
|
||||
btn1.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_OUT, 50);
|
||||
btn2.SetEffect(EFFECT_SLIDE_BOTTOM | EFFECT_SLIDE_OUT, 50);
|
||||
while(btn2.GetEffect() > 0) usleep(50);
|
||||
choice = 3;
|
||||
}
|
||||
else if(btn4.GetState() == STATE_CLICKED) {
|
||||
choice = 0;
|
||||
}
|
||||
}
|
||||
|
||||
while(promptWindow.GetEffect() > 0) usleep(50);
|
||||
HaltGui();
|
||||
mainWindow->Remove(&promptWindow);
|
||||
mainWindow->SetState(STATE_DEFAULT);
|
||||
ResumeGui();
|
||||
return choice;
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* GameWindowPrompt
|
||||
*
|
||||
@ -2670,12 +2927,12 @@ static int MenuDiscList()
|
||||
else if(homeBtn.GetState() == STATE_CLICKED)
|
||||
{
|
||||
|
||||
choice = WindowPrompt(LANGUAGE.ExitUSBISOLoader,0, LANGUAGE.BacktoLoader,LANGUAGE.WiiMenu,LANGUAGE.Back,0);
|
||||
if(choice == 2)
|
||||
choice = WindowExitPrompt(LANGUAGE.ExitUSBISOLoader,0, LANGUAGE.BacktoLoader,LANGUAGE.WiiMenu,LANGUAGE.Back,0);
|
||||
if(choice == 3)
|
||||
{
|
||||
SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0); // Back to System Menu
|
||||
}
|
||||
else if (choice == 1)
|
||||
else if (choice == 2)
|
||||
{
|
||||
if (*(unsigned int*) 0x80001800) exit(0);
|
||||
// Channel Version
|
||||
|