usbloadergx/source/menu/menu_format.cpp
e.bovendeur a09abe355f * Added FAT support (Issue 1054)
* Fixed issue 1058
* Menus splitted to several smaller files, to reduce compile time

This version has FAT support. You can change the used partition in the game load options. Default WBFS will be used, if found. Otherwise the first FAT partition with games will be used. FAT will only work when using Hermes cios (222/223)!!!
2009-11-15 19:52:58 +00:00

189 lines
6.9 KiB
C++

#include <unistd.h>
#include "menus.h"
#include "fatmounter.h"
#include "usbloader/usbstorage.h"
#include "usbloader/utils.h"
#include "usbloader/wbfs.h"
#include "libwiigui/gui_customoptionbrowser.h"
extern bool load_from_fat;
extern char game_partition[6];
/****************************************************************************
* MenuFormat
***************************************************************************/
int MenuFormat() {
USBDevice_deInit();
sleep(1);
USBStorage_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];
if (load_from_fat && partitions.pinfo[cnt].fs_type != FS_TYPE_FAT32) {
continue; // Skip non FAT partitions when fat loading is enabled.
}
/* 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", 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 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(CFG.widescreen);
poweroffBtnImgOver.SetWidescreen(CFG.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(CFG.widescreen);
exitBtnImgOver.SetWidescreen(CFG.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, CFG.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_fat) {
WBFS_OpenPart(1, partitions.pinfo[ret].fat_i, entry->sector,
entry->size, (char *) &game_partition);
load_from_fat = true;
menu = MENU_DISCLIST;
Settings.partition = ret;
cfg_save_global();
} 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;
}