mirror of
https://github.com/wiidev/usbloadergx.git
synced 2024-11-03 18:15:06 +01:00
189 lines
6.9 KiB
C++
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;
|
||
|
}
|
||
|
|