usbloadergx/source/prompts/PromptWindows.cpp

1781 lines
58 KiB
C++
Raw Normal View History

#include <gccore.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <dirent.h>
#include <time.h>
#include <stdlib.h>
#include "usbloader/wbfs.h"
#include "usbloader/wdvd.h"
#include "usbloader/partition_usbloader.h"
#include "usbloader/usbstorage2.h"
#include "usbloader/GameList.h"
#include "usbloader/utils.h"
#include "language/gettext.h"
#include "libwiigui/gui.h"
#include "libwiigui/gui_diskcover.h"
#include "libwiigui/Text.hpp"
#include "settings/CGameStatistics.h"
#include "settings/GameTitles.h"
#include "network/networkops.h"
#include "network/update.h"
#include "network/http.h"
#include "prompts/PromptWindows.h"
#include "prompts/gameinfo.h"
#include "themes/CTheme.h"
#include "utils/StringTools.h"
#include "mload/mload.h"
#include "fatmounter.h"
#include "FileOperations/fileops.h"
#include "menu.h"
#include "menu.h"
#include "filelist.h"
#include "sys.h"
#include "wpad.h"
#include "wad/wad.h"
#include "zlib.h"
#include "svnrev.h"
#include "audio.h"
#include "xml/xml.h"
#include "language/UpdateLanguage.h"
#include "gecko.h"
#include "lstub.h"
#include "buildtype.h"
/*** Extern variables ***/
s32 gameStart = 0;
extern float gamesize;
extern u8 shutdown;
extern u8 reset;
extern u8 mountMethod;
extern struct discHdr *dvdheader;
extern char game_partition[6];
extern int connection;
/****************************************************************************
* OnScreenNumpad
*
* Opens an on-screen numpad window, with the data entered being stored
* into the specified variable.
***************************************************************************/
2010-09-24 02:48:03 +02:00
int OnScreenNumpad(char * var, u32 maxlen)
{
int save = -1;
2010-09-24 02:48:03 +02:00
GuiNumpad numpad(var, maxlen);
GuiImageData btnOutline(Resources::GetFile("button_dialogue_box.png"), Resources::GetFileSize("button_dialogue_box.png"));
GuiTrigger trigA;
2010-09-24 02:48:03 +02:00
trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A);
GuiTrigger trigB;
2010-09-24 02:48:03 +02:00
trigB.SetSimpleTrigger(-1, WPAD_BUTTON_B | WPAD_CLASSIC_BUTTON_B, PAD_BUTTON_B);
GuiText okBtnTxt(tr( "OK" ), 22, thColor("r=0 g=0 b=0 a=255 - prompt windows text color"));
2010-09-24 02:48:03 +02:00
GuiImage okBtnImg(&btnOutline);
2010-10-27 16:45:27 +02:00
if (Settings.wsprompt)
{
2010-09-24 02:48:03 +02:00
okBtnTxt.SetWidescreen(Settings.widescreen);
okBtnImg.SetWidescreen(Settings.widescreen);
}
GuiButton okBtn(&okBtnImg, &okBtnImg, 0, 4, 5, -15, &trigA, btnSoundOver, btnSoundClick2, 1);
2010-09-24 02:48:03 +02:00
okBtn.SetLabel(&okBtnTxt);
GuiText cancelBtnTxt(tr( "Cancel" ), 22, thColor("r=0 g=0 b=0 a=255 - prompt windows text color"));
2010-09-24 02:48:03 +02:00
GuiImage cancelBtnImg(&btnOutline);
2010-10-27 16:45:27 +02:00
if (Settings.wsprompt)
{
2010-09-24 02:48:03 +02:00
cancelBtnTxt.SetWidescreen(Settings.widescreen);
cancelBtnImg.SetWidescreen(Settings.widescreen);
}
GuiButton cancelBtn(&cancelBtnImg, &cancelBtnImg, 1, 4, -5, -15, &trigA, btnSoundOver, btnSoundClick2, 1);
2010-09-24 02:48:03 +02:00
cancelBtn.SetLabel(&cancelBtnTxt);
cancelBtn.SetTrigger(&trigB);
2010-09-24 02:48:03 +02:00
numpad.Append(&okBtn);
numpad.Append(&cancelBtn);
HaltGui();
2010-09-24 02:48:03 +02:00
mainWindow->SetState(STATE_DISABLED);
mainWindow->Append(&numpad);
mainWindow->ChangeFocus(&numpad);
ResumeGui();
2010-09-24 02:48:03 +02:00
while (save == -1)
{
VIDEO_WaitVSync();
2010-09-24 02:48:03 +02:00
if (okBtn.GetState() == STATE_CLICKED)
save = 1;
2010-09-24 02:48:03 +02:00
else if (cancelBtn.GetState() == STATE_CLICKED) save = 0;
}
2010-09-24 02:48:03 +02:00
if (save == 1)
{
2010-09-24 02:48:03 +02:00
snprintf(var, maxlen, "%s", numpad.kbtextstr);
}
HaltGui();
2010-09-24 02:48:03 +02:00
mainWindow->Remove(&numpad);
mainWindow->SetState(STATE_DEFAULT);
ResumeGui();
2010-09-24 02:48:03 +02:00
gprintf("\t%s", (save == 1 ? "saved" : "discarded"));
return save;
}
/****************************************************************************
* OnScreenKeyboard
*
* Opens an on-screen keyboard window, with the data entered being stored
* into the specified variable.
***************************************************************************/
2010-09-24 02:48:03 +02:00
int OnScreenKeyboard(char * var, u32 maxlen, int min)
{
int save = -1;
2010-10-27 16:45:27 +02:00
gprintf("\nOnScreenKeyboard(%s, %i, %i) \n\tkeyset = %i", var, maxlen, min, Settings.keyset);
2010-10-27 16:45:27 +02:00
GuiKeyboard keyboard(var, maxlen, min, Settings.keyset);
GuiImageData btnOutline(Resources::GetFile("button_dialogue_box.png"), Resources::GetFileSize("button_dialogue_box.png"));
GuiTrigger trigA;
2010-09-24 02:48:03 +02:00
trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A);
GuiTrigger trigB;
2010-09-24 02:48:03 +02:00
trigB.SetSimpleTrigger(-1, WPAD_BUTTON_B | WPAD_CLASSIC_BUTTON_B, PAD_BUTTON_B);
GuiText okBtnTxt(tr( "OK" ), 22, thColor("r=0 g=0 b=0 a=255 - prompt windows text color"));
2010-09-24 02:48:03 +02:00
GuiImage okBtnImg(&btnOutline);
2010-10-27 16:45:27 +02:00
if (Settings.wsprompt)
{
2010-09-24 02:48:03 +02:00
okBtnTxt.SetWidescreen(Settings.widescreen);
okBtnImg.SetWidescreen(Settings.widescreen);
}
GuiButton okBtn(&okBtnImg, &okBtnImg, 0, 4, 5, 15, &trigA, btnSoundOver, btnSoundClick2, 1);
2010-09-24 02:48:03 +02:00
okBtn.SetLabel(&okBtnTxt);
GuiText cancelBtnTxt(tr( "Cancel" ), 22, thColor("r=0 g=0 b=0 a=255 - prompt windows text color"));
2010-09-24 02:48:03 +02:00
GuiImage cancelBtnImg(&btnOutline);
2010-10-27 16:45:27 +02:00
if (Settings.wsprompt)
{
2010-09-24 02:48:03 +02:00
cancelBtnTxt.SetWidescreen(Settings.widescreen);
cancelBtnImg.SetWidescreen(Settings.widescreen);
}
GuiButton cancelBtn(&cancelBtnImg, &cancelBtnImg, 1, 4, -5, 15, &trigA, btnSoundOver, btnSoundClick2, 1);
2010-09-24 02:48:03 +02:00
cancelBtn.SetLabel(&cancelBtnTxt);
cancelBtn.SetTrigger(&trigB);
2010-09-24 02:48:03 +02:00
keyboard.Append(&okBtn);
keyboard.Append(&cancelBtn);
HaltGui();
2010-09-24 02:48:03 +02:00
mainWindow->SetState(STATE_DISABLED);
mainWindow->Append(&keyboard);
mainWindow->ChangeFocus(&keyboard);
ResumeGui();
2010-09-24 02:48:03 +02:00
while (save == -1)
{
VIDEO_WaitVSync();
2010-09-24 02:48:03 +02:00
if (okBtn.GetState() == STATE_CLICKED)
save = 1;
2010-09-24 02:48:03 +02:00
else if (cancelBtn.GetState() == STATE_CLICKED) save = 0;
}
2010-09-24 02:48:03 +02:00
if (save)
{
2010-09-24 02:48:03 +02:00
snprintf(var, maxlen, "%s", keyboard.kbtextstr);
}
HaltGui();
2010-09-24 02:48:03 +02:00
mainWindow->Remove(&keyboard);
mainWindow->SetState(STATE_DEFAULT);
ResumeGui();
2010-09-24 02:48:03 +02:00
gprintf("\t%s", (save ? "saved" : "discarded"));
return save;
}
/****************************************************************************
* WindowCredits
* Display credits
***************************************************************************/
void WindowCredits()
{
2010-09-24 02:48:03 +02:00
gprintf("WindowCredits()\n");
int angle = 0;
GuiSound * creditsMusic = NULL;
bgMusic->Pause();
2010-09-24 02:48:03 +02:00
creditsMusic = new GuiSound(credits_music_ogg, credits_music_ogg_size, 55);
creditsMusic->SetVolume(60);
creditsMusic->SetLoop(1);
creditsMusic->Play();
bool exit = false;
int i = 0;
int y = 20;
2010-09-24 02:48:03 +02:00
GuiWindow creditsWindow(screenwidth, screenheight);
GuiWindow creditsWindowBox(580, 448);
creditsWindowBox.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE);
GuiImageData creditsBox(credits_bg_png, credits_bg_png_size);
2010-09-24 02:48:03 +02:00
GuiImage creditsBoxImg(&creditsBox);
creditsBoxImg.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE);
creditsWindowBox.Append(&creditsBoxImg);
GuiImageData star(little_star_png, little_star_png_size);
2010-09-24 02:48:03 +02:00
GuiImage starImg(&star);
starImg.SetWidescreen(Settings.widescreen); //added
starImg.SetAlignment(ALIGN_LEFT, ALIGN_TOP);
starImg.SetPosition(505, 350);
int numEntries = 21;
GuiText * txt[numEntries];
2010-09-24 02:48:03 +02:00
txt[i] = new GuiText(tr( "Credits" ), 26, ( GXColor )
{ 255, 255, 255, 255});
txt[i]->SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
txt[i]->SetPosition(0, 12);
i++;
#ifdef FULLCHANNEL
char svnTmp[4];//did this to hide the M after the rev# that is made by altering it
//to be ready to be in a full channel
snprintf( svnTmp, sizeof( svnTmp ), "%s", GetRev() );
char SvnRev[30];
snprintf( SvnRev, sizeof( SvnRev ), "Rev%sc IOS%u (Rev %u)", svnTmp, IOS_GetVersion(), IOS_GetRevision() );
#else
char SvnRev[30];
2010-09-24 02:48:03 +02:00
snprintf(SvnRev, sizeof(SvnRev), "Rev%s IOS%u (Rev %u)", GetRev(), IOS_GetVersion(), IOS_GetRevision());
#endif
2010-09-24 02:48:03 +02:00
txt[i] = new GuiText(SvnRev, 16, ( GXColor )
{ 255, 255, 255, 255});
txt[i]->SetAlignment(ALIGN_RIGHT, ALIGN_TOP);
txt[i]->SetPosition(0, y);
i++;
y += 34;
2010-09-24 02:48:03 +02:00
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;
2010-09-24 02:48:03 +02:00
txt[i] = new GuiText(tr( "Official Site:" ), 20, ( GXColor )
{ 255, 255, 255, 255});
txt[i]->SetAlignment(ALIGN_LEFT, ALIGN_TOP);
txt[i]->SetPosition(10, y);
i++;
2010-09-24 02:48:03 +02:00
txt[i] = new GuiText("http://code.google.com/p/usbloader-gui/", 20, ( GXColor )
{ 255, 255, 255, 255});
txt[i]->SetAlignment(ALIGN_LEFT, ALIGN_TOP);
txt[i]->SetPosition(160, y);
i++;
y += 26;
GuiText::SetPresets(22, ( GXColor ) {255, 255, 255, 255}, 3000, FTGX_JUSTIFY_LEFT | FTGX_ALIGN_TOP, ALIGN_LEFT, ALIGN_TOP);
2010-09-24 02:48:03 +02:00
txt[i] = new GuiText(tr( "Coding:" ));
txt[i]->SetAlignment(ALIGN_LEFT, ALIGN_TOP);
txt[i]->SetPosition(10, y);
i++;
2010-09-24 02:48:03 +02:00
txt[i] = new GuiText("dimok / nIxx / giantpune / ardi");
txt[i]->SetAlignment(ALIGN_LEFT, ALIGN_TOP);
txt[i]->SetPosition(160, y);
i++;
y += 22;
2010-09-24 02:48:03 +02:00
txt[i] = new GuiText("hungyip84 / DrayX7 / lustar / r-win");
txt[i]->SetAlignment(ALIGN_LEFT, ALIGN_TOP);
txt[i]->SetPosition(160, y);
i++;
y += 26;
char text[100];
2010-09-24 02:48:03 +02:00
txt[i] = new GuiText(tr( "Design:" ));
txt[i]->SetAlignment(ALIGN_LEFT, ALIGN_TOP);
txt[i]->SetPosition(10, y);
i++;
2010-09-24 02:48:03 +02:00
txt[i] = new GuiText("cyrex / NeoRame");
txt[i]->SetAlignment(ALIGN_LEFT, ALIGN_TOP);
txt[i]->SetPosition(160, y);
i++;
y += 26;
2010-09-24 02:48:03 +02:00
txt[i] = new GuiText(tr( "Big thanks to:" ));
txt[i]->SetAlignment(ALIGN_LEFT, ALIGN_TOP);
txt[i]->SetPosition(10, y);
i++;
2010-09-24 02:48:03 +02:00
sprintf(text, "lustar %s", tr( "for WiiTDB and hosting covers / disc images" ));
txt[i] = new GuiText(text);
txt[i]->SetAlignment(ALIGN_LEFT, ALIGN_TOP);
txt[i]->SetPosition(160, y);
i++;
y += 22;
2010-09-24 02:48:03 +02:00
sprintf(text, "CorneliousJD %s", tr( "for hosting the update files" ));
txt[i] = new GuiText(text);
txt[i]->SetAlignment(ALIGN_LEFT, ALIGN_TOP);
txt[i]->SetPosition(160, y);
i++;
y += 22;
2010-09-24 02:48:03 +02:00
sprintf(text, "Kinyo %s", tr( "and translaters for language files updates" ));
txt[i] = new GuiText(text);
txt[i]->SetAlignment(ALIGN_LEFT, ALIGN_TOP);
txt[i]->SetPosition(160, y);
i++;
y += 22;
2010-09-24 02:48:03 +02:00
sprintf(text, "Deak Phreak %s", tr( "for hosting the themes" ));
txt[i] = new GuiText(text);
txt[i]->SetAlignment(ALIGN_LEFT, ALIGN_TOP);
txt[i]->SetPosition(160, y);
i++;
y += 26;
2010-09-24 02:48:03 +02:00
txt[i] = new GuiText(tr( "Special thanks to:" ));
txt[i]->SetAlignment(ALIGN_LEFT, ALIGN_TOP);
txt[i]->SetPosition(10, y);
i++;
y += 22;
2010-09-24 02:48:03 +02:00
sprintf(text, "Waninkoko, Kwiirk & Hermes %s", tr( "for the USB Loader source" ));
txt[i] = new GuiText(text);
txt[i]->SetAlignment(ALIGN_LEFT, ALIGN_TOP);
txt[i]->SetPosition(60, y);
i++;
y += 22;
2010-09-24 02:48:03 +02:00
sprintf(text, "Tantric %s", tr( "for his awesome tool LibWiiGui" ));
txt[i] = new GuiText(text);
txt[i]->SetAlignment(ALIGN_LEFT, ALIGN_TOP);
txt[i]->SetPosition(60, y);
i++;
y += 22;
2010-09-24 02:48:03 +02:00
sprintf(text, "Fishears/Nuke %s", tr( "for Ocarina" ));
txt[i] = new GuiText(text);
txt[i]->SetAlignment(ALIGN_LEFT, ALIGN_TOP);
txt[i]->SetPosition(60, y);
i++;
y += 22;
2010-09-24 02:48:03 +02:00
sprintf(text, "WiiPower %s", tr( "for diverse patches" ));
txt[i] = new GuiText(text);
txt[i]->SetAlignment(ALIGN_LEFT, ALIGN_TOP);
txt[i]->SetPosition(60, y);
i++;
y += 22;
2010-09-24 02:48:03 +02:00
sprintf(text, "Oggzee %s", tr( "for FAT/NTFS support" ));
txt[i] = new GuiText(text);
txt[i]->SetAlignment(ALIGN_LEFT, ALIGN_TOP);
txt[i]->SetPosition(60, y);
i++;
y += 22;
2010-09-24 02:48:03 +02:00
for (i = 0; i < numEntries; i++)
creditsWindowBox.Append(txt[i]);
2010-09-24 02:48:03 +02:00
creditsWindow.Append(&creditsWindowBox);
creditsWindow.Append(&starImg);
2010-09-24 02:48:03 +02:00
creditsWindow.SetEffect(EFFECT_FADE, 30);
HaltGui();
2010-09-24 02:48:03 +02:00
mainWindow->SetState(STATE_DISABLED);
mainWindow->Append(&creditsWindow);
ResumeGui();
2010-09-24 02:48:03 +02:00
while (!exit)
{
angle++;
2010-09-24 02:48:03 +02:00
if (angle > 360) angle = 0;
usleep(12000);
starImg.SetAngle(angle);
if (ButtonsPressed() != 0) exit = true;
}
creditsMusic->Stop();
delete creditsMusic;
2010-09-24 02:48:03 +02:00
creditsWindow.SetEffect(EFFECT_FADE, -30);
while (creditsWindow.GetEffect() > 0)
usleep(100);
HaltGui();
2010-09-24 02:48:03 +02:00
mainWindow->Remove(&creditsWindow);
mainWindow->SetState(STATE_DEFAULT);
for (i = 0; i < numEntries; i++)
{
delete txt[i];
txt[i] = NULL;
}
ResumeGui();
bgMusic->Resume();
}
/****************************************************************************
* WindowScreensaver
* Display screensaver
***************************************************************************/
int WindowScreensaver()
{
2010-09-24 02:48:03 +02:00
gprintf("WindowScreenSaver()\n");
bool exit = false;
/* initialize random seed: */
2010-09-24 02:48:03 +02:00
srand(time(NULL));
GuiImageData GXlogo(Resources::GetFile("gxlogo.png"), Resources::GetFileSize("gxlogo.png"));//uncomment for themable screensaver
//GuiImageData GXlogo(gxlogo_png);//comment for themable screensaver
2010-09-24 02:48:03 +02:00
GuiImage GXlogoImg(&GXlogo);
GXlogoImg.SetPosition(172, 152);
GXlogoImg.SetAlignment(ALIGN_LEFT, ALIGN_TOP);
GuiImage BackgroundImg(640, 480, ( GXColor ) {0, 0, 0, 255});
2010-09-24 02:48:03 +02:00
BackgroundImg.SetPosition(0, 0);
BackgroundImg.SetAlignment(ALIGN_LEFT, ALIGN_TOP);
2010-09-24 02:48:03 +02:00
GuiWindow screensaverWindow(screenwidth, screenheight);
screensaverWindow.Append(&BackgroundImg);
screensaverWindow.Append(&GXlogoImg);
HaltGui();
2010-09-24 02:48:03 +02:00
mainWindow->SetState(STATE_DISABLED);
mainWindow->Append(&screensaverWindow);
ResumeGui();
2010-09-24 02:48:03 +02:00
while (!exit)
{
2010-09-24 02:48:03 +02:00
if (IsWpadConnected())
{
exit = true;
break;
}
/* Set random position */
GXlogoImg.SetPosition((rand() % 345), (rand() % 305));
sleep(4);
}
HaltGui();
2010-09-24 02:48:03 +02:00
mainWindow->Remove(&screensaverWindow);
mainWindow->SetState(STATE_DEFAULT);
ResumeGui();
return 1;
}
/****************************************************************************
* 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 Title, 1 Subtitle and 4 Buttons
* If title/subtitle or one of the buttons is not needed give him a 0 on that
* place.
***************************************************************************/
2010-09-24 02:48:03 +02:00
int WindowPrompt(const char *title, const char *msg, const char *btn1Label, const char *btn2Label,
const char *btn3Label, const char *btn4Label, int wait)
{
int choice = -1;
int count = wait;
2010-09-24 02:48:03 +02:00
gprintf("WindowPrompt( %s, %s, %s, %s, %s, %s, %i ): ", title, msg, btn1Label, btn2Label, btn3Label, btn4Label,
wait);
2010-09-24 02:48:03 +02:00
GuiWindow promptWindow(472, 320);
promptWindow.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE);
promptWindow.SetPosition(0, -10);
GuiImageData btnOutline(Resources::GetFile("button_dialogue_box.png"), Resources::GetFileSize("button_dialogue_box.png"));
GuiImageData dialogBox(Resources::GetFile("dialogue_box.png"), Resources::GetFileSize("dialogue_box.png"));
GuiTrigger trigA;
2010-09-24 02:48:03 +02:00
trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A);
GuiTrigger trigB;
2010-09-24 02:48:03 +02:00
trigB.SetButtonOnlyTrigger(-1, WPAD_BUTTON_B | WPAD_CLASSIC_BUTTON_B, PAD_BUTTON_B);
2010-09-24 02:48:03 +02:00
GuiImage dialogBoxImg(&dialogBox);
2010-10-27 16:45:27 +02:00
if (Settings.wsprompt)
{
2010-09-24 02:48:03 +02:00
dialogBoxImg.SetWidescreen(Settings.widescreen);
}
GuiText titleTxt(title, 26, thColor("r=0 g=0 b=0 a=255 - prompt windows text color"));
2010-09-24 02:48:03 +02:00
titleTxt.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
titleTxt.SetPosition(0, 55);
GuiText msgTxt(msg, 22, thColor("r=0 g=0 b=0 a=255 - prompt windows text color"));
2010-09-24 02:48:03 +02:00
msgTxt.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE);
msgTxt.SetPosition(0, -40);
msgTxt.SetMaxWidth(430);
GuiText btn1Txt(btn1Label, 22, thColor("r=0 g=0 b=0 a=255 - prompt windows text color"));
2010-09-24 02:48:03 +02:00
GuiImage btn1Img(&btnOutline);
2010-10-27 16:45:27 +02:00
if (Settings.wsprompt)
{
2010-09-24 02:48:03 +02:00
btn1Txt.SetWidescreen(Settings.widescreen);
btn1Img.SetWidescreen(Settings.widescreen);
}
GuiButton btn1(&btn1Img, &btn1Img, 0, 3, 0, 0, &trigA, btnSoundOver, btnSoundClick2, 1);
2010-09-24 02:48:03 +02:00
btn1.SetLabel(&btn1Txt);
btn1.SetState(STATE_SELECTED);
GuiText btn2Txt(btn2Label, 22, thColor("r=0 g=0 b=0 a=255 - prompt windows text color"));
2010-09-24 02:48:03 +02:00
GuiImage btn2Img(&btnOutline);
2010-10-27 16:45:27 +02:00
if (Settings.wsprompt)
{
2010-09-24 02:48:03 +02:00
btn2Txt.SetWidescreen(Settings.widescreen);
btn2Img.SetWidescreen(Settings.widescreen);
}
GuiButton btn2(&btn2Img, &btn2Img, 0, 3, 0, 0, &trigA, btnSoundOver, btnSoundClick2, 1);
2010-09-24 02:48:03 +02:00
btn2.SetLabel(&btn2Txt);
if (!btn3Label && !btn4Label) btn2.SetTrigger(&trigB);
GuiText btn3Txt(btn3Label, 22, thColor("r=0 g=0 b=0 a=255 - prompt windows text color"));
2010-09-24 02:48:03 +02:00
GuiImage btn3Img(&btnOutline);
2010-10-27 16:45:27 +02:00
if (Settings.wsprompt)
{
2010-09-24 02:48:03 +02:00
btn3Txt.SetWidescreen(Settings.widescreen);
btn3Img.SetWidescreen(Settings.widescreen);
}
GuiButton btn3(&btn3Img, &btn3Img, 0, 3, 0, 0, &trigA, btnSoundOver, btnSoundClick2, 1);
2010-09-24 02:48:03 +02:00
btn3.SetLabel(&btn3Txt);
if (!btn4Label) btn3.SetTrigger(&trigB);
GuiText btn4Txt(btn4Label, 22, thColor("r=0 g=0 b=0 a=255 - prompt windows text color"));
2010-09-24 02:48:03 +02:00
GuiImage btn4Img(&btnOutline);
2010-10-27 16:45:27 +02:00
if (Settings.wsprompt)
2010-09-24 02:48:03 +02:00
{
btn4Txt.SetWidescreen(Settings.widescreen);
btn4Img.SetWidescreen(Settings.widescreen);
}
GuiButton btn4(&btn4Img, &btn4Img, 0, 3, 0, 0, &trigA, btnSoundOver, btnSoundClick2, 1);
2010-09-24 02:48:03 +02:00
btn4.SetLabel(&btn4Txt);
if (btn4Label) btn4.SetTrigger(&trigB);
2010-10-27 16:45:27 +02:00
if ((Settings.wsprompt) && (Settings.widescreen)) /////////////adjust buttons for widescreen
{
2010-09-24 02:48:03 +02:00
msgTxt.SetMaxWidth(330);
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
{
2010-09-24 02:48:03 +02:00
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
{
2010-09-24 02:48:03 +02:00
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
{
2010-09-24 02:48:03 +02:00
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);
}
}
GuiTrigger trigZ;
2010-09-24 02:48:03 +02:00
trigZ.SetButtonOnlyTrigger(-1, WPAD_NUNCHUK_BUTTON_Z | WPAD_CLASSIC_BUTTON_ZL, PAD_TRIGGER_Z);
2010-09-24 02:48:03 +02:00
GuiButton screenShotBtn(0, 0);
screenShotBtn.SetPosition(0, 0);
screenShotBtn.SetTrigger(&trigZ);
2010-09-24 02:48:03 +02:00
promptWindow.Append(&dialogBoxImg);
promptWindow.Append(&titleTxt);
promptWindow.Append(&msgTxt);
promptWindow.Append(&screenShotBtn);
2010-09-24 02:48:03 +02:00
if (btn1Label) promptWindow.Append(&btn1);
if (btn2Label) promptWindow.Append(&btn2);
if (btn3Label) promptWindow.Append(&btn3);
if (btn4Label) promptWindow.Append(&btn4);
2010-09-24 02:48:03 +02:00
promptWindow.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_IN, 50);
HaltGui();
2010-09-24 02:48:03 +02:00
mainWindow->SetState(STATE_DISABLED);
mainWindow->Append(&promptWindow);
mainWindow->ChangeFocus(&promptWindow);
ResumeGui();
2010-09-24 02:48:03 +02:00
while (choice == -1)
{
VIDEO_WaitVSync();
2010-09-24 02:48:03 +02:00
if (shutdown == 1)
{
2010-09-24 02:48:03 +02:00
wiilight(0);
Sys_Shutdown();
}
2010-09-24 02:48:03 +02:00
if (reset == 1) Sys_Reboot();
if (btn1.GetState() == STATE_CLICKED)
{
choice = 1;
}
2010-09-24 02:48:03 +02:00
else if (btn2.GetState() == STATE_CLICKED)
{
2010-09-24 02:48:03 +02:00
if (!btn3Label)
choice = 0;
2010-09-24 02:48:03 +02:00
else choice = 2;
}
2010-09-24 02:48:03 +02:00
else if (btn3.GetState() == STATE_CLICKED)
{
2010-09-24 02:48:03 +02:00
if (!btn4Label)
choice = 0;
2010-09-24 02:48:03 +02:00
else choice = 3;
}
2010-09-24 02:48:03 +02:00
else if (btn4.GetState() == STATE_CLICKED)
{
choice = 0;
}
2010-09-24 02:48:03 +02:00
else if (screenShotBtn.GetState() == STATE_CLICKED)
{
screenShotBtn.ResetState();
2010-09-24 02:48:03 +02:00
ScreenShot();
}
2010-09-24 02:48:03 +02:00
if (count > 0) count--;
if (count == 0) choice = 1;
}
2010-09-24 02:48:03 +02:00
promptWindow.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_OUT, 50);
while (promptWindow.GetEffect() > 0)
usleep(100);
HaltGui();
2010-09-24 02:48:03 +02:00
mainWindow->Remove(&promptWindow);
mainWindow->SetState(STATE_DEFAULT);
ResumeGui();
2010-09-24 02:48:03 +02:00
gprintf(" %i\n", choice);
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()
{
2010-09-24 02:48:03 +02:00
gprintf("WindowExitPrompt()\n");
bgMusic->Pause();
GuiSound * homein = NULL;
2010-09-24 02:48:03 +02:00
homein = new GuiSound(menuin_ogg, menuin_ogg_size, Settings.sfxvolume);
homein->SetVolume(Settings.sfxvolume);
homein->SetLoop(0);
homein->Play();
GuiSound * homeout = NULL;
2010-09-24 02:48:03 +02:00
homeout = new GuiSound(menuout_ogg, menuout_ogg_size, Settings.sfxvolume);
homeout->SetVolume(Settings.sfxvolume);
homeout->SetLoop(0);
int choice = -1;
u64 oldstub = getStubDest();
loadStub();
2010-09-24 02:48:03 +02:00
if (oldstub != 0x00010001554c4e52ll && oldstub != 0x00010001554e454fll) Set_Stub(oldstub);
2010-09-24 02:48:03 +02:00
GuiWindow promptWindow(640, 480);
promptWindow.SetAlignment(ALIGN_LEFT, ALIGN_TOP);
promptWindow.SetPosition(0, 0);
GuiImageData top(exit_top_png, exit_top_png_size);
GuiImageData topOver(exit_top_over_png, exit_top_over_png_size);
GuiImageData bottom(exit_bottom_png, exit_bottom_png_size);
GuiImageData bottomOver(exit_bottom_over_png, exit_bottom_over_png_size);
GuiImageData button(exit_button_png, exit_button_png_size);
GuiImageData wiimote(wiimote_png, wiimote_png_size);
GuiImageData close(closebutton_png, closebutton_png_size);
GuiImageData battery(Resources::GetFile("battery_white.png"), Resources::GetFileSize("battery_white.png"));
GuiImageData batteryBar(Resources::GetFile("battery_bar_white.png"), Resources::GetFileSize("battery_bar_white.png"));
GuiImageData batteryRed(Resources::GetFile("battery_red.png"), Resources::GetFileSize("battery_red.png"));
GuiImageData batteryBarRed(Resources::GetFile("battery_bar_red.png"), Resources::GetFileSize("battery_bar_red.png"));
int i = 0, ret = 0, level;
char txt[3];
GuiText * batteryTxt[4];
GuiImage * batteryImg[4];
GuiImage * batteryBarImg[4];
GuiButton * batteryBtn[4];
2010-09-24 02:48:03 +02:00
for (i = 0; i < 4; i++)
{
2010-09-24 02:48:03 +02:00
sprintf(txt, "P%d", i + 1);
batteryTxt[i] = new GuiText(txt, 22, ( GXColor ) {255, 255, 255, 255});
2010-09-24 02:48:03 +02:00
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);
2010-09-24 02:48:03 +02:00
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);
}
2010-09-24 02:48:03 +02:00
batteryBtn[0]->SetPosition(180, 150);
batteryBtn[1]->SetPosition(284, 150);
batteryBtn[2]->SetPosition(388, 150);
batteryBtn[3]->SetPosition(494, 150);
GuiTrigger trigA;
2010-09-24 02:48:03 +02:00
trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A);
GuiTrigger trigB;
2010-09-24 02:48:03 +02:00
trigB.SetButtonOnlyTrigger(-1, WPAD_BUTTON_B | WPAD_CLASSIC_BUTTON_B, PAD_BUTTON_B);
GuiTrigger trigHome;
2010-09-24 02:48:03 +02:00
trigHome.SetButtonOnlyTrigger(-1, WPAD_BUTTON_HOME | WPAD_CLASSIC_BUTTON_HOME, 0);
GuiText titleTxt(tr( "HOME Menu" ), 36, ( GXColor ) {255, 255, 255, 255});
2010-09-24 02:48:03 +02:00
titleTxt.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
titleTxt.SetPosition(-180, 40);
titleTxt.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_IN, 50);
GuiText closeTxt(tr( "Close" ), 28, ( GXColor ) {0, 0, 0, 255});
2010-09-24 02:48:03 +02:00
closeTxt.SetPosition(10, 3);
GuiImage closeImg(&close);
2010-10-27 16:45:27 +02:00
if (Settings.wsprompt)
2010-09-24 02:48:03 +02:00
{
closeTxt.SetWidescreen(Settings.widescreen);
closeImg.SetWidescreen(Settings.widescreen);
}
GuiButton closeBtn(close.GetWidth(), close.GetHeight());
closeBtn.SetImage(&closeImg);
closeBtn.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
closeBtn.SetPosition(190, 30);
closeBtn.SetLabel(&closeTxt);
closeBtn.SetRumble(false);
closeBtn.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_IN, 50);
GuiImage btn1Img(&top);
GuiImage btn1OverImg(&topOver);
GuiButton btn1(&btn1Img, &btn1OverImg, 0, 3, 0, 0, &trigA, btnSoundOver, btnSoundClick2, 0);
2010-09-24 02:48:03 +02:00
btn1.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_IN, 50);
GuiText btn2Txt(tr( "Exit" ), 28, ( GXColor ) {0, 0, 0, 255});
2010-09-24 02:48:03 +02:00
GuiImage btn2Img(&button);
2010-10-27 16:45:27 +02:00
if (Settings.wsprompt)
2010-09-24 02:48:03 +02:00
{
btn2Txt.SetWidescreen(Settings.widescreen);
btn2Img.SetWidescreen(Settings.widescreen);
}
GuiButton btn2(&btn2Img, &btn2Img, 2, 5, -150, 0, &trigA, btnSoundOver, btnSoundClick2, 1);
2010-09-24 02:48:03 +02:00
btn2.SetLabel(&btn2Txt);
btn2.SetEffect(EFFECT_SLIDE_LEFT | EFFECT_SLIDE_IN, 50);
btn2.SetRumble(false);
btn2.SetPosition(-150, 0);
GuiText btn3Txt(tr( "Shutdown Wii" ), 28, ( GXColor ) {0, 0, 0, 255});
2010-09-24 02:48:03 +02:00
GuiImage btn3Img(&button);
2010-10-27 16:45:27 +02:00
if (Settings.wsprompt)
2010-09-24 02:48:03 +02:00
{
btn3Txt.SetWidescreen(Settings.widescreen);
btn3Img.SetWidescreen(Settings.widescreen);
}
GuiButton btn3(&btn3Img, &btn3Img, 2, 5, 150, 0, &trigA, btnSoundOver, btnSoundClick2, 1);
2010-09-24 02:48:03 +02:00
btn3.SetLabel(&btn3Txt);
btn3.SetEffect(EFFECT_SLIDE_RIGHT | EFFECT_SLIDE_IN, 50);
btn3.SetRumble(false);
btn3.SetPosition(150, 0);
GuiImage btn4Img(&bottom);
GuiImage btn4OverImg(&bottomOver);
GuiButton btn4(&btn4Img, &btn4OverImg, 0, 4, 0, 0, &trigA, btnSoundOver, btnSoundClick2, 0);
2010-09-24 02:48:03 +02:00
btn4.SetTrigger(&trigB);
btn4.SetTrigger(&trigHome);
btn4.SetEffect(EFFECT_SLIDE_BOTTOM | EFFECT_SLIDE_IN, 50);
GuiImage wiimoteImg(&wiimote);
2010-10-27 16:45:27 +02:00
if (Settings.wsprompt)
2010-09-24 02:48:03 +02:00
{
wiimoteImg.SetWidescreen(Settings.widescreen);
}
wiimoteImg.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM);
wiimoteImg.SetEffect(EFFECT_SLIDE_BOTTOM | EFFECT_SLIDE_IN, 50);
wiimoteImg.SetPosition(50, 210);
promptWindow.Append(&btn2);
promptWindow.Append(&btn3);
promptWindow.Append(&btn4);
promptWindow.Append(&btn1);
promptWindow.Append(&closeBtn);
promptWindow.Append(&titleTxt);
promptWindow.Append(&wiimoteImg);
promptWindow.Append(batteryBtn[0]);
promptWindow.Append(batteryBtn[1]);
promptWindow.Append(batteryBtn[2]);
promptWindow.Append(batteryBtn[3]);
HaltGui();
2010-09-24 02:48:03 +02:00
mainWindow->SetState(STATE_DISABLED);
mainWindow->Append(&promptWindow);
mainWindow->ChangeFocus(&promptWindow);
ResumeGui();
2010-09-24 02:48:03 +02:00
while (choice == -1)
{
VIDEO_WaitVSync();
2010-09-24 02:48:03 +02:00
for (i = 0; i < 4; i++)
{
2010-09-24 02:48:03 +02:00
if (WPAD_Probe(i, NULL) == WPAD_ERR_NONE) // controller connected
{
2010-09-24 02:48:03 +02:00
level = (userInput[i].wpad.battery_level / 100.0) * 4;
if (level > 4) level = 4;
2010-09-24 02:48:03 +02:00
if (level <= 1)
{
2010-09-24 02:48:03 +02:00
batteryBarImg[i]->SetImage(&batteryBarRed);
batteryImg[i]->SetImage(&batteryRed);
}
else
{
2010-09-24 02:48:03 +02:00
batteryBarImg[i]->SetImage(&batteryBar);
}
2010-09-24 02:48:03 +02:00
batteryImg[i]->SetTile(level);
2010-09-24 02:48:03 +02:00
batteryBtn[i]->SetAlpha(255);
}
2010-09-24 02:48:03 +02:00
else // controller not connected
{
2010-09-24 02:48:03 +02:00
batteryImg[i]->SetTile(0);
batteryImg[i]->SetImage(&battery);
batteryBtn[i]->SetAlpha(70);
}
}
if (shutdown)
{
2010-09-24 02:48:03 +02:00
wiilight(0);
Sys_Shutdown();
}
if (reset)
Sys_Reboot();
2010-09-24 02:48:03 +02:00
if (btn1.GetState() == STATE_CLICKED)
{
choice = 1;
2010-09-24 02:48:03 +02:00
btn1.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_OUT, 50);
closeBtn.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_OUT, 50);
btn4.SetEffect(EFFECT_SLIDE_BOTTOM | EFFECT_SLIDE_OUT, 50);
btn2.SetEffect(EFFECT_SLIDE_LEFT | EFFECT_SLIDE_OUT, 50);
btn3.SetEffect(EFFECT_SLIDE_RIGHT | EFFECT_SLIDE_OUT, 50);
titleTxt.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_OUT, 50);
wiimoteImg.SetEffect(EFFECT_SLIDE_BOTTOM | EFFECT_SLIDE_OUT, 50);
2010-09-24 02:48:03 +02:00
for (int i = 0; i < 4; i++)
batteryBtn[i]->SetEffect(EFFECT_SLIDE_BOTTOM | EFFECT_SLIDE_OUT, 50);
}
2010-09-24 02:48:03 +02:00
else if (btn4.GetState() == STATE_SELECTED)
{
2010-09-24 02:48:03 +02:00
wiimoteImg.SetPosition(50, 165);
}
2010-09-24 02:48:03 +02:00
else if (btn2.GetState() == STATE_CLICKED)
{
ret = WindowPrompt(tr( "Exit to where?" ), 0, tr( "Homebrew Channel" ), tr( "Wii Menu" ), tr( "Cancel" ));
2010-09-24 02:48:03 +02:00
if (ret == 1)
Sys_LoadHBC();
else if(ret == 2)
Sys_LoadMenu();
HaltGui();
2010-09-24 02:48:03 +02:00
mainWindow->SetState(STATE_DISABLED);
promptWindow.SetState(STATE_DEFAULT);
mainWindow->ChangeFocus(&promptWindow);
ResumeGui();
btn2.ResetState();
}
2010-09-24 02:48:03 +02:00
else if (btn3.GetState() == STATE_CLICKED)
{
ret = WindowPrompt(tr( "Shutdown?" ), 0, tr( "Full shutdown" ), tr( "Standby" ), tr("Cancel"));
2010-09-24 02:48:03 +02:00
if (ret == 1)
Sys_ShutdownToStandby();
else if(ret == 2)
Sys_ShutdownToIdle();
HaltGui();
2010-09-24 02:48:03 +02:00
mainWindow->SetState(STATE_DISABLED);
promptWindow.SetState(STATE_DEFAULT);
mainWindow->ChangeFocus(&promptWindow);
ResumeGui();
btn3.ResetState();
}
2010-09-24 02:48:03 +02:00
else if (btn4.GetState() == STATE_CLICKED)
{
2010-09-24 02:48:03 +02:00
btn1.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_OUT, 50);
closeBtn.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_OUT, 50);
btn4.SetEffect(EFFECT_SLIDE_BOTTOM | EFFECT_SLIDE_OUT, 50);
btn2.SetEffect(EFFECT_SLIDE_LEFT | EFFECT_SLIDE_OUT, 50);
btn3.SetEffect(EFFECT_SLIDE_RIGHT | EFFECT_SLIDE_OUT, 50);
titleTxt.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_OUT, 50);
wiimoteImg.SetEffect(EFFECT_SLIDE_BOTTOM | EFFECT_SLIDE_OUT, 50);
2010-09-24 02:48:03 +02:00
for (int i = 0; i < 4; i++)
batteryBtn[i]->SetEffect(EFFECT_SLIDE_BOTTOM | EFFECT_SLIDE_OUT, 50);
choice = 0;
}
2010-09-24 02:48:03 +02:00
else if (btn4.GetState() != STATE_SELECTED)
{
2010-09-24 02:48:03 +02:00
wiimoteImg.SetPosition(50, 210);
}
}
homeout->Play();
2010-09-24 02:48:03 +02:00
while (btn1.GetEffect() > 0)
usleep(100);
2010-09-24 02:48:03 +02:00
while (promptWindow.GetEffect() > 0)
usleep(100);
HaltGui();
homein->Stop();
delete homein;
2010-09-24 02:48:03 +02:00
mainWindow->Remove(&promptWindow);
mainWindow->SetState(STATE_DEFAULT);
while (homeout->IsPlaying() > 0)
usleep(100);
homeout->Stop();
delete homeout;
for(int i = 0; i < 4; ++i)
2010-09-24 02:48:03 +02:00
{
delete batteryTxt[i];
delete batteryImg[i];
delete batteryBarImg[i];
delete batteryBtn[i];
}
ResumeGui();
bgMusic->Resume();
return choice;
}
/****************************************************************************
* DiscWait
***************************************************************************/
2010-09-24 02:48:03 +02:00
int DiscWait(const char *title, const char *msg, const char *btn1Label, const char *btn2Label, int IsDeviceWait)
{
int ret = 0;
u32 cover = 0;
2010-09-24 02:48:03 +02:00
GuiWindow promptWindow(472, 320);
promptWindow.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE);
promptWindow.SetPosition(0, -10);
GuiImageData btnOutline(Resources::GetFile("button_dialogue_box.png"), Resources::GetFileSize("button_dialogue_box.png"));
GuiImageData dialogBox(Resources::GetFile("dialogue_box.png"), Resources::GetFileSize("dialogue_box.png"));
GuiTrigger trigA;
2010-09-24 02:48:03 +02:00
trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A);
GuiTrigger trigB;
2010-09-24 02:48:03 +02:00
trigB.SetButtonOnlyTrigger(-1, WPAD_BUTTON_B | WPAD_CLASSIC_BUTTON_B, PAD_BUTTON_B);
2010-09-24 02:48:03 +02:00
GuiImage dialogBoxImg(&dialogBox);
2010-10-27 16:45:27 +02:00
if (Settings.wsprompt)
{
2010-09-24 02:48:03 +02:00
dialogBoxImg.SetWidescreen(Settings.widescreen);
}
GuiText titleTxt(title, 26, thColor("r=0 g=0 b=0 a=255 - prompt windows text color"));
2010-09-24 02:48:03 +02:00
titleTxt.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
titleTxt.SetPosition(0, 60);
GuiText msgTxt(msg, 22, thColor("r=0 g=0 b=0 a=255 - prompt windows text color"));
2010-09-24 02:48:03 +02:00
msgTxt.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE);
msgTxt.SetPosition(0, -40);
msgTxt.SetMaxWidth(430);
GuiText btn1Txt(btn1Label, 22, thColor("r=0 g=0 b=0 a=255 - prompt windows text color"));
2010-09-24 02:48:03 +02:00
GuiImage btn1Img(&btnOutline);
2010-10-27 16:45:27 +02:00
if (Settings.wsprompt)
{
2010-09-24 02:48:03 +02:00
btn1Txt.SetWidescreen(Settings.widescreen);
btn1Img.SetWidescreen(Settings.widescreen);
}
GuiButton btn1(&btn1Img, &btn1Img, 1, 5, 0, 0, &trigA, btnSoundOver, btnSoundClick2, 1);
2010-09-24 02:48:03 +02:00
if (btn2Label)
{
2010-09-24 02:48:03 +02:00
btn1.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM);
btn1.SetPosition(40, -45);
}
else
{
2010-09-24 02:48:03 +02:00
btn1.SetAlignment(ALIGN_CENTRE, ALIGN_BOTTOM);
btn1.SetPosition(0, -45);
}
2010-09-24 02:48:03 +02:00
btn1.SetLabel(&btn1Txt);
btn1.SetTrigger(&trigB);
btn1.SetState(STATE_SELECTED);
GuiText btn2Txt(btn2Label, 22, thColor("r=0 g=0 b=0 a=255 - prompt windows text color"));
2010-09-24 02:48:03 +02:00
GuiImage btn2Img(&btnOutline);
2010-10-27 16:45:27 +02:00
if (Settings.wsprompt)
{
2010-09-24 02:48:03 +02:00
btn2Txt.SetWidescreen(Settings.widescreen);
btn2Img.SetWidescreen(Settings.widescreen);
}
GuiButton btn2(&btn2Img, &btn2Img, 1, 4, -20, -25, &trigA, btnSoundOver, btnSoundClick2, 1);
2010-09-24 02:48:03 +02:00
btn2.SetLabel(&btn2Txt);
if (Settings.wsprompt && Settings.widescreen) /////////////adjust buttons for widescreen
{
2010-09-24 02:48:03 +02:00
msgTxt.SetMaxWidth(380);
if (btn2Label)
{
2010-09-24 02:48:03 +02:00
btn1.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM);
btn2.SetPosition(-70, -80);
btn1.SetPosition(70, -80);
}
else
{
2010-09-24 02:48:03 +02:00
btn1.SetAlignment(ALIGN_CENTRE, ALIGN_BOTTOM);
btn1.SetPosition(0, -80);
}
}
GuiText timerTxt((char*) NULL, 26, thColor("r=0 g=0 b=0 a=255 - prompt windows text color"));
2010-09-24 02:48:03 +02:00
timerTxt.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
timerTxt.SetPosition(0, 160);
2010-09-24 02:48:03 +02:00
promptWindow.Append(&dialogBoxImg);
promptWindow.Append(&titleTxt);
promptWindow.Append(&msgTxt);
2010-09-24 02:48:03 +02:00
if (btn1Label) promptWindow.Append(&btn1);
if (btn2Label) promptWindow.Append(&btn2);
if (IsDeviceWait) promptWindow.Append(&timerTxt);
2010-09-24 02:48:03 +02:00
promptWindow.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_IN, 50);
HaltGui();
2010-09-24 02:48:03 +02:00
mainWindow->SetState(STATE_DISABLED);
mainWindow->Append(&promptWindow);
mainWindow->ChangeFocus(&promptWindow);
ResumeGui();
2010-09-24 02:48:03 +02:00
if (IsDeviceWait)
{
time_t starttime = time(0);
time_t timenow = starttime;
do
{
gprintf("%i\n", (int) (timenow-starttime));
2010-09-24 02:48:03 +02:00
ret = WBFS_Init(WBFS_DEVICE_USB);
if (ret >= 0) break;
timerTxt.SetTextf("%i %s", (int) (30-(timenow-starttime)), tr( "seconds left" ));
USBDevice_deInit();
USBDevice_Init();
timenow = time(0);
}
while (timenow-starttime < 30);
}
else
{
2010-09-24 02:48:03 +02:00
while (!(cover & 0x2))
{
VIDEO_WaitVSync();
2010-09-24 02:48:03 +02:00
if (btn1.GetState() == STATE_CLICKED)
{
btn1.ResetState();
break;
}
2010-09-24 02:48:03 +02:00
ret = WDVD_GetCoverStatus(&cover);
if (ret < 0) break;
}
}
2010-09-24 02:48:03 +02:00
promptWindow.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_OUT, 50);
while (promptWindow.GetEffect() > 0)
usleep(100);
HaltGui();
2010-09-24 02:48:03 +02:00
mainWindow->Remove(&promptWindow);
mainWindow->SetState(STATE_DEFAULT);
ResumeGui();
return ret;
}
/****************************************************************************
* FormatingPartition
***************************************************************************/
2010-09-24 02:48:03 +02:00
int FormatingPartition(const char *title, partitionEntry *entry)
{
extern PartList partitions;
char text[255];
sprintf(text, "%s: %.2fGB", tr( "Partition" ), entry->size * (partitions.sector_size / GB_SIZE));
int choice = WindowPrompt(tr( "Do you want to format:" ), text, tr( "Yes" ), tr( "No" ));
if (choice == 0)
return -666;
int ret;
2010-09-24 02:48:03 +02:00
GuiWindow promptWindow(472, 320);
promptWindow.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE);
promptWindow.SetPosition(0, -10);
GuiImageData btnOutline(Resources::GetFile("button_dialogue_box.png"), Resources::GetFileSize("button_dialogue_box.png"));
GuiImageData dialogBox(Resources::GetFile("dialogue_box.png"), Resources::GetFileSize("dialogue_box.png"));
GuiTrigger trigA;
2010-09-24 02:48:03 +02:00
trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A);
2010-09-24 02:48:03 +02:00
GuiImage dialogBoxImg(&dialogBox);
2010-10-27 16:45:27 +02:00
if (Settings.wsprompt)
{
2010-09-24 02:48:03 +02:00
dialogBoxImg.SetWidescreen(Settings.widescreen);
}
GuiText titleTxt(title, 26, thColor("r=0 g=0 b=0 a=255 - prompt windows text color"));
2010-09-24 02:48:03 +02:00
titleTxt.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
titleTxt.SetPosition(0, 60);
2010-09-24 02:48:03 +02:00
promptWindow.Append(&dialogBoxImg);
promptWindow.Append(&titleTxt);
2010-09-24 02:48:03 +02:00
promptWindow.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_IN, 50);
HaltGui();
2010-09-24 02:48:03 +02:00
mainWindow->SetState(STATE_DISABLED);
mainWindow->Append(&promptWindow);
mainWindow->ChangeFocus(&promptWindow);
ResumeGui();
VIDEO_WaitVSync();
2010-09-24 02:48:03 +02:00
ret = WBFS_Format(entry->sector, entry->size);
if (ret < 0)
{
WindowPrompt(tr( "Error !" ), tr( "Failed formating" ), tr( "Return" ));
}
else
{
sleep(1);
ret = WBFS_Open();
sprintf(text, "%s %s", text, tr( "formatted!" ));
WindowPrompt(tr( "Success:" ), text, tr( "OK" ));
if (ret < 0)
{
WindowPrompt(tr( "ERROR" ), tr( "Failed to open partition" ), tr( "OK" ));
Sys_LoadMenu();
}
}
2010-09-24 02:48:03 +02:00
promptWindow.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_OUT, 50);
while (promptWindow.GetEffect() > 0)
usleep(100);
HaltGui();
2010-09-24 02:48:03 +02:00
mainWindow->Remove(&promptWindow);
mainWindow->SetState(STATE_DEFAULT);
ResumeGui();
return ret;
}
/****************************************************************************
* NetworkInitPrompt
***************************************************************************/
bool NetworkInitPrompt()
{
2010-09-24 02:48:03 +02:00
gprintf("\nNetworkinitPrompt()");
if (IsNetworkInit()) return true;
bool success = true;
2010-09-24 02:48:03 +02:00
GuiWindow promptWindow(472, 320);
promptWindow.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE);
promptWindow.SetPosition(0, -10);
GuiImageData btnOutline(Resources::GetFile("button_dialogue_box.png"), Resources::GetFileSize("button_dialogue_box.png"));
GuiImageData dialogBox(Resources::GetFile("dialogue_box.png"), Resources::GetFileSize("dialogue_box.png"));
GuiTrigger trigA;
2010-09-24 02:48:03 +02:00
trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A);
2010-09-24 02:48:03 +02:00
GuiImage dialogBoxImg(&dialogBox);
2010-10-27 16:45:27 +02:00
if (Settings.wsprompt)
{
2010-09-24 02:48:03 +02:00
dialogBoxImg.SetWidescreen(Settings.widescreen);
}
GuiText titleTxt(tr( "Initializing Network" ), 26, thColor("r=0 g=0 b=0 a=255 - prompt windows text color"));
2010-09-24 02:48:03 +02:00
titleTxt.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
titleTxt.SetPosition(0, 60);
char msg[20] = " ";
GuiText msgTxt(msg, 22, thColor("r=0 g=0 b=0 a=255 - prompt windows text color"));
2010-09-24 02:48:03 +02:00
msgTxt.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE);
msgTxt.SetPosition(0, -40);
GuiText btn1Txt(tr( "Cancel" ), 22, thColor("r=0 g=0 b=0 a=255 - prompt windows text color"));
2010-09-24 02:48:03 +02:00
GuiImage btn1Img(&btnOutline);
2010-10-27 16:45:27 +02:00
if (Settings.wsprompt)
{
2010-09-24 02:48:03 +02:00
btn1Txt.SetWidescreen(Settings.widescreen);
btn1Img.SetWidescreen(Settings.widescreen);
}
GuiButton btn1(&btn1Img, &btn1Img, 2, 4, 0, -45, &trigA, btnSoundOver, btnSoundClick2, 1);
2010-09-24 02:48:03 +02:00
btn1.SetLabel(&btn1Txt);
btn1.SetState(STATE_SELECTED);
2010-10-27 16:45:27 +02:00
if ((Settings.wsprompt) && (Settings.widescreen)) /////////////adjust buttons for widescreen
{
2010-09-24 02:48:03 +02:00
btn1.SetAlignment(ALIGN_CENTRE, ALIGN_BOTTOM);
btn1.SetPosition(0, -80);
}
2010-09-24 02:48:03 +02:00
promptWindow.Append(&dialogBoxImg);
promptWindow.Append(&titleTxt);
promptWindow.Append(&msgTxt);
promptWindow.Append(&btn1);
2010-09-24 02:48:03 +02:00
promptWindow.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_IN, 50);
HaltGui();
2010-09-24 02:48:03 +02:00
mainWindow->SetState(STATE_DISABLED);
mainWindow->Append(&promptWindow);
mainWindow->ChangeFocus(&promptWindow);
ResumeGui();
2010-09-24 02:48:03 +02:00
while (!IsNetworkInit())
{
VIDEO_WaitVSync();
Initialize_Network();
2010-09-24 02:48:03 +02:00
if (!IsNetworkInit())
{
2010-09-24 02:48:03 +02:00
msgTxt.SetText(tr( "Could not initialize network!" ));
sleep(3);
success = false;
break;
}
2010-09-24 02:48:03 +02:00
if (btn1.GetState() == STATE_CLICKED)
{
btn1.ResetState();
success = false;
break;
}
}
2010-09-24 02:48:03 +02:00
promptWindow.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_OUT, 50);
while (promptWindow.GetEffect() > 0)
usleep(100);
HaltGui();
2010-09-24 02:48:03 +02:00
mainWindow->Remove(&promptWindow);
mainWindow->SetState(STATE_DEFAULT);
ResumeGui();
return success;
}
2010-09-24 02:48:03 +02:00
int CodeDownload(const char *id)
{
int ret = 0;
2010-09-24 02:48:03 +02:00
GuiWindow promptWindow(472, 320);
promptWindow.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE);
promptWindow.SetPosition(0, -10);
GuiImageData btnOutline(Resources::GetFile("button_dialogue_box.png"), Resources::GetFileSize("button_dialogue_box.png"));
GuiImageData dialogBox(Resources::GetFile("dialogue_box.png"), Resources::GetFileSize("dialogue_box.png"));
GuiTrigger trigA;
2010-09-24 02:48:03 +02:00
trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A);
2010-09-24 02:48:03 +02:00
GuiImage dialogBoxImg(&dialogBox);
2010-10-27 16:45:27 +02:00
if (Settings.wsprompt)
{
2010-09-24 02:48:03 +02:00
dialogBoxImg.SetWidescreen(Settings.widescreen);
}
char title[50];
2010-09-24 02:48:03 +02:00
sprintf(title, "%s", tr( "Code Download" ));
GuiText titleTxt(title, 26, thColor("r=0 g=0 b=0 a=255 - prompt windows text color"));
2010-09-24 02:48:03 +02:00
titleTxt.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
titleTxt.SetPosition(0, 50);
char msg[50];
2010-09-24 02:48:03 +02:00
sprintf(msg, "%s", tr( "Initializing Network" ));
GuiText msgTxt(msg, 26, thColor("r=0 g=0 b=0 a=255 - prompt windows text color"));
2010-09-24 02:48:03 +02:00
msgTxt.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
msgTxt.SetPosition(0, 140);
char msg2[50] = " ";
GuiText msg2Txt(msg2, 26, thColor("r=0 g=0 b=0 a=255 - prompt windows text color"));
2010-09-24 02:48:03 +02:00
msg2Txt.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE);
msg2Txt.SetPosition(0, 50);
GuiText btn1Txt(tr( "Cancel" ), 22, thColor("r=0 g=0 b=0 a=255 - prompt windows text color"));
2010-09-24 02:48:03 +02:00
GuiImage btn1Img(&btnOutline);
2010-10-27 16:45:27 +02:00
if (Settings.wsprompt)
{
2010-09-24 02:48:03 +02:00
btn1Txt.SetWidescreen(Settings.widescreen);
btn1Img.SetWidescreen(Settings.widescreen);
}
GuiButton btn1(&btn1Img, &btn1Img, 2, 4, 0, -40, &trigA, btnSoundOver, btnSoundClick2, 1);
2010-09-24 02:48:03 +02:00
btn1.SetLabel(&btn1Txt);
btn1.SetState(STATE_SELECTED);
2010-09-24 02:48:03 +02:00
promptWindow.Append(&dialogBoxImg);
promptWindow.Append(&titleTxt);
promptWindow.Append(&msgTxt);
promptWindow.Append(&msg2Txt);
promptWindow.Append(&btn1);
2010-09-24 02:48:03 +02:00
promptWindow.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_IN, 50);
HaltGui();
2010-09-24 02:48:03 +02:00
mainWindow->SetState(STATE_DISABLED);
mainWindow->Append(&promptWindow);
mainWindow->ChangeFocus(&promptWindow);
ResumeGui();
struct stat st;
2010-09-24 02:48:03 +02:00
if (stat(Settings.TxtCheatcodespath, &st) != 0)
{
if (!CreateSubfolder(Settings.TxtCheatcodespath))
{
2010-09-24 02:48:03 +02:00
WindowPrompt(tr( "Error !" ), tr( "Can't create directory" ), tr( "OK" ));
ret = -1;
goto exit;
}
}
2010-09-24 02:48:03 +02:00
while (!IsNetworkInit())
{
VIDEO_WaitVSync();
Initialize_Network();
2010-09-24 02:48:03 +02:00
if (IsNetworkInit())
{
2010-09-24 02:48:03 +02:00
msgTxt.SetText(GetNetworkIP());
}
else
{
2010-09-24 02:48:03 +02:00
msgTxt.SetText(tr( "Could not initialize network!" ));
}
2010-09-24 02:48:03 +02:00
if (btn1.GetState() == STATE_CLICKED)
{
ret = -1;
btn1.ResetState();
goto exit;
}
}
2010-09-24 02:48:03 +02:00
if (IsNetworkInit() && ret >= 0)
{
char txtpath[150];
2010-09-24 02:48:03 +02:00
snprintf(txtpath, sizeof(txtpath), "%s%s.txt", Settings.TxtCheatcodespath, id);
char codeurl[150];
2010-09-24 02:48:03 +02:00
snprintf(codeurl, sizeof(codeurl), "http://geckocodes.org/codes/R/%s.txt", id);
2010-09-24 02:48:03 +02:00
struct block file = downloadfile(codeurl);
2010-09-24 02:48:03 +02:00
if (file.size == 333 || file.size == 216 || file.size == 284)
{
2010-09-24 02:48:03 +02:00
strcat(codeurl, tr( " is not on the server." ));
2010-09-24 02:48:03 +02:00
WindowPrompt(tr( "Error" ), codeurl, tr( "OK" ));
ret = -1;
goto exit;
}
2010-09-24 02:48:03 +02:00
if (file.data != NULL)
{
FILE * pfile;
2010-09-24 02:48:03 +02:00
pfile = fopen(txtpath, "wb");
fwrite(file.data, 1, file.size, pfile);
fclose(pfile);
free(file.data);
ret = 1;
2010-09-24 02:48:03 +02:00
strcat(
txtpath,
tr( " has been Saved. The text has not been verified. Some of the code may not work right with each other. If you experience trouble, open the text in a real text editor for more information." ));
2010-09-24 02:48:03 +02:00
WindowPrompt(0, txtpath, tr( "OK" ));
}
else
{
2010-09-24 02:48:03 +02:00
strcat(codeurl, tr( " could not be downloaded." ));
2010-09-24 02:48:03 +02:00
WindowPrompt(tr( "Error" ), codeurl, tr( "OK" ));
ret = -1;
}
CloseConnection();
}
2010-09-24 02:48:03 +02:00
exit: promptWindow.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_OUT, 50);
while (promptWindow.GetEffect() > 0)
usleep(100);
HaltGui();
2010-09-24 02:48:03 +02:00
mainWindow->Remove(&promptWindow);
mainWindow->SetState(STATE_DEFAULT);
ResumeGui();
return ret;
}
/****************************************************************************
* HBCWindowPrompt
*
* Displays a prompt window to user, with information, an error message, or
* presenting a user with a choice of up to 2 Buttons.
*
***************************************************************************/
2010-09-24 02:48:03 +02:00
int HBCWindowPrompt(const char *name, const char *coder, const char *version, const char *release_date,
const char *long_description, GuiImageData * iconImgData, u64 filesize)
{
int choice = -1;
2010-09-24 02:48:03 +02:00
GuiWindow promptWindow(472, 320);
promptWindow.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE);
promptWindow.SetPosition(0, 6);
GuiTrigger trigA;
2010-09-24 02:48:03 +02:00
trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A);
GuiTrigger trigB;
2010-09-24 02:48:03 +02:00
trigB.SetButtonOnlyTrigger(-1, WPAD_BUTTON_B | WPAD_CLASSIC_BUTTON_B, PAD_BUTTON_B);
GuiTrigger trigU;
2010-09-24 02:48:03 +02:00
trigU.SetButtonOnlyTrigger(-1, WPAD_BUTTON_UP | WPAD_CLASSIC_BUTTON_UP, PAD_BUTTON_UP);
GuiTrigger trigD;
2010-09-24 02:48:03 +02:00
trigD.SetButtonOnlyTrigger(-1, WPAD_BUTTON_DOWN | WPAD_CLASSIC_BUTTON_DOWN, PAD_BUTTON_DOWN);
GuiImageData btnOutline(Resources::GetFile("button_dialogue_box.png"), Resources::GetFileSize("button_dialogue_box.png"));
GuiImageData dialogBox(Resources::GetFile("dialogue_box.png"), Resources::GetFileSize("dialogue_box.png"));
GuiImageData whiteBox(Resources::GetFile("bg_options.png"), Resources::GetFileSize("bg_options.png"));
GuiImageData scrollbar(Resources::GetFile("scrollbar.png"), Resources::GetFileSize("scrollbar.png"));
2010-09-24 02:48:03 +02:00
GuiImage scrollbarImg(&scrollbar);
scrollbarImg.SetAlignment(ALIGN_RIGHT, ALIGN_TOP);
scrollbarImg.SetPosition(-40, 114);
scrollbarImg.SetSkew(0, 0, 0, 0, 0, -120, 0, -120);
GuiImageData arrowDown(Resources::GetFile("scrollbar_arrowdown.png"), Resources::GetFileSize("scrollbar_arrowdown.png"));
2010-09-24 02:48:03 +02:00
GuiImage arrowDownImg(&arrowDown);
arrowDownImg.SetScale(.8);
GuiImageData arrowUp(Resources::GetFile("scrollbar_arrowup.png"), Resources::GetFileSize("scrollbar_arrowup.png"));
2010-09-24 02:48:03 +02:00
GuiImage arrowUpImg(&arrowUp);
arrowUpImg.SetScale(.8);
GuiButton arrowUpBtn(arrowUpImg.GetWidth(), arrowUpImg.GetHeight());
arrowUpBtn.SetImage(&arrowUpImg);
arrowUpBtn.SetAlignment(ALIGN_RIGHT, ALIGN_TOP);
arrowUpBtn.SetPosition(-25, 91);
arrowUpBtn.SetTrigger(&trigA);
arrowUpBtn.SetTrigger(&trigU);
arrowUpBtn.SetEffectOnOver(EFFECT_SCALE, 50, 130);
arrowUpBtn.SetSoundClick(btnSoundClick2);
2010-09-24 02:48:03 +02:00
GuiButton arrowDownBtn(arrowDownImg.GetWidth(), arrowDownImg.GetHeight());
arrowDownBtn.SetImage(&arrowDownImg);
arrowDownBtn.SetAlignment(ALIGN_RIGHT, ALIGN_BOTTOM);
arrowDownBtn.SetPosition(-25, -27);
arrowDownBtn.SetTrigger(&trigA);
arrowDownBtn.SetTrigger(&trigD);
arrowDownBtn.SetEffectOnOver(EFFECT_SCALE, 50, 130);
arrowDownBtn.SetSoundClick(btnSoundClick2);
GuiImage *iconImg = new GuiImage(iconImgData);
iconImg->SetAlignment(ALIGN_LEFT, ALIGN_TOP);
iconImg->SetPosition(45, 10);
2010-09-24 02:48:03 +02:00
GuiImage dialogBoxImg(&dialogBox);
dialogBoxImg.SetSkew(0, -80, 0, -80, 0, 50, 0, 50);
2010-09-24 02:48:03 +02:00
GuiImage whiteBoxImg(&whiteBox);
whiteBoxImg.SetPosition(0, 110);
whiteBoxImg.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
whiteBoxImg.SetSkew(0, 0, 0, 0, 0, -120, 0, -120);
GuiText nameTxt(name, 30, thColor("r=0 g=0 b=0 a=255 - prompt windows text color"));
2010-09-24 02:48:03 +02:00
nameTxt.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
nameTxt.SetPosition(0, -15);
nameTxt.SetMaxWidth(430, SCROLL_HORIZONTAL);
GuiText coderTxt(fmt(tr( "Coded by: %s" ), coder), 16, thColor("r=0 g=0 b=0 a=255 - prompt windows text color"));
2010-09-24 02:48:03 +02:00
coderTxt.SetAlignment(ALIGN_LEFT, ALIGN_TOP);
coderTxt.SetPosition(180, 30);
coderTxt.SetMaxWidth(280);
GuiText versionTxt(fmt(tr( "Version: %s" ), version), 16, thColor("r=0 g=0 b=0 a=255 - prompt windows text color"));
2010-09-24 02:48:03 +02:00
versionTxt.SetAlignment(ALIGN_LEFT, ALIGN_TOP);
versionTxt.SetPosition(40, 65);
versionTxt.SetMaxWidth(430);
GuiText release_dateTxt(release_date, 16, thColor("r=0 g=0 b=0 a=255 - prompt windows text color"));
2010-09-24 02:48:03 +02:00
release_dateTxt.SetAlignment(ALIGN_LEFT, ALIGN_TOP);
release_dateTxt.SetPosition(40, 85);
release_dateTxt.SetMaxWidth(430);
int pagesize = 6;
Text long_descriptionTxt(long_description, 20, thColor("r=0 g=0 b=0 a=255 - prompt windows text color"));
2010-09-24 02:48:03 +02:00
long_descriptionTxt.SetAlignment(ALIGN_LEFT, ALIGN_TOP);
long_descriptionTxt.SetPosition(46, 117);
long_descriptionTxt.SetMaxWidth(360);
long_descriptionTxt.SetLinesToDraw(pagesize);
long_descriptionTxt.Refresh();
//convert filesize from u64 to char and put unit of measurement after it
char filesizeCH[15];
2010-09-24 02:48:03 +02:00
if (filesize <= 1024.0)
snprintf(filesizeCH, sizeof(filesizeCH), "%lld B", filesize);
2010-09-24 02:48:03 +02:00
if (filesize > 1024.0)
snprintf(filesizeCH, sizeof(filesizeCH), "%0.2f KB", filesize / 1024.0);
2010-09-24 02:48:03 +02:00
if (filesize > 1048576.0)
snprintf(filesizeCH, sizeof(filesizeCH), "%0.2f MB", filesize / 1048576.0);
GuiText filesizeTxt(filesizeCH, 16, thColor("r=0 g=0 b=0 a=255 - prompt windows text color"));
2010-09-24 02:48:03 +02:00
filesizeTxt.SetAlignment(ALIGN_RIGHT, ALIGN_TOP);
filesizeTxt.SetPosition(-40, 12);
GuiText btn1Txt(tr( "Load" ), 22, thColor("r=0 g=0 b=0 a=255 - prompt windows text color"));
2010-09-24 02:48:03 +02:00
GuiImage btn1Img(&btnOutline);
2010-10-27 16:45:27 +02:00
if (Settings.wsprompt)
{
2010-09-24 02:48:03 +02:00
btn1Txt.SetWidescreen(Settings.widescreen);
btn1Img.SetWidescreen(Settings.widescreen);
}
GuiButton btn1(&btn1Img, &btn1Img, 0, 3, 0, 0, &trigA, btnSoundOver, btnSoundClick2, 1);
2010-09-24 02:48:03 +02:00
btn1.SetLabel(&btn1Txt);
btn1.SetState(STATE_SELECTED);
GuiText btn2Txt(tr( "Back" ), 22, thColor("r=0 g=0 b=0 a=255 - prompt windows text color"));
2010-09-24 02:48:03 +02:00
GuiImage btn2Img(&btnOutline);
2010-10-27 16:45:27 +02:00
if (Settings.wsprompt)
{
2010-09-24 02:48:03 +02:00
btn2Txt.SetWidescreen(Settings.widescreen);
btn2Img.SetWidescreen(Settings.widescreen);
}
GuiButton btn2(&btn2Img, &btn2Img, 0, 3, 0, 0, &trigA, btnSoundOver, btnSoundClick2, 1);
2010-09-24 02:48:03 +02:00
btn2.SetLabel(&btn2Txt);
btn2.SetTrigger(&trigB);
2010-09-24 02:48:03 +02:00
btn1.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM);
btn1.SetPosition(40, 2);
btn2.SetAlignment(ALIGN_RIGHT, ALIGN_BOTTOM);
btn2.SetPosition(-40, 2);
GuiTrigger trigZ;
2010-09-24 02:48:03 +02:00
trigZ.SetButtonOnlyTrigger(-1, WPAD_NUNCHUK_BUTTON_Z | WPAD_CLASSIC_BUTTON_ZL, PAD_TRIGGER_Z);
GuiButton screenShotBtn(0, 0);
screenShotBtn.SetPosition(0, 0);
screenShotBtn.SetTrigger(&trigZ);
promptWindow.Append(&screenShotBtn);
promptWindow.Append(&dialogBoxImg);
promptWindow.Append(&whiteBoxImg);
promptWindow.Append(&scrollbarImg);
promptWindow.Append(&arrowDownBtn);
promptWindow.Append(&arrowUpBtn);
if(strcmp(name, "") != 0) promptWindow.Append(&nameTxt);
if(strcmp(version, "") != 0) promptWindow.Append(&versionTxt);
if(strcmp(coder, "") != 0) promptWindow.Append(&coderTxt);
if(strcmp(release_date, "") != 0) promptWindow.Append(&release_dateTxt);
if(strcmp(long_description, "") != 0) promptWindow.Append(&long_descriptionTxt);
2010-09-24 02:48:03 +02:00
promptWindow.Append(&filesizeTxt);
promptWindow.Append(iconImg);
2010-09-24 02:48:03 +02:00
promptWindow.Append(&btn1);
promptWindow.Append(&btn2);
promptWindow.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_IN, 50);
HaltGui();
2010-09-24 02:48:03 +02:00
mainWindow->SetState(STATE_DISABLED);
mainWindow->Append(&promptWindow);
mainWindow->ChangeFocus(&promptWindow);
ResumeGui();
2010-09-24 02:48:03 +02:00
while (choice == -1)
{
VIDEO_WaitVSync();
2010-09-24 02:48:03 +02:00
if (shutdown == 1)
{
2010-09-24 02:48:03 +02:00
wiilight(0);
Sys_Shutdown();
}
2010-09-24 02:48:03 +02:00
else if (reset == 1)
{
2010-09-24 02:48:03 +02:00
wiilight(0);
Sys_Reboot();
}
2010-09-24 02:48:03 +02:00
if (btn1.GetState() == STATE_CLICKED)
choice = 1;
2010-09-24 02:48:03 +02:00
else if (btn2.GetState() == STATE_CLICKED)
choice = 0;
2010-09-24 02:48:03 +02:00
else if (screenShotBtn.GetState() == STATE_CLICKED)
{
2010-09-24 02:48:03 +02:00
gprintf("\n\tscreenShotBtn clicked");
screenShotBtn.ResetState();
ScreenShot();
2010-09-24 02:48:03 +02:00
gprintf("...It's easy, mmmmmmKay");
}
2010-09-24 02:48:03 +02:00
else if (arrowUpBtn.GetState() == STATE_CLICKED || arrowUpBtn.GetState() == STATE_HELD)
{
long_descriptionTxt.PreviousLine();
2010-09-24 02:48:03 +02:00
usleep(6000);
if (!((ButtonsHold() & WPAD_BUTTON_UP) || (ButtonsHold() & PAD_BUTTON_UP))) arrowUpBtn.ResetState();
}
2010-09-24 02:48:03 +02:00
else if (arrowDownBtn.GetState() == STATE_CLICKED || arrowDownBtn.GetState() == STATE_HELD)
{
long_descriptionTxt.NextLine();
2010-09-24 02:48:03 +02:00
usleep(60000);
if (!((ButtonsHold() & WPAD_BUTTON_DOWN) || (ButtonsHold() & PAD_BUTTON_DOWN))) arrowDownBtn.ResetState();
}
}
2010-09-24 02:48:03 +02:00
promptWindow.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_OUT, 50);
while (promptWindow.GetEffect() > 0)
usleep(100);
HaltGui();
2010-09-24 02:48:03 +02:00
mainWindow->Remove(&promptWindow);
mainWindow->SetState(STATE_DEFAULT);
ResumeGui();
delete iconImg;
return choice;
}