usbloadergx/source/menu/menu_format.cpp
2010-09-24 00:48:03 +00:00

216 lines
8.1 KiB
C++

#include <unistd.h>
#include "menus.h"
#include "fatmounter.h"
#include "usbloader/usbstorage2.h"
#include "usbloader/utils.h"
#include "usbloader/wbfs.h"
#include "libwiigui/gui_customoptionbrowser.h"
extern int load_from_fs;
extern char game_partition[6];
/****************************************************************************
* MenuFormat
***************************************************************************/
int MenuFormat()
{
USBDevice_deInit();
sleep(1);
USBStorage2_Init();
int menu = MENU_NONE;
char imgPath[100];
customOptionList options(MAX_PARTITIONS_EX);
extern PartList partitions;
u32 cnt, counter = 0;
int choice, ret;
char text[ISFS_MAXPATH];
//create the partitionlist
for (cnt = 0; cnt < (u32) partitions.num; cnt++)
{
partitionEntry *entry = &partitions.pentry[cnt];
/* Calculate size in gigabytes */
f32 size = entry->size * (partitions.sector_size / GB_SIZE);
if (size)
{
options.SetName(counter, "%s %d:", tr( "Partition" ), cnt + 1);
options.SetValue(counter, "%.2fGB", size);
}
else
{
options.SetName(counter, "%s %d:", tr( "Partition" ), cnt + 1);
options.SetValue(counter, tr( "Can't be formatted" ));
}
counter++;
}
GuiSound btnSoundOver(button_over_pcm, button_over_pcm_size, Settings.sfxvolume);
// because destroy GuiSound must wait while sound playing is finished, we use a global sound
if (!btnClick2) btnClick2 = new GuiSound(button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume);
// GuiSound btnClick(button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume);
snprintf(imgPath, sizeof(imgPath), "%swiimote_poweroff.png", Settings.theme_path);
GuiImageData btnpwroff(imgPath, wiimote_poweroff_png);
snprintf(imgPath, sizeof(imgPath), "%swiimote_poweroff_over.png", Settings.theme_path);
GuiImageData btnpwroffOver(imgPath, wiimote_poweroff_over_png);
snprintf(imgPath, sizeof(imgPath), "%smenu_button.png", Settings.theme_path);
GuiImageData btnhome(imgPath, menu_button_png);
snprintf(imgPath, sizeof(imgPath), "%smenu_button_over.png", Settings.theme_path);
GuiImageData btnhomeOver(imgPath, menu_button_over_png);
GuiImageData battery(battery_png);
GuiImageData batteryBar(battery_bar_png);
GuiImageData batteryRed(battery_red_png);
GuiImageData batteryBarRed(battery_bar_red_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(Settings.widescreen);
poweroffBtnImgOver.SetWidescreen(Settings.widescreen);
GuiButton poweroffBtn(&poweroffBtnImg, &poweroffBtnImgOver, 0, 3, THEME.power_x, THEME.power_y, &trigA,
&btnSoundOver, btnClick2, 1);
GuiImage exitBtnImg(&btnhome);
GuiImage exitBtnImgOver(&btnhomeOver);
exitBtnImg.SetWidescreen(Settings.widescreen);
exitBtnImgOver.SetWidescreen(Settings.widescreen);
GuiButton exitBtn(&exitBtnImg, &exitBtnImgOver, 0, 3, THEME.home_x, THEME.home_y, &trigA, &btnSoundOver, btnClick2,
1);
exitBtn.SetTrigger(&trigHome);
GuiCustomOptionBrowser optionBrowser(396, 280, &options, Settings.theme_path, "bg_options_settings.png",
bg_options_settings_png, 0, 10);
optionBrowser.SetPosition(0, 40);
optionBrowser.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
HaltGui();
GuiWindow w(screenwidth, screenheight);
w.Append(&poweroffBtn);
w.Append(&exitBtn);
mainWindow->Append(&w);
mainWindow->Append(&optionBrowser);
ResumeGui();
while (menu == MENU_NONE)
{
VIDEO_WaitVSync();
ret = optionBrowser.GetClickedOption();
if (ret >= 0)
{
if (Settings.godmode == 1)
{
partitionEntry *entry = &partitions.pentry[ret];
if (entry->size)
{
if (load_from_fs == PART_FS_FAT)
{
WBFS_OpenPart(partitions.pinfo[ret].part_fs, partitions.pinfo[ret].index, entry->sector,
entry->size, (char *) &game_partition);
load_from_fs = partitions.pinfo[ret].part_fs;
menu = MENU_DISCLIST;
Settings.partition = ret;
Settings.Save();
}
else
{
sprintf(text, "%s %d : %.2fGB", tr( "Partition" ), ret + 1, entry->size
* (partitions.sector_size / GB_SIZE));
choice = WindowPrompt(tr( "Do you want to format:" ), text, tr( "Yes" ), tr( "No" ));
if (choice == 1)
{
ret = FormatingPartition(tr( "Formatting, please wait..." ), entry);
if (ret < 0)
{
WindowPrompt(tr( "Error !" ), tr( "Failed formating" ), tr( "Return" ));
menu = MENU_SETTINGS;
}
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();
}
menu = MENU_DISCLIST;
}
}
}
}
else if (Settings.godmode == 0)
{
mainWindow->Remove(&optionBrowser);
char entered[20] = "";
int result = OnScreenKeyboard(entered, 20, 0);
mainWindow->Append(&optionBrowser);
if (result == 1)
{
if (!strcmp(entered, Settings.unlockCode)) //if password correct
{
if (Settings.godmode == 0)
{
WindowPrompt(tr( "Correct Password" ),
tr( "All the features of USB Loader GX are unlocked." ), tr( "OK" ));
Settings.godmode = 1;
}
}
else
{
WindowPrompt(tr( "Wrong Password" ), tr( "USB Loader GX is protected" ), tr( "OK" ));
}
}
}
}
}
if (shutdown == 1) Sys_Shutdown();
if (reset == 1) Sys_Reboot();
if (poweroffBtn.GetState() == STATE_CLICKED)
{
choice = WindowPrompt(tr( "Shutdown System" ), tr( "Are you sure?" ), tr( "Yes" ), tr( "No" ));
if (choice == 1)
{
Sys_Shutdown();
}
}
else if (exitBtn.GetState() == STATE_CLICKED)
{
choice = WindowPrompt(tr( "Return to Wii Menu" ), tr( "Are you sure?" ), tr( "Yes" ), tr( "No" ));
if (choice == 1)
{
Sys_LoadMenu();
}
}
}
HaltGui();
mainWindow->Remove(&optionBrowser);
mainWindow->Remove(&w);
ResumeGui();
return menu;
}