diff --git a/gui.pnproj b/gui.pnproj index 2dc3d5f6..42e19f4c 100644 --- a/gui.pnproj +++ b/gui.pnproj @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/source/banner/gui_banner.cpp b/source/banner/gui_banner.cpp index 267d2685..53cd34f5 100644 --- a/source/banner/gui_banner.cpp +++ b/source/banner/gui_banner.cpp @@ -5,98 +5,127 @@ * Shows TPL Banner images ***************************************************************************/ #include "gui_banner.h" - -GuiBanner::GuiBanner(const char *tplfilepath) -{ - memory = NULL; - tplfilesize = 0; - width = 0; - height = 0; - - FILE *tplfp = fopen(tplfilepath,"rb"); - - if(tplfp !=NULL) { - - unsigned short heighttemp = 0; - unsigned short widthtemp = 0; - - fseek(tplfp , 0x14, SEEK_SET); - fread((void*)&heighttemp,1,2,tplfp); - fread((void*)&widthtemp,1,2,tplfp); - fseek (tplfp , 0 , SEEK_END); - tplfilesize = ftell (tplfp); - rewind (tplfp); - memory = memalign(32, tplfilesize); - if(!memory) { - fclose(tplfp); - return; - } - fread(memory, 1, tplfilesize, tplfp); - fclose(tplfp); - - TPLFile tplfile; - int ret; - - ret = TPL_OpenTPLFromMemory(&tplfile, memory, tplfilesize); - if(ret < 0) { - free(memory); - memory = NULL; - return; - } - ret = TPL_GetTexture(&tplfile,0,&texObj); - if(ret < 0) { - free(memory); - memory = NULL; - return; - } - TPL_CloseTPLFile(&tplfile); - - width = widthtemp; - height = heighttemp; - widescreen = 0; - filecheck = true; - - } else { - filecheck = false; - fclose(tplfp); - } -} - -GuiBanner::GuiBanner(void *mem, u32 len, int w, int h) -{ - if(!mem || !len) - return; - memory = mem; - tplfilesize = len; - width = w; - height = h; - - TPLFile tplfile; - - int ret; - - ret = TPL_OpenTPLFromMemory(&tplfile, memory, tplfilesize); - if(ret < 0) { - free(memory); - memory = NULL; - return; - } - ret = TPL_GetTexture(&tplfile,0,&texObj); - if(ret < 0) { - free(memory); - memory = NULL; - return; - } - TPL_CloseTPLFile(&tplfile); - - filecheck = true; -} + +typedef struct +{ + u32 texture_header_offset; + u32 palette_header_offset; +} TPLTexture; + +typedef struct +{ + u16 heigth; + u16 width; + //... + //there is more but we only need these +} TPLTextureHeader; + +//only one field tpls +typedef struct +{ + u32 magic; + u32 ntextures; + u32 texture_size; + TPLTexture textures; +} TPLHeader; + + +GuiBanner::GuiBanner(const char *tplfilepath) +{ + memory = NULL; + tplfilesize = 0; + width = 0; + height = 0; + + FILE *tplfp = fopen(tplfilepath,"rb"); + + if(tplfp !=NULL) { + + fseek (tplfp , 0 , SEEK_END); + tplfilesize = ftell (tplfp); + rewind (tplfp); + memory = memalign(32, tplfilesize); + if(!memory) { + fclose(tplfp); + return; + } + fread(memory, 1, tplfilesize, tplfp); + fclose(tplfp); + + const u8 * buffer = (const u8*) memory; + const TPLHeader *hdr = (TPLHeader *) buffer; + const TPLTextureHeader *texhdr = (TPLTextureHeader *) &buffer[hdr->textures.texture_header_offset]; + + height = texhdr[0].heigth; + width = texhdr[0].width; + + TPLFile tplfile; + int ret; + + ret = TPL_OpenTPLFromMemory(&tplfile, memory, tplfilesize); + if(ret < 0) { + free(memory); + memory = NULL; + return; + } + ret = TPL_GetTexture(&tplfile,0,&texObj); + if(ret < 0) { + free(memory); + memory = NULL; + return; + } + TPL_CloseTPLFile(&tplfile); + + widescreen = 0; + filecheck = true; + + } else { + filecheck = false; + fclose(tplfp); + } +} + +GuiBanner::GuiBanner(void *mem, u32 len) +{ + if(!mem || !len) + return; + + memory = mem; + tplfilesize = len; + + const u8 * buffer = (const u8*) memory; + const TPLHeader *hdr = (TPLHeader *) buffer; + const TPLTextureHeader *texhdr = (TPLTextureHeader *) &buffer[hdr->textures.texture_header_offset]; + + height = texhdr[0].heigth; + width = texhdr[0].width; + + TPLFile tplfile; + + int ret; + + ret = TPL_OpenTPLFromMemory(&tplfile, memory, tplfilesize); + if(ret < 0) { + free(memory); + memory = NULL; + return; + } + ret = TPL_GetTexture(&tplfile,0,&texObj); + if(ret < 0) { + free(memory); + memory = NULL; + return; + } + TPL_CloseTPLFile(&tplfile); + + filecheck = true; +} GuiBanner::~GuiBanner() -{ +{ if(memory != NULL) { - free(memory); - memory = NULL; + free(memory); + memory = NULL; } } @@ -104,11 +133,11 @@ void GuiBanner::Draw() { LOCK(this); if(!filecheck ||!this->IsVisible()) - return; + return; - float currScale = this->GetScale(); - - Menu_DrawTPLImg(this->GetLeft(), this->GetTop(), 0, width, height, &texObj, imageangle, widescreen ? currScale*0.80 : currScale, currScale, this->GetAlpha(), xx1,yy1,xx2,yy2,xx3,yy3,xx4,yy4); + float currScale = this->GetScale(); + + Menu_DrawTPLImg(this->GetLeft(), this->GetTop(), 0, width, height, &texObj, imageangle, widescreen ? currScale*0.80 : currScale, currScale, this->GetAlpha(), xx1,yy1,xx2,yy2,xx3,yy3,xx4,yy4); this->UpdateEffects(); } diff --git a/source/banner/gui_banner.h b/source/banner/gui_banner.h index d372baaf..d0f1d61a 100644 --- a/source/banner/gui_banner.h +++ b/source/banner/gui_banner.h @@ -19,9 +19,7 @@ public: //!Constructor //!\param mem Memory of the loaded tpl //!\param len Filesize of the tpl - //!\param w Width of the tpl - //!\param h Height of the tpl - GuiBanner(void *mem, u32 len, int w, int h); + GuiBanner(void *mem, u32 len); //!Destructor ~GuiBanner(); void Draw(); diff --git a/source/banner/openingbnr.h b/source/banner/openingbnr.h index 3142fba0..0895cc74 100644 --- a/source/banner/openingbnr.h +++ b/source/banner/openingbnr.h @@ -13,6 +13,8 @@ extern "C" { #endif +#include + /*********************************************************** * Error description: * 0 Successfully extracted diff --git a/source/bannersound.h b/source/bannersound.h index 6cf7b526..b6da62d1 100644 --- a/source/bannersound.h +++ b/source/bannersound.h @@ -1,6 +1,6 @@ -#ifndef BANNERSOUND_H -#define BANNERSOUND_H - -const u8 *LoadBannerSound(const u8 *discid, u32 *size); - -#endif /* BANNERSOUND_H */ +#ifndef BANNERSOUND_H +#define BANNERSOUND_H + +const u8 *LoadBannerSound(const u8 *discid, u32 *size); + +#endif /* BANNERSOUND_H */ diff --git a/source/cheats/cheatmenu.cpp b/source/cheats/cheatmenu.cpp index 3e751079..96527d0e 100644 --- a/source/cheats/cheatmenu.cpp +++ b/source/cheats/cheatmenu.cpp @@ -12,11 +12,7 @@ #include "filelist.h" #include "sys.h" #include "gct.h" - -/*** Extern functions ***/ -extern void ResumeGui(); -extern void HaltGui(); - +#include "../menu/menus.h" /*** Extern variables ***/ extern GuiWindow * mainWindow; diff --git a/source/homebrewboot/HomebrewBrowse.cpp b/source/homebrewboot/HomebrewBrowse.cpp index ea3bb3b4..dbe90456 100644 --- a/source/homebrewboot/HomebrewBrowse.cpp +++ b/source/homebrewboot/HomebrewBrowse.cpp @@ -28,9 +28,7 @@ #include "unzip/miniunz.h" #include "usbloader/utils.h" -/*** Extern functions ***/ -extern void ResumeGui(); -extern void HaltGui(); +#include "../menu/menus.h" /*** Extern variables ***/ extern GuiWindow * mainWindow; @@ -39,8 +37,6 @@ extern GuiImage * bgImg; extern u32 infilesize; extern u32 uncfilesize; extern char wiiloadVersion[2]; -extern u8 shutdown; -extern u8 reset; extern struct SSettings Settings; extern void *innetbuffer; @@ -731,11 +727,6 @@ int MenuHomebrewBrowse() { MainButton4.ResetState(); } - else if (shutdown == 1) - Sys_Shutdown(); - else if (reset == 1) - Sys_Reboot(); - else if (backBtn.GetState() == STATE_CLICKED) { menu = MENU_DISCLIST; changed = true; @@ -834,29 +825,29 @@ int MenuHomebrewBrowse() { read += result; } - + char filename[101]; if (!error) { - + network_read((u8*) &filename, 100); - + // Do we need to unzip this thing? if (wiiloadVersion[0] > 0 || wiiloadVersion[1] > 4) { // We need to unzip... if (temp[0] == 'P' && temp[1] == 'K' && temp[2] == 0x03 && temp[3] == 0x04) { // It's a zip file, unzip to the apps directory - + // Zip archive, ask for permission to install the zip char zippath[255]; sprintf((char *) &zippath, "%s%s", Settings.homebrewapps_path, filename); - + FILE *fp = fopen(zippath, "wb"); if (fp != NULL) { fwrite(temp, 1, infilesize, fp); fclose(fp); - + // Now unzip the zip file... unzFile uf = unzOpen(zippath); if (uf==NULL) { @@ -864,9 +855,9 @@ int MenuHomebrewBrowse() { } else { extractZip(uf,0,1,0, Settings.homebrewapps_path); unzCloseCurrentFile(uf); - + remove(zippath); - + // Reload this menu here... menu = MENU_HOMEBREWBROWSE; break; @@ -880,17 +871,17 @@ int MenuHomebrewBrowse() { uLongf f = uncfilesize; error = uncompress(unc, &f, temp, infilesize) != Z_OK; uncfilesize = f; - + free(temp); temp = unc; } } - + if (!error && strstr(filename,".zip") == NULL) { innetbuffer = temp; } } - + ProgressStop(); if (error || read != infilesize) { diff --git a/source/libwiigui/gui_gamebrowser.cpp b/source/libwiigui/gui_gamebrowser.cpp index c99c04bb..ef5a39f7 100644 --- a/source/libwiigui/gui_gamebrowser.cpp +++ b/source/libwiigui/gui_gamebrowser.cpp @@ -1,639 +1,642 @@ -/**************************************************************************** - * libwiigui - * - * gui_gamebrowser.cpp - * - * GUI class definitions - ***************************************************************************/ - -#include "gui.h" -#include "../wpad.h" - -#include -#include "gui_gamebrowser.h" -#include "../settings/cfg.h" -#include "../main.h" -#include "settings/newtitles.h" - -#include -#include - -#define GAMESELECTSIZE 30 -int txtscroll = 0; -/** - * Constructor for the GuiGameBrowser class. - */ -GuiGameBrowser::GuiGameBrowser(int w, int h, struct discHdr * l, int gameCnt, const char *themePath, const u8 *imagebg, int selected, int offset) -{ - width = w; - height = h; - this->gameCnt = gameCnt; - gameList = l; - pagesize = THEME.pagesize; - scrollbaron = (gameCnt > pagesize) ? 1 : 0; - selectable = true; - listOffset = MAX(0,MIN(offset,(gameCnt-pagesize))); - selectedItem = selected - offset; - focus = 1; // allow focus - char imgPath[100]; - - trigA = new GuiTrigger; - trigA->SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A); - trigHeldA = new GuiTrigger; - trigHeldA->SetHeldTrigger(-1, WPAD_BUTTON_A, PAD_BUTTON_A); - btnSoundClick = new GuiSound(button_click_pcm, button_click_pcm_size, Settings.sfxvolume); - - snprintf(imgPath, sizeof(imgPath), "%sbg_options.png", themePath); - bgGames = new GuiImageData(imgPath, imagebg); - - snprintf(imgPath, sizeof(imgPath), "%snew.png", themePath); - newGames = new GuiImageData(imgPath, new_png); - - bgGameImg = new GuiImage(bgGames); - bgGameImg->SetParent(this); - bgGameImg->SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE); - - maxTextWidth = bgGameImg->GetWidth() - 24 - 4; - - snprintf(imgPath, sizeof(imgPath), "%sbg_options_entry.png", themePath); - bgGamesEntry = new GuiImageData(imgPath, bg_options_entry_png); - - snprintf(imgPath, sizeof(imgPath), "%sscrollbar.png", themePath); - scrollbar = new GuiImageData(imgPath, scrollbar_png); - scrollbarImg = new GuiImage(scrollbar); - scrollbarImg->SetParent(this); - scrollbarImg->SetAlignment(ALIGN_RIGHT, ALIGN_TOP); - scrollbarImg->SetPosition(0, 4); - - maxTextWidth -= scrollbarImg->GetWidth() + 4; - - snprintf(imgPath, sizeof(imgPath), "%sscrollbar_arrowdown.png", themePath); - arrowDown = new GuiImageData(imgPath, scrollbar_arrowdown_png); - arrowDownImg = new GuiImage(arrowDown); - arrowDownOver = new GuiImageData(imgPath, scrollbar_arrowdown_png); - arrowDownOverImg = new GuiImage(arrowDownOver); - snprintf(imgPath, sizeof(imgPath), "%sscrollbar_arrowup.png", themePath); - arrowUp = new GuiImageData(imgPath, scrollbar_arrowup_png); - arrowUpImg = new GuiImage(arrowUp); - arrowUpOver = new GuiImageData(imgPath, scrollbar_arrowup_png); - arrowUpOverImg = new GuiImage(arrowUpOver); - snprintf(imgPath, sizeof(imgPath), "%sscrollbar_box.png", themePath); - scrollbarBox = new GuiImageData(imgPath, scrollbar_box_png); - scrollbarBoxImg = new GuiImage(scrollbarBox); - scrollbarBoxOver = new GuiImageData(imgPath, scrollbar_box_png); - scrollbarBoxOverImg = new GuiImage(scrollbarBoxOver); - - arrowUpBtn = new GuiButton(arrowUpImg->GetWidth(), arrowUpImg->GetHeight()); - arrowUpBtn->SetParent(this); - arrowUpBtn->SetImage(arrowUpImg); - arrowUpBtn->SetImageOver(arrowUpOverImg); - arrowUpBtn->SetImageHold(arrowUpOverImg); - arrowUpBtn->SetAlignment(ALIGN_CENTRE, ALIGN_TOP); - arrowUpBtn->SetPosition(width/2-18+7,-18); - arrowUpBtn->SetSelectable(false); - arrowUpBtn->SetTrigger(trigA); - arrowUpBtn->SetEffectOnOver(EFFECT_SCALE, 50, 130); - arrowUpBtn->SetSoundClick(btnSoundClick); - - arrowDownBtn = new GuiButton(arrowDownImg->GetWidth(), arrowDownImg->GetHeight()); - arrowDownBtn->SetParent(this); - arrowDownBtn->SetImage(arrowDownImg); - arrowDownBtn->SetImageOver(arrowDownOverImg); - arrowDownBtn->SetImageHold(arrowDownOverImg); - arrowDownBtn->SetAlignment(ALIGN_CENTRE, ALIGN_BOTTOM); - arrowDownBtn->SetPosition(width/2-18+7,18); - arrowDownBtn->SetSelectable(false); - arrowDownBtn->SetTrigger(trigA); - arrowDownBtn->SetEffectOnOver(EFFECT_SCALE, 50, 130); - arrowDownBtn->SetSoundClick(btnSoundClick); - - scrollbarBoxBtn = new GuiButton(scrollbarBoxImg->GetWidth(), scrollbarBoxImg->GetHeight()); - scrollbarBoxBtn->SetParent(this); - scrollbarBoxBtn->SetImage(scrollbarBoxImg); - scrollbarBoxBtn->SetImageOver(scrollbarBoxOverImg); - scrollbarBoxBtn->SetImageHold(scrollbarBoxOverImg); - scrollbarBoxBtn->SetAlignment(ALIGN_CENTRE, ALIGN_TOP); - scrollbarBoxBtn->SetSelectable(false); - scrollbarBoxBtn->SetEffectOnOver(EFFECT_SCALE, 50, 120); - scrollbarBoxBtn->SetMinY(0); - scrollbarBoxBtn->SetMaxY(height-30); - scrollbarBoxBtn->SetHoldable(true); - scrollbarBoxBtn->SetTrigger(trigHeldA); - - gameIndex = new int[pagesize]; - game = new GuiButton * [pagesize]; - gameTxt = new GuiText * [pagesize]; - gameTxtOver = new GuiText * [pagesize]; - gameBg = new GuiImage * [pagesize]; - newImg = new GuiImage * [pagesize]; - - for(int i=0; i < pagesize; i++) - { - gameTxt[i] = new GuiText(get_title(&gameList[i]), 20, THEME.gametext); - gameTxt[i]->SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE); - gameTxt[i]->SetPosition(24,0); - gameTxt[i]->SetMaxWidth(maxTextWidth, GuiText::DOTTED); - - - gameTxtOver[i] = new GuiText(get_title(&gameList[i]), 20, THEME.gametext); - gameTxtOver[i]->SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE); - gameTxtOver[i]->SetPosition(24,0); - gameTxtOver[i]->SetMaxWidth(maxTextWidth, GuiText::SCROLL); - - gameBg[i] = new GuiImage(bgGamesEntry); - - newImg[i] = new GuiImage(newGames); - newImg[i]->SetAlignment(ALIGN_RIGHT, ALIGN_MIDDLE); - newImg[i]->SetVisible(false); - - game[i] = new GuiButton(width-28,GAMESELECTSIZE); - game[i]->SetParent(this); - game[i]->SetLabel(gameTxt[i]); - game[i]->SetLabelOver(gameTxtOver[i]); - game[i]->SetIcon(newImg[i]); - game[i]->SetImageOver(gameBg[i]); - game[i]->SetPosition(5,GAMESELECTSIZE*i+4); - game[i]->SetRumble(false); - game[i]->SetTrigger(trigA); - game[i]->SetSoundClick(btnSoundClick); - - gameIndex[i] = i; - } - UpdateListEntries(); -} - -/** - * Destructor for the GuiGameBrowser class. - */ -GuiGameBrowser::~GuiGameBrowser() -{ - delete arrowUpBtn; - delete arrowDownBtn; - delete scrollbarBoxBtn; - delete scrollbarImg; - delete arrowDownImg; - delete arrowDownOverImg; - delete arrowUpImg; - delete arrowUpOverImg; - delete scrollbarBoxImg; - delete scrollbarBoxOverImg; - delete scrollbar; - delete arrowDown; - delete arrowDownOver; - delete arrowUp; - delete arrowUpOver; - delete scrollbarBox; - delete scrollbarBoxOver; - delete bgGameImg; - delete bgGames; - delete bgGamesEntry; - delete newGames; - - delete trigA; - delete trigHeldA; - delete btnSoundClick; - - for(int i=0; iResetState(); - - if(f == 1) - game[selectedItem]->SetState(STATE_SELECTED); -} - -void GuiGameBrowser::ResetState() -{ - LOCK(this); - if(state != STATE_DISABLED) - { - state = STATE_DEFAULT; - stateChan = -1; - } - - for(int i=0; iResetState(); - } -} - -int GuiGameBrowser::GetOffset() -{ - return listOffset; -} -int GuiGameBrowser::GetClickedOption() -{ - int found = -1; - for(int i=0; iGetState() == STATE_CLICKED) - { - game[i]->SetState(STATE_SELECTED); - found = gameIndex[i]; - break; - } - } - return found; -} - -int GuiGameBrowser::GetSelectedOption() -{ - int found = -1; - for(int i=0; iGetState() == STATE_SELECTED) - { - game[i]->SetState(STATE_SELECTED); - found = gameIndex[i]; - break; - } - } - return found; -} - -/**************************************************************************** - * FindMenuItem - * - * Help function to find the next visible menu item on the list - ***************************************************************************/ - -int GuiGameBrowser::FindMenuItem(int currentItem, int direction) -{ - int nextItem = currentItem + direction; - - if(nextItem < 0 || nextItem >= gameCnt) - return -1; - - if(strlen(get_title(&gameList[nextItem])) > 0) - return nextItem; - else - return FindMenuItem(nextItem, direction); -} - -/** - * Draw the button on screen - */ -void GuiGameBrowser::Draw() -{ - LOCK(this); - if(!this->IsVisible() || !gameCnt) - return; - - bgGameImg->Draw(); - - int next = listOffset; - - for(int i=0; i= 0) - { - game[i]->Draw(); - next = this->FindMenuItem(next, 1); - } - else - break; - } - - if(scrollbaron == 1) { - scrollbarImg->Draw(); - arrowUpBtn->Draw(); - arrowDownBtn->Draw(); - scrollbarBoxBtn->Draw(); - } - this->UpdateEffects(); -} - -void GuiGameBrowser::UpdateListEntries() -{ - int next = listOffset; - for(int i=0; i= 0) - { - if(game[i]->GetState() == STATE_DISABLED) - { - game[i]->SetVisible(true); - game[i]->SetState(STATE_DEFAULT); - } - gameTxt[i]->SetText(get_title(&gameList[next])); - gameTxt[i]->SetPosition(24, 0); - gameTxtOver[i]->SetText(get_title(&gameList[next])); - gameTxtOver[i]->SetPosition(24, 0); - - if (Settings.marknewtitles) { - bool isNew = NewTitles::Instance()->IsNew(gameList[next].id); - if (isNew) { - gameTxt[i]->SetMaxWidth(maxTextWidth - (newGames->GetWidth() + 1), GuiText::DOTTED); - gameTxtOver[i]->SetMaxWidth(maxTextWidth - (newGames->GetWidth() + 1), GuiText::SCROLL); - } else { - gameTxt[i]->SetMaxWidth(maxTextWidth, GuiText::DOTTED); - gameTxtOver[i]->SetMaxWidth(maxTextWidth, GuiText::SCROLL); - } - newImg[i]->SetVisible(isNew); - } - - gameIndex[i] = next; - next = this->FindMenuItem(next, 1); - } - else - { - game[i]->SetVisible(false); - game[i]->SetState(STATE_DISABLED); - } - } -} - -void GuiGameBrowser::Update(GuiTrigger * t) -{ - LOCK(this); - if(state == STATE_DISABLED || !t || !gameCnt) - return; - - int next, prev; - int old_listOffset = listOffset; - static int position2; - // scrolldelay affects how fast the list scrolls - // when the arrows are clicked - float scrolldelay = 3.5; - - if (scrollbaron == 1) { - // update the location of the scroll box based on the position in the option list - arrowUpBtn->Update(t); - arrowDownBtn->Update(t); - scrollbarBoxBtn->Update(t); - } - - next = listOffset; - - u32 buttonshold = ButtonsHold(); - - if(buttonshold != WPAD_BUTTON_UP && buttonshold != WPAD_BUTTON_DOWN) { - - for(int i=0; i= 0) - next = this->FindMenuItem(next, 1); - - if(focus) - { - if(i != selectedItem && game[i]->GetState() == STATE_SELECTED) - game[i]->ResetState(); - else if(i == selectedItem && game[i]->GetState() == STATE_DEFAULT) - game[selectedItem]->SetState(STATE_SELECTED, t->chan); - } - - game[i]->Update(t); - - if(game[i]->GetState() == STATE_SELECTED) - { - selectedItem = i; - } - } - } - - // pad and joystick navigation - if(!focus || !gameCnt) - return; // skip navigation - - if (scrollbaron == 1) - { - - if (t->Down() || arrowDownBtn->GetState() == STATE_CLICKED || arrowDownBtn->GetState() == STATE_HELD) //down - { - - next = this->FindMenuItem(gameIndex[selectedItem], 1); - - if(next >= 0) - { - if(selectedItem == pagesize-1) - { - // move list down by 1 - listOffset = this->FindMenuItem(listOffset, 1); - } - else if(game[selectedItem+1]->IsVisible()) - { - game[selectedItem]->ResetState(); - game[selectedItem+1]->SetState(STATE_SELECTED, t->chan); - selectedItem++; - } -// scrollbarBoxBtn->Draw(); - usleep(10000 * scrolldelay); - } - if (!(ButtonsHold() & WPAD_BUTTON_A)) - arrowDownBtn->ResetState(); - } - else if(t->Up() || arrowUpBtn->GetState() == STATE_CLICKED || arrowUpBtn->GetState() == STATE_HELD) //up - { - prev = this->FindMenuItem(gameIndex[selectedItem], -1); - - if(prev >= 0) - { - if(selectedItem == 0) - { - // move list up by 1 - listOffset = prev; - } - else - { - game[selectedItem]->ResetState(); - game[selectedItem-1]->SetState(STATE_SELECTED, t->chan); - selectedItem--; - } -// scrollbarBoxBtn->Draw(); - usleep(10000 * scrolldelay); - } - if (!(ButtonsHold() & WPAD_BUTTON_A)) - arrowUpBtn->ResetState(); - } - int position1 = t->wpad.ir.y; - - if (position2 == 0 && position1 > 0) - { - position2 = position1; - } - - if ((buttonshold & WPAD_BUTTON_B) && position1 > 0) - { - scrollbarBoxBtn->ScrollIsOn(1); - if (position2 > position1) - { - - prev = this->FindMenuItem(gameIndex[selectedItem], -1); - - if(prev >= 0) - { - if(selectedItem == 0) - { - // move list up by 1 - listOffset = prev; - } - else - { - game[selectedItem]->ResetState(); - game[selectedItem-1]->SetState(STATE_SELECTED, t->chan); - selectedItem--; - } -// scrollbarBoxBtn->Draw(); - usleep(10000 * scrolldelay); - } - } - else if (position2 < position1) - { - next = this->FindMenuItem(gameIndex[selectedItem], 1); - - if(next >= 0) - { - if(selectedItem == pagesize-1) - { - // move list down by 1 - listOffset = this->FindMenuItem(listOffset, 1); - } - else if(game[selectedItem+1]->IsVisible()) - { - game[selectedItem]->ResetState(); - game[selectedItem+1]->SetState(STATE_SELECTED, t->chan); - selectedItem++; - } -// scrollbarBoxBtn->Draw(); - usleep(10000 * scrolldelay); - } - } - - } - else if(!(buttonshold & WPAD_BUTTON_B)) - { - scrollbarBoxBtn->ScrollIsOn(0); - position2 = 0; - } - - if(scrollbarBoxBtn->GetState() == STATE_HELD && scrollbarBoxBtn->GetStateChan() == t->chan && t->wpad.ir.valid && gameCnt > pagesize) - { - // allow dragging of scrollbar box - scrollbarBoxBtn->SetPosition(width/2-18+7,0); - int position = t->wpad.ir.y - 32 - scrollbarBoxBtn->GetTop(); - - listOffset = (position * gameCnt)/(25.2 * pagesize) - selectedItem; - - if(listOffset <= 0) - { - listOffset = 0; - selectedItem = 0; - } - else if(listOffset+pagesize >= gameCnt) - { - listOffset = gameCnt - pagesize; - selectedItem = pagesize-1; - } - - } - int positionbar = (25.2 * pagesize)*(listOffset + selectedItem) / gameCnt; - - if(positionbar > (24 * pagesize)) - positionbar = (24 * pagesize); - scrollbarBoxBtn->SetPosition(width/2-18+7, positionbar+8); - - - if(t->Right()) //skip pagesize # of games if right is pressed - { - if(listOffset < gameCnt && gameCnt > pagesize) - { - listOffset =listOffset+ pagesize; - if(listOffset+pagesize >= gameCnt) - listOffset = gameCnt-pagesize; - } - } - else if(t->Left()) - { - if(listOffset > 0) - { - listOffset =listOffset- pagesize; - if(listOffset < 0) - listOffset = 0; - } - } - - } - else - { - if(t->Down()) //if there isn't a scrollbar and down is pressed - { - next = this->FindMenuItem(gameIndex[selectedItem], 1); - - if(next >= 0) - { - if(selectedItem == pagesize-1) - { - // move list down by 1 - listOffset = this->FindMenuItem(listOffset, 1); - } - else if(game[selectedItem+1]->IsVisible()) - { - game[selectedItem]->ResetState(); - game[selectedItem+1]->SetState(STATE_SELECTED, t->chan); - selectedItem++; - } - } - } - else if(t->Up()) //up - { - prev = this->FindMenuItem(gameIndex[selectedItem], -1); - - if(prev >= 0) - { - if(selectedItem == 0) - { - // move list up by 1 - listOffset = prev; - } - else - { - game[selectedItem]->ResetState(); - game[selectedItem-1]->SetState(STATE_SELECTED, t->chan); - selectedItem--; - } - } - } - } - - if(old_listOffset != listOffset) - UpdateListEntries(); - - if(updateCB) - updateCB(this); -} - -void GuiGameBrowser::Reload(struct discHdr * l, int count) -{ - LOCK(this); - gameList = l; - gameCnt = count; - scrollbaron = (gameCnt > pagesize) ? 1 : 0; - selectedItem = 0; - listOffset = 0; - focus = 1; - UpdateListEntries(); - - for(int i=0; iResetState(); -} +/**************************************************************************** + * libwiigui + * + * gui_gamebrowser.cpp + * + * GUI class definitions + ***************************************************************************/ + +#include "gui.h" +#include "../wpad.h" + +#include +#include "gui_gamebrowser.h" +#include "../settings/cfg.h" +#include "../main.h" +#include "settings/newtitles.h" + +#include +#include + +#define GAMESELECTSIZE 30 +int txtscroll = 0; +/** + * Constructor for the GuiGameBrowser class. + */ +GuiGameBrowser::GuiGameBrowser(int w, int h, struct discHdr * l, int gameCnt, const char *themePath, const u8 *imagebg, int selected, int offset) +{ + width = w; + height = h; + this->gameCnt = gameCnt; + gameList = l; + pagesize = THEME.pagesize; + scrollbaron = (gameCnt > pagesize) ? 1 : 0; + selectable = true; + listOffset = MAX(0,MIN(offset,(gameCnt-pagesize))); + selectedItem = selected - offset; + focus = 1; // allow focus + char imgPath[100]; + + trigA = new GuiTrigger; + trigA->SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A); + trigHeldA = new GuiTrigger; + trigHeldA->SetHeldTrigger(-1, WPAD_BUTTON_A, PAD_BUTTON_A); + btnSoundClick = new GuiSound(button_click_pcm, button_click_pcm_size, Settings.sfxvolume); + + snprintf(imgPath, sizeof(imgPath), "%sbg_options.png", themePath); + bgGames = new GuiImageData(imgPath, imagebg); + + snprintf(imgPath, sizeof(imgPath), "%snew.png", themePath); + newGames = new GuiImageData(imgPath, new_png); + + bgGameImg = new GuiImage(bgGames); + bgGameImg->SetParent(this); + bgGameImg->SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE); + + maxTextWidth = bgGameImg->GetWidth() - 24 - 4; + + snprintf(imgPath, sizeof(imgPath), "%sbg_options_entry.png", themePath); + bgGamesEntry = new GuiImageData(imgPath, bg_options_entry_png); + + snprintf(imgPath, sizeof(imgPath), "%sscrollbar.png", themePath); + scrollbar = new GuiImageData(imgPath, scrollbar_png); + scrollbarImg = new GuiImage(scrollbar); + scrollbarImg->SetParent(this); + scrollbarImg->SetAlignment(ALIGN_RIGHT, ALIGN_TOP); + scrollbarImg->SetPosition(0, 4); + + maxTextWidth -= scrollbarImg->GetWidth() + 4; + + snprintf(imgPath, sizeof(imgPath), "%sscrollbar_arrowdown.png", themePath); + arrowDown = new GuiImageData(imgPath, scrollbar_arrowdown_png); + arrowDownImg = new GuiImage(arrowDown); + arrowDownOver = new GuiImageData(imgPath, scrollbar_arrowdown_png); + arrowDownOverImg = new GuiImage(arrowDownOver); + snprintf(imgPath, sizeof(imgPath), "%sscrollbar_arrowup.png", themePath); + arrowUp = new GuiImageData(imgPath, scrollbar_arrowup_png); + arrowUpImg = new GuiImage(arrowUp); + arrowUpOver = new GuiImageData(imgPath, scrollbar_arrowup_png); + arrowUpOverImg = new GuiImage(arrowUpOver); + snprintf(imgPath, sizeof(imgPath), "%sscrollbar_box.png", themePath); + scrollbarBox = new GuiImageData(imgPath, scrollbar_box_png); + scrollbarBoxImg = new GuiImage(scrollbarBox); + scrollbarBoxOver = new GuiImageData(imgPath, scrollbar_box_png); + scrollbarBoxOverImg = new GuiImage(scrollbarBoxOver); + + arrowUpBtn = new GuiButton(arrowUpImg->GetWidth(), arrowUpImg->GetHeight()); + arrowUpBtn->SetParent(this); + arrowUpBtn->SetImage(arrowUpImg); + arrowUpBtn->SetImageOver(arrowUpOverImg); + arrowUpBtn->SetImageHold(arrowUpOverImg); + arrowUpBtn->SetAlignment(ALIGN_CENTRE, ALIGN_TOP); + arrowUpBtn->SetPosition(width/2-18+7,-18); + arrowUpBtn->SetSelectable(false); + arrowUpBtn->SetTrigger(trigA); + arrowUpBtn->SetEffectOnOver(EFFECT_SCALE, 50, 130); + arrowUpBtn->SetSoundClick(btnSoundClick); + + arrowDownBtn = new GuiButton(arrowDownImg->GetWidth(), arrowDownImg->GetHeight()); + arrowDownBtn->SetParent(this); + arrowDownBtn->SetImage(arrowDownImg); + arrowDownBtn->SetImageOver(arrowDownOverImg); + arrowDownBtn->SetImageHold(arrowDownOverImg); + arrowDownBtn->SetAlignment(ALIGN_CENTRE, ALIGN_BOTTOM); + arrowDownBtn->SetPosition(width/2-18+7,18); + arrowDownBtn->SetSelectable(false); + arrowDownBtn->SetTrigger(trigA); + arrowDownBtn->SetEffectOnOver(EFFECT_SCALE, 50, 130); + arrowDownBtn->SetSoundClick(btnSoundClick); + + scrollbarBoxBtn = new GuiButton(scrollbarBoxImg->GetWidth(), scrollbarBoxImg->GetHeight()); + scrollbarBoxBtn->SetParent(this); + scrollbarBoxBtn->SetImage(scrollbarBoxImg); + scrollbarBoxBtn->SetImageOver(scrollbarBoxOverImg); + scrollbarBoxBtn->SetImageHold(scrollbarBoxOverImg); + scrollbarBoxBtn->SetAlignment(ALIGN_CENTRE, ALIGN_TOP); + scrollbarBoxBtn->SetSelectable(false); + scrollbarBoxBtn->SetEffectOnOver(EFFECT_SCALE, 50, 120); + scrollbarBoxBtn->SetMinY(0); + scrollbarBoxBtn->SetMaxY(height-30); + scrollbarBoxBtn->SetHoldable(true); + scrollbarBoxBtn->SetTrigger(trigHeldA); + + gameIndex = new int[pagesize]; + game = new GuiButton * [pagesize]; + gameTxt = new GuiText * [pagesize]; + gameTxtOver = new GuiText * [pagesize]; + gameBg = new GuiImage * [pagesize]; + newImg = new GuiImage * [pagesize]; + + for(int i=0; i < pagesize; i++) + { + gameTxt[i] = new GuiText(NULL, 20, THEME.gametext); + gameTxt[i]->SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE); + gameTxt[i]->SetPosition(24,0); + gameTxt[i]->SetMaxWidth(maxTextWidth, GuiText::DOTTED); + + + gameTxtOver[i] = new GuiText(NULL, 20, THEME.gametext); + gameTxtOver[i]->SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE); + gameTxtOver[i]->SetPosition(24,0); + gameTxtOver[i]->SetMaxWidth(maxTextWidth, GuiText::SCROLL); + + gameBg[i] = new GuiImage(bgGamesEntry); + + newImg[i] = new GuiImage(newGames); + newImg[i]->SetAlignment(ALIGN_RIGHT, ALIGN_MIDDLE); + newImg[i]->SetVisible(false); + + game[i] = new GuiButton(width-28,GAMESELECTSIZE); + game[i]->SetParent(this); + game[i]->SetLabel(gameTxt[i]); + game[i]->SetLabelOver(gameTxtOver[i]); + game[i]->SetIcon(newImg[i]); + game[i]->SetImageOver(gameBg[i]); + game[i]->SetPosition(5,GAMESELECTSIZE*i+4); + game[i]->SetRumble(false); + game[i]->SetTrigger(trigA); + game[i]->SetSoundClick(btnSoundClick); + + gameIndex[i] = i; + } + UpdateListEntries(); +} + +/** + * Destructor for the GuiGameBrowser class. + */ +GuiGameBrowser::~GuiGameBrowser() +{ + delete arrowUpBtn; + delete arrowDownBtn; + delete scrollbarBoxBtn; + delete scrollbarImg; + delete arrowDownImg; + delete arrowDownOverImg; + delete arrowUpImg; + delete arrowUpOverImg; + delete scrollbarBoxImg; + delete scrollbarBoxOverImg; + delete scrollbar; + delete arrowDown; + delete arrowDownOver; + delete arrowUp; + delete arrowUpOver; + delete scrollbarBox; + delete scrollbarBoxOver; + delete bgGameImg; + delete bgGames; + delete bgGamesEntry; + delete newGames; + + delete trigA; + delete trigHeldA; + delete btnSoundClick; + + for(int i=0; iResetState(); + + if(f == 1) + game[selectedItem]->SetState(STATE_SELECTED); +} + +void GuiGameBrowser::ResetState() +{ + LOCK(this); + if(state != STATE_DISABLED) + { + state = STATE_DEFAULT; + stateChan = -1; + } + + for(int i=0; iResetState(); + } +} + +int GuiGameBrowser::GetOffset() +{ + return listOffset; +} +int GuiGameBrowser::GetClickedOption() +{ + int found = -1; + for(int i=0; iGetState() == STATE_CLICKED) + { + game[i]->SetState(STATE_SELECTED); + found = gameIndex[i]; + break; + } + } + return found; +} + +int GuiGameBrowser::GetSelectedOption() +{ + int found = -1; + for(int i=0; iGetState() == STATE_SELECTED) + { + game[i]->SetState(STATE_SELECTED); + found = gameIndex[i]; + break; + } + } + return found; +} + +/**************************************************************************** + * FindMenuItem + * + * Help function to find the next visible menu item on the list + ***************************************************************************/ + +int GuiGameBrowser::FindMenuItem(int currentItem, int direction) +{ + int nextItem = currentItem + direction; + + if(nextItem < 0 || nextItem >= gameCnt) + return -1; + + if(strlen(get_title(&gameList[nextItem])) > 0) + return nextItem; + else + return FindMenuItem(nextItem, direction); +} + +/** + * Draw the button on screen + */ +void GuiGameBrowser::Draw() +{ + LOCK(this); + if(!this->IsVisible() || !gameCnt) + return; + + bgGameImg->Draw(); + + int next = listOffset; + + for(int i=0; i= 0) + { + game[i]->Draw(); + next = this->FindMenuItem(next, 1); + } + else + break; + } + + if(scrollbaron == 1) { + scrollbarImg->Draw(); + arrowUpBtn->Draw(); + arrowDownBtn->Draw(); + scrollbarBoxBtn->Draw(); + } + this->UpdateEffects(); +} + +void GuiGameBrowser::UpdateListEntries() +{ + if(!gameList) + return; + + int next = listOffset; + for(int i=0; i= 0) + { + if(game[i]->GetState() == STATE_DISABLED) + { + game[i]->SetVisible(true); + game[i]->SetState(STATE_DEFAULT); + } + gameTxt[i]->SetText(get_title(&gameList[next])); + gameTxt[i]->SetPosition(24, 0); + gameTxtOver[i]->SetText(get_title(&gameList[next])); + gameTxtOver[i]->SetPosition(24, 0); + + if (Settings.marknewtitles) { + bool isNew = NewTitles::Instance()->IsNew(gameList[next].id); + if (isNew) { + gameTxt[i]->SetMaxWidth(maxTextWidth - (newGames->GetWidth() + 1), GuiText::DOTTED); + gameTxtOver[i]->SetMaxWidth(maxTextWidth - (newGames->GetWidth() + 1), GuiText::SCROLL); + } else { + gameTxt[i]->SetMaxWidth(maxTextWidth, GuiText::DOTTED); + gameTxtOver[i]->SetMaxWidth(maxTextWidth, GuiText::SCROLL); + } + newImg[i]->SetVisible(isNew); + } + + gameIndex[i] = next; + next = this->FindMenuItem(next, 1); + } + else + { + game[i]->SetVisible(false); + game[i]->SetState(STATE_DISABLED); + } + } +} + +void GuiGameBrowser::Update(GuiTrigger * t) +{ + LOCK(this); + if(state == STATE_DISABLED || !t || !gameCnt) + return; + + int next, prev; + int old_listOffset = listOffset; + static int position2; + // scrolldelay affects how fast the list scrolls + // when the arrows are clicked + float scrolldelay = 3.5; + + if (scrollbaron == 1) { + // update the location of the scroll box based on the position in the option list + arrowUpBtn->Update(t); + arrowDownBtn->Update(t); + scrollbarBoxBtn->Update(t); + } + + next = listOffset; + + u32 buttonshold = ButtonsHold(); + + if(buttonshold != WPAD_BUTTON_UP && buttonshold != WPAD_BUTTON_DOWN) { + + for(int i=0; i= 0) + next = this->FindMenuItem(next, 1); + + if(focus) + { + if(i != selectedItem && game[i]->GetState() == STATE_SELECTED) + game[i]->ResetState(); + else if(i == selectedItem && game[i]->GetState() == STATE_DEFAULT) + game[selectedItem]->SetState(STATE_SELECTED, t->chan); + } + + game[i]->Update(t); + + if(game[i]->GetState() == STATE_SELECTED) + { + selectedItem = i; + } + } + } + + // pad and joystick navigation + if(!focus || !gameCnt) + return; // skip navigation + + if (scrollbaron == 1) + { + + if (t->Down() || arrowDownBtn->GetState() == STATE_CLICKED || arrowDownBtn->GetState() == STATE_HELD) //down + { + + next = this->FindMenuItem(gameIndex[selectedItem], 1); + + if(next >= 0) + { + if(selectedItem == pagesize-1) + { + // move list down by 1 + listOffset = this->FindMenuItem(listOffset, 1); + } + else if(game[selectedItem+1]->IsVisible()) + { + game[selectedItem]->ResetState(); + game[selectedItem+1]->SetState(STATE_SELECTED, t->chan); + selectedItem++; + } +// scrollbarBoxBtn->Draw(); + usleep(10000 * scrolldelay); + } + if (!(ButtonsHold() & WPAD_BUTTON_A)) + arrowDownBtn->ResetState(); + } + else if(t->Up() || arrowUpBtn->GetState() == STATE_CLICKED || arrowUpBtn->GetState() == STATE_HELD) //up + { + prev = this->FindMenuItem(gameIndex[selectedItem], -1); + + if(prev >= 0) + { + if(selectedItem == 0) + { + // move list up by 1 + listOffset = prev; + } + else + { + game[selectedItem]->ResetState(); + game[selectedItem-1]->SetState(STATE_SELECTED, t->chan); + selectedItem--; + } +// scrollbarBoxBtn->Draw(); + usleep(10000 * scrolldelay); + } + if (!(ButtonsHold() & WPAD_BUTTON_A)) + arrowUpBtn->ResetState(); + } + int position1 = t->wpad.ir.y; + + if (position2 == 0 && position1 > 0) + { + position2 = position1; + } + + if ((buttonshold & WPAD_BUTTON_B) && position1 > 0) + { + scrollbarBoxBtn->ScrollIsOn(1); + if (position2 > position1) + { + + prev = this->FindMenuItem(gameIndex[selectedItem], -1); + + if(prev >= 0) + { + if(selectedItem == 0) + { + // move list up by 1 + listOffset = prev; + } + else + { + game[selectedItem]->ResetState(); + game[selectedItem-1]->SetState(STATE_SELECTED, t->chan); + selectedItem--; + } +// scrollbarBoxBtn->Draw(); + usleep(10000 * scrolldelay); + } + } + else if (position2 < position1) + { + next = this->FindMenuItem(gameIndex[selectedItem], 1); + + if(next >= 0) + { + if(selectedItem == pagesize-1) + { + // move list down by 1 + listOffset = this->FindMenuItem(listOffset, 1); + } + else if(game[selectedItem+1]->IsVisible()) + { + game[selectedItem]->ResetState(); + game[selectedItem+1]->SetState(STATE_SELECTED, t->chan); + selectedItem++; + } +// scrollbarBoxBtn->Draw(); + usleep(10000 * scrolldelay); + } + } + + } + else if(!(buttonshold & WPAD_BUTTON_B)) + { + scrollbarBoxBtn->ScrollIsOn(0); + position2 = 0; + } + + if(scrollbarBoxBtn->GetState() == STATE_HELD && scrollbarBoxBtn->GetStateChan() == t->chan && t->wpad.ir.valid && gameCnt > pagesize) + { + // allow dragging of scrollbar box + scrollbarBoxBtn->SetPosition(width/2-18+7,0); + int position = t->wpad.ir.y - 32 - scrollbarBoxBtn->GetTop(); + + listOffset = (position * gameCnt)/(25.2 * pagesize) - selectedItem; + + if(listOffset <= 0) + { + listOffset = 0; + selectedItem = 0; + } + else if(listOffset+pagesize >= gameCnt) + { + listOffset = gameCnt - pagesize; + selectedItem = pagesize-1; + } + + } + int positionbar = (25.2 * pagesize)*(listOffset + selectedItem) / gameCnt; + + if(positionbar > (24 * pagesize)) + positionbar = (24 * pagesize); + scrollbarBoxBtn->SetPosition(width/2-18+7, positionbar+8); + + + if(t->Right()) //skip pagesize # of games if right is pressed + { + if(listOffset < gameCnt && gameCnt > pagesize) + { + listOffset =listOffset+ pagesize; + if(listOffset+pagesize >= gameCnt) + listOffset = gameCnt-pagesize; + } + } + else if(t->Left()) + { + if(listOffset > 0) + { + listOffset =listOffset- pagesize; + if(listOffset < 0) + listOffset = 0; + } + } + + } + else + { + if(t->Down()) //if there isn't a scrollbar and down is pressed + { + next = this->FindMenuItem(gameIndex[selectedItem], 1); + + if(next >= 0) + { + if(selectedItem == pagesize-1) + { + // move list down by 1 + listOffset = this->FindMenuItem(listOffset, 1); + } + else if(game[selectedItem+1]->IsVisible()) + { + game[selectedItem]->ResetState(); + game[selectedItem+1]->SetState(STATE_SELECTED, t->chan); + selectedItem++; + } + } + } + else if(t->Up()) //up + { + prev = this->FindMenuItem(gameIndex[selectedItem], -1); + + if(prev >= 0) + { + if(selectedItem == 0) + { + // move list up by 1 + listOffset = prev; + } + else + { + game[selectedItem]->ResetState(); + game[selectedItem-1]->SetState(STATE_SELECTED, t->chan); + selectedItem--; + } + } + } + } + + if(old_listOffset != listOffset) + UpdateListEntries(); + + if(updateCB) + updateCB(this); +} + +void GuiGameBrowser::Reload(struct discHdr * l, int count) +{ + LOCK(this); + gameList = l; + gameCnt = count; + scrollbaron = (gameCnt > pagesize) ? 1 : 0; + selectedItem = 0; + listOffset = 0; + focus = 1; + UpdateListEntries(); + + for(int i=0; iResetState(); +} diff --git a/source/main.cpp b/source/main.cpp index 64919f01..f7deff8a 100644 --- a/source/main.cpp +++ b/source/main.cpp @@ -15,14 +15,13 @@ #include #include #include +#include #include //#include -extern "C" -{ - extern void __exception_setreload(int t); +extern "C" { +extern void __exception_setreload(int t); } - #include #include @@ -50,436 +49,144 @@ extern "C" #include "usbloader/usbstorage.h" #include "memory/mem2.h" #include "lstub.h" +#include "xml/xml.h" +#include "settings/newtitles.h" +#include "menu/menus.h" extern bool geckoinit; extern bool textVideoInit; extern char headlessID[8]; +PartList partitions; /* Constants */ -#define CONSOLE_XCOORD 260 -#define CONSOLE_YCOORD 115 -#define CONSOLE_WIDTH 340 -#define CONSOLE_HEIGHT 218 +#define CONSOLE_XCOORD 260 +#define CONSOLE_YCOORD 115 +#define CONSOLE_WIDTH 340 +#define CONSOLE_HEIGHT 218 FreeTypeGX *fontSystem=0; FreeTypeGX *fontClock=0; -PartList partitions; -u8 dbvideo =0; - -static void BootUpProblems() +void LoadHeadlessID(const char * ID) { - s32 ret2; - - // load main font from file, or default to built-in font - fontSystem = new FreeTypeGX(); - fontSystem->loadFont(NULL, font_ttf, font_ttf_size, 0); - fontSystem->setCompatibilityMode(FTGX_COMPATIBILITY_DEFAULT_TEVOP_GX_PASSCLR | FTGX_COMPATIBILITY_DEFAULT_VTXDESC_GX_NONE); - - GuiImageData bootimageData(gxlogo_png); - GuiImage bootimage(&bootimageData); - GuiText boottext(NULL, 20, (GXColor) {255, 255, 255, 255} - ); - boottext.SetPosition(200, 240-1.2*bootimage.GetHeight()/2+250); - bootimage.SetPosition(320-1.2*bootimage.GetWidth()/2, 240-1.2*bootimage.GetHeight()/2); - bootimage.SetScale(1.2); - - GuiImageData usbimageData(usbport_png); - GuiImage usbimage(&usbimageData); - usbimage.SetPosition(400,300); - usbimage.SetScale(.7); - usbimage.SetAlpha(200); - - time_t curtime; + InitTextVideo(); + strncpy(headlessID, ID, sizeof(headlessID)); + InitCheckThread(); time_t endtime = time(0) + 30; - do + time_t curtime; + printf("\tWaiting for USB-Device:\n"); + while(checkthreadState != 1) { - /*ret2 = IOS_ReloadIOSsafe(249); - if (ret2 < 0) { - ret2 = IOS_ReloadIOSsafe(222); - SDCard_Init(); - load_ehc_module(); - SDCard_deInit(); - if(ret2 <0) { - boottext.SetText("ERROR: cIOS could not be loaded!"); - bootimage.Draw(); - boottext.Draw(); - Menu_Render(); - sleep(5); - SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0); - } - }*/ - USBDevice_deInit(); - USBDevice_Init(); - ret2 = WBFS_Init(WBFS_DEVICE_USB); - if (ret2 >= 0) - { - boottext.SetText("Loading..."); - bootimage.Draw(); - boottext.Draw(); - Menu_Render(); - break; - } + usleep(100); curtime = time(0); - boottext.SetTextf("Waiting for your slow USB Device: %i secs...", int(endtime-curtime)); - while(curtime == time(0)) + printf("\t\t%d\n", int(endtime-curtime)); + if(endtime == curtime) { - boottext.Draw(); - bootimage.Draw(); - if (endtime-curtime<15)usbimage.Draw(); - Menu_Render(); + printf("\n\tDevice could not be loaded.\n\tExiting...\n"); + sleep(5); + SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0); } - } while((endtime-time(0)) > 0); - - /*if(ret2 < 0) { - boottext.SetText("ERROR: USB device could not be loaded!"); - usbimage.Draw(); - bootimage.Draw(); - boottext.Draw(); - Menu_Render(); - SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0); - }*/ - - ///delete font to load up custom if set - if(fontSystem) - { - delete fontSystem; - fontSystem = NULL; } + mountMethod = 0; + checkthreadState = 0; + ExitCheckThread(); + CloseXMLDatabase(); + NewTitles::DestroyInstance(); + ShutdownAudio(); + StopGX(); + gettextCleanUp(); + menuBootgame(headlessID); } - -unsigned int *xfb = NULL; - -void InitTextVideo () +int main(int argc, char *argv[]) { - gprintf("\nInitTextVideo ()"); - if (textVideoInit) - { - gprintf("...0"); - return; - } - dbvideo=1; - VIDEO_Init(); - // get default video mode - GXRModeObj *vmode = VIDEO_GetPreferredMode(NULL); + setlocale(LC_ALL, "en.UTF-8"); + geckoinit = InitGecko(); - // widescreen fix - VIDEO_Configure (vmode); + if (hbcStubAvailable() || geckoinit) + InitTextVideo(); - // Allocate the video buffers - xfb = (u32 *) MEM_K0_TO_K1 (SYS_AllocateFramebuffer (vmode)); + __exception_setreload(5);//auto reset code dump nobody gives us codedump info anyways. - // A console is always useful while debugging - console_init (xfb, 20, 64, vmode->fbWidth, vmode->xfbHeight, vmode->fbWidth * 2); - - // Clear framebuffers etc. - VIDEO_ClearFrameBuffer (vmode, xfb, COLOR_BLACK); - VIDEO_SetNextFramebuffer (xfb); - - VIDEO_SetBlack (FALSE); - VIDEO_Flush (); - VIDEO_WaitVSync (); - if (vmode->viTVMode & VI_NON_INTERLACE) - VIDEO_WaitVSync (); - - //send console output to the gecko - if (geckoinit)CON_EnableGecko(1, true); - textVideoInit = true; - gprintf("...1"); - -} - - -int -main(int argc, char *argv[]) -{ - setlocale(LC_ALL, "en.UTF-8"); - geckoinit = InitGecko(); - - if (hbcStubAvailable() || geckoinit) - { - InitTextVideo(); - } - - // DEBUG_Init(GDBSTUB_DEVICE_USB, 1); - //_break(); - - __exception_setreload(5); //auto reset code dump nobody gives us codedump info anyways. - - gprintf("\n\n------------------"); - gprintf("\nUSB Loader GX rev%s",GetRev()); - gprintf("\nmain(%d", argc); - for (int i=0;i"); + gprintf("\n\n------------------"); + gprintf("\nUSB Loader GX rev%s linked with %s",GetRev(), _V_STRING); + gprintf("\nmain(%d", argc); + for (int i=0;i"); gprintf(")"); // This part is added, because we need a identify patched ios -// printf("\n\tReloading into ios 236"); - if (IOS_ReloadIOSsafe(236) < 0) - { -// printf("\n\tIOS 236 not found, reloading into 36"); - IOS_ReloadIOSsafe(36); - } + //printf("\n\tReloading into ios 236"); + if (IOS_ReloadIOSsafe(236) < 0) + IOS_ReloadIOSsafe(36); - printf("\n\tStarting up"); + printf("\n\tStarting up"); - MEM2_init(36); // Initialize 36 MB - MEM2_takeBigOnes(true); + MEM2_init(36); // Initialize 36 MB + MEM2_takeBigOnes(true); s32 ret; - bool startupproblem = false; bool bootDevice_found=false; - if (argc >= 1) - { - if (!strncasecmp(argv[0], "usb:/", 5)) - { + if (argc >= 1) { + if (!strncasecmp(argv[0], "usb:/", 5)) { strcpy(bootDevice, "USB:"); bootDevice_found = true; } else if (!strncasecmp(argv[0], "sd:/", 4)) - bootDevice_found = true; + bootDevice_found = true; } - printf("\n\tInitializing controllers"); + printf("\n\tInitializing controllers"); /** PAD_Init has to be before InitVideo don't move that **/ - PAD_Init(); // initialize PAD/WPAD + PAD_Init(); // initialize PAD/WPAD - printf("\n\tInitialize USB (wake up)"); + printf("\n\tInitialize USB (wake up)"); - USBDevice_Init(); // seems enough to wake up some HDDs if they are in sleep mode when the loader starts (tested with WD MyPassport Essential 2.5") + USBDevice_Init();// seems enough to wake up some HDDs if they are in sleep mode when the loader starts (tested with WD MyPassport Essential 2.5") + USBDevice_deInit(); - gprintf("\n\tChecking for stub IOS"); - ios222rev = getIOSrev(0x00000001000000dell); - ios249rev = getIOSrev(0x00000001000000f9ll); + ret = CheckForCIOS(); - //if we don't like either of the cIOS then scram - if (!(ios222rev==4 || (ios249rev>=9 && ios249rev<65280))) - { - InitTextVideo(); - printf("\x1b[2J"); - if ((ios222rev < 0 && ios222rev != WII_EINSTALL) && (ios249rev < 0 && ios249rev != WII_EINSTALL)) - { - printf("\n\n\n\tWARNING!"); - printf("\n\tUSB Loader GX needs unstubbed cIOS 222 v4 or 249 v9+"); - printf("\n\n\tWe cannot determine the versions on your system,\n\tsince you have no patched ios 36 or 236 installed."); - printf("\n\tTherefor, if loading of USB Loader GX fails, you\n\tprobably have installed the 4.2 update,"); - printf("\n\tand you should go figure out how to get some cios action going on\n\tin your Wii."); - printf("\n\n\tThis message will show every time."); - sleep(5); - } - else - { - printf("\n\n\n\tERROR!"); - printf("\n\tUSB Loader GX needs unstubbed cIOS 222 v4 or 249 v9+"); - printf("\n\n\tI found \n\t\t222 = %d%s",ios222rev,ios222rev==65280?" (Stubbed by 4.2 update)":""); - printf("\n\t\t249 = %d%s",ios249rev,ios249rev==65280?" (Stubbed by 4.2 update)":""); - printf("\n\n\tGo figure out how to get some cIOS action going on\n\tin your Wii and come back and see me."); - - sleep(15); - printf("\n\n\tBye"); - - USBDevice_deInit(); - exit(0); - } - } - - printf("\n\tReloading ios 249..."); - ret = IOS_ReloadIOSsafe(249); - - printf("%d", ret); - - if (ret < 0) - { - printf("\n\tIOS 249 failed, reloading ios 222..."); - ret = IOS_ReloadIOSsafe(222); - printf("%d", ret); - - if (ret < 0) - { - printf("\n\tIOS 222 failed, reloading ios 250..."); - ret = IOS_ReloadIOSsafe(250); - printf("%d", ret); - - if(ret < 0) - { - printf("\n\tIOS 250 failed, reloading ios 223..."); - ret = IOS_ReloadIOSsafe(223); - printf("%d", ret); - - if (ret < 0) - { - printf("\n\tERROR: cIOS could not be loaded!\n"); - sleep(5); - SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0); - } - } - } - printf("\n\tInitialize sd card"); - SDCard_Init(); - printf("\n\tLoad ehc module"); - load_ehc_module(); - printf("\n\tdeinit sd card"); - SDCard_deInit(); - } - - printf("\n\tInit wbfs..."); - ret = WBFS_Init(WBFS_DEVICE_USB); - printf("%d", ret); - - if (ret < 0) - { - printf("\n\tYou have issues with a slow disc, or a difficult disc\n\tReloading 222..."); - ret = IOS_ReloadIOSsafe(222); - printf("%d", ret); - /*if(ret < 0) { - // printf("\n\tSleeping for 4 seconds"); - // sleep(4); - - InitVideo(); // Initialise video - Menu_Render(); - BootUpProblems(); - startupproblem = true; - ret = 1; - }*/ - printf("\n\tInitialize sd card"); - SDCard_Init(); - printf("\n\tLoad ehc module"); - load_ehc_module(); - printf("\n\tdeinit sd card"); - SDCard_deInit(); - - printf("\n\tInitialize wbfs..."); - USBDevice_deInit(); - USBDevice_Init(); - ret = WBFS_Init(WBFS_DEVICE_USB); - printf("%d", ret); - - if(ret < 0) - { - // printf("\n\tSleeping for 4 seconds"); - // sleep(4); - InitVideo(); // Initialise video - Menu_Render(); - BootUpProblems(); - startupproblem = true; - ret = 1; - } - } - - printf("\n\tInitialize sd card"); - SDCard_Init(); // mount SD for loading cfg's - - //this should have already been done by now in order to WBFS_Init(). - printf("\n\tInitialize usb device"); - USBDevice_Init(); // and mount USB:/ + printf("\n\tInitialize sd card"); + SDCard_Init(); // mount SD for loading cfg's + printf("\n\tInitialize usb device"); + USBDevice_Init(); // and mount USB:/ if (!bootDevice_found) { - printf("\n\tSearch for configuration file"); - + printf("\n\tSearch for configuration file"); //try USB //left in all the dol and elf files in this check in case this is the first time running the app and they dont have the config if (checkfile((char*) "USB:/config/GXglobal.cfg") || (checkfile((char*) "USB:/apps/usbloader_gx/boot.elf")) - || checkfile((char*) "USB:/apps/usbloadergx/boot.dol") || (checkfile((char*) "USB:/apps/usbloadergx/boot.elf")) - || checkfile((char*) "USB:/apps/usbloader_gx/boot.dol")) + || checkfile((char*) "USB:/apps/usbloadergx/boot.dol") || (checkfile((char*) "USB:/apps/usbloadergx/boot.elf")) + || checkfile((char*) "USB:/apps/usbloader_gx/boot.dol")) strcpy(bootDevice, "USB:"); - printf("\n\tConfiguration file is on %s", bootDevice); - } - - // Try opening and closing the configuration file here - // to prevent a crash dump later on - giantpune - char GXGlobal_cfg[26]; - sprintf(GXGlobal_cfg, "%s/config/GXGlobal.cfg", bootDevice); - FILE *fp = fopen(GXGlobal_cfg, "r"); - if (fp) - { - fclose(fp); + printf("\n\tConfiguration file is on %s", bootDevice); } gettextCleanUp(); - printf("\n\tLoading configuration..."); + printf("\n\tLoading configuration..."); CFG_Load(); - printf("done"); - // gprintf("\n\tbootDevice = %s",bootDevice); + printf("done"); - /* Load Custom IOS */ - if ((Settings.cios == ios222 && IOS_GetVersion() != 222) || - (Settings.cios == ios223 && IOS_GetVersion() != 223)) - { - printf("\n\tReloading IOS to config setting (%d)...", ios222 ? 222 : 223); - SDCard_deInit(); // unmount SD for reloading IOS - USBDevice_deInit(); // unmount USB for reloading IOS - USBStorage_Deinit(); - ret = IOS_ReloadIOSsafe(ios222 ? 222 : 223); - printf("%d", ret); - SDCard_Init(); - load_ehc_module(); - if (ret < 0) - { - SDCard_deInit(); - Settings.cios = ios249; - ret = IOS_ReloadIOSsafe(249); - // now mount SD:/ //no need to keep mindlessly mounting and unmounting SD card - SDCard_Init(); - } + LoadAppCIOS(); + printf("\n\tcIOS = %u (Rev %u)",IOS_GetVersion(), IOS_GetRevision()); - USBDevice_Init(); // and mount USB:/ - WBFS_Init(WBFS_DEVICE_USB); - } else if ((Settings.cios == ios249 && IOS_GetVersion() != 249) || - (Settings.cios == ios250 && IOS_GetVersion() != 250)) - { - - printf("\n\tReloading IOS to config setting (%d)...", ios249 ? 249 : 250); - SDCard_deInit(); // unmount SD for reloading IOS - USBDevice_deInit(); // unmount USB for reloading IOS - USBStorage_Deinit(); - ret = IOS_ReloadIOSsafe(ios249 ? 249 : 250); - printf("%d", ret); - if (ret < 0) - { - Settings.cios = ios222; - ret = IOS_ReloadIOSsafe(222); - SDCard_Init(); - load_ehc_module(); - } - - else SDCard_Init(); // now mount SD:/ //no need to keep mindlessly mounting and unmounting SD card - USBDevice_Init(); // and mount USB:/ - WBFS_Init(WBFS_DEVICE_USB); - } - - // Partition_GetList(&partitions); - - if (ret < 0) - { - printf("\nERROR: cIOS could not be loaded!"); - sleep(5); - exit(0); - //SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0); - } - //gprintf("\n\tcIOS = %u (Rev %u)",IOS_GetVersion(), IOS_GetRevision());//don't need gprintf if sending console shit to gecko, too - printf("\n\tcIOS = %u (Rev %u)",IOS_GetVersion(), IOS_GetRevision()); - - // printf("Sleeping for 5 seconds\n"); - // sleep(5); - - //if a ID was passed via args copy it and try to boot it after the partition is mounted - //its not really a headless mode. more like hairless. - if (argc > 1 && argv[1]) - { - if (strlen(argv[1])==6) - strncpy(headlessID, argv[1], sizeof(headlessID)); - } + //if a ID was passed via args copy it and try to boot it after the partition is mounted + //its not really a headless mode. more like hairless. + if (argc > 1 && argv[1]) + { + if (strlen(argv[1]) == 6) + LoadHeadlessID(argv[1]); + } //! Init the rest of the System Sys_Init(); Wpad_Init(); - if(!startupproblem) - InitVideo(); - InitAudio(); // Initialize audio + InitVideo(); + InitAudio(); // Initialize audio WPAD_SetDataFormat(WPAD_CHAN_ALL,WPAD_FMT_BTNS_ACC_IR); WPAD_SetVRes(WPAD_CHAN_ALL, screenwidth, screenheight); @@ -496,8 +203,9 @@ main(int argc, char *argv[]) fontClock->loadFont(NULL, clock_ttf, clock_ttf_size, 0); fontClock->setCompatibilityMode(FTGX_COMPATIBILITY_DEFAULT_TEVOP_GX_PASSCLR | FTGX_COMPATIBILITY_DEFAULT_VTXDESC_GX_NONE); - gprintf("\n\tEnd of Main()"); + gprintf("\n\tEnd of Main()"); InitGUIThreads(); - MainMenu(MENU_CHECK); + MainMenu(MENU_DISCLIST); + return 0; } diff --git a/source/menu.cpp b/source/menu.cpp index a9945a98..3c461bbf 100644 --- a/source/menu.cpp +++ b/source/menu.cpp @@ -21,7 +21,9 @@ #include "settings/cfg.h" #include "themes/Theme_Downloader.h" #include "usbloader/disc.h" +#include "usbloader/wdvd.h" #include "usbloader/getentries.h" +#include "usbloader/usbstorage.h" #include "wad/title.h" #include "xml/xml.h" #include "audio.h" @@ -44,7 +46,7 @@ GuiSound *btnClick2 = NULL; struct discHdr *dvdheader = NULL; int currentMenu; -u8 mountMethod=0; +u8 mountMethod=3; char game_partition[6]; int load_from_fs; @@ -65,8 +67,6 @@ static int ExitRequested = 0; /*** Extern variables ***/ extern struct discHdr * gameList; extern FreeTypeGX *fontClock; -extern u8 shutdown; -extern u8 reset; extern s32 gameSelected, gameStart; extern u8 boothomebrew; extern u8 dbvideo; @@ -79,7 +79,8 @@ extern u8 dbvideo; * after finishing the removal/insertion of new elements, and after initial * GUI setup. ***************************************************************************/ -void ResumeGui() { +void ResumeGui() +{ guiHalt = false; LWP_ResumeThread (guithread); } @@ -92,8 +93,11 @@ void ResumeGui() { * This eliminates the possibility that the GUI is in the middle of accessing * an element that is being changed. ***************************************************************************/ -void HaltGui() { - if (guiHalt)return; +void HaltGui() +{ + if (guiHalt) + return; + guiHalt = true; // wait for thread to finish @@ -182,13 +186,16 @@ void InitGUIThreads() { LWP_CreateThread(&guithread, UpdateGUI, NULL, NULL, 0, LWP_PRIO_HIGHEST); InitProgressThread(); InitNetworkThread(); + InitCheckThread(); if (Settings.autonetwork) ResumeNetworkThread(); } -void ExitGUIThreads() { +void ExitGUIThreads() +{ ExitRequested = 1; + ExitCheckThread(); LWP_JoinThread(guithread, NULL); guithread = LWP_THREAD_NULL; } @@ -253,9 +260,6 @@ int MainMenu(int menu) { currentMenu = menu; char imgPath[100]; - //if (strcmp(headlessID,"")!=0)HaltGui(); - //WindowPrompt("Can you see me now",0,"ok"); - snprintf(imgPath, sizeof(imgPath), "%splayer1_point.png", CFG.theme_path); pointer[0] = new GuiImageData(imgPath, player1_point_png); snprintf(imgPath, sizeof(imgPath), "%splayer2_point.png", CFG.theme_path); @@ -277,8 +281,7 @@ int MainMenu(int menu) { bgImg = new GuiImage(background); mainWindow->Append(bgImg); - if (strcmp(headlessID,"")==0) - ResumeGui(); + ResumeGui(); bgMusic = new GuiSound(bg_music_ogg, bg_music_ogg_size, Settings.volume); bgMusic->SetLoop(1); //loop music @@ -291,43 +294,37 @@ int MainMenu(int menu) { while (currentMenu != MENU_EXIT) { bgMusic->SetVolume(Settings.volume); - switch (currentMenu) { - case MENU_CHECK: - - currentMenu = MenuCheck(); - break; - case MENU_FORMAT: - currentMenu = MenuFormat(); - break; - case MENU_INSTALL: - currentMenu = MenuInstall(); - break; - case MENU_SETTINGS: - currentMenu = MenuSettings(); - break; - case MENU_THEMEDOWNLOADER: - currentMenu = Theme_Downloader(); - break; - case MENU_HOMEBREWBROWSE: - currentMenu = MenuHomebrewBrowse(); - break; - case MENU_DISCLIST: - currentMenu = MenuDiscList(); - break; - default: // unrecognized menu - currentMenu = MenuCheck(); - break; + switch (currentMenu) + { + case MENU_FORMAT: + currentMenu = MenuFormat(); + break; + case MENU_INSTALL: + currentMenu = MenuInstall(); + break; + case MENU_SETTINGS: + currentMenu = MenuSettings(); + break; + case MENU_THEMEDOWNLOADER: + currentMenu = Theme_Downloader(); + break; + case MENU_HOMEBREWBROWSE: + currentMenu = MenuHomebrewBrowse(); + break; + case MENU_DISCLIST: + currentMenu = MenuDiscList(); + break; + default: // unrecognized menu + currentMenu = MenuDiscList(); + break; } } - // MemInfoPrompt(); gprintf("\nExiting main GUI. mountMethod = %d",mountMethod); CloseXMLDatabase(); NewTitles::DestroyInstance(); - if (strcmp(headlessID,"")!=0)//the GUIthread was never started, so it cant be ended and joined properly if headless mode was used. so we resume it and close it. - ResumeGui(); ExitGUIThreads(); bgMusic->Stop(); @@ -347,70 +344,72 @@ int MainMenu(int menu) { StopGX(); gettextCleanUp(); - if(dbvideo) - { - InitVideodebug (); - printf("\n\n\n\n\n"); - } - if (mountMethod==3) - { - struct discHdr *header = &gameList[gameSelected]; - char tmp[20]; - u32 tid; - sprintf(tmp,"%c%c%c%c",header->id[0],header->id[1],header->id[2],header->id[3]); - memcpy(&tid, tmp, 4); - gprintf("\nBooting title %016llx",TITLE_ID((header->id[5]=='1'?0x00010001:0x00010002),tid)); - WII_Initialize(); - WII_LaunchTitle(TITLE_ID((header->id[5]=='1'?0x00010001:0x00010002),tid)); - } - if (mountMethod==2) - { - gprintf("\nLoading BC for GameCube"); - WII_Initialize(); - WII_LaunchTitle(0x0000000100000100ULL); - } + menuBootgame(""); + + return 0; +} + +void menuBootgame(const char *headless) +{ + if (mountMethod==3) + { + struct discHdr *header = &gameList[gameSelected]; + char tmp[20]; + u32 tid; + sprintf(tmp,"%c%c%c%c",header->id[0],header->id[1],header->id[2],header->id[3]); + memcpy(&tid, tmp, 4); + gprintf("\nBooting title %016llx",TITLE_ID((header->id[5]=='1'?0x00010001:0x00010002),tid)); + WII_Initialize(); + WII_LaunchTitle(TITLE_ID((header->id[5]=='1'?0x00010001:0x00010002),tid)); + } + if (mountMethod==2) + { + gprintf("\nLoading BC for GameCube"); + WII_Initialize(); + WII_LaunchTitle(0x0000000100000100ULL); + } else if (boothomebrew == 1) { - gprintf("\nBootHomebrew"); + gprintf("\nBootHomebrew"); BootHomebrew(Settings.selected_homebrew); } - else if (boothomebrew == 2) { - gprintf("\nBootHomebrewFromMenu"); + else if (boothomebrew == 2) { + gprintf("\nBootHomebrewFromMenu"); BootHomebrewFromMem(); } - else { - gprintf("\n\tSettings.partition:%d",Settings.partition); - struct discHdr *header = NULL; - //if the GUI was "skipped" to boot a game from main(argv[1]) - if (strcmp(headlessID,"")!=0) - { - gprintf("\n\tHeadless mode (%s)",headlessID); - __Menu_GetEntries(1); - if (!gameCnt) - { - gprintf(" ERROR : !gameCnt"); - exit(0); - } - //gprintf("\n\tgameCnt:%d",gameCnt); - for(u32 i=0;iid[0],header->id[1],header->id[2],header->id[3],header->id[4],header->id[5]); - if (strcmp(tmp,headlessID)==0) - { - gameSelected = i; - gprintf(" found (%d)",i); - break; - } - //if the game was not found - if (i==gameCnt-1) - { - gprintf(" not found (%d IDs checked)",i); - exit(0); - } - } - } + else { + gprintf("\n\tSettings.partition:%d",Settings.partition); + struct discHdr *header = NULL; + //if the GUI was "skipped" to boot a game from main(argv[1]) + if (strcmp(headless,"")!=0) + { + gprintf("\n\tHeadless mode (%s)",headless); + __Menu_GetEntries(1); + if (!gameCnt) + { + gprintf(" ERROR : !gameCnt"); + exit(0); + } + gprintf("\n\tgameCnt:%d",gameCnt); + for(u32 i=0;iid[0],header->id[1],header->id[2],header->id[3],header->id[4],header->id[5]); + if (strcmp(tmp,headless)==0) + { + gameSelected = i; + gprintf(" found (%d)",i); + break; + } + //if the game was not found + if (i==gameCnt-1) + { + gprintf(" not found (%d IDs checked)",i); + exit(0); + } + } + } int ret = 0; @@ -426,10 +425,10 @@ int MainMenu(int menu) { fix002 = game_cfg->errorfix002; iosChoice = game_cfg->ios; countrystrings = game_cfg->patchcountrystrings; - if (!altdoldefault) { - alternatedol = game_cfg->loadalternatedol; - alternatedoloffset = game_cfg->alternatedolstart; - } + if (!altdoldefault) { + alternatedol = game_cfg->loadalternatedol; + alternatedoloffset = game_cfg->alternatedolstart; + } reloadblock = game_cfg->iosreloadblock; } else { videoChoice = Settings.video; @@ -443,81 +442,86 @@ int MainMenu(int menu) { } fix002 = Settings.error002; countrystrings = Settings.patchcountrystrings; - if (!altdoldefault) { - alternatedol = off; - alternatedoloffset = 0; - } + if (!altdoldefault) { + alternatedol = off; + alternatedoloffset = 0; + } reloadblock = off; } - int ios2; + int ios2; - switch (iosChoice) { - case i249: - ios2 = 249; - break; + switch (iosChoice) { + case i249: + ios2 = 249; + break; - case i222: - ios2 = 222; - break; + case i222: + ios2 = 222; + break; - case i223: - ios2 = 223; - break; + case i223: + ios2 = 223; + break; - default: - ios2 = 249; - break; - } + default: + ios2 = 249; + break; + } - // When the selected ios is 249, and you're loading from FAT, reset ios to 222 - if (load_from_fs != PART_FS_WBFS && ios2 == 249) { - ios2 = 222; - } - bool onlinefix = ShutdownWC24(); + // When the selected ios is 249, and you're loading from FAT, reset ios to 222 + if (load_from_fs != PART_FS_WBFS && ios2 == 249) + ios2 = 222; - // You cannot reload ios when loading from fat - if (IOS_GetVersion() != ios2 || onlinefix) { + ShutdownWC24(); + + // You cannot reload ios when loading from fat + if (IOS_GetVersion() != ios2) + { ret = Sys_ChangeIos(ios2); - if (ret < 0) { + if (ret < 0) Sys_ChangeIos(249); - } } - if (!mountMethod) - { - gprintf("\nLoading fragment list..."); - ret = get_frag_list(header->id); - gprintf("%d\n", ret); - gprintf("\nSetting fragment list..."); - ret = set_frag_list(header->id); - gprintf("%d\n", ret); + if (!mountMethod) + { + gprintf("\nLoading fragment list..."); + ret = get_frag_list(header->id); + gprintf("%d\n", ret); - ret = Disc_SetUSB(header->id); - if (ret < 0) Sys_BackToLoader(); - gprintf("\n\tUSB set to game"); - } - else { - gprintf("\n\tUSB not set, loading DVD"); - } + gprintf("\nSetting fragment list..."); + ret = set_frag_list(header->id); + gprintf("%d\n", ret); + + ret = Disc_SetUSB(header->id); + if (ret < 0) Sys_BackToLoader(); + gprintf("\n\tUSB set to game"); + } + else { + gprintf("\n\tUSB not set, loading DVD"); + Disc_SetUSB(NULL); + ret = WDVD_Close(); + ret = Disc_Init(); + } ret = Disc_Open(); + gprintf("\n\tDisc_Open():%d",ret); - if (ret < 0) Sys_BackToLoader(); + if (ret < 0 && !mountMethod) Sys_BackToLoader(); - if (gameList){ - free(gameList); - } - if(dvdheader) - delete dvdheader; + if (gameList) + free(gameList); - gprintf("\nLoading BCA data..."); - ret = do_bca_code(header->id); - gprintf("%d\n", ret); + if(dvdheader) + delete dvdheader; - if (reloadblock == on && Sys_IsHermes()) { + gprintf("\nLoading BCA data..."); + ret = do_bca_code(header->id); + gprintf("%d\n", ret); + + if (reloadblock == on && Sys_IsHermes()) + { patch_cios_data(); - if (load_from_fs == PART_FS_WBFS) { - mload_close(); - } + if (load_from_fs == PART_FS_WBFS) + mload_close(); } u8 errorfixer002 = 0; @@ -644,14 +648,13 @@ int MainMenu(int menu) { vipatch = 0; break; } - gprintf("\n\tDisc_wiiBoot"); + gprintf("\n\tDisc_wiiBoot"); ret = Disc_WiiBoot(videoselected, cheat, vipatch, countrystrings, errorfixer002, alternatedol, alternatedoloffset); if (ret < 0) { Sys_LoadMenu(); } - printf("Returning entry point: 0x%0x\n", ret); + printf("Returning entry point: 0x%0x\n", ret); } - return 0; } diff --git a/source/menu.h b/source/menu.h index 0ffb3a75..e2585671 100644 --- a/source/menu.h +++ b/source/menu.h @@ -15,8 +15,11 @@ void InitGUIThreads(void); void ExitGUIThreads(void); +void ResumeGui(); +void HaltGui(); +void menuBootgame(const char *headless); -int MainMenu (int menuitem); +int MainMenu (int menu); enum { MENU_EXIT = -1, diff --git a/source/menu/device_check.cpp b/source/menu/device_check.cpp new file mode 100644 index 00000000..9453786f --- /dev/null +++ b/source/menu/device_check.cpp @@ -0,0 +1,202 @@ +#include +#include + +#include "gecko.h" +#include "menus.h" +#include "wpad.h" +#include "fatmounter.h" +#include "usbloader/getentries.h" +#include "usbloader/wbfs.h" + +extern int load_from_fs; +extern char game_partition[6]; + +static lwp_t checkthread = LWP_THREAD_NULL; +static bool checkHalt = false; +static bool ExitRequested = false; +static u8 sdState =0; +u8 hddState = 0; +u8 checkthreadState = 0; + +extern u8 shutdown; +extern u8 reset; + +void ResumeCheck() +{ + checkHalt = false; + LWP_ResumeThread(checkthread); +} + +void HaltCheck() +{ + if(checkHalt) + return; + + checkHalt = true; + + while (!LWP_ThreadIsSuspended(checkthread)) + usleep(50); +} + +int CheckPartition() +{ + s32 ret2 = -1; + memset(game_partition, 0, 6); + load_from_fs = -1; + + extern PartList partitions; + // Added for slow HDD + for (int runs = 0; runs < 10; runs++) + { + if (Partition_GetList(WBFS_DEVICE_USB, &partitions) != 0) + continue; + + if (Settings.partition != -1 && partitions.num > Settings.partition) + { + PartInfo pinfo = partitions.pinfo[Settings.partition]; + if (WBFS_OpenPart(pinfo.part_fs, pinfo.index, partitions.pentry[Settings.partition].sector, partitions.pentry[Settings.partition].size, (char *) &game_partition) == 0) + { + ret2 = 0; + load_from_fs = pinfo.part_fs; + break; + } + } + + if (partitions.wbfs_n != 0) + { + ret2 = WBFS_Open(); + for (int p = 0; p < partitions.num; p++) + { + if (partitions.pinfo[p].fs_type == FS_TYPE_WBFS) + { + Settings.partition = p; + load_from_fs = PART_FS_WBFS; + break; + } + } + } + + else if (Sys_IsHermes() && (partitions.fat_n != 0 || partitions.ntfs_n != 0)) + { + // Loop through FAT/NTFS partitions, and find the first partition with games on it (if there is one) + u32 count; + for (int i = 0; i < partitions.num; i++) + { + if (partitions.pinfo[i].fs_type == FS_TYPE_FAT32 || partitions.pinfo[i].fs_type == FS_TYPE_NTFS) + { + if (!WBFS_OpenPart(partitions.pinfo[i].part_fs, partitions.pinfo[i].index, partitions.pentry[i].sector, partitions.pentry[i].size, (char *) &game_partition)) + { + // Get the game count... + WBFS_GetCount(&count); + if (count > 0) + { + load_from_fs = partitions.pinfo[i].part_fs; + Settings.partition = i; + break; + } + else + { + WBFS_Close(); + } + } + } + } + } + + if ((ret2 >= 0 || load_from_fs != PART_FS_WBFS) && isInserted(bootDevice)) + { + cfg_save_global(); + break; + } + } + + if (ret2 < 0 && load_from_fs != PART_FS_WBFS) + return ret2; + + ret2 = Disc_Init(); + if (ret2 < 0) + return ret2; + + // open database if needed, load titles if needed + if(isInserted(bootDevice)) + OpenXMLDatabase(Settings.titlestxt_path,Settings.db_language, Settings.db_JPtoEN, true, Settings.titlesOverride==1?true:false, true); + + hddState = 1; + + return hddState; +} + +int CheckHDD() +{ + USBDevice_deInit(); + USBDevice_Init(); + + int wbfsinit = WBFS_Init(WBFS_DEVICE_USB); + + if (wbfsinit >= 0) + wbfsinit = CheckPartition(); + + return wbfsinit; +} + +static void * CheckDevices (void *arg) +{ + sdState = isInserted(bootDevice); + while (!ExitRequested) + { + usleep(100); + + if (checkHalt && !ExitRequested) + { + LWP_SuspendThread(checkthread); + continue; + } + + if (shutdown == 1) + Sys_Shutdown(); + + else if (reset == 1) + Sys_Reboot(); + + if (!hddState) + { + if(CheckHDD() >= 0) + { + checkthreadState = 1; + } + } + + //this really doesnt work right. it seems that isInserted() isn't what it should be. + int sdNow = isInserted(bootDevice); + if (sdState != sdNow) + { + sdState = sdNow; + checkthreadState = 2; + WindowPrompt("2",0,"OK"); + } + + u32 buttons = ButtonsPressed(); + if((buttons & WPAD_NUNCHUK_BUTTON_Z) || (buttons & WPAD_CLASSIC_BUTTON_ZL) || + (buttons & PAD_TRIGGER_Z)) + { + gprintf("\n\tscreenShotBtn clicked"); + ScreenShot(); + gprintf("...It's easy, mmmmmmKay"); + } + } + + return NULL; +} + +void InitCheckThread() +{ + LWP_CreateThread(&checkthread, CheckDevices, NULL, NULL, 0, 0); +} + +void ExitCheckThread() +{ + ExitRequested = true; + LWP_ResumeThread(checkthread); + LWP_JoinThread(checkthread, NULL); + checkthread = LWP_THREAD_NULL; +} diff --git a/source/menu/menu_check.cpp b/source/menu/menu_check.cpp deleted file mode 100644 index b1ee8f62..00000000 --- a/source/menu/menu_check.cpp +++ /dev/null @@ -1,164 +0,0 @@ -#include -#include - -#include "menus.h" -#include "wpad.h" -#include "fatmounter.h" -#include "usbloader/getentries.h" -#include "usbloader/wbfs.h" - -extern int load_from_fs; -extern char game_partition[6]; -extern char headlessID[8]; - -/**************************************************************************** - * MenuCheck - ***************************************************************************/ -int MenuCheck() { - gprintf("\nMenuCheck()"); - int menu = MENU_NONE; - int i = 0; - int choice; - s32 ret2, wbfsinit; - OptionList options; - options.length = i; - - VIDEO_WaitVSync (); - - wbfsinit = WBFS_Init(WBFS_DEVICE_USB); - if (wbfsinit < 0) { - ret2 = WindowPrompt(tr("No USB Device found."), tr("Do you want to retry for 30 secs?"), "cIOS249", "cIOS222", tr("Back to Wii Menu")); - SDCard_deInit(); - USBDevice_deInit(); - WPAD_Flush(0); - WPAD_Disconnect(0); - WPAD_Shutdown(); - if (ret2 == 1) { - Settings.cios = ios249; - } else if (ret2 == 2) { - Settings.cios = ios222; - } else { - Sys_LoadMenu(); - } - ret2 = DiscWait(tr("No USB Device"), tr("Waiting for USB Device"), 0, 0, 1); - //reinitialize SD and USB - Wpad_Init(); - WPAD_SetDataFormat(WPAD_CHAN_ALL,WPAD_FMT_BTNS_ACC_IR); - WPAD_SetVRes(WPAD_CHAN_ALL, screenwidth, screenheight); - if (ret2 < 0) { - WindowPrompt (tr("Error !"),tr("USB Device not found"), tr("OK")); - Sys_LoadMenu(); - } - } - - ret2 = -1; - memset(game_partition, 0, 6); - load_from_fs = -1; - - extern PartList partitions; - // Added for slow HDD - for (int runs = 0; runs < 10; runs++) { - if (Partition_GetList(WBFS_DEVICE_USB, &partitions) != 0) { - sleep(1); - continue; - } - - if (Settings.partition != -1 && partitions.num > Settings.partition) { - PartInfo pinfo = partitions.pinfo[Settings.partition]; - if (WBFS_OpenPart(pinfo.part_fs, pinfo.index, partitions.pentry[Settings.partition].sector, partitions.pentry[Settings.partition].size, (char *) &game_partition) == 0) - { - ret2 = 0; - load_from_fs = pinfo.part_fs; - break; - } - } - - if (partitions.wbfs_n != 0) { - ret2 = WBFS_Open(); - for (int p = 0; p < partitions.num; p++) { - if (partitions.pinfo[p].fs_type == FS_TYPE_WBFS) { - Settings.partition = p; - load_from_fs = PART_FS_WBFS; - break; - } - } - } else if (Sys_IsHermes() && (partitions.fat_n != 0 || partitions.ntfs_n != 0)) { - // Loop through FAT/NTFS partitions, and find the first partition with games on it (if there is one) - u32 count; - - for (int i = 0; i < partitions.num; i++) { - if (partitions.pinfo[i].fs_type == FS_TYPE_FAT32 || partitions.pinfo[i].fs_type == FS_TYPE_NTFS) { - - if (!WBFS_OpenPart(partitions.pinfo[i].part_fs, partitions.pinfo[i].index, partitions.pentry[i].sector, partitions.pentry[i].size, (char *) &game_partition)) { - // Get the game count... - WBFS_GetCount(&count); - - if (count > 0) { - load_from_fs = partitions.pinfo[i].part_fs; - Settings.partition = i; - break; - } else { - WBFS_Close(); - } - } - } - } - } - - if ((ret2 >= 0 || load_from_fs != PART_FS_WBFS) && isInserted(bootDevice)) { - cfg_save_global(); - break; - } - sleep(1); - } - - if (ret2 < 0 && load_from_fs != PART_FS_WBFS) { - choice = WindowPrompt(tr("No WBFS or FAT/NTFS partition found"),tr("You need to select or format a partition"), tr("Select"), tr("Format"), tr("Return")); - if (choice == 0) { - Sys_LoadMenu(); - } else { - load_from_fs = choice == 1 ? PART_FS_FAT : PART_FS_WBFS; - menu = MENU_FORMAT; - } - } - - ret2 = Disc_Init(); - if (ret2 < 0) { - WindowPrompt (tr("Error !"),tr("Could not initialize DIP module!"),tr("OK")); - Sys_LoadMenu(); - } - - if (shutdown == 1) - Sys_Shutdown(); - if (reset == 1) - Sys_Reboot(); - - if (wbfsinit < 0) { - sleep(1); - } - - // open database if needed, load titles if needed - if(isInserted(bootDevice))OpenXMLDatabase(Settings.titlestxt_path,Settings.db_language, Settings.db_JPtoEN, true, Settings.titlesOverride==1?true:false, true); - - // titles.txt loaded after database to override database titles with custom titles - //snprintf(pathname, sizeof(pathname), "%stitles.txt", Settings.titlestxt_path); - //cfg_parsefile(pathname, &title_set); - - //Spieleliste laden - __Menu_GetEntries(0); - - if (strcmp(headlessID,"")!=0) - menu = MENU_EXIT; - - if (menu == MENU_NONE) - menu = MENU_DISCLIST; - - //for HDDs with issues - if (wbfsinit < 0) { - sleep(1); - USBDevice_Init(); - SDCard_Init(); - } - - return menu; -} diff --git a/source/menu/menu_disclist.cpp b/source/menu/menu_disclist.cpp index dbd37bce..f42bf681 100644 --- a/source/menu/menu_disclist.cpp +++ b/source/menu/menu_disclist.cpp @@ -1,1629 +1,1649 @@ -#include "menus.h" -#include "fatmounter.h" -#include "usbloader/wdvd.h" -#include "usbloader/getentries.h" -#include "usbloader/wbfs.h" -#include "patches/fst.h" -#include "network/networkops.h" -#include "prompts/gameinfo.h" -#include "prompts/DiscBrowser.h" -#include "settings/Settings.h" -#include "wpad.h" -#include "sys.h" - -#include "libwiigui/gui_gamebrowser.h" -#include "libwiigui/gui_gamegrid.h" -#include "libwiigui/gui_gamecarousel.h" -#include "libwiigui/gui_searchbar.h" - -#define MAX_CHARACTERS 38 -extern u8 * gameScreenTex; -extern struct discHdr *dvdheader; -extern u8 mountMethod; -extern int load_from_fs; -extern s32 gameSelected; -extern GuiText * GameIDTxt; -extern GuiText * GameRegionTxt; -extern const u8 data1; -extern FreeTypeGX *fontClock; -extern bool updateavailable; -extern int cntMissFiles; -extern GuiImageData * cover; -extern GuiImage * coverImg; -extern GuiImageData * pointer[4]; -extern bool altdoldefault; -extern GuiImage * bgImg; - -GuiButton *Toolbar[9]; -int idiotFlag=-1; -char idiotChar[50]; - -void DiscListWinUpdateCallback(void * e); -void rockout(int f = 0); - -static u32 startat = 0; - -/**************************************************************************** - * MenuDiscList - ***************************************************************************/ -int MenuDiscList() { - - gprintf("\nMenuDiscList()"); - //TakeScreenshot("SD:/screenshot1.png"); - __Menu_GetEntries(); - int offset = MIN(startat,gameCnt-1); - startat = offset; - //gprintf("\n\tstartat:%d offset:%d",startat,offset); - int datag = 0; - int datagB =0; - int dataed = -1; - int cosa=0,sina=0; - int selectImg1 = 0; - char ID[4]; - char IDfull[7]; - u32 covert = 0; - char imgPath[100]; - if (!dvdheader) - dvdheader = new struct discHdr; - u8 mountMethodOLD =0; - - WDVD_GetCoverStatus(&covert); - u32 covertOld=covert; - - f32 freespace, used, size = 0.0; - wchar_t searchChar; - //SCREENSAVER - int check = 0; //to skip the first cycle when wiimote isn't completely connected - - datagB=0; - int menu = MENU_NONE, dataef=0; - - - u32 nolist; - char text[MAX_CHARACTERS + 4]; - int choice = 0, selectedold = 100; - s32 ret; - - //CLOCK - struct tm * timeinfo; - char theTime[80]=""; - time_t lastrawtime=0; - - if (mountMethod != 3 && load_from_fs == PART_FS_WBFS) { - WBFS_DiskSpace(&used, &freespace); - } - - if (!gameCnt) { //if there is no list of games to display - nolist = 1; - } - - 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), "%sbutton_install.png", CFG.theme_path); - GuiImageData btnInstall(imgPath, button_install_png); - snprintf(imgPath, sizeof(imgPath), "%sbutton_install_over.png", CFG.theme_path); - GuiImageData btnInstallOver(imgPath, button_install_over_png); - - snprintf(imgPath, sizeof(imgPath), "%ssettings_button.png", CFG.theme_path); - GuiImageData btnSettings(imgPath, settings_button_png); - snprintf(imgPath, sizeof(imgPath), "%ssettings_button_over.png", CFG.theme_path); - GuiImageData btnSettingsOver(imgPath, settings_button_over_png); - GuiImageData dataID(&data1); - - 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); - snprintf(imgPath, sizeof(imgPath), "%sSDcard_over.png", CFG.theme_path); - GuiImageData btnsdcardOver(imgPath, sdcard_over_png); - snprintf(imgPath, sizeof(imgPath), "%sSDcard.png", CFG.theme_path); - GuiImageData btnsdcard(imgPath, sdcard_png); - - - snprintf(imgPath, sizeof(imgPath), "%sfavIcon.png", CFG.theme_path); - GuiImageData imgfavIcon(imgPath, favIcon_png); - snprintf(imgPath, sizeof(imgPath), "%sfavIcon_gray.png", CFG.theme_path); - GuiImageData imgfavIcon_gray(imgPath, NULL); - snprintf(imgPath, sizeof(imgPath), "%ssearchIcon.png", CFG.theme_path); - GuiImageData imgsearchIcon(imgPath, searchIcon_png); - snprintf(imgPath, sizeof(imgPath), "%ssearchIcon_gray.png", CFG.theme_path); - GuiImageData imgsearchIcon_gray(imgPath, NULL); - snprintf(imgPath, sizeof(imgPath), "%sabcIcon.png", CFG.theme_path); - GuiImageData imgabcIcon(imgPath, abcIcon_png); - snprintf(imgPath, sizeof(imgPath), "%sabcIcon_gray.png", CFG.theme_path); - GuiImageData imgabcIcon_gray(imgPath, NULL); - snprintf(imgPath, sizeof(imgPath), "%srankIcon.png", CFG.theme_path); - GuiImageData imgrankIcon(imgPath, rankIcon_png); - snprintf(imgPath, sizeof(imgPath), "%srankIcon_gray.png", CFG.theme_path); - GuiImageData imgrankIcon_gray(imgPath, NULL); - snprintf(imgPath, sizeof(imgPath), "%splayCountIcon.png", CFG.theme_path); - GuiImageData imgplayCountIcon(imgPath, playCountIcon_png); - snprintf(imgPath, sizeof(imgPath), "%splayCountIcon_gray.png", CFG.theme_path); - GuiImageData imgplayCountIcon_gray(imgPath, NULL); - snprintf(imgPath, sizeof(imgPath), "%sarrangeGrid.png", CFG.theme_path); - GuiImageData imgarrangeGrid(imgPath, arrangeGrid_png); - snprintf(imgPath, sizeof(imgPath), "%sarrangeGrid_gray.png", CFG.theme_path); - GuiImageData imgarrangeGrid_gray(imgPath, NULL); - snprintf(imgPath, sizeof(imgPath), "%sarrangeList.png", CFG.theme_path); - GuiImageData imgarrangeList(imgPath, arrangeList_png); - snprintf(imgPath, sizeof(imgPath), "%sarrangeList_gray.png", CFG.theme_path); - GuiImageData imgarrangeList_gray(imgPath, NULL); - snprintf(imgPath, sizeof(imgPath), "%sarrangeCarousel.png", CFG.theme_path); - GuiImageData imgarrangeCarousel(imgPath, arrangeCarousel_png); - snprintf(imgPath, sizeof(imgPath), "%sarrangeCarousel_gray.png", CFG.theme_path); - GuiImageData imgarrangeCarousel_gray(imgPath, NULL); - - snprintf(imgPath, sizeof(imgPath), "%slock.png", CFG.theme_path); - GuiImageData imgLock(imgPath, lock_png); - snprintf(imgPath, sizeof(imgPath), "%slock_gray.png", CFG.theme_path); - GuiImageData imgLock_gray(imgPath, NULL); - snprintf(imgPath, sizeof(imgPath), "%sunlock.png", CFG.theme_path); - GuiImageData imgUnlock(imgPath, unlock_png); - snprintf(imgPath, sizeof(imgPath), "%sunlock_gray.png", CFG.theme_path); - GuiImageData imgUnlock_gray(imgPath, NULL); - - snprintf(imgPath, sizeof(imgPath), "%sdvd.png", CFG.theme_path); - GuiImageData imgdvd(imgPath, dvd_png); - snprintf(imgPath, sizeof(imgPath), "%sdvd_gray.png", CFG.theme_path); - GuiImageData imgdvd_gray(imgPath, NULL); - - snprintf(imgPath, sizeof(imgPath), "%sbrowser.png", CFG.theme_path); - GuiImageData homebrewImgData(imgPath, browser_png); - snprintf(imgPath, sizeof(imgPath), "%sbrowser_over.png", CFG.theme_path); - GuiImageData homebrewImgDataOver(imgPath, browser_over_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, PAD_BUTTON_START); - GuiTrigger trig2; - trig2.SetButtonOnlyTrigger(-1, WPAD_BUTTON_2 | WPAD_CLASSIC_BUTTON_X, 0); - GuiTrigger trig1; - trig1.SetButtonOnlyTrigger(-1, WPAD_BUTTON_1 | WPAD_CLASSIC_BUTTON_Y, 0); - GuiTrigger trigZ; - 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); - - char spaceinfo[30]; - if (load_from_fs != PART_FS_WBFS) { - memset(spaceinfo, 0, 30); - } else { - if (!strcmp(Settings.db_language,"JA")) { - // needs to be "total...used" for Japanese - sprintf(spaceinfo,(mountMethod!=3?"%.2fGB %s %.2fGB %s":" "),(freespace+used),tr("of"),freespace,tr("free")); - } else { - sprintf(spaceinfo,(mountMethod!=3?"%.2fGB %s %.2fGB %s":" "),freespace,tr("of"),(freespace+used),tr("free")); - } - } - GuiText usedSpaceTxt(spaceinfo, 18, THEME.info); - usedSpaceTxt.SetAlignment(THEME.hddinfo_align, ALIGN_TOP); - usedSpaceTxt.SetPosition(THEME.hddinfo_x, THEME.hddinfo_y); - - char GamesCnt[15]; - sprintf(GamesCnt,"%s: %i",(mountMethod!=3?tr("Games"):tr("Channels")), gameCnt); - GuiText gamecntTxt(GamesCnt, 18, THEME.info); - - GuiButton gamecntBtn(100,18); - gamecntBtn.SetAlignment(THEME.gamecount_align, ALIGN_TOP); - gamecntBtn.SetPosition(THEME.gamecount_x,THEME.gamecount_y); - gamecntBtn.SetLabel(&gamecntTxt); - gamecntBtn.SetEffectGrow(); - gamecntBtn.SetTrigger(&trigA); - - GuiTooltip installBtnTT(tr("Install a game")); - if (Settings.wsprompt == yes) - installBtnTT.SetWidescreen(CFG.widescreen); - installBtnTT.SetAlpha(THEME.tooltipAlpha); - GuiImage installBtnImg(&btnInstall); - GuiImage installBtnImgOver(&btnInstallOver); - installBtnImg.SetWidescreen(CFG.widescreen); - installBtnImgOver.SetWidescreen(CFG.widescreen); - - GuiButton installBtn(&installBtnImg, &installBtnImgOver, ALIGN_LEFT, ALIGN_TOP, THEME.install_x, THEME.install_y, &trigA, &btnSoundOver, btnClick2, 1, &installBtnTT,24,-30, 0,5); - - - GuiTooltip settingsBtnTT(tr("Settings")); - if (Settings.wsprompt == yes) - settingsBtnTT.SetWidescreen(CFG.widescreen); - settingsBtnTT.SetAlpha(THEME.tooltipAlpha); - GuiImage settingsBtnImg(&btnSettings); - settingsBtnImg.SetWidescreen(CFG.widescreen); - GuiImage settingsBtnImgOver(&btnSettingsOver); - settingsBtnImgOver.SetWidescreen(CFG.widescreen); - GuiButton settingsBtn(&settingsBtnImg,&settingsBtnImgOver, 0, 3, THEME.setting_x, THEME.setting_y, &trigA, &btnSoundOver, btnClick2,1,&settingsBtnTT,65,-30,0,5); - - GuiTooltip homeBtnTT(tr("Back to HBC or Wii Menu")); - if (Settings.wsprompt == yes) - homeBtnTT.SetWidescreen(CFG.widescreen); - settingsBtnTT.SetAlpha(THEME.tooltipAlpha); - GuiImage homeBtnImg(&btnhome); - homeBtnImg.SetWidescreen(CFG.widescreen); - GuiImage homeBtnImgOver(&btnhomeOver); - homeBtnImgOver.SetWidescreen(CFG.widescreen); - GuiButton homeBtn(&homeBtnImg,&homeBtnImgOver, 0, 3, THEME.home_x, THEME.home_y, &trigA, &btnSoundOver, btnClick2,1,&homeBtnTT,15,-30,1,5); - homeBtn.RemoveSoundClick(); - homeBtn.SetTrigger(&trigHome); - - GuiTooltip poweroffBtnTT(tr("Power off the Wii")); - if (Settings.wsprompt == yes) - poweroffBtnTT.SetWidescreen(CFG.widescreen); - poweroffBtnTT.SetAlpha(THEME.tooltipAlpha); - 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,&poweroffBtnTT,-10,-30,1,5); - - GuiTooltip sdcardBtnTT(tr("Reload SD")); - if (Settings.wsprompt == yes) - sdcardBtnTT.SetWidescreen(CFG.widescreen); - sdcardBtnTT.SetAlpha(THEME.tooltipAlpha); - GuiImage sdcardImg(&btnsdcard); - GuiImage sdcardImgOver(&btnsdcardOver); - sdcardImg.SetWidescreen(CFG.widescreen); - sdcardImgOver.SetWidescreen(CFG.widescreen); - GuiButton sdcardBtn(&sdcardImg,&sdcardImgOver, 0, 3, THEME.sdcard_x, THEME.sdcard_y, &trigA, &btnSoundOver, btnClick2,1,&sdcardBtnTT,15,-30,0,5); - - GuiButton gameInfo(0,0); - gameInfo.SetTrigger(&trig2); - gameInfo.SetSoundClick(btnClick2); - - - GuiImage wiiBtnImg(&dataID); - wiiBtnImg.SetWidescreen(CFG.widescreen); - GuiButton wiiBtn(&wiiBtnImg,&wiiBtnImg, 0, 4, 0, -10, &trigA, &btnSoundOver, btnClick2,0); - - GuiTooltip favoriteBtnTT(tr("Display favorites")); - if (Settings.wsprompt == yes) - favoriteBtnTT.SetWidescreen(CFG.widescreen); - favoriteBtnTT.SetAlpha(THEME.tooltipAlpha); - GuiImage favoriteBtnImg(&imgfavIcon); - favoriteBtnImg.SetWidescreen(CFG.widescreen); -// GuiImage favoriteBtnImg_g(favoriteBtnImg);favoriteBtnImg_g.SetGrayscale(); - GuiImage favoriteBtnImg_g(&imgfavIcon_gray); - if(favoriteBtnImg_g.GetImage() == NULL) { favoriteBtnImg_g = favoriteBtnImg; favoriteBtnImg_g.SetGrayscale();} - favoriteBtnImg_g.SetWidescreen(CFG.widescreen); - GuiButton favoriteBtn(&favoriteBtnImg_g,&favoriteBtnImg_g, ALIGN_LEFT, ALIGN_TOP, THEME.gamelist_favorite_x, THEME.gamelist_favorite_y, &trigA, &btnSoundOver, btnClick2,1, &favoriteBtnTT, -15, 52, 0, 3); - favoriteBtn.SetAlpha(180); - - GuiTooltip searchBtnTT(tr("Set Search-Filter")); - if (Settings.wsprompt == yes) - searchBtnTT.SetWidescreen(CFG.widescreen); - searchBtnTT.SetAlpha(THEME.tooltipAlpha); - GuiImage searchBtnImg(&imgsearchIcon); - searchBtnImg.SetWidescreen(CFG.widescreen); -// GuiImage searchBtnImg_g(searchBtnImg); searchBtnImg_g.SetGrayscale(); - GuiImage searchBtnImg_g(&imgsearchIcon_gray); - if(searchBtnImg_g.GetImage() == NULL) { searchBtnImg_g = searchBtnImg; searchBtnImg_g.SetGrayscale();} - searchBtnImg_g.SetWidescreen(CFG.widescreen); - GuiButton searchBtn(&searchBtnImg_g,&searchBtnImg_g, ALIGN_LEFT, ALIGN_TOP, THEME.gamelist_search_x, THEME.gamelist_search_y, &trigA, &btnSoundOver, btnClick2,1, &searchBtnTT, -15, 52, 0, 3); - searchBtn.SetAlpha(180); - - GuiTooltip abcBtnTT(Settings.fave ? tr("Sort by rank") : tr("Sort alphabetically")); - if (Settings.wsprompt == yes) - abcBtnTT.SetWidescreen(CFG.widescreen); - abcBtnTT.SetAlpha(THEME.tooltipAlpha); - GuiImage abcBtnImg(Settings.fave ? &imgrankIcon : &imgabcIcon); - abcBtnImg.SetWidescreen(CFG.widescreen); -// GuiImage abcBtnImg_g(abcBtnImg); abcBtnImg_g.SetGrayscale(); - GuiImage abcBtnImg_g(Settings.fave ? &imgrankIcon_gray : &imgabcIcon_gray); - if(abcBtnImg_g.GetImage() == NULL) { abcBtnImg_g = abcBtnImg; abcBtnImg_g.SetGrayscale();} - abcBtnImg_g.SetWidescreen(CFG.widescreen); - GuiButton abcBtn(&abcBtnImg_g,&abcBtnImg_g, ALIGN_LEFT, ALIGN_TOP, THEME.gamelist_abc_x, THEME.gamelist_abc_y, &trigA, &btnSoundOver, btnClick2,1,&abcBtnTT, -15, 52, 0, 3); - abcBtn.SetAlpha(180); - - GuiTooltip countBtnTT(tr("Sort order by most played")); - if (Settings.wsprompt == yes) - countBtnTT.SetWidescreen(CFG.widescreen); - countBtnTT.SetAlpha(THEME.tooltipAlpha); - GuiImage countBtnImg(&imgplayCountIcon); - countBtnImg.SetWidescreen(CFG.widescreen); -// GuiImage countBtnImg_g(countBtnImg); countBtnImg_g.SetGrayscale(); - GuiImage countBtnImg_g(&imgplayCountIcon_gray); - if(countBtnImg_g.GetImage() == NULL) { countBtnImg_g = countBtnImg; countBtnImg_g.SetGrayscale();} - countBtnImg_g.SetWidescreen(CFG.widescreen); - GuiButton countBtn(&countBtnImg_g,&countBtnImg_g, ALIGN_LEFT, ALIGN_TOP, THEME.gamelist_count_x, THEME.gamelist_count_y, &trigA, &btnSoundOver, btnClick2,1, &countBtnTT, -15, 52, 0, 3); - countBtn.SetAlpha(180); - - GuiTooltip listBtnTT(tr("Display as a list")); - if (Settings.wsprompt == yes) - listBtnTT.SetWidescreen(CFG.widescreen); - listBtnTT.SetAlpha(THEME.tooltipAlpha); - GuiImage listBtnImg(&imgarrangeList); - listBtnImg.SetWidescreen(CFG.widescreen); -// GuiImage listBtnImg_g(listBtnImg); listBtnImg_g.SetGrayscale(); - GuiImage listBtnImg_g(&imgarrangeList_gray); - if(listBtnImg_g.GetImage() == NULL) { listBtnImg_g = listBtnImg; listBtnImg_g.SetGrayscale();} - listBtnImg_g.SetWidescreen(CFG.widescreen); - GuiButton listBtn(&listBtnImg_g,&listBtnImg_g, ALIGN_LEFT, ALIGN_TOP, THEME.gamelist_list_x, THEME.gamelist_list_y, &trigA, &btnSoundOver, btnClick2,1, &listBtnTT, 15, 52, 1, 3); - listBtn.SetAlpha(180); - - GuiTooltip gridBtnTT(tr("Display as a grid")); - if (Settings.wsprompt == yes) - gridBtnTT.SetWidescreen(CFG.widescreen); - gridBtnTT.SetAlpha(THEME.tooltipAlpha); - GuiImage gridBtnImg(&imgarrangeGrid); - gridBtnImg.SetWidescreen(CFG.widescreen); -// GuiImage gridBtnImg_g(gridBtnImg); gridBtnImg_g.SetGrayscale(); - GuiImage gridBtnImg_g(&imgarrangeGrid_gray); - if(gridBtnImg_g.GetImage() == NULL) { gridBtnImg_g = gridBtnImg; gridBtnImg_g.SetGrayscale();} - gridBtnImg_g.SetWidescreen(CFG.widescreen); - GuiButton gridBtn(&gridBtnImg_g,&gridBtnImg_g, ALIGN_LEFT, ALIGN_TOP, THEME.gamelist_grid_x, THEME.gamelist_grid_y, &trigA, &btnSoundOver, btnClick2,1, &gridBtnTT, 15, 52, 1, 3); - gridBtn.SetAlpha(180); - - GuiTooltip carouselBtnTT(tr("Display as a carousel")); - if (Settings.wsprompt == yes) - carouselBtnTT.SetWidescreen(CFG.widescreen); - carouselBtnTT.SetAlpha(THEME.tooltipAlpha); - GuiImage carouselBtnImg(&imgarrangeCarousel); - carouselBtnImg.SetWidescreen(CFG.widescreen); -// GuiImage carouselBtnImg_g(carouselBtnImg); carouselBtnImg_g.SetGrayscale(); - GuiImage carouselBtnImg_g(&imgarrangeCarousel_gray); - if(carouselBtnImg_g.GetImage() == NULL) { carouselBtnImg_g = carouselBtnImg; carouselBtnImg_g.SetGrayscale();} - carouselBtnImg_g.SetWidescreen(CFG.widescreen); - GuiButton carouselBtn(&carouselBtnImg_g,&carouselBtnImg_g, ALIGN_LEFT, ALIGN_TOP, THEME.gamelist_carousel_x, THEME.gamelist_carousel_y, &trigA, &btnSoundOver, btnClick2,1, &carouselBtnTT, 15, 52, 1, 3); - carouselBtn.SetAlpha(180); - - bool canUnlock = (Settings.parentalcontrol == 0 && Settings.parental.enabled == 1); - - GuiTooltip lockBtnTT(canUnlock ? tr("Unlock Parental Control") : tr("Parental Control disabled")); - if (Settings.wsprompt == yes) - lockBtnTT.SetWidescreen(CFG.widescreen); - lockBtnTT.SetAlpha(THEME.tooltipAlpha); - GuiImage lockBtnImg(&imgLock); - lockBtnImg.SetWidescreen(CFG.widescreen); - GuiImage lockBtnImg_g(&imgLock_gray); - if(lockBtnImg_g.GetImage() == NULL) { lockBtnImg_g = lockBtnImg; lockBtnImg_g.SetGrayscale(); } - lockBtnImg_g.SetWidescreen(CFG.widescreen); - GuiButton lockBtn(&lockBtnImg_g, &lockBtnImg_g, ALIGN_LEFT, ALIGN_TOP, THEME.gamelist_lock_x, THEME.gamelist_lock_y, &trigA, &btnSoundOver, btnClick2,1, &lockBtnTT, 15, 52, 1, 3); - lockBtn.SetAlpha(180); - - GuiTooltip unlockBtnTT(tr("Enable Parental Control")); - if (Settings.wsprompt == yes) - unlockBtnTT.SetWidescreen(CFG.widescreen); - unlockBtnTT.SetAlpha(THEME.tooltipAlpha); - GuiImage unlockBtnImg(&imgUnlock); - unlockBtnImg.SetWidescreen(CFG.widescreen); - GuiImage unlockBtnImg_g(&imgUnlock_gray); - if(unlockBtnImg_g.GetImage() == NULL) { unlockBtnImg_g = unlockBtnImg; unlockBtnImg_g.SetGrayscale(); } - unlockBtnImg_g.SetWidescreen(CFG.widescreen); - - if (canUnlock && Settings.godmode) - { - lockBtn.SetImage(&unlockBtnImg_g); - lockBtn.SetImageOver(&unlockBtnImg_g); - lockBtn.SetToolTip(&unlockBtnTT, 15, 52, 1, 3); - } - -/* - GuiButton unlockBtn(&unlockBtnImg_g, &unlockBtnImg_g, ALIGN_LEFT, ALIGN_TOP, THEME.gamelist_lock_x, THEME.gamelist_lock_y, &trigA, &btnSoundOver, btnClick2,1, &lockBtnTT, 15, 52, 1, 3); - unlockBtn.SetAlpha(180); -*/ - - GuiTooltip dvdBtnTT(tr("Mount DVD drive")); - if (Settings.wsprompt == yes) - dvdBtnTT.SetWidescreen(CFG.widescreen); - dvdBtnTT.SetAlpha(THEME.tooltipAlpha); - GuiImage dvdBtnImg(&imgdvd); - dvdBtnImg.SetWidescreen(CFG.widescreen); - GuiImage dvdBtnImg_g(dvdBtnImg); //dvdBtnImg_g.SetGrayscale(); -// GuiImage carouselBtnImg_g(&imgarrangeCarousel_gray); - dvdBtnImg_g.SetWidescreen(CFG.widescreen); - GuiButton dvdBtn(&dvdBtnImg_g,&dvdBtnImg_g, ALIGN_LEFT, ALIGN_TOP, THEME.gamelist_dvd_x, THEME.gamelist_dvd_y, &trigA, &btnSoundOver, btnClick2,1, &dvdBtnTT, 15, 52, 1, 3); - dvdBtn.SetAlpha(180); - - GuiTooltip homebrewBtnTT(tr("Homebrew Launcher")); - if (Settings.wsprompt == yes) - homebrewBtnTT.SetWidescreen(CFG.widescreen); - homebrewBtnTT.SetAlpha(THEME.tooltipAlpha); - GuiImage homebrewImg(&homebrewImgData); - GuiImage homebrewImgOver(&homebrewImgDataOver); - homebrewImg.SetWidescreen(CFG.widescreen); - homebrewImgOver.SetWidescreen(CFG.widescreen); - GuiButton homebrewBtn(&homebrewImg,&homebrewImgOver, ALIGN_LEFT, ALIGN_TOP, THEME.homebrew_x, THEME.homebrew_y, &trigA, &btnSoundOver, btnClick2,1,&homebrewBtnTT,15,-30,1,5); - - if (Settings.fave) { - favoriteBtn.SetImage(&favoriteBtnImg); - favoriteBtn.SetImageOver(&favoriteBtnImg); - favoriteBtn.SetAlpha(255); - } - static bool show_searchwindow = false; - if(gameFilter && *gameFilter) - { - if(show_searchwindow && gameCnt==1) - show_searchwindow = false; - if(!show_searchwindow) - searchBtn.SetEffect(EFFECT_PULSE, 10, 105); - searchBtn.SetImage(&searchBtnImg); - searchBtn.SetImageOver(&searchBtnImg); - searchBtn.SetAlpha(255); - } - if (Settings.sort==all) { - abcBtn.SetImage(&abcBtnImg); - abcBtn.SetImageOver(&abcBtnImg); - abcBtn.SetAlpha(255); - } else if (Settings.sort==pcount) { - countBtn.SetImage(&countBtnImg); - countBtn.SetImageOver(&countBtnImg); - countBtn.SetAlpha(255); - } - if (Settings.gameDisplay==list) { - listBtn.SetImage(&listBtnImg); - listBtn.SetImageOver(&listBtnImg); - listBtn.SetAlpha(255); - } else if (Settings.gameDisplay==grid) { - gridBtn.SetImage(&gridBtnImg); - gridBtn.SetImageOver(&gridBtnImg); - gridBtn.SetAlpha(255); - } else if (Settings.gameDisplay==carousel) { - carouselBtn.SetImage(&carouselBtnImg); - carouselBtn.SetImageOver(&carouselBtnImg); - carouselBtn.SetAlpha(255); - } - - if (Settings.gameDisplay==list) { - favoriteBtn.SetPosition(THEME.gamelist_favorite_x, THEME.gamelist_favorite_y); - searchBtn.SetPosition(THEME.gamelist_search_x, THEME.gamelist_search_y); - abcBtn.SetPosition(THEME.gamelist_abc_x, THEME.gamelist_abc_y); - countBtn.SetPosition(THEME.gamelist_count_x, THEME.gamelist_count_y); - listBtn.SetPosition(THEME.gamelist_list_x, THEME.gamelist_list_y); - gridBtn.SetPosition(THEME.gamelist_grid_x, THEME.gamelist_grid_y); - carouselBtn.SetPosition(THEME.gamelist_carousel_x, THEME.gamelist_carousel_y); - lockBtn.SetPosition(THEME.gamelist_lock_x, THEME.gamelist_lock_y); - dvdBtn.SetPosition(THEME.gamelist_dvd_x, THEME.gamelist_dvd_y); - } else if(Settings.gameDisplay==grid) { - favoriteBtn.SetPosition(THEME.gamegrid_favorite_x, THEME.gamegrid_favorite_y); - searchBtn.SetPosition(THEME.gamegrid_search_x, THEME.gamegrid_search_y); - abcBtn.SetPosition(THEME.gamegrid_abc_x, THEME.gamegrid_abc_y); - countBtn.SetPosition(THEME.gamegrid_count_x, THEME.gamegrid_count_y); - listBtn.SetPosition(THEME.gamegrid_list_x, THEME.gamegrid_list_y); - gridBtn.SetPosition(THEME.gamegrid_grid_x, THEME.gamegrid_grid_y); - carouselBtn.SetPosition(THEME.gamegrid_carousel_x, THEME.gamegrid_carousel_y); - lockBtn.SetPosition(THEME.gamegrid_lock_x, THEME.gamegrid_lock_y); - dvdBtn.SetPosition(THEME.gamegrid_dvd_x, THEME.gamegrid_dvd_y); - } else if(Settings.gameDisplay==carousel) { - favoriteBtn.SetPosition(THEME.gamecarousel_favorite_x, THEME.gamecarousel_favorite_y); - searchBtn.SetPosition(THEME.gamecarousel_search_x, THEME.gamecarousel_favorite_y); - abcBtn.SetPosition(THEME.gamecarousel_abc_x, THEME.gamecarousel_abc_y); - countBtn.SetPosition(THEME.gamecarousel_count_x, THEME.gamecarousel_count_y); - listBtn.SetPosition(THEME.gamecarousel_list_x, THEME.gamecarousel_list_y); - gridBtn.SetPosition(THEME.gamecarousel_grid_x, THEME.gamecarousel_grid_y); - carouselBtn.SetPosition(THEME.gamecarousel_carousel_x, THEME.gamecarousel_carousel_y); - lockBtn.SetPosition(THEME.gamecarousel_lock_x, THEME.gamecarousel_lock_y); - dvdBtn.SetPosition(THEME.gamecarousel_dvd_x, THEME.gamecarousel_dvd_y); - } - - - //Downloading Covers - GuiTooltip DownloadBtnTT(tr("Click to Download Covers")); - if (Settings.wsprompt == yes) - DownloadBtnTT.SetWidescreen(CFG.widescreen); - DownloadBtnTT.SetAlpha(THEME.tooltipAlpha); - GuiButton DownloadBtn(0,0); - DownloadBtn.SetAlignment(ALIGN_LEFT, ALIGN_TOP); - DownloadBtn.SetPosition(THEME.covers_x,THEME.covers_y); - - GuiTooltip IDBtnTT(tr("Click to change game ID")); - if (Settings.wsprompt == yes) - IDBtnTT.SetWidescreen(CFG.widescreen); - IDBtnTT.SetAlpha(THEME.tooltipAlpha); - GuiButton idBtn(0,0); - idBtn.SetAlignment(ALIGN_LEFT, ALIGN_TOP); - idBtn.SetPosition(THEME.id_x,THEME.id_y); - - if (Settings.godmode == 1 && mountMethod!=3) {//only make the button have trigger & tooltip if in godmode - DownloadBtn.SetSoundOver(&btnSoundOver); - DownloadBtn.SetTrigger(&trigA); - DownloadBtn.SetTrigger(&trig1); - DownloadBtn.SetToolTip(&DownloadBtnTT,205,-30); - - idBtn.SetSoundOver(&btnSoundOver); - idBtn.SetTrigger(&trigA); - idBtn.SetToolTip(&IDBtnTT,205,-30); - - } else - { - DownloadBtn.SetRumble(false); - idBtn.SetRumble(false); - } - - GuiGameBrowser * gameBrowser = NULL; - GuiGameGrid * gameGrid = NULL; - GuiGameCarousel * gameCarousel = NULL; - if (Settings.gameDisplay==list) { - gameBrowser = new GuiGameBrowser(THEME.gamelist_w, THEME.gamelist_h, gameList, gameCnt, CFG.theme_path, bg_options_png, startat, offset); - gameBrowser->SetPosition(THEME.gamelist_x, THEME.gamelist_y); - gameBrowser->SetAlignment(ALIGN_LEFT, ALIGN_CENTRE); - } else if (Settings.gameDisplay==grid) { - gameGrid = new GuiGameGrid(THEME.gamegrid_w,THEME.gamegrid_h, gameList, gameCnt, CFG.theme_path, bg_options_png, 0, 0); - gameGrid->SetPosition(THEME.gamegrid_x,THEME.gamegrid_y); - gameGrid->SetAlignment(ALIGN_LEFT, ALIGN_CENTRE); - } else if (Settings.gameDisplay==carousel) { - //GuiGameCarousel gameCarousel(THEME.gamecarousel_w, THEME.gamecarousel_h, gameList, gameCnt, CFG.theme_path, bg_options_png, startat, offset); - gameCarousel = new GuiGameCarousel(640, 400, gameList, gameCnt, CFG.theme_path, bg_options_png, startat, offset); - gameCarousel->SetPosition(THEME.gamecarousel_x,THEME.gamecarousel_y); - gameCarousel->SetAlignment(ALIGN_LEFT, ALIGN_CENTRE); - } - - GuiText clockTimeBack("88:88", 40, (GXColor) {THEME.clock.r, THEME.clock.g, THEME.clock.b, THEME.clock.a/6}); - clockTimeBack.SetAlignment(THEME.clock_align, ALIGN_TOP); - clockTimeBack.SetPosition(THEME.clock_x, THEME.clock_y); - clockTimeBack.SetFont(fontClock); - GuiText clockTime(theTime, 40, THEME.clock); - clockTime.SetAlignment(THEME.clock_align, ALIGN_TOP); - clockTime.SetPosition(THEME.clock_x, THEME.clock_y); - clockTime.SetFont(fontClock); - - HaltGui(); - GuiWindow w(screenwidth, screenheight); - - if (THEME.show_hddinfo == -1 || THEME.show_hddinfo == 1) { //force show hdd info - w.Append(&usedSpaceTxt); - } - if (THEME.show_gamecount == -1 || THEME.show_gamecount == 1) { //force show game cnt info - w.Append(&gamecntBtn); - } - w.Append(&sdcardBtn); - w.Append(&poweroffBtn); - w.Append(&gameInfo); - if (Settings.godmode && load_from_fs != PART_FS_NTFS) - w.Append(&installBtn); - w.Append(&homeBtn); - w.Append(&settingsBtn); - w.Append(&DownloadBtn); - w.Append(&idBtn); - w.Append(&screenShotBtn); - - - // Begin Toolbar - w.Append(&favoriteBtn); - Toolbar[0] = &favoriteBtn; - w.Append(&searchBtn); - Toolbar[1] = &searchBtn; - w.Append(&abcBtn); - Toolbar[2] = &abcBtn; - w.Append(&countBtn); - Toolbar[3] = &countBtn; - w.Append(&listBtn); - Toolbar[4] = &listBtn; - w.Append(&gridBtn); - Toolbar[5] = &gridBtn; - w.Append(&carouselBtn); - Toolbar[6] = &carouselBtn; - w.Append(&lockBtn); - Toolbar[7] = &lockBtn; - w.Append(&dvdBtn); - Toolbar[8] = &dvdBtn; - w.SetUpdateCallback(DiscListWinUpdateCallback); - // End Toolbar - - - - if (Settings.godmode == 1) - w.Append(&homebrewBtn); - - if ((Settings.hddinfo == hr12)||(Settings.hddinfo == hr24)) { - w.Append(&clockTimeBack); - w.Append(&clockTime); - } - - if (Settings.gameDisplay==list) { - mainWindow->Append(gameBrowser); - } - if (Settings.gameDisplay==grid) { - mainWindow->Append(gameGrid); - } - if (Settings.gameDisplay==carousel) { - mainWindow->Append(gameCarousel); - } - mainWindow->Append(&w); - - GuiSearchBar *searchBar=NULL; - if(show_searchwindow) { - searchBar = new GuiSearchBar(gameFilterNextList); - if(searchBar) - mainWindow->Append(searchBar); - } - - ResumeGui(); - -// ShowMemInfo(); - - while (menu == MENU_NONE) { - - if (idiotFlag==1) { - gprintf("\n\tIdiot flag"); - char idiotBuffer[200]; - snprintf(idiotBuffer, sizeof(idiotBuffer), "%s (%s). %s",tr("You have attempted to load a bad image"), - idiotChar,tr("Most likely it has dimensions that are not evenly divisible by 4.")); - - int deleteImg = WindowPrompt(0,idiotBuffer,tr("OK"),tr("Delete")); - if (deleteImg==0) { - snprintf(idiotBuffer, sizeof(idiotBuffer), "%s %s.",tr("You are about to delete "), idiotChar); - deleteImg = WindowPrompt(tr("Confirm"),idiotBuffer,tr("Delete"),tr("Cancel")); - if (deleteImg==1) { - remove(idiotChar); - } - } - idiotFlag=-1; - } - - WDVD_GetCoverStatus(&covert);//for detecting if i disc has been inserted - - // if the idiot is showing favorites and don't have any - if (Settings.fave && !gameCnt) { - WindowPrompt(tr("No Favorites"),tr("You are choosing to display favorites and you do not have any selected."),tr("Back")); - Settings.fave=!Settings.fave; - if (isInserted(bootDevice)) { - cfg_save_global(); - } - __Menu_GetEntries(); - menu = MENU_DISCLIST; - break; - } - - //CLOCK - time_t rawtime = time(0); //this fixes code dump caused by the clock - if (((Settings.hddinfo == hr12)||(Settings.hddinfo == hr24)) && rawtime != lastrawtime) { - lastrawtime = rawtime; - timeinfo = localtime (&rawtime); - if (dataed < 1) { - if (Settings.hddinfo == hr12) { - if (rawtime & 1) - strftime(theTime, sizeof(theTime), "%I:%M", timeinfo); - else - strftime(theTime, sizeof(theTime), "%I %M", timeinfo); - } - if (Settings.hddinfo == hr24) { - if (rawtime & 1) - strftime(theTime, sizeof(theTime), "%H:%M", timeinfo); - else - strftime(theTime, sizeof(theTime), "%H %M", timeinfo); - } - clockTime.SetText(theTime); - - } else if (dataed > 0) { - - clockTime.SetTextf("%i", (dataed-1)); - } - - } - - if ((datagB<1)&&(Settings.cios==1)&&(Settings.video == ntsc)&&(Settings.hddinfo == hr12)&&(Settings.qboot==1)&&(Settings.wsprompt==0)&&(Settings.language==ger)&&(Settings.tooltips==0)){dataed=1;dataef=1;}if (dataef==1){if (cosa>7){cosa=1;}datag++;if (sina==3){wiiBtn.SetAlignment(ALIGN_LEFT,ALIGN_BOTTOM);wiiBtnImg.SetAngle(0);if(datag>163){datag=1;}else if (datag<62){wiiBtn.SetPosition(((cosa)*70),(-2*(datag)+120));}else if(62<=datag){wiiBtn.SetPosition(((cosa)*70),((datag*2)-130));}if (datag>162){wiiBtn.SetPosition(700,700);w.Remove(&wiiBtn);datagB=2;cosa++;sina=lastrawtime%4;}w.Append(&wiiBtn);}if (sina==2){wiiBtn.SetAlignment(ALIGN_RIGHT,ALIGN_TOP);wiiBtnImg.SetAngle(270);if(datag>163){datag=1;}else if (datag<62){wiiBtn.SetPosition(((-2*(datag)+130)),((cosa)*50));}else if(62<=datag){wiiBtn.SetPosition((2*(datag)-120),((cosa)*50));}if (datag>162){wiiBtn.SetPosition(700,700);w.Remove(&wiiBtn);datagB=2;cosa++;sina=lastrawtime%4;}w.Append(&wiiBtn);}if (sina==1){wiiBtn.SetAlignment(ALIGN_TOP,ALIGN_LEFT);wiiBtnImg.SetAngle(180);if(datag>163){datag=1;}else if (datag<62){wiiBtn.SetPosition(((cosa)*70),(2*(datag)-120));}else if(62<=datag){wiiBtn.SetPosition(((cosa)*70),(-2*(datag)+130));}if (datag>162){wiiBtn.SetPosition(700,700);w.Remove(&wiiBtn);datagB=2;cosa++;sina=lastrawtime%4;}w.Append(&wiiBtn);}if (sina==0){wiiBtn.SetAlignment(ALIGN_TOP,ALIGN_LEFT);wiiBtnImg.SetAngle(90);if(datag>163){datag=1;}else if (datag<62){wiiBtn.SetPosition(((2*(datag)-130)),((cosa)*50));}else if(62<=datag){wiiBtn.SetPosition((-2*(datag)+120),((cosa)*50));}if (datag>162){wiiBtn.SetPosition(700,700);w.Remove(&wiiBtn);datagB=2;cosa++;sina=lastrawtime%4;}w.Append(&wiiBtn);}} - // respond to button presses - if (shutdown == 1) { - gprintf("\n\tshutdown"); - Sys_Shutdown(); - } - if (reset == 1) - Sys_Reboot(); - - if (updateavailable == true) { - gprintf("\n\tUpdate Available"); - HaltGui(); - GuiWindow ww(640,480); - w.SetState(STATE_DISABLED); - mainWindow->Append(&ww); - ResumeGui(); - ProgressUpdateWindow(); - updateavailable = false; - mainWindow->Remove(&ww); - w.SetState(STATE_DEFAULT); - menu = MENU_DISCLIST; - } - - if (poweroffBtn.GetState() == STATE_CLICKED) { - - - gprintf("\n\tpoweroffBtn clicked"); - choice = WindowPrompt(tr("How to Shutdown?"),0,tr("Full Shutdown"), tr("Shutdown to Idle"), tr("Cancel")); - if (choice == 2) { - Sys_ShutdownToIdel(); - } else if (choice == 1) { - Sys_ShutdownToStandby(); - } else { - poweroffBtn.ResetState(); - if (Settings.gameDisplay==list) { - gameBrowser->SetFocus(1); - } else if (Settings.gameDisplay==grid) { - gameGrid->SetFocus(1); - } else if (Settings.gameDisplay==carousel) { - gameCarousel->SetFocus(1); - } - } - - } else if (gamecntBtn.GetState() == STATE_CLICKED && mountMethod!=3) { - gprintf("\n\tgameCntBtn clicked"); - gamecntBtn.ResetState(); - char linebuf[150]; - snprintf(linebuf, sizeof(linebuf), "%s %sGameList ?",tr("Save Game List to"), Settings.update_path); - choice = WindowPrompt(0,linebuf,"TXT","CSV",tr("Back")); - if (choice) { - if (save_gamelist(choice-1)) - WindowPrompt(0,tr("Saved"),tr("OK")); - else - WindowPrompt(tr("Error"),tr("Could not save."),tr("OK")); - } - menu = MENU_DISCLIST; - break; - - } - else if (screenShotBtn.GetState() == STATE_CLICKED) { - gprintf("\n\tscreenShotBtn clicked"); - screenShotBtn.ResetState(); - ScreenShot(); - gprintf("...It's easy, mmmmmmKay"); - - - }else if (homeBtn.GetState() == STATE_CLICKED) { - gprintf("\n\thomeBtn clicked"); - bgMusic->Pause(); - choice = WindowExitPrompt(); - bgMusic->Resume(); - - if (choice == 3) { - Sys_LoadMenu(); // Back to System Menu - } else if (choice == 2) { - Sys_BackToLoader(); - } else { - homeBtn.ResetState(); - if (Settings.gameDisplay==list) { - gameBrowser->SetFocus(1); - } else if (Settings.gameDisplay==grid) { - gameGrid->SetFocus(1); - } else if (Settings.gameDisplay==carousel) { - gameCarousel->SetFocus(1); - } - } - - } else if (wiiBtn.GetState() == STATE_CLICKED) { - gprintf("\n\twiiBtn clicked"); - - dataed++; - wiiBtn.ResetState(); - if (Settings.gameDisplay==list) { - gameBrowser->SetFocus(1); - } else if (Settings.gameDisplay==grid) { - gameGrid->SetFocus(1); - } else if (Settings.gameDisplay==carousel) { - gameCarousel->SetFocus(1); - } - } else if (installBtn.GetState() == STATE_CLICKED) { - gprintf("\n\tinstallBtn clicked"); - choice = WindowPrompt(tr("Install a game"),0,tr("Yes"),tr("No")); - if (choice == 1) { - menu = MENU_INSTALL; - break; - } else { - installBtn.ResetState(); - if (Settings.gameDisplay==list) { - gameBrowser->SetFocus(1); - } else if (Settings.gameDisplay==grid) { - gameGrid->SetFocus(1); - } else if (Settings.gameDisplay==carousel) { - gameCarousel->SetFocus(1); - } - } - }else if ((covert & 0x2)&&(covert!=covertOld)) { - gprintf("\n\tNew Disc Detected"); - choice = WindowPrompt(tr("New Disc Detected"),0,tr("Install"),tr("Mount DVD drive"),tr("Cancel")); - if (choice == 1) { - if (load_from_fs == PART_FS_NTFS) { - WindowPrompt(tr("Install not possible"), tr("You are using NTFS filesystem. Due to possible write errors to a NTFS partition, installing a game is not possible."), tr("OK")); - } else { - menu = MENU_INSTALL; - break; - } - } - else if (choice ==2) - { - dvdBtn.SetState(STATE_CLICKED); - }else { - if (Settings.gameDisplay==list) { - gameBrowser->SetFocus(1); - } else if (Settings.gameDisplay==grid) { - gameGrid->SetFocus(1); - } else if (Settings.gameDisplay==carousel) { - gameCarousel->SetFocus(1); - } - } - } - - else if (sdcardBtn.GetState() == STATE_CLICKED) { - gprintf("\n\tsdCardBtn Clicked"); - SDCard_deInit(); - SDCard_Init(); - if (Settings.gameDisplay==list) { - startat = gameBrowser->GetSelectedOption(); - offset = gameBrowser->GetOffset(); - } else if (Settings.gameDisplay==grid) { - startat = gameGrid->GetSelectedOption(); - offset = gameGrid->GetOffset(); - } else if (Settings.gameDisplay==carousel) { - startat = gameCarousel->GetSelectedOption(); - offset = gameCarousel->GetOffset(); - } - if (isInserted(bootDevice)) { - HaltGui(); // to fix endless rumble when clicking on the SD icon when rumble is disabled because rumble is set to on in Global_Default() - CFG_Load(); - ResumeGui(); - } - sdcardBtn.ResetState(); - menu = MENU_DISCLIST; - break; - } - - else if (DownloadBtn.GetState() == STATE_CLICKED) { - gprintf("\n\tDownloadBtn Clicked"); - if (isInserted(bootDevice)) { - choice = WindowPrompt(tr("Cover Download"), 0, tr("Normal Covers"), tr("3D Covers"), tr("Disc Images"), tr("Back")); // ask for download choice - if (choice != 0) { - int choice2 = choice; - bool missing; - missing = SearchMissingImages(choice2); - if (IsNetworkInit() == false && missing == true) { - WindowPrompt(tr("Network init error"), 0, tr("OK")); - } else { - if (GetMissingFiles() != NULL && cntMissFiles > 0) { - char tempCnt[40]; - sprintf(tempCnt,"%i %s",cntMissFiles,tr("Missing files")); - if (choice!=3)choice = WindowPrompt(tr("Download Boxart image?"),tempCnt,tr("Yes"),tr("No")); - else if (choice==3)choice = WindowPrompt(tr("Download Discart image?"),tempCnt,tr("Yes"),tr("No")); - if (choice == 1) { - ret = ProgressDownloadWindow(choice2); - if (ret == 0) { - WindowPrompt(tr("Download finished"),0,tr("OK")); - } else { - sprintf(tempCnt,"%i %s",ret,tr("files not found on the server!")); - WindowPrompt(tr("Download finished"),tempCnt,tr("OK")); - } - } - } - } - } - } else { - WindowPrompt(tr("No SD-Card inserted!"), tr("Insert an SD-Card to download images."), tr("OK")); - } - menu = MENU_DISCLIST; - DownloadBtn.ResetState(); - if (Settings.gameDisplay==list) { - gameBrowser->SetFocus(1); - } else if (Settings.gameDisplay==grid) { - gameGrid->SetFocus(1); - } else if (Settings.gameDisplay==carousel) { - gameCarousel->SetFocus(1); - } - }//end download - - else if (settingsBtn.GetState() == STATE_CLICKED) { - gprintf("\n\tsettingsBtn Clicked"); - if (Settings.gameDisplay==list) { - startat = gameBrowser->GetSelectedOption(); - offset = gameBrowser->GetOffset(); - } else if (Settings.gameDisplay==grid) { - startat = gameGrid->GetSelectedOption(); - offset = gameGrid->GetOffset(); - } else if (Settings.gameDisplay==carousel) { - startat = gameCarousel->GetSelectedOption(); - offset = gameCarousel->GetOffset(); - } - menu = MENU_SETTINGS; - break; - - } - - else if (favoriteBtn.GetState() == STATE_CLICKED) { - gprintf("\n\tfavoriteBtn Clicked"); - Settings.fave=!Settings.fave; - if (isInserted(bootDevice)) { - cfg_save_global(); - } - __Menu_GetEntries(); - menu = MENU_DISCLIST; - break; - - } - - else if (searchBtn.GetState() == STATE_CLICKED && mountMethod!=3) { - - gprintf("\n\tsearchBtn Clicked"); - show_searchwindow=!show_searchwindow; - HaltGui(); - if(searchBar) - { - mainWindow->Remove(searchBar); - delete searchBar; - searchBar = NULL; - } - if(show_searchwindow) - { - if(gameFilter && *gameFilter) - { - searchBtn.StopEffect(); - searchBtn.SetEffectGrow(); - } - searchBar = new GuiSearchBar(gameFilterNextList); - if(searchBar) - mainWindow->Append(searchBar); - } - else - { - if(gameFilter && *gameFilter) - searchBtn.SetEffect(EFFECT_PULSE, 10, 105); - } - searchBtn.ResetState(); - ResumeGui(); - } - - else if (searchBar && (searchChar=searchBar->GetClicked())) { - if(searchChar > 27) - { - int len = gameFilter ? wcslen(gameFilter) : 0; - wchar_t newFilter[len+2]; - if(gameFilter) - wcscpy(newFilter, gameFilter); - newFilter[len] = searchChar; - newFilter[len+1] = 0; - - - __Menu_GetEntries(0, newFilter); - menu = MENU_DISCLIST; - break; - } - else if(searchChar == 7) // Close - { - show_searchwindow=false; - HaltGui(); - if(searchBar) - { - mainWindow->Remove(searchBar); - delete searchBar; - searchBar = NULL; - } - if(gameFilter && *gameFilter) - { - searchBtn.SetEffect(EFFECT_PULSE, 10, 105); - searchBtn.SetImage(&searchBtnImg); - searchBtn.SetImageOver(&searchBtnImg); - searchBtn.SetAlpha(255); - } - else - { - searchBtn.StopEffect(); - searchBtn.SetEffectGrow(); - searchBtn.SetImage(&searchBtnImg_g); - searchBtn.SetImageOver(&searchBtnImg_g); - searchBtn.SetAlpha(180); - } - - ResumeGui(); - } - else if(searchChar == 8) // Backspace - { - __Menu_GetEntries(0, gameFilterPrev); - menu = MENU_DISCLIST; - break; - } - - } - - else if (abcBtn.GetState() == STATE_CLICKED) { - gprintf("\n\tabcBtn clicked"); - if (Settings.sort != all) { - Settings.sort=all; - if (isInserted(bootDevice)) { - cfg_save_global(); - } - __Menu_GetEntries(); - - menu = MENU_DISCLIST; - break; - } - abcBtn.ResetState(); - } - - else if (countBtn.GetState() == STATE_CLICKED) { - gprintf("\n\tcountBtn Clicked"); - if (Settings.sort != pcount) { - Settings.sort=pcount; - //if(isSdInserted()) { - if (isInserted(bootDevice)) { - cfg_save_global(); - } - __Menu_GetEntries(); - - menu = MENU_DISCLIST; - break; - } - countBtn.ResetState(); - - } - - else if (listBtn.GetState() == STATE_CLICKED) { - gprintf("\n\tlistBtn Clicked"); - if (Settings.gameDisplay!=list) { - Settings.gameDisplay=list; - menu = MENU_DISCLIST; - if (isInserted(bootDevice)) { - cfg_save_global(); - } - listBtn.ResetState(); - break; - } else { - listBtn.ResetState(); - } - } - - - else if (gridBtn.GetState() == STATE_CLICKED) { - gprintf("\n\tgridBtn Clicked"); - if (Settings.gameDisplay!=grid) { - - Settings.gameDisplay=grid; - menu = MENU_DISCLIST; - if (isInserted(bootDevice)) { - cfg_save_global(); - } - gridBtn.ResetState(); - break; - } else { - gridBtn.ResetState(); - } - } - - else if (carouselBtn.GetState() == STATE_CLICKED) { - gprintf("\n\tcarouselBtn Clicked"); - if (Settings.gameDisplay!=carousel) { - Settings.gameDisplay=carousel; - menu = MENU_DISCLIST; - if (isInserted(bootDevice)) { - cfg_save_global(); - } - carouselBtn.ResetState(); - break; - } else { - carouselBtn.ResetState(); - } - } - else if (homebrewBtn.GetState() == STATE_CLICKED) { - gprintf("\n\thomebrewBtn Clicked"); - menu = MENU_HOMEBREWBROWSE; - break; - } - else if (gameInfo.GetState() == STATE_CLICKED && mountMethod!=3) { - gprintf("\n\tgameinfo Clicked"); - gameInfo.ResetState(); - if(selectImg1>=0 && selectImg1<(s32)gameCnt) { - gameSelected = selectImg1; - rockout(); - struct discHdr *header = &gameList[selectImg1]; - snprintf (IDfull,sizeof(IDfull),"%c%c%c%c%c%c", header->id[0], header->id[1], header->id[2],header->id[3], header->id[4], header->id[5]); - choice = showGameInfo(IDfull); - rockout(2); - if (choice==2) - homeBtn.SetState(STATE_CLICKED); - if (choice==3) { - menu = MENU_DISCLIST; - break; - } - } - } - else if (lockBtn.GetState() == STATE_CLICKED) { - gprintf("\n\tlockBtn clicked"); - lockBtn.ResetState(); - if (!canUnlock) { - WindowPrompt(tr("Parental Control"), tr("You don't have Parental Control enabled. If you wish to use Parental Control, enable it in the Wii Settings."), tr("OK")); - } else { - if (Settings.godmode) { - if (WindowPrompt(tr("Parental Control"), tr("Are you sure you want to enable Parent Control?"), tr("Yes"), tr("No")) == 1) { - Settings.godmode = 0; - lockBtn.SetImage(&lockBtnImg_g); - lockBtn.SetImageOver(&lockBtnImg_g); - lockBtn.SetToolTip(&lockBtnTT, 15, 52, 1, 3); - - // Retrieve the gamelist again - menu = MENU_DISCLIST; - break; - } - } else { - // Require the user to enter the PIN code - char pin[5]; - memset(&pin, 0, 5); - int ret = OnScreenNumpad((char *) &pin, 5); - - if (ret == 1) { - if (memcmp(pin, Settings.parental.pin, 4) == 0) { - Settings.godmode = 1; - lockBtn.SetImage(&unlockBtnImg_g); - lockBtn.SetImageOver(&unlockBtnImg_g); - lockBtn.SetToolTip(&unlockBtnTT, 15, 52, 1, 3); - - // Retrieve the gamelist again - menu = MENU_DISCLIST; - break; - } else { - WindowPrompt(tr("Parental Control"), tr("Invalid PIN code"), tr("OK")); - } - } - } - } - } - else if (dvdBtn.GetState() == STATE_CLICKED) { - gprintf("\n\tdvdBtn Clicked"); - mountMethodOLD = (mountMethod==3?mountMethod:0); - - mountMethod=DiscMount(dvdheader); - dvdBtn.ResetState(); - - rockout(); - //break; - } - if (Settings.gameDisplay==grid) { - int selectimg; - DownloadBtn.SetSize(0,0); - selectimg = gameGrid->GetSelectedOption(); - gameSelected = gameGrid->GetClickedOption(); - selectImg1=selectimg; - } - - if (Settings.gameDisplay==carousel) { - int selectimg; - DownloadBtn.SetSize(0,0); - selectimg = gameCarousel->GetSelectedOption(); - gameSelected = gameCarousel->GetClickedOption(); - selectImg1=selectimg; - } - if (Settings.gameDisplay==list) { - //Get selected game under cursor - int selectimg; - DownloadBtn.SetSize(160,224); - idBtn.SetSize(100,40); - - selectimg = gameBrowser->GetSelectedOption(); - gameSelected = gameBrowser->GetClickedOption(); - selectImg1=selectimg; - - if (gameSelected > 0) //if click occured - selectimg = gameSelected; - - char gameregion[7]; - if ((selectimg >= 0) && (selectimg < (s32) gameCnt)) { - if (selectimg != selectedold) { - selectedold = selectimg;//update displayed cover, game ID, and region if the selected game changes - struct discHdr *header = &gameList[selectimg]; - snprintf (ID,sizeof(ID),"%c%c%c", header->id[0], header->id[1], header->id[2]); - snprintf (IDfull,sizeof(IDfull),"%s%c%c%c", ID, header->id[3], header->id[4], header->id[5]); - w.Remove(&DownloadBtn); - - if (GameIDTxt) { - w.Remove(&idBtn); - delete GameIDTxt; - GameIDTxt = NULL; - } - if (GameRegionTxt) { - w.Remove(GameRegionTxt); - delete GameRegionTxt; - GameRegionTxt = NULL; - } - - switch (header->id[3]) { - case 'E': - sprintf(gameregion,"NTSC U"); - break; - case 'J': - sprintf(gameregion,"NTSC J"); - break; - case 'W': - sprintf(gameregion,"NTSC T"); - break; - default: - case 'K': - sprintf(gameregion,"NTSC K"); - break; - case 'P': - case 'D': - case 'F': - case 'I': - case 'S': - case 'H': - case 'U': - case 'X': - case 'Y': - case 'Z': - sprintf(gameregion," PAL "); - break; - } - - //load game cover - if (cover) { - delete cover; - cover = NULL; - } - - cover = LoadCoverImage(header); - - if (coverImg) { - delete coverImg; - coverImg = NULL; - } - coverImg = new GuiImage(cover); - coverImg->SetWidescreen(CFG.widescreen); - - DownloadBtn.SetImage(coverImg);// put the new image on the download button - w.Append(&DownloadBtn); - - if ((Settings.sinfo == GameID) || (Settings.sinfo == Both)) { - GameIDTxt = new GuiText(IDfull, 22, THEME.info); - GameIDTxt->SetAlignment(ALIGN_LEFT, ALIGN_TOP); - //GameIDTxt->SetPosition(THEME.id_x,THEME.id_y); - idBtn.SetEffect(EFFECT_FADE, 20); - idBtn.SetLabel(GameIDTxt); - w.Append(&idBtn); - } - //don't try to show region for channels because all the custom channels wont follow the rules - if (((Settings.sinfo == GameRegion) || (Settings.sinfo == Both))&&mountMethod!=3) { - GameRegionTxt = new GuiText(gameregion, 22, THEME.info); - GameRegionTxt->SetAlignment(ALIGN_LEFT, ALIGN_TOP); - GameRegionTxt->SetPosition(THEME.region_x, THEME.region_y); - GameRegionTxt->SetEffect(EFFECT_FADE, 20); - w.Append(GameRegionTxt); - } - } - } - - if (idBtn.GetState() == STATE_CLICKED && mountMethod!=3) { - gprintf("\n\tidBtn Clicked"); - struct discHdr * header = &gameList[gameBrowser->GetSelectedOption()]; - //enter new game ID - char entered[10]; - snprintf(entered, sizeof(entered), "%s", IDfull); - //entered[9] = '\0'; - int result = OnScreenKeyboard(entered, 7,0); - if (result == 1) { - WBFS_ReIDGame(header->id, entered); - //__Menu_GetEntries(); - menu = MENU_DISCLIST; - } - - idBtn.ResetState(); - } - startat=gameBrowser->GetOffset(), offset=startat; - } - - if (((gameSelected >= 0) && (gameSelected < (s32)gameCnt)) - || mountMethod==1 - || mountMethod==2) { - if(searchBar) - { - HaltGui(); - mainWindow->Remove(searchBar); - ResumeGui(); - } - rockout(); - struct discHdr *header = (mountMethod==1||mountMethod==2?dvdheader:&gameList[gameSelected]); - // struct discHdr *header = dvdheader:&gameList[gameSelected]); - if (!mountMethod)//only get this stuff it we are booting a game from USB - { - WBFS_GameSize(header->id, &size); - if (strlen(get_title(header)) < (MAX_CHARACTERS + 3)) { - sprintf(text, "%s", get_title(header)); - } else { - strncpy(text, get_title(header), MAX_CHARACTERS); - text[MAX_CHARACTERS] = '\0'; - strncat(text, "...", 3); - } - } - - //check if alt Dol and gct file is present - FILE *exeFile = NULL; - char nipple[100]; - header = (mountMethod==1||mountMethod==2?dvdheader:&gameList[gameSelected]); //reset header - snprintf (IDfull,sizeof(IDfull),"%c%c%c%c%c%c", header->id[0], header->id[1], header->id[2],header->id[3], header->id[4], header->id[5]); - struct Game_CFG* game_cfg = CFG_get_game_opt(header->id); - - if (game_cfg) { - alternatedol = game_cfg->loadalternatedol; - ocarinaChoice = game_cfg->ocarina; - } else { - alternatedol = off; - ocarinaChoice = Settings.ocarina; - } - - - if (Settings.qboot == yes) { //quickboot game - if (alternatedol == on) { - /* Open dol File and check exist */ - sprintf(nipple, "%s%s.dol",Settings.dolpath,IDfull); - exeFile = fopen (nipple ,"rb"); - if (exeFile==NULL) { - sprintf(nipple, "%s %s",nipple,tr("does not exist!")); - WindowPrompt(tr("Error"),nipple,tr("OK")); - menu = MENU_CHECK; - wiilight(0); - break; - } else { - fclose(exeFile); - } - } - if (ocarinaChoice != off) { - /* Open gct File and check exist */ - sprintf(nipple, "%s%s.gct",Settings.Cheatcodespath,IDfull); - exeFile = fopen (nipple ,"rb"); - if (exeFile==NULL) { - gprintf("\n\ttried to load missing gct."); - sprintf(nipple, "%s %s",nipple,tr("does not exist! Loading game without cheats.")); - WindowPrompt(tr("Error"),nipple,NULL,NULL,NULL,NULL,170); - } else { - fseek (exeFile, 0, SEEK_END); - long size=ftell (exeFile); - rewind (exeFile); - fclose(exeFile); - if (size>MAX_GCT_SIZE) { - gprintf("\n\tgct is too big"); - sprintf(nipple, "%s %s",nipple,tr("contains over 255 lines of code. It will produce unexpected results.")); - WindowPrompt(tr("Error"),nipple,NULL,NULL,NULL,NULL,170); - } - } - - } - - wiilight(0); - if (isInserted(bootDevice)) { - //////////save game play count//////////////// - struct Game_NUM* game_num = CFG_get_game_num(header->id); - - if (game_num) { - favoritevar = game_num->favorite; - playcount = game_num->count; - } else { - favoritevar = 0; - playcount = 0; - } - playcount += 1; - - CFG_save_game_num(header->id); - gprintf("\n\tplaycount for %c%c%c%c%c%c raised to %i",header->id[0],header->id[1],header->id[2],header->id[3],header->id[4],header->id[5],playcount); - - } - menu = MENU_EXIT; - break; - - } - bool returnHere = true;// prompt to start game - while (returnHere) { - returnHere = false; - if (Settings.wiilight != wiilight_forInstall) wiilight(1); - choice = GameWindowPrompt(); - // header = &gameList[gameSelected]; //reset header - - if (choice == 1) { - if (alternatedol == on) { - /* Open dol File and check exist */ - sprintf(nipple, "%s%s.dol",Settings.dolpath,IDfull); - exeFile = fopen (nipple ,"rb"); - if (exeFile==NULL) { - gprintf("\n\tTried to load alt dol that isn't there"); - sprintf(nipple, "%s %s",nipple,tr("does not exist! You Messed something up, Idiot.")); - WindowPrompt(tr("Error"),nipple,tr("OK")); - menu = MENU_CHECK; - wiilight(0); - break; - } else { - fclose(exeFile); - } - } - if (ocarinaChoice != off) { - /* Open gct File and check exist */ - sprintf(nipple, "%s%s.gct",Settings.Cheatcodespath,IDfull); - exeFile = fopen (nipple ,"rb"); - if (exeFile==NULL) { - gprintf("\n\ttried to load gct file that isn't there"); - sprintf(nipple, "%s %s",nipple,tr("does not exist! Loading game without cheats.")); - WindowPrompt(tr("Error"),nipple,NULL,NULL,NULL,NULL,170); - } else { - fseek (exeFile, 0, SEEK_END); - long size=ftell (exeFile); - rewind (exeFile); - fclose(exeFile); - if (size>MAX_GCT_SIZE) { - gprintf("\n\tgct file is too big"); - sprintf(nipple, "%s %s",nipple,tr("contains over 255 lines of code. It will produce unexpected results.")); - WindowPrompt(tr("Error"),nipple,NULL,NULL,NULL,NULL,170); - } - } - - } - wiilight(0); - returnHere = false; - menu = MENU_EXIT; - - } else if (choice == 2) { - wiilight(0); - HaltGui(); - if (Settings.gameDisplay==list) mainWindow->Remove(gameBrowser); - else if (Settings.gameDisplay==grid) mainWindow->Remove(gameGrid); - else if (Settings.gameDisplay==carousel) mainWindow->Remove(gameCarousel); - mainWindow->Remove(&w); - ResumeGui(); - - //re-evaluate header now in case they changed games while on the game prompt - header = (mountMethod==1||mountMethod==2?dvdheader:&gameList[gameSelected]); - int settret = GameSettings(header); - /* unneeded for now, kept in case database gets a separate language setting - //menu = MENU_DISCLIST; // refresh titles (needed if the language setting has changed) - */ - HaltGui(); - if (Settings.gameDisplay==list) mainWindow->Append(gameBrowser); - else if (Settings.gameDisplay==grid) mainWindow->Append(gameGrid); - else if (Settings.gameDisplay==carousel) mainWindow->Append(gameCarousel); - mainWindow->Append(&w); - ResumeGui(); - if (settret == 1) { //if deleted - menu = MENU_DISCLIST; - break; - } - returnHere = true; - rockout(2); - } - - else if (choice == 3 && !mountMethod) { //WBFS renaming - wiilight(0); - //re-evaluate header now in case they changed games while on the game prompt - header = &gameList[gameSelected]; - - //enter new game title - char entered[60]; - snprintf(entered, sizeof(entered), "%s", get_title(header)); - entered[59] = '\0'; - int result = OnScreenKeyboard(entered, 60,0); - if (result == 1) { - WBFS_RenameGame(header->id, entered); - __Menu_GetEntries(); - menu = MENU_DISCLIST; - } - } else if (choice == 0) { - rockout(2); - if (mountMethod==1||mountMethod==2)mountMethod = mountMethodOLD; - if (Settings.gameDisplay==list) { - gameBrowser->SetFocus(1); - } else if (Settings.gameDisplay==grid) { - gameGrid->SetFocus(1); - } else if (Settings.gameDisplay==carousel) { - gameCarousel->SetFocus(1); - } - } - - - } - if(searchBar) - { - HaltGui(); - mainWindow->Append(searchBar); - ResumeGui(); - } - } - // to skip the first call of windowScreensaver at startup when wiimote is not connected - if (IsWpadConnected()) { - check = 1; - } - - // screensaver is called when wiimote shuts down, depending on the wiimotet idletime - if (!IsWpadConnected() && check !=0 && Settings.screensaver!=0) { - check++; - int screensaverIsOn=0; - if (check==11500) { //to allow time for the wii to turn off and not show the screensaver - screensaverIsOn=WindowScreensaver(); - } - if (screensaverIsOn==1)check=0; - } - covertOld=covert; - } - - // set alt dol default - if (menu == MENU_EXIT && altdoldefault) { - struct discHdr *header = (mountMethod==1||mountMethod==2?dvdheader:&gameList[gameSelected]); - struct Game_CFG* game_cfg = CFG_get_game_opt(header->id); - // use default only if no alt dol was selected manually - if (game_cfg) { - if (game_cfg->alternatedolstart != 0) - altdoldefault = false; - } - if (altdoldefault) { - int autodol = autoSelectDol((char*)header->id, true); - if (autodol>0) { - alternatedol = 2; - alternatedoloffset = autodol; - char temp[20]; - sprintf(temp,"%d",autodol); - } else { - // alt dol menu for games that require more than a single alt dol - int autodol = autoSelectDolMenu((char*)header->id, true); - if (autodol>0) { - alternatedol = 2; - alternatedoloffset = autodol; - } - } - } - } -//no need to close sd here. we still need to get settings and codes and shit - /*if (menu == MENU_EXIT) { - SDCard_deInit(); - }*/ - //if (Settings.gameDisplay==list) {startat=gameBrowser->GetOffset(), offset=startat;}//save the variables in case we are refreshing the list - //gprintf("\n\tstartat:%d offset:%d",startat,offset); - HaltGui(); - mainWindow->RemoveAll(); - mainWindow->Append(bgImg); - delete searchBar; - searchBar = NULL; - delete gameBrowser; - gameBrowser = NULL; - delete gameGrid; - gameGrid = NULL; - delete gameCarousel; - gameCarousel = NULL; - ResumeGui(); - return menu; -} - -void DiscListWinUpdateCallback(void * e) -{ - GuiWindow *w = (GuiWindow *)e; - for(int i=0; i<8; ++i) - { - if(Toolbar[i]->GetState() == STATE_SELECTED) - { - w->Remove(Toolbar[i]); - w->Append(Toolbar[i]); // draw the selected Icon allways on top - break; - } - } -} - -void rockout(int f) { - - - HaltGui(); - int num=(f==2?-1:gameSelected); - - char imgPath[100]; - if ((!(strcasestr(get_title(&gameList[num]),"guitar")|| - strcasestr(get_title(&gameList[num]),"band")|| - strcasestr(get_title(&gameList[num]),"rock")|| - f==1))||mountMethod) { - for (int i = 0; i < 4; i++) - delete pointer[i]; - snprintf(imgPath, sizeof(imgPath), "%splayer1_point.png", CFG.theme_path); - pointer[0] = new GuiImageData(imgPath, player1_point_png); - snprintf(imgPath, sizeof(imgPath), "%splayer2_point.png", CFG.theme_path); - pointer[1] = new GuiImageData(imgPath, player2_point_png); - snprintf(imgPath, sizeof(imgPath), "%splayer3_point.png", CFG.theme_path); - pointer[2] = new GuiImageData(imgPath, player3_point_png); - snprintf(imgPath, sizeof(imgPath), "%splayer4_point.png", CFG.theme_path); - pointer[3] = new GuiImageData(imgPath, player4_point_png); - } else { - - for (int i = 0; i < 4; i++) - delete pointer[i]; - snprintf(imgPath, sizeof(imgPath), "%srplayer1_point.png", CFG.theme_path); - pointer[0] = new GuiImageData(imgPath, rplayer1_point_png); - snprintf(imgPath, sizeof(imgPath), "%srplayer2_point.png", CFG.theme_path); - pointer[1] = new GuiImageData(imgPath, rplayer2_point_png); - snprintf(imgPath, sizeof(imgPath), "%srplayer3_point.png", CFG.theme_path); - pointer[2] = new GuiImageData(imgPath, rplayer3_point_png); - snprintf(imgPath, sizeof(imgPath), "%srplayer4_point.png", CFG.theme_path); - pointer[3] = new GuiImageData(imgPath, rplayer4_point_png); - } - ResumeGui(); -} +#include "menus.h" +#include "fatmounter.h" +#include "usbloader/wdvd.h" +#include "usbloader/getentries.h" +#include "usbloader/wbfs.h" +#include "patches/fst.h" +#include "network/networkops.h" +#include "prompts/gameinfo.h" +#include "prompts/DiscBrowser.h" +#include "settings/Settings.h" +#include "wpad.h" +#include "sys.h" + +#include "libwiigui/gui_gamebrowser.h" +#include "libwiigui/gui_gamegrid.h" +#include "libwiigui/gui_gamecarousel.h" +#include "libwiigui/gui_searchbar.h" + +#define MAX_CHARACTERS 38 +extern u8 * gameScreenTex; +extern struct discHdr *dvdheader; +extern u8 mountMethod; +extern int load_from_fs; +extern s32 gameSelected; +extern GuiText * GameIDTxt; +extern GuiText * GameRegionTxt; +extern const u8 data1; +extern FreeTypeGX *fontClock; +extern bool updateavailable; +extern int cntMissFiles; +extern GuiImageData * cover; +extern GuiImage * coverImg; +extern GuiImageData * pointer[4]; +extern bool altdoldefault; +extern GuiImage * bgImg; + +GuiButton *Toolbar[9]; +int idiotFlag=-1; +char idiotChar[50]; + +void DiscListWinUpdateCallback(void * e); +void rockout(int f = 0); + +static u32 startat = 0; +//static u8 ignoreNewDisc =0;//ignore the new drive when it is detected + +/**************************************************************************** + * MenuDiscList + ***************************************************************************/ +int MenuDiscList() { + + gprintf("\nMenuDiscList()"); + if(checkthreadState == 1) + { + mountMethod = 0; + checkthreadState = 0; + } + __Menu_GetEntries(); + int offset = MIN(startat,gameCnt-1); + startat = offset; + //gprintf("\n\tstartat:%d offset:%d",startat,offset); + int datag = 0; + int datagB =0; + int dataed = -1; + int cosa=0,sina=0; + int selectImg1 = 0; + char ID[4]; + char IDfull[7]; + u32 covert = 0; + char imgPath[100]; + if (!dvdheader) + dvdheader = new struct discHdr; + u8 mountMethodOLD =0; + + WDVD_GetCoverStatus(&covert); + u32 covertOld=covert; + + f32 freespace, used, size = 0.0; + wchar_t searchChar; + //SCREENSAVER + int check = 0; //to skip the first cycle when wiimote isn't completely connected + + datagB=0; + int menu = MENU_NONE, dataef=0; + + + u32 nolist; + char text[MAX_CHARACTERS + 4]; + int choice = 0, selectedold = 100; + s32 ret; + + //CLOCK + struct tm * timeinfo; + char theTime[80]=""; + time_t lastrawtime=0; + + if (mountMethod != 3 && load_from_fs == PART_FS_WBFS) { + WBFS_DiskSpace(&used, &freespace); + } + + if (!gameCnt) { //if there is no list of games to display + nolist = 1; + } + + 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), "%sbutton_install.png", CFG.theme_path); + GuiImageData btnInstall(imgPath, button_install_png); + snprintf(imgPath, sizeof(imgPath), "%sbutton_install_over.png", CFG.theme_path); + GuiImageData btnInstallOver(imgPath, button_install_over_png); + + snprintf(imgPath, sizeof(imgPath), "%ssettings_button.png", CFG.theme_path); + GuiImageData btnSettings(imgPath, settings_button_png); + snprintf(imgPath, sizeof(imgPath), "%ssettings_button_over.png", CFG.theme_path); + GuiImageData btnSettingsOver(imgPath, settings_button_over_png); + GuiImageData dataID(&data1); + + 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); + snprintf(imgPath, sizeof(imgPath), "%sSDcard_over.png", CFG.theme_path); + GuiImageData btnsdcardOver(imgPath, sdcard_over_png); + snprintf(imgPath, sizeof(imgPath), "%sSDcard.png", CFG.theme_path); + GuiImageData btnsdcard(imgPath, sdcard_png); + + + snprintf(imgPath, sizeof(imgPath), "%sfavIcon.png", CFG.theme_path); + GuiImageData imgfavIcon(imgPath, favIcon_png); + snprintf(imgPath, sizeof(imgPath), "%sfavIcon_gray.png", CFG.theme_path); + GuiImageData imgfavIcon_gray(imgPath, NULL); + snprintf(imgPath, sizeof(imgPath), "%ssearchIcon.png", CFG.theme_path); + GuiImageData imgsearchIcon(imgPath, searchIcon_png); + snprintf(imgPath, sizeof(imgPath), "%ssearchIcon_gray.png", CFG.theme_path); + GuiImageData imgsearchIcon_gray(imgPath, NULL); + snprintf(imgPath, sizeof(imgPath), "%sabcIcon.png", CFG.theme_path); + GuiImageData imgabcIcon(imgPath, abcIcon_png); + snprintf(imgPath, sizeof(imgPath), "%sabcIcon_gray.png", CFG.theme_path); + GuiImageData imgabcIcon_gray(imgPath, NULL); + snprintf(imgPath, sizeof(imgPath), "%srankIcon.png", CFG.theme_path); + GuiImageData imgrankIcon(imgPath, rankIcon_png); + snprintf(imgPath, sizeof(imgPath), "%srankIcon_gray.png", CFG.theme_path); + GuiImageData imgrankIcon_gray(imgPath, NULL); + snprintf(imgPath, sizeof(imgPath), "%splayCountIcon.png", CFG.theme_path); + GuiImageData imgplayCountIcon(imgPath, playCountIcon_png); + snprintf(imgPath, sizeof(imgPath), "%splayCountIcon_gray.png", CFG.theme_path); + GuiImageData imgplayCountIcon_gray(imgPath, NULL); + snprintf(imgPath, sizeof(imgPath), "%sarrangeGrid.png", CFG.theme_path); + GuiImageData imgarrangeGrid(imgPath, arrangeGrid_png); + snprintf(imgPath, sizeof(imgPath), "%sarrangeGrid_gray.png", CFG.theme_path); + GuiImageData imgarrangeGrid_gray(imgPath, NULL); + snprintf(imgPath, sizeof(imgPath), "%sarrangeList.png", CFG.theme_path); + GuiImageData imgarrangeList(imgPath, arrangeList_png); + snprintf(imgPath, sizeof(imgPath), "%sarrangeList_gray.png", CFG.theme_path); + GuiImageData imgarrangeList_gray(imgPath, NULL); + snprintf(imgPath, sizeof(imgPath), "%sarrangeCarousel.png", CFG.theme_path); + GuiImageData imgarrangeCarousel(imgPath, arrangeCarousel_png); + snprintf(imgPath, sizeof(imgPath), "%sarrangeCarousel_gray.png", CFG.theme_path); + GuiImageData imgarrangeCarousel_gray(imgPath, NULL); + + snprintf(imgPath, sizeof(imgPath), "%slock.png", CFG.theme_path); + GuiImageData imgLock(imgPath, lock_png); + snprintf(imgPath, sizeof(imgPath), "%slock_gray.png", CFG.theme_path); + GuiImageData imgLock_gray(imgPath, NULL); + snprintf(imgPath, sizeof(imgPath), "%sunlock.png", CFG.theme_path); + GuiImageData imgUnlock(imgPath, unlock_png); + snprintf(imgPath, sizeof(imgPath), "%sunlock_gray.png", CFG.theme_path); + GuiImageData imgUnlock_gray(imgPath, NULL); + + snprintf(imgPath, sizeof(imgPath), "%sdvd.png", CFG.theme_path); + GuiImageData imgdvd(imgPath, dvd_png); + snprintf(imgPath, sizeof(imgPath), "%sdvd_gray.png", CFG.theme_path); + GuiImageData imgdvd_gray(imgPath, NULL); + + snprintf(imgPath, sizeof(imgPath), "%sbrowser.png", CFG.theme_path); + GuiImageData homebrewImgData(imgPath, browser_png); + snprintf(imgPath, sizeof(imgPath), "%sbrowser_over.png", CFG.theme_path); + GuiImageData homebrewImgDataOver(imgPath, browser_over_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, PAD_BUTTON_START); + GuiTrigger trig2; + trig2.SetButtonOnlyTrigger(-1, WPAD_BUTTON_2 | WPAD_CLASSIC_BUTTON_X, 0); + GuiTrigger trig1; + trig1.SetButtonOnlyTrigger(-1, WPAD_BUTTON_1 | WPAD_CLASSIC_BUTTON_Y, 0); + GuiTrigger trigN; + trigN.SetButtonOnlyTrigger(0, 0, 0); + + char spaceinfo[30]; + if (load_from_fs != PART_FS_WBFS) { + memset(spaceinfo, 0, 30); + } else { + if (!strcmp(Settings.db_language,"JA")) { + // needs to be "total...used" for Japanese + sprintf(spaceinfo,(mountMethod!=3?"%.2fGB %s %.2fGB %s":" "),(freespace+used),tr("of"),freespace,tr("free")); + } else { + sprintf(spaceinfo,(mountMethod!=3?"%.2fGB %s %.2fGB %s":" "),freespace,tr("of"),(freespace+used),tr("free")); + } + } + GuiText usedSpaceTxt(spaceinfo, 18, THEME.info); + usedSpaceTxt.SetAlignment(THEME.hddinfo_align, ALIGN_TOP); + usedSpaceTxt.SetPosition(THEME.hddinfo_x, THEME.hddinfo_y); + + char GamesCnt[15]; + sprintf(GamesCnt,"%s: %i",(mountMethod!=3?tr("Games"):tr("Channels")), gameCnt); + GuiText gamecntTxt(GamesCnt, 18, THEME.info); + + GuiButton gamecntBtn(100,18); + gamecntBtn.SetAlignment(THEME.gamecount_align, ALIGN_TOP); + gamecntBtn.SetPosition(THEME.gamecount_x,THEME.gamecount_y); + gamecntBtn.SetLabel(&gamecntTxt); + gamecntBtn.SetEffectGrow(); + if (mountMethod!=3)gamecntBtn.SetTrigger(&trigA); + + GuiTooltip installBtnTT(tr("Install a game")); + if (Settings.wsprompt == yes) + installBtnTT.SetWidescreen(CFG.widescreen); + installBtnTT.SetAlpha(THEME.tooltipAlpha); + GuiImage installBtnImg(&btnInstall); + GuiImage installBtnImgOver(&btnInstallOver); + installBtnImg.SetWidescreen(CFG.widescreen); + installBtnImgOver.SetWidescreen(CFG.widescreen); + + GuiButton installBtn(&installBtnImg, &installBtnImgOver, ALIGN_LEFT, ALIGN_TOP, THEME.install_x, THEME.install_y, mountMethod!=3?&trigA:&trigN, &btnSoundOver, btnClick2, 1, &installBtnTT,24,-30, 0,5); + + + GuiTooltip settingsBtnTT(tr("Settings")); + if (Settings.wsprompt == yes) + settingsBtnTT.SetWidescreen(CFG.widescreen); + settingsBtnTT.SetAlpha(THEME.tooltipAlpha); + GuiImage settingsBtnImg(&btnSettings); + settingsBtnImg.SetWidescreen(CFG.widescreen); + GuiImage settingsBtnImgOver(&btnSettingsOver); + settingsBtnImgOver.SetWidescreen(CFG.widescreen); + GuiButton settingsBtn(&settingsBtnImg,&settingsBtnImgOver, 0, 3, THEME.setting_x, THEME.setting_y, &trigA, &btnSoundOver, btnClick2,1,&settingsBtnTT,65,-30,0,5); + + GuiTooltip homeBtnTT(tr("Back to HBC or Wii Menu")); + if (Settings.wsprompt == yes) + homeBtnTT.SetWidescreen(CFG.widescreen); + settingsBtnTT.SetAlpha(THEME.tooltipAlpha); + GuiImage homeBtnImg(&btnhome); + homeBtnImg.SetWidescreen(CFG.widescreen); + GuiImage homeBtnImgOver(&btnhomeOver); + homeBtnImgOver.SetWidescreen(CFG.widescreen); + GuiButton homeBtn(&homeBtnImg,&homeBtnImgOver, 0, 3, THEME.home_x, THEME.home_y, &trigA, &btnSoundOver, btnClick2,1,&homeBtnTT,15,-30,1,5); + homeBtn.RemoveSoundClick(); + homeBtn.SetTrigger(&trigHome); + + GuiTooltip poweroffBtnTT(tr("Power off the Wii")); + if (Settings.wsprompt == yes) + poweroffBtnTT.SetWidescreen(CFG.widescreen); + poweroffBtnTT.SetAlpha(THEME.tooltipAlpha); + 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,&poweroffBtnTT,-10,-30,1,5); + + GuiTooltip sdcardBtnTT(tr("Reload SD")); + if (Settings.wsprompt == yes) + sdcardBtnTT.SetWidescreen(CFG.widescreen); + sdcardBtnTT.SetAlpha(THEME.tooltipAlpha); + GuiImage sdcardImg(&btnsdcard); + GuiImage sdcardImgOver(&btnsdcardOver); + sdcardImg.SetWidescreen(CFG.widescreen); + sdcardImgOver.SetWidescreen(CFG.widescreen); + GuiButton sdcardBtn(&sdcardImg,&sdcardImgOver, 0, 3, THEME.sdcard_x, THEME.sdcard_y, &trigA, &btnSoundOver, btnClick2,1,&sdcardBtnTT,15,-30,0,5); + + GuiButton gameInfo(0,0); + gameInfo.SetTrigger(&trig2); + gameInfo.SetSoundClick(btnClick2); + + + GuiImage wiiBtnImg(&dataID); + wiiBtnImg.SetWidescreen(CFG.widescreen); + GuiButton wiiBtn(&wiiBtnImg,&wiiBtnImg, 0, 4, 0, -10, &trigA, &btnSoundOver, btnClick2,0); + + GuiTooltip favoriteBtnTT(tr("Display favorites")); + if (Settings.wsprompt == yes) + favoriteBtnTT.SetWidescreen(CFG.widescreen); + favoriteBtnTT.SetAlpha(THEME.tooltipAlpha); + GuiImage favoriteBtnImg(&imgfavIcon); + favoriteBtnImg.SetWidescreen(CFG.widescreen); +// GuiImage favoriteBtnImg_g(favoriteBtnImg);favoriteBtnImg_g.SetGrayscale(); + GuiImage favoriteBtnImg_g(&imgfavIcon_gray); + if(favoriteBtnImg_g.GetImage() == NULL) { favoriteBtnImg_g = favoriteBtnImg; favoriteBtnImg_g.SetGrayscale();} + favoriteBtnImg_g.SetWidescreen(CFG.widescreen); + GuiButton favoriteBtn(&favoriteBtnImg_g,&favoriteBtnImg_g, ALIGN_LEFT, ALIGN_TOP, THEME.gamelist_favorite_x, THEME.gamelist_favorite_y, mountMethod!=3?&trigA:&trigN, &btnSoundOver, btnClick2,1, &favoriteBtnTT, -15, 52, 0, 3); + favoriteBtn.SetAlpha(180); + + GuiTooltip searchBtnTT(tr("Set Search-Filter")); + if (Settings.wsprompt == yes) + searchBtnTT.SetWidescreen(CFG.widescreen); + searchBtnTT.SetAlpha(THEME.tooltipAlpha); + GuiImage searchBtnImg(&imgsearchIcon); + searchBtnImg.SetWidescreen(CFG.widescreen); +// GuiImage searchBtnImg_g(searchBtnImg); searchBtnImg_g.SetGrayscale(); + GuiImage searchBtnImg_g(&imgsearchIcon_gray); + if(searchBtnImg_g.GetImage() == NULL) { searchBtnImg_g = searchBtnImg; searchBtnImg_g.SetGrayscale();} + searchBtnImg_g.SetWidescreen(CFG.widescreen); + GuiButton searchBtn(&searchBtnImg_g,&searchBtnImg_g, ALIGN_LEFT, ALIGN_TOP, THEME.gamelist_search_x, THEME.gamelist_search_y, mountMethod!=3?&trigA:&trigN, &btnSoundOver, btnClick2,1, &searchBtnTT, -15, 52, 0, 3); + searchBtn.SetAlpha(180); + + GuiTooltip abcBtnTT(Settings.fave ? tr("Sort by rank") : tr("Sort alphabetically")); + if (Settings.wsprompt == yes) + abcBtnTT.SetWidescreen(CFG.widescreen); + abcBtnTT.SetAlpha(THEME.tooltipAlpha); + GuiImage abcBtnImg(Settings.fave ? &imgrankIcon : &imgabcIcon); + abcBtnImg.SetWidescreen(CFG.widescreen); +// GuiImage abcBtnImg_g(abcBtnImg); abcBtnImg_g.SetGrayscale(); + GuiImage abcBtnImg_g(Settings.fave ? &imgrankIcon_gray : &imgabcIcon_gray); + if(abcBtnImg_g.GetImage() == NULL) { abcBtnImg_g = abcBtnImg; abcBtnImg_g.SetGrayscale();} + abcBtnImg_g.SetWidescreen(CFG.widescreen); + GuiButton abcBtn(&abcBtnImg_g,&abcBtnImg_g, ALIGN_LEFT, ALIGN_TOP, THEME.gamelist_abc_x, THEME.gamelist_abc_y, &trigA, &btnSoundOver, btnClick2,1,&abcBtnTT, -15, 52, 0, 3); + abcBtn.SetAlpha(180); + + GuiTooltip countBtnTT(tr("Sort order by most played")); + if (Settings.wsprompt == yes) + countBtnTT.SetWidescreen(CFG.widescreen); + countBtnTT.SetAlpha(THEME.tooltipAlpha); + GuiImage countBtnImg(&imgplayCountIcon); + countBtnImg.SetWidescreen(CFG.widescreen); +// GuiImage countBtnImg_g(countBtnImg); countBtnImg_g.SetGrayscale(); + GuiImage countBtnImg_g(&imgplayCountIcon_gray); + if(countBtnImg_g.GetImage() == NULL) { countBtnImg_g = countBtnImg; countBtnImg_g.SetGrayscale();} + countBtnImg_g.SetWidescreen(CFG.widescreen); + GuiButton countBtn(&countBtnImg_g,&countBtnImg_g, ALIGN_LEFT, ALIGN_TOP, THEME.gamelist_count_x, THEME.gamelist_count_y, &trigA, &btnSoundOver, btnClick2,1, &countBtnTT, -15, 52, 0, 3); + countBtn.SetAlpha(180); + + GuiTooltip listBtnTT(tr("Display as a list")); + if (Settings.wsprompt == yes) + listBtnTT.SetWidescreen(CFG.widescreen); + listBtnTT.SetAlpha(THEME.tooltipAlpha); + GuiImage listBtnImg(&imgarrangeList); + listBtnImg.SetWidescreen(CFG.widescreen); +// GuiImage listBtnImg_g(listBtnImg); listBtnImg_g.SetGrayscale(); + GuiImage listBtnImg_g(&imgarrangeList_gray); + if(listBtnImg_g.GetImage() == NULL) { listBtnImg_g = listBtnImg; listBtnImg_g.SetGrayscale();} + listBtnImg_g.SetWidescreen(CFG.widescreen); + GuiButton listBtn(&listBtnImg_g,&listBtnImg_g, ALIGN_LEFT, ALIGN_TOP, THEME.gamelist_list_x, THEME.gamelist_list_y, mountMethod!=3?&trigA:&trigN, &btnSoundOver, btnClick2,1, &listBtnTT, 15, 52, 1, 3); + listBtn.SetAlpha(180); + + GuiTooltip gridBtnTT(tr("Display as a grid")); + if (Settings.wsprompt == yes) + gridBtnTT.SetWidescreen(CFG.widescreen); + gridBtnTT.SetAlpha(THEME.tooltipAlpha); + GuiImage gridBtnImg(&imgarrangeGrid); + gridBtnImg.SetWidescreen(CFG.widescreen); +// GuiImage gridBtnImg_g(gridBtnImg); gridBtnImg_g.SetGrayscale(); + GuiImage gridBtnImg_g(&imgarrangeGrid_gray); + if(gridBtnImg_g.GetImage() == NULL) { gridBtnImg_g = gridBtnImg; gridBtnImg_g.SetGrayscale();} + gridBtnImg_g.SetWidescreen(CFG.widescreen); + GuiButton gridBtn(&gridBtnImg_g,&gridBtnImg_g, ALIGN_LEFT, ALIGN_TOP, THEME.gamelist_grid_x, THEME.gamelist_grid_y, mountMethod!=3?&trigA:&trigN, &btnSoundOver, btnClick2,1, &gridBtnTT, 15, 52, 1, 3); + gridBtn.SetAlpha(180); + + GuiTooltip carouselBtnTT(tr("Display as a carousel")); + if (Settings.wsprompt == yes) + carouselBtnTT.SetWidescreen(CFG.widescreen); + carouselBtnTT.SetAlpha(THEME.tooltipAlpha); + GuiImage carouselBtnImg(&imgarrangeCarousel); + carouselBtnImg.SetWidescreen(CFG.widescreen); +// GuiImage carouselBtnImg_g(carouselBtnImg); carouselBtnImg_g.SetGrayscale(); + GuiImage carouselBtnImg_g(&imgarrangeCarousel_gray); + if(carouselBtnImg_g.GetImage() == NULL) { carouselBtnImg_g = carouselBtnImg; carouselBtnImg_g.SetGrayscale();} + carouselBtnImg_g.SetWidescreen(CFG.widescreen); + GuiButton carouselBtn(&carouselBtnImg_g,&carouselBtnImg_g, ALIGN_LEFT, ALIGN_TOP, THEME.gamelist_carousel_x, THEME.gamelist_carousel_y, mountMethod!=3?&trigA:&trigN, &btnSoundOver, btnClick2,1, &carouselBtnTT, 15, 52, 1, 3); + carouselBtn.SetAlpha(180); + + bool canUnlock = (Settings.parentalcontrol == 0 && Settings.parental.enabled == 1); + + GuiTooltip lockBtnTT(canUnlock ? tr("Unlock Parental Control") : tr("Parental Control disabled")); + if (Settings.wsprompt == yes) + lockBtnTT.SetWidescreen(CFG.widescreen); + lockBtnTT.SetAlpha(THEME.tooltipAlpha); + GuiImage lockBtnImg(&imgLock); + lockBtnImg.SetWidescreen(CFG.widescreen); + GuiImage lockBtnImg_g(&imgLock_gray); + if(lockBtnImg_g.GetImage() == NULL) { lockBtnImg_g = lockBtnImg; lockBtnImg_g.SetGrayscale(); } + lockBtnImg_g.SetWidescreen(CFG.widescreen); + GuiButton lockBtn(&lockBtnImg_g, &lockBtnImg_g, ALIGN_LEFT, ALIGN_TOP, THEME.gamelist_lock_x, THEME.gamelist_lock_y, &trigA, &btnSoundOver, btnClick2,1, &lockBtnTT, 15, 52, 1, 3); + lockBtn.SetAlpha(180); + + GuiTooltip unlockBtnTT(tr("Enable Parental Control")); + if (Settings.wsprompt == yes) + unlockBtnTT.SetWidescreen(CFG.widescreen); + unlockBtnTT.SetAlpha(THEME.tooltipAlpha); + GuiImage unlockBtnImg(&imgUnlock); + unlockBtnImg.SetWidescreen(CFG.widescreen); + GuiImage unlockBtnImg_g(&imgUnlock_gray); + if(unlockBtnImg_g.GetImage() == NULL) { unlockBtnImg_g = unlockBtnImg; unlockBtnImg_g.SetGrayscale(); } + unlockBtnImg_g.SetWidescreen(CFG.widescreen); + + if (canUnlock && Settings.godmode) + { + lockBtn.SetImage(&unlockBtnImg_g); + lockBtn.SetImageOver(&unlockBtnImg_g); + lockBtn.SetToolTip(&unlockBtnTT, 15, 52, 1, 3); + } + +/* + GuiButton unlockBtn(&unlockBtnImg_g, &unlockBtnImg_g, ALIGN_LEFT, ALIGN_TOP, THEME.gamelist_lock_x, THEME.gamelist_lock_y, &trigA, &btnSoundOver, btnClick2,1, &lockBtnTT, 15, 52, 1, 3); + unlockBtn.SetAlpha(180); +*/ + + GuiTooltip dvdBtnTT(tr("Mount DVD drive")); + if (Settings.wsprompt == yes) + dvdBtnTT.SetWidescreen(CFG.widescreen); + dvdBtnTT.SetAlpha(THEME.tooltipAlpha); + GuiImage dvdBtnImg(&imgdvd); + dvdBtnImg.SetWidescreen(CFG.widescreen); + GuiImage dvdBtnImg_g(dvdBtnImg); //dvdBtnImg_g.SetGrayscale(); +// GuiImage carouselBtnImg_g(&imgarrangeCarousel_gray); + dvdBtnImg_g.SetWidescreen(CFG.widescreen); + GuiButton dvdBtn(&dvdBtnImg_g,&dvdBtnImg_g, ALIGN_LEFT, ALIGN_TOP, THEME.gamelist_dvd_x, THEME.gamelist_dvd_y, &trigA, &btnSoundOver, btnClick2,1, &dvdBtnTT, 15, 52, 1, 3); + dvdBtn.SetAlpha(180); + + GuiTooltip homebrewBtnTT(tr("Homebrew Launcher")); + if (Settings.wsprompt == yes) + homebrewBtnTT.SetWidescreen(CFG.widescreen); + homebrewBtnTT.SetAlpha(THEME.tooltipAlpha); + GuiImage homebrewImg(&homebrewImgData); + GuiImage homebrewImgOver(&homebrewImgDataOver); + homebrewImg.SetWidescreen(CFG.widescreen); + homebrewImgOver.SetWidescreen(CFG.widescreen); + GuiButton homebrewBtn(&homebrewImg,&homebrewImgOver, ALIGN_LEFT, ALIGN_TOP, THEME.homebrew_x, THEME.homebrew_y, &trigA, &btnSoundOver, btnClick2,1,&homebrewBtnTT,15,-30,1,5); + + if (Settings.fave) { + favoriteBtn.SetImage(&favoriteBtnImg); + favoriteBtn.SetImageOver(&favoriteBtnImg); + favoriteBtn.SetAlpha(255); + } + static bool show_searchwindow = false; + if(gameFilter && *gameFilter) + { + if(show_searchwindow && gameCnt==1) + show_searchwindow = false; + if(!show_searchwindow) + searchBtn.SetEffect(EFFECT_PULSE, 10, 105); + searchBtn.SetImage(&searchBtnImg); + searchBtn.SetImageOver(&searchBtnImg); + searchBtn.SetAlpha(255); + } + if (Settings.sort==all) { + abcBtn.SetImage(&abcBtnImg); + abcBtn.SetImageOver(&abcBtnImg); + abcBtn.SetAlpha(255); + } else if (Settings.sort==pcount) { + countBtn.SetImage(&countBtnImg); + countBtn.SetImageOver(&countBtnImg); + countBtn.SetAlpha(255); + } + if (Settings.gameDisplay==list || mountMethod == 3) { + listBtn.SetImage(&listBtnImg); + listBtn.SetImageOver(&listBtnImg); + listBtn.SetAlpha(255); + } else if (Settings.gameDisplay==grid) { + gridBtn.SetImage(&gridBtnImg); + gridBtn.SetImageOver(&gridBtnImg); + gridBtn.SetAlpha(255); + } else if (Settings.gameDisplay==carousel) { + carouselBtn.SetImage(&carouselBtnImg); + carouselBtn.SetImageOver(&carouselBtnImg); + carouselBtn.SetAlpha(255); + } + + if (Settings.gameDisplay==list|| mountMethod == 3) { + favoriteBtn.SetPosition(THEME.gamelist_favorite_x, THEME.gamelist_favorite_y); + searchBtn.SetPosition(THEME.gamelist_search_x, THEME.gamelist_search_y); + abcBtn.SetPosition(THEME.gamelist_abc_x, THEME.gamelist_abc_y); + countBtn.SetPosition(THEME.gamelist_count_x, THEME.gamelist_count_y); + listBtn.SetPosition(THEME.gamelist_list_x, THEME.gamelist_list_y); + gridBtn.SetPosition(THEME.gamelist_grid_x, THEME.gamelist_grid_y); + carouselBtn.SetPosition(THEME.gamelist_carousel_x, THEME.gamelist_carousel_y); + lockBtn.SetPosition(THEME.gamelist_lock_x, THEME.gamelist_lock_y); + dvdBtn.SetPosition(THEME.gamelist_dvd_x, THEME.gamelist_dvd_y); + } else if(Settings.gameDisplay==grid) { + favoriteBtn.SetPosition(THEME.gamegrid_favorite_x, THEME.gamegrid_favorite_y); + searchBtn.SetPosition(THEME.gamegrid_search_x, THEME.gamegrid_search_y); + abcBtn.SetPosition(THEME.gamegrid_abc_x, THEME.gamegrid_abc_y); + countBtn.SetPosition(THEME.gamegrid_count_x, THEME.gamegrid_count_y); + listBtn.SetPosition(THEME.gamegrid_list_x, THEME.gamegrid_list_y); + gridBtn.SetPosition(THEME.gamegrid_grid_x, THEME.gamegrid_grid_y); + carouselBtn.SetPosition(THEME.gamegrid_carousel_x, THEME.gamegrid_carousel_y); + lockBtn.SetPosition(THEME.gamegrid_lock_x, THEME.gamegrid_lock_y); + dvdBtn.SetPosition(THEME.gamegrid_dvd_x, THEME.gamegrid_dvd_y); + } else if(Settings.gameDisplay==carousel) { + favoriteBtn.SetPosition(THEME.gamecarousel_favorite_x, THEME.gamecarousel_favorite_y); + searchBtn.SetPosition(THEME.gamecarousel_search_x, THEME.gamecarousel_favorite_y); + abcBtn.SetPosition(THEME.gamecarousel_abc_x, THEME.gamecarousel_abc_y); + countBtn.SetPosition(THEME.gamecarousel_count_x, THEME.gamecarousel_count_y); + listBtn.SetPosition(THEME.gamecarousel_list_x, THEME.gamecarousel_list_y); + gridBtn.SetPosition(THEME.gamecarousel_grid_x, THEME.gamecarousel_grid_y); + carouselBtn.SetPosition(THEME.gamecarousel_carousel_x, THEME.gamecarousel_carousel_y); + lockBtn.SetPosition(THEME.gamecarousel_lock_x, THEME.gamecarousel_lock_y); + dvdBtn.SetPosition(THEME.gamecarousel_dvd_x, THEME.gamecarousel_dvd_y); + } + + + //Downloading Covers + GuiTooltip DownloadBtnTT(tr("Click to Download Covers")); + if (Settings.wsprompt == yes) + DownloadBtnTT.SetWidescreen(CFG.widescreen); + DownloadBtnTT.SetAlpha(THEME.tooltipAlpha); + GuiButton DownloadBtn(0,0); + DownloadBtn.SetAlignment(ALIGN_LEFT, ALIGN_TOP); + DownloadBtn.SetPosition(THEME.covers_x,THEME.covers_y); + + GuiTooltip IDBtnTT(tr("Click to change game ID")); + if (Settings.wsprompt == yes) + IDBtnTT.SetWidescreen(CFG.widescreen); + IDBtnTT.SetAlpha(THEME.tooltipAlpha); + GuiButton idBtn(0,0); + idBtn.SetAlignment(ALIGN_LEFT, ALIGN_TOP); + idBtn.SetPosition(THEME.id_x,THEME.id_y); + + if (Settings.godmode == 1 && mountMethod!=3) {//only make the button have trigger & tooltip if in godmode + DownloadBtn.SetSoundOver(&btnSoundOver); + DownloadBtn.SetTrigger(&trigA); + DownloadBtn.SetTrigger(&trig1); + DownloadBtn.SetToolTip(&DownloadBtnTT,205,-30); + + idBtn.SetSoundOver(&btnSoundOver); + idBtn.SetTrigger(&trigA); + idBtn.SetToolTip(&IDBtnTT,205,-30); + + } else + { + DownloadBtn.SetRumble(false); + idBtn.SetRumble(false); + } + + GuiGameBrowser * gameBrowser = NULL; + GuiGameGrid * gameGrid = NULL; + GuiGameCarousel * gameCarousel = NULL; + if (Settings.gameDisplay==list|| mountMethod == 3) { + gameBrowser = new GuiGameBrowser(THEME.gamelist_w, THEME.gamelist_h, gameList, gameCnt, CFG.theme_path, bg_options_png, startat, offset); + gameBrowser->SetPosition(THEME.gamelist_x, THEME.gamelist_y); + gameBrowser->SetAlignment(ALIGN_LEFT, ALIGN_CENTRE); + } else if (Settings.gameDisplay==grid) { + gameGrid = new GuiGameGrid(THEME.gamegrid_w,THEME.gamegrid_h, gameList, gameCnt, CFG.theme_path, bg_options_png, 0, 0); + gameGrid->SetPosition(THEME.gamegrid_x,THEME.gamegrid_y); + gameGrid->SetAlignment(ALIGN_LEFT, ALIGN_CENTRE); + } else if (Settings.gameDisplay==carousel) { + //GuiGameCarousel gameCarousel(THEME.gamecarousel_w, THEME.gamecarousel_h, gameList, gameCnt, CFG.theme_path, bg_options_png, startat, offset); + gameCarousel = new GuiGameCarousel(640, 400, gameList, gameCnt, CFG.theme_path, bg_options_png, startat, offset); + gameCarousel->SetPosition(THEME.gamecarousel_x,THEME.gamecarousel_y); + gameCarousel->SetAlignment(ALIGN_LEFT, ALIGN_CENTRE); + } + + GuiText clockTimeBack("88:88", 40, (GXColor) {THEME.clock.r, THEME.clock.g, THEME.clock.b, THEME.clock.a/6}); + clockTimeBack.SetAlignment(THEME.clock_align, ALIGN_TOP); + clockTimeBack.SetPosition(THEME.clock_x, THEME.clock_y); + clockTimeBack.SetFont(fontClock); + GuiText clockTime(theTime, 40, THEME.clock); + clockTime.SetAlignment(THEME.clock_align, ALIGN_TOP); + clockTime.SetPosition(THEME.clock_x, THEME.clock_y); + clockTime.SetFont(fontClock); + + HaltGui(); + GuiWindow w(screenwidth, screenheight); + + if (THEME.show_hddinfo == -1 || THEME.show_hddinfo == 1) { //force show hdd info + w.Append(&usedSpaceTxt); + } + if (THEME.show_gamecount == -1 || THEME.show_gamecount == 1) { //force show game cnt info + w.Append(&gamecntBtn); + } + w.Append(&sdcardBtn); + w.Append(&poweroffBtn); + w.Append(&gameInfo); + if (Settings.godmode && load_from_fs != PART_FS_NTFS) + w.Append(&installBtn); + w.Append(&homeBtn); + w.Append(&settingsBtn); + w.Append(&DownloadBtn); + w.Append(&idBtn); + + + // Begin Toolbar + w.Append(&favoriteBtn); + Toolbar[0] = &favoriteBtn; + w.Append(&searchBtn); + Toolbar[1] = &searchBtn; + w.Append(&abcBtn); + Toolbar[2] = &abcBtn; + w.Append(&countBtn); + Toolbar[3] = &countBtn; + w.Append(&listBtn); + Toolbar[4] = &listBtn; + w.Append(&gridBtn); + Toolbar[5] = &gridBtn; + w.Append(&carouselBtn); + Toolbar[6] = &carouselBtn; + w.Append(&lockBtn); + Toolbar[7] = &lockBtn; + w.Append(&dvdBtn); + Toolbar[8] = &dvdBtn; + w.SetUpdateCallback(DiscListWinUpdateCallback); + // End Toolbar + + + + if (Settings.godmode == 1) + w.Append(&homebrewBtn); + + if ((Settings.hddinfo == hr12)||(Settings.hddinfo == hr24)) { + w.Append(&clockTimeBack); + w.Append(&clockTime); + } + + if (Settings.gameDisplay==list|| mountMethod == 3) { + mainWindow->Append(gameBrowser); + } + else if (Settings.gameDisplay==grid) { + mainWindow->Append(gameGrid); + } + else if (Settings.gameDisplay==carousel) { + mainWindow->Append(gameCarousel); + } + mainWindow->Append(&w); + + GuiSearchBar *searchBar=NULL; + if(show_searchwindow) { + searchBar = new GuiSearchBar(gameFilterNextList); + if(searchBar) + mainWindow->Append(searchBar); + } + + ResumeGui(); + +// ShowMemInfo(); + + while (menu == MENU_NONE) { + + if (idiotFlag==1) { + gprintf("\n\tIdiot flag"); + char idiotBuffer[200]; + snprintf(idiotBuffer, sizeof(idiotBuffer), "%s (%s). %s",tr("You have attempted to load a bad image"), + idiotChar,tr("Most likely it has dimensions that are not evenly divisible by 4.")); + + int deleteImg = WindowPrompt(0,idiotBuffer,tr("OK"),tr("Delete")); + if (deleteImg==0) { + snprintf(idiotBuffer, sizeof(idiotBuffer), "%s %s.",tr("You are about to delete "), idiotChar); + deleteImg = WindowPrompt(tr("Confirm"),idiotBuffer,tr("Delete"),tr("Cancel")); + if (deleteImg==1) { + remove(idiotChar); + } + } + idiotFlag=-1; + } + + WDVD_GetCoverStatus(&covert);//for detecting if i disc has been inserted + + // if the idiot is showing favorites and don't have any + if (Settings.fave && !gameCnt) { + WindowPrompt(tr("No Favorites"),tr("You are choosing to display favorites and you do not have any selected."),tr("Back")); + Settings.fave=!Settings.fave; + if (isInserted(bootDevice)) { + cfg_save_global(); + } + __Menu_GetEntries(); + menu = MENU_DISCLIST; + break; + } + + //CLOCK + time_t rawtime = time(0); //this fixes code dump caused by the clock + if (((Settings.hddinfo == hr12)||(Settings.hddinfo == hr24)) && rawtime != lastrawtime) { + lastrawtime = rawtime; + timeinfo = localtime (&rawtime); + if (dataed < 1) { + if (Settings.hddinfo == hr12) { + if (rawtime & 1) + strftime(theTime, sizeof(theTime), "%I:%M", timeinfo); + else + strftime(theTime, sizeof(theTime), "%I %M", timeinfo); + } + if (Settings.hddinfo == hr24) { + if (rawtime & 1) + strftime(theTime, sizeof(theTime), "%H:%M", timeinfo); + else + strftime(theTime, sizeof(theTime), "%H %M", timeinfo); + } + clockTime.SetText(theTime); + + } else if (dataed > 0) { + + clockTime.SetTextf("%i", (dataed-1)); + } + + } + + if ((datagB<1)&&(Settings.cios==1)&&(Settings.video == ntsc)&&(Settings.hddinfo == hr12)&&(Settings.qboot==1)&&(Settings.wsprompt==0)&&(Settings.language==ger)&&(Settings.tooltips==0)){dataed=1;dataef=1;}if (dataef==1){if (cosa>7){cosa=1;}datag++;if (sina==3){wiiBtn.SetAlignment(ALIGN_LEFT,ALIGN_BOTTOM);wiiBtnImg.SetAngle(0);if(datag>163){datag=1;}else if (datag<62){wiiBtn.SetPosition(((cosa)*70),(-2*(datag)+120));}else if(62<=datag){wiiBtn.SetPosition(((cosa)*70),((datag*2)-130));}if (datag>162){wiiBtn.SetPosition(700,700);w.Remove(&wiiBtn);datagB=2;cosa++;sina=lastrawtime%4;}w.Append(&wiiBtn);}if (sina==2){wiiBtn.SetAlignment(ALIGN_RIGHT,ALIGN_TOP);wiiBtnImg.SetAngle(270);if(datag>163){datag=1;}else if (datag<62){wiiBtn.SetPosition(((-2*(datag)+130)),((cosa)*50));}else if(62<=datag){wiiBtn.SetPosition((2*(datag)-120),((cosa)*50));}if (datag>162){wiiBtn.SetPosition(700,700);w.Remove(&wiiBtn);datagB=2;cosa++;sina=lastrawtime%4;}w.Append(&wiiBtn);}if (sina==1){wiiBtn.SetAlignment(ALIGN_TOP,ALIGN_LEFT);wiiBtnImg.SetAngle(180);if(datag>163){datag=1;}else if (datag<62){wiiBtn.SetPosition(((cosa)*70),(2*(datag)-120));}else if(62<=datag){wiiBtn.SetPosition(((cosa)*70),(-2*(datag)+130));}if (datag>162){wiiBtn.SetPosition(700,700);w.Remove(&wiiBtn);datagB=2;cosa++;sina=lastrawtime%4;}w.Append(&wiiBtn);}if (sina==0){wiiBtn.SetAlignment(ALIGN_TOP,ALIGN_LEFT);wiiBtnImg.SetAngle(90);if(datag>163){datag=1;}else if (datag<62){wiiBtn.SetPosition(((2*(datag)-130)),((cosa)*50));}else if(62<=datag){wiiBtn.SetPosition((-2*(datag)+120),((cosa)*50));}if (datag>162){wiiBtn.SetPosition(700,700);w.Remove(&wiiBtn);datagB=2;cosa++;sina=lastrawtime%4;}w.Append(&wiiBtn);}} + // respond to button presses + /* if (shutdown == 1) { + gprintf("\n\tshutdown"); + Sys_Shutdown(); + } + if (reset == 1) + Sys_Reboot();*/ + + if (updateavailable == true) { + gprintf("\n\tUpdate Available"); + HaltGui(); + GuiWindow ww(640,480); + w.SetState(STATE_DISABLED); + mainWindow->Append(&ww); + ResumeGui(); + ProgressUpdateWindow(); + updateavailable = false; + mainWindow->Remove(&ww); + w.SetState(STATE_DEFAULT); + menu = MENU_DISCLIST; + } + + if (poweroffBtn.GetState() == STATE_CLICKED) { + + + gprintf("\n\tpoweroffBtn clicked"); + choice = WindowPrompt(tr("How to Shutdown?"),0,tr("Full Shutdown"), tr("Shutdown to Idle"), tr("Cancel")); + if (choice == 2) { + Sys_ShutdownToIdel(); + } else if (choice == 1) { + Sys_ShutdownToStandby(); + } else { + poweroffBtn.ResetState(); + if (Settings.gameDisplay==list|| mountMethod == 3) { + gameBrowser->SetFocus(1); + } else if (Settings.gameDisplay==grid) { + gameGrid->SetFocus(1); + } else if (Settings.gameDisplay==carousel) { + gameCarousel->SetFocus(1); + } + } + + } else if (gamecntBtn.GetState() == STATE_CLICKED && mountMethod!=3) { + gprintf("\n\tgameCntBtn clicked"); + gamecntBtn.ResetState(); + char linebuf[150]; + snprintf(linebuf, sizeof(linebuf), "%s %sGameList ?",tr("Save Game List to"), Settings.update_path); + choice = WindowPrompt(0,linebuf,"TXT","CSV",tr("Back")); + if (choice) { + if (save_gamelist(choice-1)) + WindowPrompt(0,tr("Saved"),tr("OK")); + else + WindowPrompt(tr("Error"),tr("Could not save."),tr("OK")); + } + menu = MENU_DISCLIST; + break; + + } else if (homeBtn.GetState() == STATE_CLICKED) { + gprintf("\n\thomeBtn clicked"); + bgMusic->Pause(); + choice = WindowExitPrompt(); + bgMusic->Resume(); + + if (choice == 3) { + Sys_LoadMenu(); // Back to System Menu + } else if (choice == 2) { + Sys_BackToLoader(); + } else { + homeBtn.ResetState(); + if (Settings.gameDisplay==list|| mountMethod == 3) { + gameBrowser->SetFocus(1); + } else if (Settings.gameDisplay==grid) { + gameGrid->SetFocus(1); + } else if (Settings.gameDisplay==carousel) { + gameCarousel->SetFocus(1); + } + } + + } else if (wiiBtn.GetState() == STATE_CLICKED) { + gprintf("\n\twiiBtn clicked"); + + dataed++; + wiiBtn.ResetState(); + if (Settings.gameDisplay==list|| mountMethod == 3) { + gameBrowser->SetFocus(1); + } else if (Settings.gameDisplay==grid) { + gameGrid->SetFocus(1); + } else if (Settings.gameDisplay==carousel) { + gameCarousel->SetFocus(1); + } + } else if (installBtn.GetState() == STATE_CLICKED) { + gprintf("\n\tinstallBtn clicked"); + choice = WindowPrompt(tr("Install a game"),0,tr("Yes"),tr("No")); + if (choice == 1) { + menu = MENU_INSTALL; + break; + } else { + installBtn.ResetState(); + if (Settings.gameDisplay==list|| mountMethod == 3) { + gameBrowser->SetFocus(1); + } else if (Settings.gameDisplay==grid) { + gameGrid->SetFocus(1); + } else if (Settings.gameDisplay==carousel) { + gameCarousel->SetFocus(1); + } + } + } + else if (dvdBtn.GetState() == STATE_CLICKED) { + gprintf("\n\tdvdBtn Clicked"); + + mountMethodOLD = (mountMethod==3?mountMethod:0); + + int ass =DiscMount(dvdheader); + if (ass>0)mountMethod=ass; + gprintf("\n\tmountMethod:%d",mountMethod); + //dvdBtn.ResetState(); + + covertOld =2; + rockout(); + //break; + } + else if ((covert & 0x2)&&(covert!=covertOld)&& mountMethod!=1 && mountMethod!=2) { + + //gprintf("\n\tNew Disc Detected mountMethod:%d covert:%d old:%d",mountMethod,covert,covertOld); + if(!mountMethod) + choice = WindowPrompt(tr("New Disc Detected"),0,tr("Install"),tr("Mount DVD drive"),tr("Cancel")); + if (choice == 1) { + if (load_from_fs == PART_FS_NTFS) { + WindowPrompt(tr("Install not possible"), tr("You are using NTFS filesystem. Due to possible write errors to a NTFS partition, installing a game is not possible."), tr("OK")); + } else { + menu = MENU_INSTALL; + break; + } + } + else if (choice ==2 || mountMethod==3) + { + dvdBtn.SetState(STATE_CLICKED); + }else { + if (Settings.gameDisplay==list|| mountMethod == 3) { + gameBrowser->SetFocus(1); + } else if (Settings.gameDisplay==grid) { + gameGrid->SetFocus(1); + } else if (Settings.gameDisplay==carousel) { + gameCarousel->SetFocus(1); + } + } + + } + + else if (sdcardBtn.GetState() == STATE_CLICKED) { + gprintf("\n\tsdCardBtn Clicked"); + SDCard_deInit(); + SDCard_Init(); + if (Settings.gameDisplay==list|| mountMethod == 3) { + startat = gameBrowser->GetSelectedOption(); + offset = gameBrowser->GetOffset(); + } else if (Settings.gameDisplay==grid) { + startat = gameGrid->GetSelectedOption(); + offset = gameGrid->GetOffset(); + } else if (Settings.gameDisplay==carousel) { + startat = gameCarousel->GetSelectedOption(); + offset = gameCarousel->GetOffset(); + } + if (isInserted(bootDevice)) { + HaltGui(); // to fix endless rumble when clicking on the SD icon when rumble is disabled because rumble is set to on in Global_Default() + CFG_Load(); + ResumeGui(); + } + sdcardBtn.ResetState(); + menu = MENU_DISCLIST; + break; + } + + else if (DownloadBtn.GetState() == STATE_CLICKED) { + gprintf("\n\tDownloadBtn Clicked"); + if (isInserted(bootDevice)) { + choice = WindowPrompt(tr("Cover Download"), 0, tr("Normal Covers"), tr("3D Covers"), tr("Disc Images"), tr("Back")); // ask for download choice + if (choice != 0) { + int choice2 = choice; + bool missing; + missing = SearchMissingImages(choice2); + if (IsNetworkInit() == false && missing == true) { + WindowPrompt(tr("Network init error"), 0, tr("OK")); + } else { + if (GetMissingFiles() != NULL && cntMissFiles > 0) { + char tempCnt[40]; + sprintf(tempCnt,"%i %s",cntMissFiles,tr("Missing files")); + if (choice!=3)choice = WindowPrompt(tr("Download Boxart image?"),tempCnt,tr("Yes"),tr("No")); + else if (choice==3)choice = WindowPrompt(tr("Download Discart image?"),tempCnt,tr("Yes"),tr("No")); + if (choice == 1) { + ret = ProgressDownloadWindow(choice2); + if (ret == 0) { + WindowPrompt(tr("Download finished"),0,tr("OK")); + } else { + sprintf(tempCnt,"%i %s",ret,tr("files not found on the server!")); + WindowPrompt(tr("Download finished"),tempCnt,tr("OK")); + } + } + } + } + } + } else { + WindowPrompt(tr("No SD-Card inserted!"), tr("Insert an SD-Card to download images."), tr("OK")); + } + if (choice)menu = MENU_DISCLIST; + DownloadBtn.ResetState(); + if (Settings.gameDisplay==list|| mountMethod == 3) { + gameBrowser->SetFocus(1); + } else if (Settings.gameDisplay==grid) { + gameGrid->SetFocus(1); + } else if (Settings.gameDisplay==carousel) { + gameCarousel->SetFocus(1); + } + }//end download + + else if (settingsBtn.GetState() == STATE_CLICKED) { + gprintf("\n\tsettingsBtn Clicked"); + if (Settings.gameDisplay==list|| mountMethod == 3) { + startat = gameBrowser->GetSelectedOption(); + offset = gameBrowser->GetOffset(); + } else if (Settings.gameDisplay==grid) { + startat = gameGrid->GetSelectedOption(); + offset = gameGrid->GetOffset(); + } else if (Settings.gameDisplay==carousel) { + startat = gameCarousel->GetSelectedOption(); + offset = gameCarousel->GetOffset(); + } + menu = MENU_SETTINGS; + break; + + } + + else if (favoriteBtn.GetState() == STATE_CLICKED) { + gprintf("\n\tfavoriteBtn Clicked"); + Settings.fave=!Settings.fave; + if (isInserted(bootDevice)) { + cfg_save_global(); + } + __Menu_GetEntries(); + menu = MENU_DISCLIST; + break; + + } + + else if (searchBtn.GetState() == STATE_CLICKED) { + + gprintf("\n\tsearchBtn Clicked"); + show_searchwindow=!show_searchwindow; + HaltGui(); + if(searchBar) + { + mainWindow->Remove(searchBar); + delete searchBar; + searchBar = NULL; + } + if(show_searchwindow) + { + if(gameFilter && *gameFilter) + { + searchBtn.StopEffect(); + searchBtn.SetEffectGrow(); + } + searchBar = new GuiSearchBar(gameFilterNextList); + if(searchBar) + mainWindow->Append(searchBar); + } + else + { + if(gameFilter && *gameFilter) + searchBtn.SetEffect(EFFECT_PULSE, 10, 105); + } + searchBtn.ResetState(); + ResumeGui(); + } + + else if (searchBar && (searchChar=searchBar->GetClicked())) { + if(searchChar > 27) + { + int len = gameFilter ? wcslen(gameFilter) : 0; + wchar_t newFilter[len+2]; + if(gameFilter) + wcscpy(newFilter, gameFilter); + newFilter[len] = searchChar; + newFilter[len+1] = 0; + + + __Menu_GetEntries(0, newFilter); + menu = MENU_DISCLIST; + break; + } + else if(searchChar == 7) // Close + { + show_searchwindow=false; + HaltGui(); + if(searchBar) + { + mainWindow->Remove(searchBar); + delete searchBar; + searchBar = NULL; + } + if(gameFilter && *gameFilter) + { + searchBtn.SetEffect(EFFECT_PULSE, 10, 105); + searchBtn.SetImage(&searchBtnImg); + searchBtn.SetImageOver(&searchBtnImg); + searchBtn.SetAlpha(255); + } + else + { + searchBtn.StopEffect(); + searchBtn.SetEffectGrow(); + searchBtn.SetImage(&searchBtnImg_g); + searchBtn.SetImageOver(&searchBtnImg_g); + searchBtn.SetAlpha(180); + } + + ResumeGui(); + } + else if(searchChar == 8) // Backspace + { + __Menu_GetEntries(0, gameFilterPrev); + menu = MENU_DISCLIST; + break; + } + + } + + else if (abcBtn.GetState() == STATE_CLICKED) { + gprintf("\n\tabcBtn clicked"); + if (Settings.sort != all) { + Settings.sort=all; + if (isInserted(bootDevice)) { + cfg_save_global(); + } + __Menu_GetEntries(); + + menu = MENU_DISCLIST; + break; + } + abcBtn.ResetState(); + } + + else if (countBtn.GetState() == STATE_CLICKED) { + gprintf("\n\tcountBtn Clicked"); + if (Settings.sort != pcount) { + Settings.sort=pcount; + //if(isSdInserted()) { + if (isInserted(bootDevice)) { + cfg_save_global(); + } + __Menu_GetEntries(); + + menu = MENU_DISCLIST; + break; + } + countBtn.ResetState(); + + } + + else if (listBtn.GetState() == STATE_CLICKED) { + gprintf("\n\tlistBtn Clicked"); + if (Settings.gameDisplay!=list) { + Settings.gameDisplay=list; + menu = MENU_DISCLIST; + if (isInserted(bootDevice)) { + cfg_save_global(); + } + listBtn.ResetState(); + break; + } else { + listBtn.ResetState(); + } + } + + + else if (gridBtn.GetState() == STATE_CLICKED) { + gprintf("\n\tgridBtn Clicked"); + if (Settings.gameDisplay!=grid) { + + Settings.gameDisplay=grid; + menu = MENU_DISCLIST; + if (isInserted(bootDevice)) { + cfg_save_global(); + } + gridBtn.ResetState(); + break; + } else { + gridBtn.ResetState(); + } + } + + else if (carouselBtn.GetState() == STATE_CLICKED) { + gprintf("\n\tcarouselBtn Clicked"); + if (Settings.gameDisplay!=carousel) { + Settings.gameDisplay=carousel; + menu = MENU_DISCLIST; + if (isInserted(bootDevice)) { + cfg_save_global(); + } + carouselBtn.ResetState(); + break; + } else { + carouselBtn.ResetState(); + } + } + else if (homebrewBtn.GetState() == STATE_CLICKED) { + gprintf("\n\thomebrewBtn Clicked"); + menu = MENU_HOMEBREWBROWSE; + break; + } + else if (gameInfo.GetState() == STATE_CLICKED && mountMethod!=3) { + gprintf("\n\tgameinfo Clicked"); + gameInfo.ResetState(); + if(selectImg1>=0 && selectImg1<(s32)gameCnt) { + gameSelected = selectImg1; + rockout(); + struct discHdr *header = &gameList[selectImg1]; + snprintf (IDfull,sizeof(IDfull),"%c%c%c%c%c%c", header->id[0], header->id[1], header->id[2],header->id[3], header->id[4], header->id[5]); + choice = showGameInfo(IDfull); + rockout(2); + if (choice==2) + homeBtn.SetState(STATE_CLICKED); + if (choice==3) { + menu = MENU_DISCLIST; + break; + } + } + } + else if (lockBtn.GetState() == STATE_CLICKED) { + gprintf("\n\tlockBtn clicked"); + lockBtn.ResetState(); + if (!canUnlock) { + WindowPrompt(tr("Parental Control"), tr("You don't have Parental Control enabled. If you wish to use Parental Control, enable it in the Wii Settings."), tr("OK")); + } else { + if (Settings.godmode) { + if (WindowPrompt(tr("Parental Control"), tr("Are you sure you want to enable Parent Control?"), tr("Yes"), tr("No")) == 1) { + Settings.godmode = 0; + lockBtn.SetImage(&lockBtnImg_g); + lockBtn.SetImageOver(&lockBtnImg_g); + lockBtn.SetToolTip(&lockBtnTT, 15, 52, 1, 3); + + // Retrieve the gamelist again + menu = MENU_DISCLIST; + break; + } + } else { + // Require the user to enter the PIN code + char pin[5]; + memset(&pin, 0, 5); + int ret = OnScreenNumpad((char *) &pin, 5); + + if (ret == 1) { + if (memcmp(pin, Settings.parental.pin, 4) == 0) { + Settings.godmode = 1; + lockBtn.SetImage(&unlockBtnImg_g); + lockBtn.SetImageOver(&unlockBtnImg_g); + lockBtn.SetToolTip(&unlockBtnTT, 15, 52, 1, 3); + + // Retrieve the gamelist again + menu = MENU_DISCLIST; + break; + } else { + WindowPrompt(tr("Parental Control"), tr("Invalid PIN code"), tr("OK")); + } + } + } + } + } + + if (Settings.gameDisplay==grid && mountMethod != 3) { + int selectimg; + DownloadBtn.SetSize(0,0); + selectimg = gameGrid->GetSelectedOption(); + gameSelected = gameGrid->GetClickedOption(); + selectImg1=selectimg; + } + + else if (Settings.gameDisplay==carousel && mountMethod != 3) { + int selectimg; + DownloadBtn.SetSize(0,0); + selectimg = gameCarousel->GetSelectedOption(); + gameSelected = gameCarousel->GetClickedOption(); + selectImg1=selectimg; + } + else if (Settings.gameDisplay==list || mountMethod == 3) { + //Get selected game under cursor + int selectimg; + DownloadBtn.SetSize(160,224); + idBtn.SetSize(100,40); + + selectimg = gameBrowser->GetSelectedOption(); + gameSelected = gameBrowser->GetClickedOption(); + selectImg1=selectimg; + + if (gameSelected > 0) //if click occured + selectimg = gameSelected; + + char gameregion[7]; + if ((selectimg >= 0) && (selectimg < (s32) gameCnt)) { + if (selectimg != selectedold) { + selectedold = selectimg;//update displayed cover, game ID, and region if the selected game changes + struct discHdr *header = &gameList[selectimg]; + snprintf (ID,sizeof(ID),"%c%c%c", header->id[0], header->id[1], header->id[2]); + snprintf (IDfull,sizeof(IDfull),"%s%c%c%c", ID, header->id[3], header->id[4], header->id[5]); + w.Remove(&DownloadBtn); + + if (GameIDTxt) { + w.Remove(&idBtn); + delete GameIDTxt; + GameIDTxt = NULL; + } + if (GameRegionTxt) { + w.Remove(GameRegionTxt); + delete GameRegionTxt; + GameRegionTxt = NULL; + } + + switch (header->id[3]) { + case 'E': + sprintf(gameregion,"NTSC U"); + break; + case 'J': + sprintf(gameregion,"NTSC J"); + break; + case 'W': + sprintf(gameregion,"NTSC T"); + break; + default: + case 'K': + sprintf(gameregion,"NTSC K"); + break; + case 'P': + case 'D': + case 'F': + case 'I': + case 'S': + case 'H': + case 'U': + case 'X': + case 'Y': + case 'Z': + sprintf(gameregion," PAL "); + break; + } + + //load game cover + if (cover) { + delete cover; + cover = NULL; + } + + cover = LoadCoverImage(header); + + if (coverImg) { + delete coverImg; + coverImg = NULL; + } + coverImg = new GuiImage(cover); + coverImg->SetWidescreen(CFG.widescreen); + + DownloadBtn.SetImage(coverImg);// put the new image on the download button + w.Append(&DownloadBtn); + + if ((Settings.sinfo == GameID) || (Settings.sinfo == Both)) { + GameIDTxt = new GuiText(IDfull, 22, THEME.info); + GameIDTxt->SetAlignment(ALIGN_LEFT, ALIGN_TOP); + //GameIDTxt->SetPosition(THEME.id_x,THEME.id_y); + idBtn.SetEffect(EFFECT_FADE, 20); + idBtn.SetLabel(GameIDTxt); + w.Append(&idBtn); + } + //don't try to show region for channels because all the custom channels wont follow the rules + if (((Settings.sinfo == GameRegion) || (Settings.sinfo == Both))&&mountMethod!=3) { + GameRegionTxt = new GuiText(gameregion, 22, THEME.info); + GameRegionTxt->SetAlignment(ALIGN_LEFT, ALIGN_TOP); + GameRegionTxt->SetPosition(THEME.region_x, THEME.region_y); + GameRegionTxt->SetEffect(EFFECT_FADE, 20); + w.Append(GameRegionTxt); + } + } + } + + if (idBtn.GetState() == STATE_CLICKED && mountMethod!=3) { + gprintf("\n\tidBtn Clicked"); + struct discHdr * header = &gameList[gameBrowser->GetSelectedOption()]; + //enter new game ID + char entered[10]; + snprintf(entered, sizeof(entered), "%s", IDfull); + //entered[9] = '\0'; + int result = OnScreenKeyboard(entered, 7,0); + if (result == 1) { + WBFS_ReIDGame(header->id, entered); + //__Menu_GetEntries(); + menu = MENU_DISCLIST; + } + + idBtn.ResetState(); + } + startat=gameBrowser->GetOffset(), offset=startat; + } + + if (((gameSelected >= 0) && (gameSelected < (s32)gameCnt)) + || mountMethod==1 + || mountMethod==2) { + if(searchBar) + { + HaltGui(); + mainWindow->Remove(searchBar); + ResumeGui(); + } + rockout(); + struct discHdr *header = (mountMethod==1||mountMethod==2?dvdheader:&gameList[gameSelected]); + // struct discHdr *header = dvdheader:&gameList[gameSelected]); + if (!mountMethod)//only get this stuff it we are booting a game from USB + { + WBFS_GameSize(header->id, &size); + if (strlen(get_title(header)) < (MAX_CHARACTERS + 3)) { + sprintf(text, "%s", get_title(header)); + } else { + strncpy(text, get_title(header), MAX_CHARACTERS); + text[MAX_CHARACTERS] = '\0'; + strncat(text, "...", 3); + } + } + + //check if alt Dol and gct file is present + FILE *exeFile = NULL; + char nipple[100]; + header = (mountMethod==1||mountMethod==2?dvdheader:&gameList[gameSelected]); //reset header + snprintf (IDfull,sizeof(IDfull),"%c%c%c%c%c%c", header->id[0], header->id[1], header->id[2],header->id[3], header->id[4], header->id[5]); + struct Game_CFG* game_cfg = CFG_get_game_opt(header->id); + + if (game_cfg) { + alternatedol = game_cfg->loadalternatedol; + ocarinaChoice = game_cfg->ocarina; + } else { + alternatedol = off; + ocarinaChoice = Settings.ocarina; + } + + + if (Settings.qboot == yes) { //quickboot game + if (alternatedol == on) { + /* Open dol File and check exist */ + sprintf(nipple, "%s%s.dol",Settings.dolpath,IDfull); + exeFile = fopen (nipple ,"rb"); + if (exeFile==NULL) { + sprintf(nipple, "%s %s",nipple,tr("does not exist!")); + WindowPrompt(tr("Error"),nipple,tr("OK")); + menu = MENU_CHECK; + wiilight(0); + break; + } else { + fclose(exeFile); + } + } + if (ocarinaChoice != off) { + /* Open gct File and check exist */ + sprintf(nipple, "%s%s.gct",Settings.Cheatcodespath,IDfull); + exeFile = fopen (nipple ,"rb"); + if (exeFile==NULL) { + gprintf("\n\ttried to load missing gct."); + sprintf(nipple, "%s %s",nipple,tr("does not exist! Loading game without cheats.")); + WindowPrompt(tr("Error"),nipple,NULL,NULL,NULL,NULL,170); + } else { + fseek (exeFile, 0, SEEK_END); + long size=ftell (exeFile); + rewind (exeFile); + fclose(exeFile); + if (size>MAX_GCT_SIZE) { + gprintf("\n\tgct is too big"); + sprintf(nipple, "%s %s",nipple,tr("contains over 255 lines of code. It will produce unexpected results.")); + WindowPrompt(tr("Error"),nipple,NULL,NULL,NULL,NULL,170); + } + } + + } + + wiilight(0); + if (isInserted(bootDevice)) { + //////////save game play count//////////////// + struct Game_NUM* game_num = CFG_get_game_num(header->id); + + if (game_num) { + favoritevar = game_num->favorite; + playcount = game_num->count; + } else { + favoritevar = 0; + playcount = 0; + } + playcount += 1; + + CFG_save_game_num(header->id); + gprintf("\n\tplaycount for %c%c%c%c%c%c raised to %i",header->id[0],header->id[1],header->id[2],header->id[3],header->id[4],header->id[5],playcount); + + } + menu = MENU_EXIT; + break; + + } + bool returnHere = true;// prompt to start game + while (returnHere) { + returnHere = false; + if (Settings.wiilight != wiilight_forInstall) wiilight(1); + choice = GameWindowPrompt(); + // header = &gameList[gameSelected]; //reset header + + if (choice == 1) { + if (alternatedol == on) { + /* Open dol File and check exist */ + sprintf(nipple, "%s%s.dol",Settings.dolpath,IDfull); + exeFile = fopen (nipple ,"rb"); + if (exeFile==NULL) { + gprintf("\n\tTried to load alt dol that isn't there"); + sprintf(nipple, "%s %s",nipple,tr("does not exist! You Messed something up, Idiot.")); + WindowPrompt(tr("Error"),nipple,tr("OK")); + menu = MENU_CHECK; + wiilight(0); + break; + } else { + fclose(exeFile); + } + } + if (ocarinaChoice != off) { + /* Open gct File and check exist */ + sprintf(nipple, "%s%s.gct",Settings.Cheatcodespath,IDfull); + exeFile = fopen (nipple ,"rb"); + if (exeFile==NULL) { + gprintf("\n\ttried to load gct file that isn't there"); + sprintf(nipple, "%s %s",nipple,tr("does not exist! Loading game without cheats.")); + WindowPrompt(tr("Error"),nipple,NULL,NULL,NULL,NULL,170); + } else { + fseek (exeFile, 0, SEEK_END); + long size=ftell (exeFile); + rewind (exeFile); + fclose(exeFile); + if (size>MAX_GCT_SIZE) { + gprintf("\n\tgct file is too big"); + sprintf(nipple, "%s %s",nipple,tr("contains over 255 lines of code. It will produce unexpected results.")); + WindowPrompt(tr("Error"),nipple,NULL,NULL,NULL,NULL,170); + } + } + + } + wiilight(0); + returnHere = false; + menu = MENU_EXIT; + + } else if (choice == 2) { + wiilight(0); + HaltGui(); + if (Settings.gameDisplay==list || mountMethod == 3) mainWindow->Remove(gameBrowser); + else if (Settings.gameDisplay==grid) mainWindow->Remove(gameGrid); + else if (Settings.gameDisplay==carousel) mainWindow->Remove(gameCarousel); + mainWindow->Remove(&w); + ResumeGui(); + + //re-evaluate header now in case they changed games while on the game prompt + header = (mountMethod==1||mountMethod==2?dvdheader:&gameList[gameSelected]); + int settret = GameSettings(header); + /* unneeded for now, kept in case database gets a separate language setting + //menu = MENU_DISCLIST; // refresh titles (needed if the language setting has changed) + */ + HaltGui(); + if (Settings.gameDisplay==list || mountMethod == 3) mainWindow->Append(gameBrowser); + else if (Settings.gameDisplay==grid) mainWindow->Append(gameGrid); + else if (Settings.gameDisplay==carousel) mainWindow->Append(gameCarousel); + mainWindow->Append(&w); + ResumeGui(); + if (settret == 1) { //if deleted + menu = MENU_DISCLIST; + break; + } + returnHere = true; + rockout(2); + } + + else if (choice == 3 && !mountMethod) { //WBFS renaming + wiilight(0); + //re-evaluate header now in case they changed games while on the game prompt + header = &gameList[gameSelected]; + + //enter new game title + char entered[60]; + snprintf(entered, sizeof(entered), "%s", get_title(header)); + entered[59] = '\0'; + int result = OnScreenKeyboard(entered, 60,0); + if (result == 1) { + WBFS_RenameGame(header->id, entered); + __Menu_GetEntries(); + menu = MENU_DISCLIST; + } + } else if (choice == 0) { + rockout(2); + if (mountMethod==1||mountMethod==2)mountMethod = mountMethodOLD; + if (Settings.gameDisplay==list || mountMethod == 3) { + gameBrowser->SetFocus(1); + } else if (Settings.gameDisplay==grid) { + gameGrid->SetFocus(1); + } else if (Settings.gameDisplay==carousel) { + gameCarousel->SetFocus(1); + } + } + + + } + if(searchBar) + { + HaltGui(); + mainWindow->Append(searchBar); + ResumeGui(); + } + } + // to skip the first call of windowScreensaver at startup when wiimote is not connected + if (IsWpadConnected()) { + check = 1; + } + + // screensaver is called when wiimote shuts down, depending on the wiimotet idletime + if (!IsWpadConnected() && check !=0 && Settings.screensaver!=0) { + check++; + int screensaverIsOn=0; + if (check==11500) { //to allow time for the wii to turn off and not show the screensaver + screensaverIsOn=WindowScreensaver(); + } + if (screensaverIsOn==1)check=0; + } + if (dvdBtn.GetState() != STATE_CLICKED) + covertOld=covert; + else + dvdBtn.ResetState(); + //respond to the checkthread and unpause it + switch(checkthreadState) + { + case 1: + mountMethod = 0; + menu = MENU_DISCLIST; + checkthreadState = 0; + gprintf("\ncase 1"); + break; + + case 2: + sdcardBtn.SetState(STATE_CLICKED); + checkthreadState = 0; + gprintf("\ncase 2"); + break; + } + } + + // set alt dol default + if (menu == MENU_EXIT && altdoldefault && mountMethod!=3) { + struct discHdr *header = (mountMethod==1||mountMethod==2?dvdheader:&gameList[gameSelected]); + struct Game_CFG* game_cfg = CFG_get_game_opt(header->id); + // use default only if no alt dol was selected manually + if (game_cfg) { + if (game_cfg->alternatedolstart != 0) + altdoldefault = false; + } + if (altdoldefault) { + int autodol = autoSelectDol((char*)header->id, true); + if (autodol>0) { + alternatedol = 2; + alternatedoloffset = autodol; + char temp[20]; + sprintf(temp,"%d",autodol); + } else { + // alt dol menu for games that require more than a single alt dol + int autodol = autoSelectDolMenu((char*)header->id, true); + if (autodol>0) { + alternatedol = 2; + alternatedoloffset = autodol; + } + } + } + } +//no need to close sd here. we still need to get settings and codes and shit + /*if (menu == MENU_EXIT) { + SDCard_deInit(); + }*/ + //if (Settings.gameDisplay==list) {startat=gameBrowser->GetOffset(), offset=startat;}//save the variables in case we are refreshing the list + //gprintf("\n\tstartat:%d offset:%d",startat,offset); + HaltGui(); + mainWindow->RemoveAll(); + mainWindow->Append(bgImg); + delete searchBar; + searchBar = NULL; + delete gameBrowser; + gameBrowser = NULL; + delete gameGrid; + gameGrid = NULL; + delete gameCarousel; + gameCarousel = NULL; + ResumeGui(); + return menu; +} + +void DiscListWinUpdateCallback(void * e) +{ + GuiWindow *w = (GuiWindow *)e; + for(int i=0; i<8; ++i) + { + if(Toolbar[i]->GetState() == STATE_SELECTED) + { + w->Remove(Toolbar[i]); + w->Append(Toolbar[i]); // draw the selected Icon allways on top + break; + } + } +} + +void rockout(int f) { + + + HaltGui(); + int num=(f==2?-1:gameSelected); + + char imgPath[100]; + if ((!(strcasestr(get_title(&gameList[num]),"guitar")|| + strcasestr(get_title(&gameList[num]),"band")|| + strcasestr(get_title(&gameList[num]),"rock")|| + f==1))||mountMethod) { + for (int i = 0; i < 4; i++) + delete pointer[i]; + snprintf(imgPath, sizeof(imgPath), "%splayer1_point.png", CFG.theme_path); + pointer[0] = new GuiImageData(imgPath, player1_point_png); + snprintf(imgPath, sizeof(imgPath), "%splayer2_point.png", CFG.theme_path); + pointer[1] = new GuiImageData(imgPath, player2_point_png); + snprintf(imgPath, sizeof(imgPath), "%splayer3_point.png", CFG.theme_path); + pointer[2] = new GuiImageData(imgPath, player3_point_png); + snprintf(imgPath, sizeof(imgPath), "%splayer4_point.png", CFG.theme_path); + pointer[3] = new GuiImageData(imgPath, player4_point_png); + } else { + + for (int i = 0; i < 4; i++) + delete pointer[i]; + snprintf(imgPath, sizeof(imgPath), "%srplayer1_point.png", CFG.theme_path); + pointer[0] = new GuiImageData(imgPath, rplayer1_point_png); + snprintf(imgPath, sizeof(imgPath), "%srplayer2_point.png", CFG.theme_path); + pointer[1] = new GuiImageData(imgPath, rplayer2_point_png); + snprintf(imgPath, sizeof(imgPath), "%srplayer3_point.png", CFG.theme_path); + pointer[2] = new GuiImageData(imgPath, rplayer3_point_png); + snprintf(imgPath, sizeof(imgPath), "%srplayer4_point.png", CFG.theme_path); + pointer[3] = new GuiImageData(imgPath, rplayer4_point_png); + } + ResumeGui(); +} diff --git a/source/menu/menu_format.cpp b/source/menu/menu_format.cpp index ff97fd76..408ee9a3 100644 --- a/source/menu/menu_format.cpp +++ b/source/menu/menu_format.cpp @@ -1,185 +1,196 @@ -#include - -#include "menus.h" -#include "fatmounter.h" -#include "usbloader/usbstorage.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); - - 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]; - - /* 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_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; - if(isInserted(bootDevice))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; -} - +#include + +#include "menus.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 int load_from_fs; +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]; + + /* 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); + GuiTrigger trigB; + trigB.SetButtonOnlyTrigger(-1, WPAD_BUTTON_B | WPAD_CLASSIC_BUTTON_B, PAD_BUTTON_B); + + GuiButton backBtn(0,0); + backBtn.SetTrigger(&trigB); + + 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(&backBtn); + 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_SETTINGS; + + Settings.partition = ret; + if(isInserted(bootDevice))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_SETTINGS; + } + } + } + } 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(); + } + } + else if (backBtn.GetState() == STATE_CLICKED) { + menu = MENU_SETTINGS; + break; + } + } + + + HaltGui(); + + mainWindow->Remove(&optionBrowser); + mainWindow->Remove(&w); + ResumeGui(); + + return menu; +} + diff --git a/source/menu/menu_install.cpp b/source/menu/menu_install.cpp index a9b8fe21..831e3fb0 100644 --- a/source/menu/menu_install.cpp +++ b/source/menu/menu_install.cpp @@ -134,15 +134,6 @@ int MenuInstall() { menu = MENU_DISCLIST; break; } - - if (shutdown == 1) { - wiilight(0); - Sys_Shutdown(); - } - if (reset == 1) { - wiilight(0); - Sys_Reboot(); - } } //Turn off the WiiLight diff --git a/source/menu/menus.h b/source/menu/menus.h index 269d998e..ef935edc 100644 --- a/source/menu/menus.h +++ b/source/menu/menus.h @@ -1,24 +1,31 @@ -#ifndef _MENUS_H -#define _MENUS_H - -#include "libwiigui/gui.h" -#include "language/gettext.h" -#include "prompts/PromptWindows.h" -#include "menu.h" -#include "gecko.h" -#include "filelist.h" -#include "sys.h" - -extern void ResumeGui(); -extern void HaltGui(); -extern GuiWindow * mainWindow; -extern GuiSound * bgMusic; -extern u8 shutdown; -extern u8 reset; - -int MenuInstall(); -int MenuDiscList(); -int MenuFormat(); -int MenuCheck(); - -#endif // _MENUS_H +#ifndef _MENUS_H +#define _MENUS_H + +#include + +#include "libwiigui/gui.h" +#include "language/gettext.h" +#include "prompts/PromptWindows.h" +#include "menu.h" +#include "gecko.h" +#include "filelist.h" +#include "sys.h" + +extern GuiWindow * mainWindow; +extern GuiSound * bgMusic; +extern u8 checkthreadState; +extern u8 needToReloadGamelist; +extern u8 hddOK; +extern u8 mountMethod; + + +int MenuInstall(); +int MenuDiscList(); +int MenuFormat(); + +extern void ResumeCheck(); +extern void HaltCheck(); +extern void InitCheckThread(); +extern void ExitCheckThread(); + +#endif // _MENUS_H diff --git a/source/prompts/DiscBrowser.cpp b/source/prompts/DiscBrowser.cpp index d05efae6..be5bf0b9 100644 --- a/source/prompts/DiscBrowser.cpp +++ b/source/prompts/DiscBrowser.cpp @@ -10,6 +10,7 @@ #include "prompts/PromptWindows.h" #include "filelist.h" #include "menu.h" +#include "../menu/menus.h" #include "usbloader/disc.h" #include "usbloader/fstfile.h" #include "usbloader/wdvd.h" @@ -21,14 +22,8 @@ #include "../gecko.h" #include "../patches/dvd_broadway.h" -/*** Extern functions ***/ -extern void ResumeGui(); -extern void HaltGui(); - /*** Extern variables ***/ extern GuiWindow * mainWindow; -extern u8 shutdown; -extern u8 reset; extern u8 mountMethod; /******************************************************************************** @@ -50,7 +45,7 @@ int DiscBrowse(struct discHdr * header) { return ret; } } - + ret = Disc_Open(); if (ret < 0) { ResumeGui(); @@ -71,7 +66,7 @@ int DiscBrowse(struct discHdr * header) { WindowPrompt(tr("ERROR:"), tr("Could not open WBFS partition"), tr("OK")); return ret; } - + int *buffer = (int*)allocate_memory(0x20); if (buffer == NULL) { @@ -86,7 +81,7 @@ int DiscBrowse(struct discHdr * header) { WindowPrompt(tr("ERROR:"), tr("Could not read the disc."), tr("OK")); return ret; } - + void *fstbuffer = allocate_memory(buffer[2]*4); FST_ENTRY *fst = (FST_ENTRY *)fstbuffer; @@ -204,11 +199,6 @@ int DiscBrowse(struct discHdr * header) { while (!exit) { VIDEO_WaitVSync(); - if (shutdown == 1) - Sys_Shutdown(); - if (reset == 1) - Sys_Reboot(); - ret = optionBrowser3.GetClickedOption(); if (ret > 0) { @@ -244,29 +234,29 @@ int autoSelectDol(const char *id, bool force) { char id4[10]; sprintf(id4,"%c%c%c%c",id[0],id[1],id[2],id[3]); - + ////// games that can be forced (always need alt dol) - //Boogie + //Boogie if (strcmp(id,"RBOP69") == 0) return 675;//previous value was 657 if (strcmp(id,"RBOE69") == 0) return 675;//starstremr - + //Fifa 08 if (strcmp(id,"RF8E69") == 0) return 439;//from isostar if (strcmp(id,"RF8P69") == 0) return 463;//from isostar if (strcmp(id,"RF8X69") == 0) return 464;//from isostar - + //Madden NFL07 if (strcmp(id,"RMDP69") == 0) return 39;//from isostar - + //Madden NFL08 if (strcmp(id,"RNFP69") == 0) return 1079;//from isostar - + //Medal of Honor: Heroes 2 if (strcmp(id,"RM2X69") == 0)return 601;//dj_skual if (strcmp(id,"RM2P69") == 0)return 517;//MZottel - if (strcmp(id,"RM2E69") == 0) return 492;//Old8oy - + if (strcmp(id,"RM2E69") == 0) return 492;//Old8oy + //Mortal Kombat if (strcmp(id,"RKMP5D") == 0) return 290;//from isostar if (strcmp(id,"RKME5D") == 0) return 290;//starstremr @@ -276,7 +266,7 @@ int autoSelectDol(const char *id, bool force) { //Pangya! Golf with Style if (strcmp(id,"RPYP9B") == 0) return 12490;//from isostar - + //Redsteel if (strcmp(id,"REDP41") == 0) return 1957;//from isostar if (strcmp(id,"REDE41") == 0) return 1957;//starstremr @@ -284,37 +274,37 @@ int autoSelectDol(const char *id, bool force) { //SSX if (strcmp(id,"RSXP69") == 0) return 377;//previous value was 337 if (strcmp(id,"RSXE69") == 0) return 377;//previous value was 337 - + //Wii Sports Resort, needs alt dol one time only, to show the Motion Plus video //if (strcmp(id,"RZTP01") == 0 && CheckForSave(id4)==0) return 952;//from isostar //if (strcmp(id,"RZTE01") == 0 && CheckForSave(id4)==0) return 674;//from starstremr //as well as Grand Slam Tennis, Tiger Woods 10, Virtual Tennis 2009 - + ///// games that can't be forced (alt dol is not always needed) if (!force) { - + //Grand Slam Tennis if (strcmp(id,"R5TP69") == 0) return 1493;//from isostar if (strcmp(id,"R5TE69") == 0) return 1493;//starstremr - + //Medal of Honor Heroes if (strcmp(id,"RMZX69") == 0) return 492;//from isostar if (strcmp(id,"RMZP69") == 0) return 492;//from isostar - if (strcmp(id,"RMZE69") == 0) return 492;//starstremr - + if (strcmp(id,"RMZE69") == 0) return 492;//starstremr + //Tiger Woods 10 if (strcmp(id,"R9OP69") == 0) return 1991;//from isostar if (strcmp(id,"R9OE69") == 0) return 1973;//starstremr - + //Virtual Tennis 2009 if (strcmp(id,"RVUP8P") == 0) return 16426;//from isostar if (strcmp(id,"RVUE8P") == 0) return 16405;//from isostar - + //Wii Sports Resort if (strcmp(id,"RZTP01") == 0) return 952;//from isostar if (strcmp(id,"RZTE01") == 0) return 674;//from starstremr } - + return -1; } @@ -323,7 +313,7 @@ int autoSelectDolMenu(const char *id, bool force) { /* char id4[10]; sprintf(id4,"%c%c%c%c",id[0],id[1],id[2],id[3]); - + switch (CheckForSave(id4)) { case 0: WindowPrompt(tr("NO save"),0,tr("OK")); @@ -339,7 +329,7 @@ int autoSelectDolMenu(const char *id, bool force) { } return -1; */ - + //Indiana Jones and the Staff of Kings (Fate of Atlantis) if (strcmp(id,"RJ8E64") == 0) { int choice = WindowPrompt(tr("Select a DOL"), 0, "Fate of Atlantis", tr("Default")); @@ -365,7 +355,7 @@ int autoSelectDolMenu(const char *id, bool force) { } return choice; } - + //Metal Slug Anthology (Metal Slug 6) if (strcmp(id,"RMLEH4") == 0) { int choice = WindowPrompt(tr("Select a DOL"), 0, "Metal Slug 6", tr("Default")); @@ -391,7 +381,7 @@ int autoSelectDolMenu(const char *id, bool force) { } return choice; } - + //Metroid Prime Trilogy if (strcmp(id,"R3ME01") == 0) { //do not use any alt dol if there is no save game in the nand @@ -442,7 +432,7 @@ int autoSelectDolMenu(const char *id, bool force) { } return choice; } - + //Rampage: Total Destruction (M1.dol=Rampage, jarvos.dol=Rampage World Tour) if (strcmp(id,"RPGP5D") == 0) { int choice = WindowPrompt(tr("Select a DOL"), 0, "Rampage", "World Tour", tr("Default")); @@ -459,7 +449,7 @@ int autoSelectDolMenu(const char *id, bool force) { } return choice; } - + //The House Of The Dead 2 & 3 Return (only to play 2) if (strcmp(id,"RHDE8P") == 0) { int choice = WindowPrompt(tr("Select a DOL"), 0, "HotD 2", tr("Default")); @@ -501,11 +491,11 @@ void __dvd_readidcb(s32 result) dvddone = result; } -u8 DiscMount(discHdr *header) { +u8 DiscMount1(discHdr *header) { gprintf("\nDiscMount() "); int ret; HaltGui(); - + u8 *tmpBuff = (u8 *) malloc(0x60); memcpy(tmpBuff, g_diskID, 0x60); // Make a backup of the first 96 bytes at 0x80000000 @@ -513,7 +503,7 @@ u8 DiscMount(discHdr *header) { dvddone = 0; ret = bwDVD_LowReset(__dvd_readidcb); while(ret>=0 && dvddone==0); - + dvddone = 0; ret = bwDVD_LowReadID(g_diskID, __dvd_readidcb); // Leave this one here, or you'll get an IOCTL error while(ret>=0 && dvddone==0); @@ -521,15 +511,65 @@ u8 DiscMount(discHdr *header) { dvddone = 0; ret = bwDVD_LowUnencryptedRead(g_diskID, 0x60, 0x00, __dvd_readidcb); // Overwrite the g_diskID thing while(ret>=0 && dvddone==0); - + memcpy(header, g_diskID, 0x60); memcpy(g_diskID, tmpBuff, 0x60); // Put the backup back, or games won't load free(tmpBuff); - + ResumeGui(); if (dvddone != 1) { return 0; } return (header->magic == 0x5D1C9EA3) ? 1 : 2; // Don't check gamecube magic (0xC2339F3D) } + +u8 DiscMount(discHdr *header) { + gprintf("\nDiscMount() "); + + HaltGui(); + GuiWindow w(screenwidth, screenheight); + + mainWindow->Append(&w); + + ResumeGui(); + +//HaltCheck(); + int ret = Disc_SetUSB(NULL); + ret = WDVD_Close(); + ret = Disc_Init(); + + + + + ret = DiscWait(tr("Insert Disk"),tr("Waiting..."),tr("Cancel"),0,0); + if (ret < 0) { + WindowPrompt (tr("Error reading Disc"),0,tr("Back")); + goto OUT; + } + mainWindow->SetState(STATE_DISABLED); + //gprintf("..1"); + ret = Disc_Open(); + if (ret < 0) { + WindowPrompt (tr("Could not open Disc"),0,tr("Back")); + goto OUT; + } + //gprintf("..2"); + Disc_ReadHeader(header); + //gprintf("..3"); + ret = Disc_IsWii(); + //gprintf("..4"); + //ResumeCheck(); + if (ret < 0) { + ret = 2; + } + ret = 1; + + + OUT: + HaltGui(); + mainWindow->Remove(&w); + mainWindow->SetState(STATE_DEFAULT); + ResumeGui(); + return ret; +} diff --git a/source/prompts/ProgressWindow.cpp b/source/prompts/ProgressWindow.cpp index b1ae11f7..25b5eea6 100644 --- a/source/prompts/ProgressWindow.cpp +++ b/source/prompts/ProgressWindow.cpp @@ -40,10 +40,6 @@ static time_t start; extern GuiWindow * mainWindow; extern float gamesize; -/*** Extern functions ***/ -extern void ResumeGui(); -extern void HaltGui(); - /**************************************************************************** * GameInstallProgress diff --git a/source/prompts/PromptWindows.cpp b/source/prompts/PromptWindows.cpp index cc6d0b5e..3327f8db 100644 --- a/source/prompts/PromptWindows.cpp +++ b/source/prompts/PromptWindows.cpp @@ -23,7 +23,6 @@ #include "fatmounter.h" #include "listfiles.h" #include "menu.h" -#include "menu.h" #include "filelist.h" #include "sys.h" #include "wpad.h" @@ -53,15 +52,10 @@ extern u32 gameCnt; extern s32 gameSelected, gameStart; extern float gamesize; extern struct discHdr * gameList; -extern u8 shutdown; -extern u8 reset; extern u8 mountMethod; extern struct discHdr *dvdheader; extern char game_partition[6]; - -/*** Extern functions ***/ -extern void ResumeGui(); -extern void HaltGui(); +extern u8 shutdown; /**************************************************************************** * OnScreenNumpad @@ -71,9 +65,9 @@ extern void HaltGui(); ***************************************************************************/ int OnScreenNumpad(char * var, u32 maxlen) { int save = -1; - + GuiNumpad numpad(var, maxlen); - + 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); @@ -104,7 +98,7 @@ int OnScreenNumpad(char * var, u32 maxlen) { GuiButton cancelBtn(&cancelBtnImg,&cancelBtnImg, 1, 4, -5, -15, &trigA, &btnSoundOver, btnClick2,1); cancelBtn.SetLabel(&cancelBtnTxt); cancelBtn.SetTrigger(&trigB); - + numpad.Append(&okBtn); numpad.Append(&cancelBtn); @@ -132,7 +126,7 @@ int OnScreenNumpad(char * var, u32 maxlen) { mainWindow->SetState(STATE_DEFAULT); ResumeGui(); gprintf("\t%s",(save == 1?"saved":"discarded")); - return save; + return save; } /**************************************************************************** @@ -696,17 +690,9 @@ int WindowPrompt(const char *title, const char *msg, const char *btn1Label, } - GuiTrigger trigZ; - 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(&dialogBoxImg); promptWindow.Append(&titleTxt); promptWindow.Append(&msgTxt); - promptWindow.Append(&screenShotBtn); if (btn1Label) promptWindow.Append(&btn1); @@ -726,12 +712,7 @@ int WindowPrompt(const char *title, const char *msg, const char *btn1Label, while (choice == -1) { VIDEO_WaitVSync(); - 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) { @@ -746,12 +727,7 @@ int WindowPrompt(const char *title, const char *msg, const char *btn1Label, choice = 3; } else if (btn4.GetState() == STATE_CLICKED) { choice = 0; - } else if (screenShotBtn.GetState() == STATE_CLICKED) { - gprintf("\n\tscreenShotBtn clicked"); - screenShotBtn.ResetState(); - ScreenShot(); - gprintf("...It's easy, mmmmmmKay"); - } + } if (count>0)count--; if (count==0) choice = 1; } @@ -978,12 +954,9 @@ int WindowExitPrompt() } - if (shutdown == 1) { + if (shutdown == 1) wiilight(0); - Sys_Shutdown(); - } - if (reset == 1) - Sys_Reboot(); + if (btn1.GetState() == STATE_CLICKED) { choice = 1; btn1.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_OUT, 50); @@ -1138,12 +1111,6 @@ int GameWindowPrompt() { trigPlus.SetButtonOnlyTrigger(-1, WPAD_BUTTON_PLUS | WPAD_CLASSIC_BUTTON_PLUS, 0); GuiTrigger trigMinus; trigMinus.SetButtonOnlyTrigger(-1, WPAD_BUTTON_MINUS | WPAD_CLASSIC_BUTTON_MINUS, 0); - GuiTrigger trigZ; - 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); if (CFG.widescreen) snprintf(imgPath, sizeof(imgPath), "%swdialogue_box_startgame.png", CFG.theme_path); @@ -1274,7 +1241,6 @@ int GameWindowPrompt() { promptWindow.Append(&dialogBoxImg); promptWindow.Append(&nameBtn); promptWindow.Append(&playcntTxt); - promptWindow.Append(&screenShotBtn); promptWindow.Append(&btn2); if (!mountMethod)//stuff we don't show if it is a DVD mounted { @@ -1295,7 +1261,7 @@ int GameWindowPrompt() { promptWindow.Append(&diskImg2); promptWindow.Append(&btn1); - + short changed = -1; GuiImageData * diskCover = NULL; GuiImageData * diskCover2 = NULL; @@ -1452,19 +1418,6 @@ int GameWindowPrompt() { diskImg.SetSpin(btn1.GetState() == STATE_SELECTED); diskImg2.SetSpin(btn1.GetState() == STATE_SELECTED); - if (shutdown == 1) { //for power button - promptWindow.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_OUT, 50); - mainWindow->SetState(STATE_DEFAULT); - while (promptWindow.GetEffect() > 0) usleep(50); - HaltGui(); - mainWindow->Remove(&promptWindow); - ResumeGui(); - wiilight(0); - Sys_Shutdown(); - } - - if (reset == 1) //for reset button - Sys_Reboot(); if(gameSound) { @@ -1544,12 +1497,6 @@ int GameWindowPrompt() { } btnFavorite5.ResetState(); } - else if (screenShotBtn.GetState() == STATE_CLICKED) { - gprintf("\n\tscreenShotBtn clicked"); - screenShotBtn.ResetState(); - ScreenShot(); - gprintf("...It's easy, mmmmmmKay"); - } // this next part is long because nobody could agree on what the left/right buttons should do else if ((btnRight.GetState() == STATE_CLICKED) && (Settings.xflip == no)) {//next game promptWindow.SetEffect(EFFECT_SLIDE_RIGHT | EFFECT_SLIDE_OUT, 50); @@ -2768,7 +2715,7 @@ int ProgressUpdateWindow() { } else { filesize = download_request("http://www.techjawa.com/usbloadergx/ULNR.file");//for some reason it didn't download completely when saved as a wad. } - + if (filesize > 0) { pfile = fopen(dolpath, "wb");//here we save the txt as a wad @@ -2887,7 +2834,7 @@ int ProgressUpdateWindow() { return 1; } -#else +#else int ProgressUpdateWindow() { gprintf("\nProgressUpdateWindow(not full channel)"); @@ -3051,7 +2998,7 @@ int ProgressUpdateWindow() { promptWindow.Append(&progressbarOutlineImg); promptWindow.Append(&prTxt); msgTxt.SetTextf("%s Rev%i", tr("Update to"), newrev); - + s32 filesize; if (Settings.beta_upgrades) { char url[255]; @@ -3569,14 +3516,6 @@ HBCWindowPrompt(const char *name, const char *coder, const char *version, btn2.SetAlignment(ALIGN_RIGHT, ALIGN_BOTTOM); btn2.SetPosition(-40, 2); - GuiTrigger trigZ; - 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); if (strcmp(long_description,""))promptWindow.Append(&whiteBoxImg); if (strcmp(long_description,""))promptWindow.Append(&scrollbarImg); @@ -3603,23 +3542,15 @@ HBCWindowPrompt(const char *name, const char *coder, const char *version, while (choice == -1) { VIDEO_WaitVSync(); - if (shutdown == 1) { + + 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) { choice = 0; } - else if (screenShotBtn.GetState() == STATE_CLICKED) { - gprintf("\n\tscreenShotBtn clicked"); - screenShotBtn.ResetState(); - ScreenShot(); - gprintf("...It's easy, mmmmmmKay"); - } else if ((arrowUpBtn.GetState()==STATE_CLICKED||arrowUpBtn.GetState()==STATE_HELD) ) { if (long_descriptionTxt.GetFirstLine()>1) long_descriptionTxt.SetFirstLine(long_descriptionTxt.GetFirstLine()-1); diff --git a/source/prompts/TitleBrowser.cpp b/source/prompts/TitleBrowser.cpp index e4245c7c..a64e66fc 100644 --- a/source/prompts/TitleBrowser.cpp +++ b/source/prompts/TitleBrowser.cpp @@ -20,6 +20,7 @@ #include "settings/cfg.h" #include "sys.h" #include "menu.h" +#include "../menu/menus.h" #include "audio.h" #include "wad/wad.h" #include "xml/xml.h" @@ -37,14 +38,8 @@ u32 titleCnt; extern struct discHdr * gameList; extern u32 gameCnt; -/*** Extern functions ***/ -extern void ResumeGui(); -extern void HaltGui(); - /*** Extern variables ***/ extern GuiWindow * mainWindow; -extern u8 shutdown; -extern u8 reset; extern u32 infilesize; extern wchar_t *gameFilter; @@ -123,7 +118,7 @@ int TitleBrowser(u32 type) { char line[200]; char tmp[50]; snprintf(tmp,50," "); - + //check if the content.bin is on the SD card for that game //if there is content.bin,then the game is on the SDmenu and not the wii sprintf(line,"SD:/private/wii/title/%s/content.bin",text); @@ -295,16 +290,8 @@ int TitleBrowser(u32 type) { wifiBtn.SetAlpha(80); wifiBtn.SetTrigger(&trigA); - GuiTrigger trigZ; - 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); - HaltGui(); GuiWindow w(screenwidth, screenheight); - w.Append(&screenShotBtn); w.Append(&settingsbackgroundbtn); w.Append(&titleTxt); w.Append(&cancelBtn); @@ -320,12 +307,7 @@ int TitleBrowser(u32 type) { while (!exit) { VIDEO_WaitVSync(); - if (shutdown == 1) - Sys_Shutdown(); - if (reset == 1) - Sys_Reboot(); - - else if (wifiBtn.GetState() == STATE_CLICKED) { + if (wifiBtn.GetState() == STATE_CLICKED) { ResumeNetworkWait(); wifiBtn.ResetState(); @@ -418,7 +400,7 @@ int TitleBrowser(u32 type) { char temp[50]; char filepath[100]; u32 read = 0; - + //make sure there is a folder for this to be saved in struct stat st; snprintf(filepath, sizeof(filepath), "%s/wad/", bootDevice); @@ -428,7 +410,7 @@ int TitleBrowser(u32 type) { } } snprintf(filepath, sizeof(filepath), "%s/wad/tmp.tmp", bootDevice); - + if (infilesize < MB_SIZE) snprintf(filesizetxt, sizeof(filesizetxt), tr("Incoming file %0.2fKB"), infilesize/KB_SIZE); @@ -512,9 +494,9 @@ int TitleBrowser(u32 type) { w.Remove(&wifiBtn); w.Remove(&optionBrowser3); ResumeGui(); - + Wad_Install(file); - + HaltGui(); w.Append(&titleTxt); w.Append(&cancelBtn); @@ -547,12 +529,6 @@ int TitleBrowser(u32 type) { exit = true; ret = -10; } - else if (screenShotBtn.GetState() == STATE_CLICKED) { - gprintf("\n\tscreenShotBtn clicked"); - screenShotBtn.ResetState(); - ScreenShot(); - gprintf("...It's easy, mmmmmmKay"); - } } CloseConnection(); diff --git a/source/prompts/filebrowser.cpp b/source/prompts/filebrowser.cpp index 07db483b..55af9882 100644 --- a/source/prompts/filebrowser.cpp +++ b/source/prompts/filebrowser.cpp @@ -20,6 +20,7 @@ #include #include "menu.h" +#include "../menu/menus.h" #include "listfiles.h" #include "language/gettext.h" @@ -27,15 +28,10 @@ #include "libwiigui/gui.h" #include "sys.h" #include "filebrowser.h" +#include "../menu.h" /*** Extern variables ***/ extern GuiWindow * mainWindow; -extern u8 shutdown; -extern u8 reset; - -/*** Extern functions ***/ -extern void ResumeGui(); -extern void HaltGui(); static int curDevice = -1; static std::vector browsers; @@ -317,7 +313,7 @@ int BrowseDevice(char * Path, int Path_size, int Flags, FILTERCASCADE *Filter/*= folderBtn.SetImage(&folderImg); folderBtn.SetTrigger(&trigA); folderBtn.SetEffectGrow(); - + char imgPath[100]; snprintf(imgPath, sizeof(imgPath), "%sbutton_dialogue_box.png", CFG.theme_path); GuiImageData btnOutline(imgPath, button_dialogue_box_png); @@ -393,12 +389,6 @@ int BrowseDevice(char * Path, int Path_size, int Flags, FILTERCASCADE *Filter/*= while (menu == MENU_NONE) { VIDEO_WaitVSync(); - if (shutdown == 1) - Sys_Shutdown(); - - if (reset == 1) - Sys_Reboot(); - for (i=0; iGetState() == STATE_CLICKED) { fileBrowser.fileList[i]->ResetState(); @@ -486,7 +476,7 @@ int BrowseDevice(char * Path, int Path_size, int Flags, FILTERCASCADE *Filter/*= char oldfolder[100]; snprintf(newfolder, sizeof(newfolder), "%s%s", browser->rootdir, browser->dir); strcpy(oldfolder,newfolder); - + int result = OnScreenKeyboard(newfolder, sizeof(newfolder), strlen(browser->rootdir)); if ( result == 1 ) { unsigned int len = strlen(newfolder); diff --git a/source/prompts/gameinfo.cpp b/source/prompts/gameinfo.cpp index 7e8325c2..580bc48b 100644 --- a/source/prompts/gameinfo.cpp +++ b/source/prompts/gameinfo.cpp @@ -19,22 +19,18 @@ #include "gameinfo.h" #include "usbloader/getentries.h" #include "../gecko.h" +#include "../menu.h" +#include "../menu/menus.h" /*** Extern variables ***/ extern GuiWindow * mainWindow; extern GuiSound * bgMusic; -extern u8 shutdown; -extern u8 reset; extern struct gameXMLinfo gameinfo; extern struct gameXMLinfo gameinfo_reset; extern u32 gameCnt; extern struct discHdr * gameList; -/*** Extern functions ***/ -extern void ResumeGui(); -extern void HaltGui(); - /**************************************************************************** * gameinfo @@ -714,7 +710,7 @@ int showGameInfo(char *ID) { snprintf(linebuf, sizeof(linebuf), "%s:",tr("WiFi Features")); } else { strcpy(linebuf,""); - } + } wifiTxt[0] = new GuiText(linebuf, 16, (GXColor) {0,0,0, 255}); wifiTxt[0]->SetAlignment(ALIGN_LEFT, ALIGN_TOP); wifiTxt[0]->SetPosition(205,200+wifiY); @@ -781,13 +777,6 @@ int showGameInfo(char *ID) { gameinfoWindow.SetEffect(EFFECT_SLIDE_LEFT | EFFECT_SLIDE_IN, 100); - GuiTrigger trigZ; - 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); - gameinfoWindow.Append(&screenShotBtn); HaltGui(); //mainWindow->SetState(STATE_DISABLED); mainWindow->Append(&gameinfoWindow); @@ -799,13 +788,8 @@ int showGameInfo(char *ID) { while (choice == -1) { VIDEO_WaitVSync(); - if (shutdown == 1) { - wiilight(0); - Sys_Shutdown(); - } else if (reset == 1) - Sys_Reboot(); - else if ((backBtn.GetState()==STATE_CLICKED)||(backBtn.GetState()==STATE_HELD)) { + if ((backBtn.GetState()==STATE_CLICKED)||(backBtn.GetState()==STATE_HELD)) { backBtn.ResetState(); if (page==1) { choice=1; @@ -816,13 +800,11 @@ int showGameInfo(char *ID) { gameinfoWindow2.Remove(&nextBtn); gameinfoWindow2.Remove(&backBtn); gameinfoWindow2.Remove(&homeBtn); - gameinfoWindow2.Remove(&screenShotBtn); gameinfoWindow2.SetVisible(false); gameinfoWindow.SetVisible(true); gameinfoWindow.Append(&backBtn); gameinfoWindow.Append(&nextBtn); gameinfoWindow.Append(&homeBtn); - gameinfoWindow.Append(&screenShotBtn); mainWindow->Remove(&gameinfoWindow2); ResumeGui(); page=1; @@ -835,14 +817,12 @@ int showGameInfo(char *ID) { gameinfoWindow.Remove(&nextBtn); gameinfoWindow.Remove(&backBtn); gameinfoWindow.Remove(&homeBtn); - gameinfoWindow.Remove(&screenShotBtn); gameinfoWindow.SetVisible(false); gameinfoWindow2.SetVisible(true); coverImg->SetPosition(15,30); gameinfoWindow2.Append(&nextBtn); gameinfoWindow2.Append(&backBtn); gameinfoWindow2.Append(&homeBtn); - gameinfoWindow2.Append(&screenShotBtn); mainWindow->Append(&gameinfoWindow2); ResumeGui(); page=2; @@ -851,13 +831,11 @@ int showGameInfo(char *ID) { gameinfoWindow2.Remove(&nextBtn); gameinfoWindow2.Remove(&backBtn); gameinfoWindow2.Remove(&homeBtn); - gameinfoWindow2.Remove(&screenShotBtn); gameinfoWindow2.SetVisible(false); gameinfoWindow.SetVisible(true); gameinfoWindow.Append(&backBtn); gameinfoWindow.Append(&nextBtn); gameinfoWindow.Append(&homeBtn); - gameinfoWindow.Append(&screenShotBtn); mainWindow->Remove(&gameinfoWindow2); ResumeGui(); page=1; @@ -916,12 +894,6 @@ int showGameInfo(char *ID) { } urlBtn.ResetState(); } - else if (screenShotBtn.GetState() == STATE_CLICKED) { - gprintf("\n\tscreenShotBtn clicked"); - screenShotBtn.ResetState(); - ScreenShot(); - gprintf("...It's easy, mmmmmmKay"); - } } if (page==1) { gameinfoWindow.SetEffect(EFFECT_SLIDE_LEFT | EFFECT_SLIDE_OUT, 100); @@ -1103,10 +1075,10 @@ bool save_XML_URL() { // save xml url as as txt file for people without wifi sleep(1); return false; } - + char XMLurl[3540]; build_XML_URL(XMLurl,sizeof(XMLurl)); - + fprintf(f, "# USB Loader Has Saved this file\n"); fprintf(f, "# This URL was created based on your list of games and language settings.\n"); fclose(f); diff --git a/source/settings/Settings.cpp b/source/settings/Settings.cpp index 3e1d7384..f6e262f6 100644 --- a/source/settings/Settings.cpp +++ b/source/settings/Settings.cpp @@ -13,6 +13,7 @@ #include "cheats/cheatmenu.h" #include "fatmounter.h" #include "menu.h" +#include "menu/menus.h" #include "filelist.h" #include "listfiles.h" #include "sys.h" @@ -23,9 +24,6 @@ #define MAXOPTIONS 13 -/*** Extern functions ***/ -extern void ResumeGui(); -extern void HaltGui(); extern void titles_default(); /*** Extern variables ***/ @@ -34,8 +32,6 @@ extern GuiSound * bgMusic; extern GuiImage * bgImg; extern GuiImageData * pointer[4]; extern GuiImageData * background; -extern u8 shutdown; -extern u8 reset; extern u8 mountMethod; extern struct discHdr *dvdheader; extern PartList partitions; @@ -76,7 +72,7 @@ int MenuSettings() int opt_override = Settings.titlesOverride; // backup partition index u8 settingspartitionold = Settings.partition; - + enum { @@ -537,7 +533,7 @@ int MenuSettings() snprintf(MainButtonText, sizeof(MainButtonText), "%s", tr("Theme Downloader")); MainButton1Txt.SetText(MainButtonText); - snprintf(MainButtonText, sizeof(MainButtonText), "%s", tr(" ")); + snprintf(MainButtonText, sizeof(MainButtonText), "%s", tr("Partition Format Menu")); MainButton2Txt.SetText(MainButtonText); snprintf(MainButtonText, sizeof(MainButtonText), "%s", tr(" ")); MainButton3Txt.SetText(MainButtonText); @@ -557,6 +553,7 @@ int MenuSettings() w.Append(&GoRightBtn); w.Append(&GoLeftBtn); w.Append(&MainButton1); + w.Append(&MainButton2); PageIndicatorBtn1.SetAlpha(50); PageIndicatorBtn2.SetAlpha(50); @@ -611,10 +608,6 @@ int MenuSettings() { VIDEO_WaitVSync (); - if (shutdown == 1) - Sys_Shutdown(); - if (reset == 1) - Sys_Reboot(); if ( pageToDisplay == 1 ) { @@ -658,12 +651,7 @@ int MenuSettings() returnhere = 1; - if (shutdown == 1) - Sys_Shutdown(); - if (reset == 1) - Sys_Reboot(); - - else if (backBtn.GetState() == STATE_CLICKED) + if (backBtn.GetState() == STATE_CLICKED) { backBtn.ResetState(); exit = true; @@ -865,7 +853,7 @@ int MenuSettings() static const char *opts[settings_screensaver_max] = {trNOOP("OFF"),trNOOP("3 min"),trNOOP("5 min"),trNOOP("10 min"),trNOOP("20 min"),trNOOP("30 min"),trNOOP("1 hour")}; options2.SetValue(Idx,"%s",tr(opts[Settings.screensaver])); } - + if(ret == ++Idx || firstRun) { if(firstRun) options2.SetName(Idx, "%s",tr("Mark new games")); @@ -920,12 +908,7 @@ int MenuSettings() { VIDEO_WaitVSync (); - if (shutdown == 1) - Sys_Shutdown(); - if (reset == 1) - Sys_Reboot(); - - else if (backBtn.GetState() == STATE_CLICKED) + if (backBtn.GetState() == STATE_CLICKED) { backBtn.ResetState(); exit = true; @@ -1010,7 +993,7 @@ int MenuSettings() else options2.SetValue(Idx, "********"); } - + if (ret == ++Idx || firstRun) { if (firstRun) options2.SetName(Idx, "%s", tr("Partition")); @@ -1022,23 +1005,23 @@ int MenuSettings() } while (!IsValidPartition(partitions.pinfo[Settings.partition].fs_type, Settings.cios)); } - + PartInfo pInfo = partitions.pinfo[Settings.partition]; f32 partition_size = partitions.pentry[Settings.partition].size * (partitions.sector_size / GB_SIZE); - + // Get the partition name and it's size in GB's options2.SetValue(Idx,"%s%d (%.2fGB)", pInfo.fs_type == FS_TYPE_FAT32 ? "FAT" : pInfo.fs_type == FS_TYPE_NTFS ? "NTFS" : "WBFS", pInfo.index, partition_size); } - + if (ret == ++Idx || firstRun) { if (firstRun) options2.SetName(Idx, "%s", tr("FAT: Use directories")); if (ret == Idx) { Settings.FatInstallToDir = Settings.FatInstallToDir == 0 ? 1 : 0; } - options2.SetValue(Idx, "%s", tr(opts_no_yes[Settings.FatInstallToDir])); + options2.SetValue(Idx, "%s", tr(opts_no_yes[Settings.FatInstallToDir])); } if(ret == ++Idx || firstRun) @@ -1119,12 +1102,7 @@ int MenuSettings() { VIDEO_WaitVSync (); - if (shutdown == 1) - Sys_Shutdown(); - if (reset == 1) - Sys_Reboot(); - - else if (backBtn.GetState() == STATE_CLICKED) + if (backBtn.GetState() == STATE_CLICKED) { backBtn.ResetState(); exit = true; @@ -1167,7 +1145,7 @@ int MenuSettings() { char entered[20]; memset(entered, 0, 20); - + //password check to unlock Install,Delete and Format w.Remove(&optionBrowser2); w.Remove(&backBtn); @@ -1294,11 +1272,7 @@ int MenuSettings() bool returnhere = true; - if (shutdown == 1) - Sys_Shutdown(); - if (reset == 1) - Sys_Reboot(); - else if (backBtn.GetState() == STATE_CLICKED) + if (backBtn.GetState() == STATE_CLICKED) { backBtn.ResetState(); exit = true; @@ -1474,12 +1448,8 @@ int MenuSettings() { VIDEO_WaitVSync (); - if (shutdown == 1) - Sys_Shutdown(); - if (reset == 1) - Sys_Reboot(); - else if (backBtn.GetState() == STATE_CLICKED) + if (backBtn.GetState() == STATE_CLICKED) { backBtn.ResetState(); exit = true; @@ -1888,7 +1858,7 @@ int MenuSettings() } options2.SetValue(Idx, "%s", Settings.BcaCodepath); } - + if(ret == ++Idx || firstRun) { if(firstRun) options2.SetName(Idx, "%s", tr("WIP Patches Path")); @@ -2048,6 +2018,20 @@ int MenuSettings() pageToDisplay = 0; break; } + if (MainButton2.GetState() == STATE_CLICKED) + { + if(Settings.godmode == 1) + { + if (isInserted(bootDevice)) + cfg_save_global(); + menu = MENU_FORMAT; + pageToDisplay = 0; + break; + } + else + WindowPrompt(tr("You can't access this menu!"), tr("Unlock the app first."), tr("OK")); + MainButton2.ResetState(); + } } @@ -2146,7 +2130,7 @@ int MenuSettings() w.SetEffect(EFFECT_FADE, -20); while (w.GetEffect()>0) usleep(50); - // if partition has changed, Reinitialize it + // if partition has changed, Reinitialize it PartInfo pinfo = partitions.pinfo[Settings.partition]; partitionEntry pentry = partitions.pentry[Settings.partition]; load_from_fs = pinfo.part_fs; @@ -2154,7 +2138,7 @@ int MenuSettings() WBFS_Close(); WBFS_OpenPart(load_from_fs, pinfo.index, pentry.sector, pentry.size, (char *) &game_partition); } - + // if language has changed, reload titles char opt_langnew[100]; strcpy(opt_langnew,Settings.language_path); @@ -2428,7 +2412,7 @@ int GameSettings(struct discHdr * header) iosChoice = i250; else if (Settings.cios == ios223) iosChoice = i223; - else + else iosChoice = i249; parentalcontrolChoice = 0; fix002 = Settings.error002; @@ -2449,11 +2433,6 @@ int GameSettings(struct discHdr * header) { VIDEO_WaitVSync (); - if (shutdown == 1) - Sys_Shutdown(); - if (reset == 1) - Sys_Reboot(); - if (MainButton1.GetState() == STATE_CLICKED) { w.Append(&saveBtn); @@ -2489,10 +2468,6 @@ int GameSettings(struct discHdr * header) returnhere = 1; - if (shutdown == 1) - Sys_Shutdown(); - if (reset == 1) - Sys_Reboot(); if (backBtn.GetState() == STATE_CLICKED) { backBtn.ResetState(); @@ -2762,10 +2737,6 @@ int GameSettings(struct discHdr * header) { VIDEO_WaitVSync (); - if (shutdown == 1) - Sys_Shutdown(); - if (reset == 1) - Sys_Reboot(); if (backBtn.GetState() == STATE_CLICKED) { backBtn.ResetState(); diff --git a/source/settings/SettingsPrompts.cpp b/source/settings/SettingsPrompts.cpp index 6a87e2c3..4d6ca187 100644 --- a/source/settings/SettingsPrompts.cpp +++ b/source/settings/SettingsPrompts.cpp @@ -10,6 +10,7 @@ #include "settings/cfg.h" #include "network/URL_List.h" #include "listfiles.h" +#include "menu/menus.h" #include "main.h" #include "fatmounter.h" #include "filelist.h" @@ -20,13 +21,6 @@ /*** Extern variables ***/ extern GuiWindow * mainWindow; extern GuiSound * bgMusic; -extern u8 shutdown; -extern u8 reset; - -/*** Extern functions ***/ -extern void ResumeGui(); -extern void HaltGui(); - /**************************************************************************** * MenuOGG @@ -183,11 +177,6 @@ bool MenuOGG() { while (!returnhere) { - if (shutdown == 1) - Sys_Shutdown(); - if (reset == 1) - Sys_Reboot(); - if (backBtn.GetState() == STATE_CLICKED) { if (nothingchanged == 1 && countoggs > 0) { if (strcmp("", Settings.oggload_path) && strcmp("notset", Settings.ogg_path)) { @@ -453,12 +442,7 @@ int MenuLanguageSelect() { while (!returnhere) { - if (shutdown == 1) - Sys_Shutdown(); - else if (reset == 1) - Sys_Reboot(); - - else if (backBtn.GetState() == STATE_CLICKED) { + if (backBtn.GetState() == STATE_CLICKED) { backBtn.ResetState(); break; diff --git a/source/settings/cfg.c b/source/settings/cfg.c index 4deba6ff..36460762 100644 --- a/source/settings/cfg.c +++ b/source/settings/cfg.c @@ -366,7 +366,7 @@ void Global_Default(void) { Settings.partitions_to_install = install_game_only; Settings.fullcopy = 0; Settings.beta_upgrades = 0; - + memset(&Settings.parental, 0, sizeof(struct SParental)); char buf[0x4a]; @@ -385,7 +385,11 @@ void Global_Default(void) { } -char *cfg_get_title(u8 *id) { +char *cfg_get_title(u8 *id) +{ + if(!id) + return NULL; + int i; for (i=0; i= 0 && (ios222rev != 4 && ios222rev != 5))return -2; } else if (ios==223) - { + { if (ios223rev == -69) ios223rev = getIOSrev(0x00000001000000dfll); - + if (ios223rev >= 0 && (ios223rev != 4 && ios223rev != 5))return -2; } else if (ios==249) - { + { if (ios249rev == -69) - ios249rev = getIOSrev(0x00000001000000f9ll); - + ios249rev = getIOSrev(0x00000001000000f9ll); + if (ios249rev >= 0 && !(ios249rev>=9 && ios249rev<65280))return -2; } else if (ios==250) - { + { if (ios250rev == -69) ios250rev = getIOSrev(0x00000001000000fall); - + if (ios250rev >= 0 && !(ios250rev>=9 && ios250rev<65280))return -2; } - + s32 r = IOS_ReloadIOS(ios); if (r >= 0) { WII_Initialize(); @@ -263,6 +279,120 @@ s32 IOS_ReloadIOSsafe(int ios) return r; } + + +s32 CheckForCIOS() +{ + gprintf("\n\tChecking for stub IOS"); + s32 ret = -1; + s32 ios222rev = getIOSrev(0x00000001000000dell); + s32 ios249rev = getIOSrev(0x00000001000000f9ll); + + //if we don't like either of the cIOS then scram + if (!(ios222rev==4 || ios222rev==5 || (ios249rev>=9 && ios249rev<65280))) + { + InitTextVideo(); + printf("\x1b[2J"); + if ((ios222rev < 0 && ios222rev != WII_EINSTALL) && (ios249rev < 0 && ios249rev != WII_EINSTALL)) { + printf("\n\n\n\tWARNING!"); + printf("\n\tUSB Loader GX needs unstubbed cIOS 222 v4 or 249 v9+"); + printf("\n\n\tWe cannot determine the versions on your system,\n\tsince you have no patched ios 36 or 236 installed."); + printf("\n\tTherefor, if loading of USB Loader GX fails, you\n\tprobably have installed the 4.2 update,"); + printf("\n\tand you should go figure out how to get some cios action going on\n\tin your Wii."); + printf("\n\n\tThis message will show every time."); + sleep(5); + } else { + printf("\n\n\n\tERROR!"); + printf("\n\tUSB Loader GX needs unstubbed cIOS 222 v4 or 249 v9+"); + printf("\n\n\tI found \n\t\t222 = %d%s",ios222rev,ios222rev==65280?" (Stubbed by 4.2 update)":""); + printf("\n\t\t249 = %d%s",ios249rev,ios249rev==65280?" (Stubbed by 4.2 update)":""); + printf("\n\n\tGo figure out how to get some cIOS action going on\n\tin your Wii and come back and see me."); + + sleep(15); + printf("\n\n\tBye"); + + USBDevice_deInit(); + exit(0); + } + } + + printf("\n\tReloading ios 249..."); + ret = IOS_ReloadIOSsafe(249); + + printf("%d", ret); + + if (ret < 0) + { + printf("\n\tIOS 249 failed, reloading ios 222..."); + ret = IOS_ReloadIOSsafe(222); + printf("%d", ret); + if (ret < 0) { + printf("\n\tIOS 222 failed, reloading ios 250..."); + ret = IOS_ReloadIOSsafe(250); + printf("%d", ret); + if (ret < 0) { + printf("\n\tERROR: cIOS could not be loaded!\n"); + sleep(5); + SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0); + } + } + else + { + //only for 222 loading ehc modules + printf("\n\tLoad ehc module"); + load_ehc_module(); + } + } + + return ret; +} + +int LoadAppCIOS() +{ + s32 ret = 1; + /* Load Custom IOS */ + if (Settings.cios == ios222 && IOS_GetVersion() != 222) + { + printf("\n\tReloading IOS to config setting (%d)...", ios222 ? 222 : 223); + SDCard_deInit();// unmount SD for reloading IOS + USBDevice_deInit();// unmount USB for reloading IOS + USBStorage_Deinit(); + ret = IOS_ReloadIOSsafe(ios222 ? 222 : 223); + printf("%d", ret); + if (ret < 0) + { + Settings.cios = ios249; + IOS_ReloadIOSsafe(249); + } + + SDCard_Init(); + USBDevice_Init(); // and mount USB:/ + if(ret >= 0) + load_ehc_module(); + } + else if ((Settings.cios == ios249 && IOS_GetVersion() != 249) || + (Settings.cios == ios250 && IOS_GetVersion() != 250)) + { + printf("\n\tReloading IOS to config setting (%d)...", ios249 ? 249 : 250); + SDCard_deInit();// unmount SD for reloading IOS + USBDevice_deInit();// unmount USB for reloading IOS + USBStorage_Deinit(); + ret = IOS_ReloadIOSsafe(ios249 ? 249 : 250); + printf("%d", ret); + if (ret < 0) { + Settings.cios = ios222; + ret = IOS_ReloadIOSsafe(222); + SDCard_Init(); + load_ehc_module(); + } + + else SDCard_Init(); // now mount SD:/ //no need to keep mindlessly mounting and unmounting SD card + USBDevice_Init(); // and mount USB:/ + } + + return ret; +} + #include void ScreenShot() diff --git a/source/sys.h b/source/sys.h index 2ee89d1b..e2dd3169 100644 --- a/source/sys.h +++ b/source/sys.h @@ -13,6 +13,8 @@ void Sys_LoadMenu(void); void Sys_BackToLoader(void); int Sys_ChangeIos(int ios); int Sys_IosReload(int IOS); +s32 CheckForCIOS(); +int LoadAppCIOS(); bool Sys_IsHermes(); s32 IOS_ReloadIOSsafe(int ios); void ScreenShot(); diff --git a/source/themes/Theme_Downloader.cpp b/source/themes/Theme_Downloader.cpp index b1d00630..e3109dc5 100644 --- a/source/themes/Theme_Downloader.cpp +++ b/source/themes/Theme_Downloader.cpp @@ -24,16 +24,10 @@ #include "ZipFile.h" #include "gecko.h" -/*** Extern functions ***/ -extern void ResumeGui(); -extern void HaltGui(); - /*** Extern variables ***/ extern GuiWindow * mainWindow; extern GuiSound * bgMusic; extern GuiImage * bgImg; -extern u8 shutdown; -extern u8 reset; int DownloadTheme(const char *url, const char *title) @@ -245,11 +239,6 @@ static int Theme_Prompt(const char *title, const char *author, GuiImageData *thu { VIDEO_WaitVSync(); - if (shutdown == 1) - Sys_Shutdown(); - else if (reset == 1) - Sys_Reboot(); - if (downloadBtn.GetState() == STATE_CLICKED) { int choice = WindowPrompt(tr("Do you want to download this theme?"), title, tr("Yes"), tr("Cancel")); @@ -579,12 +568,7 @@ int Theme_Downloader() { VIDEO_WaitVSync (); - if (shutdown == 1) - Sys_Shutdown(); - else if (reset == 1) - Sys_Reboot(); - - else if (wifiBtn.GetState() == STATE_CLICKED) + if (wifiBtn.GetState() == STATE_CLICKED) { Initialize_Network(); wifiBtn.ResetState(); diff --git a/source/usbloader/getentries.cpp b/source/usbloader/getentries.cpp index afd54079..e6328f95 100644 --- a/source/usbloader/getentries.cpp +++ b/source/usbloader/getentries.cpp @@ -9,6 +9,7 @@ #include "../prompts/TitleBrowser.h" +#include "../gecko.h" #include "wad/wad.h" #include "xml/xml.h" #include "../wad/title.h" @@ -50,9 +51,9 @@ static inline int wcsnicmp(const wchar_t *s1, const wchar_t *s2, int len) if (*s1++ == 0) break; } while (--len != 0); - + return (0); -} +} /**************************************************************************** @@ -131,7 +132,7 @@ int __Menu_GetPrevFilter(int t, wchar_t* gameFilter, u32 gameFiltered, wchar_t * struct discHdr *buffer = NULL; u32 cnt, len, i; s32 ret; - + wchar_t *new_gameFilterPrev = wcsdup_new(gameFilter); @@ -182,8 +183,8 @@ int __Menu_GetPrevFilter(int t, wchar_t* gameFilter, u32 gameFiltered, wchar_t * { // Check game rating in WiiTDB, since the default Wii parental control setting is enabled s32 rating = GetRatingForGame((char *) header->id); - - if ((rating != -1 && rating > Settings.parental.rating) || + + if ((rating != -1 && rating > Settings.parental.rating) || (rating == -1 && get_pegi_block(header) > Settings.parental.rating)) { continue; @@ -193,7 +194,7 @@ int __Menu_GetPrevFilter(int t, wchar_t* gameFilter, u32 gameFiltered, wchar_t * wchar_t *wname = FreeTypeGX::charToWideChar(get_title(header)); if(wname) nameList.push_back(wname); } - + NewTitles::Instance()->Save(); /* delete buffer */ @@ -225,7 +226,7 @@ int __Menu_GetPrevFilter(int t, wchar_t* gameFilter, u32 gameFiltered, wchar_t * /**************************************************************************** * Get GameFilter NextList ***************************************************************************/ - + int int_cmp(const void *a, const void *b) { return *((u32*)a)-*((u32*)b); } int __Menu_GetGameFilter_NextList(discHdr *gameList, u32 gameCnt, wchar_t **PgameFilter, wchar_t **PgameFilterNextList) @@ -248,15 +249,15 @@ int __Menu_GetGameFilter_NextList(discHdr *gameList, u32 gameCnt, wchar_t **Pgam } else if(wcslen(gameName) == filter_len) autofill = false; // no autofill when gameNameLen == filterLen - + nextList[i] = nextFilterChar; } qsort(nextList, gameCnt, sizeof(u32), int_cmp); - + *PgameFilterNextList = new wchar_t[gameCnt+1]; if(*PgameFilterNextList == NULL) goto error; - - + + p = *PgameFilterNextList; lastChar = 0; for(i=0; iid[4]='1'; header->id[5]=(i - + //not using these filters right now, but i left them in just in case // Filters /*if (Settings.fave) { @@ -401,32 +402,32 @@ int buildTitleList(int t, wchar_t* gameFilter, discHdr ** PgameList, u32 *PgameC if (!game_num || game_num->favorite==0) continue; } - + if (Settings.parentalcontrol && !Settings.godmode) { if (get_block(header) >= Settings.parentalcontrol) continue; }*/ - - if(gameFilter && *gameFilter) { + + /*if(gameFilter && *gameFilter) { u32 filter_len = wcslen(gameFilter); wchar_t *gameName = FreeTypeGX::charToWideChar(get_title(header)); if (!gameName || wcsnicmp(gameName, gameFilter, filter_len)) { delete [] gameName; continue; } - } + }*/ if(i != cnt2) buffer[cnt2] = buffer[i]; cnt2++; } i++; } - + if (f)fclose(f); Uninstall_FromTitle(TITLE_ID(1, 0)); ISFS_Deinitialize(); - + if(cnt > cnt2) { cnt = cnt2; @@ -434,7 +435,7 @@ int buildTitleList(int t, wchar_t* gameFilter, discHdr ** PgameList, u32 *PgameC } if (!buffer) return -1; - + if (Settings.sort==pcount) { qsort(buffer, cnt, sizeof(struct discHdr), __Menu_EntryCmpCount); } else if (Settings.fave) { @@ -445,12 +446,12 @@ int buildTitleList(int t, wchar_t* gameFilter, discHdr ** PgameList, u32 *PgameC /*PgameList = buffer; buffer = NULL; PgameCnt = cnt;*/ - + if(PgameList) *PgameList = buffer; else free(buffer); if(PgameCnt) *PgameCnt = cnt; - + return 0; - + return cnt; } @@ -469,7 +470,7 @@ int __Menu_GetGameList(int t, wchar_t* gameFilter, discHdr ** PgameList, u32 *Pg ret = WBFS_GetCount(&cnt); if (ret < 0) return ret; - +//gprintf("\n WBFS_GetCount:%d",cnt); /* Buffer length */ len = sizeof(struct discHdr) * cnt; @@ -487,7 +488,7 @@ int __Menu_GetGameList(int t, wchar_t* gameFilter, discHdr ** PgameList, u32 *Pg if (buffer) free(buffer); return ret; } - + for (u32 i = 0; i < cnt; i++) { struct discHdr *header = &buffer[i]; @@ -506,7 +507,7 @@ int __Menu_GetGameList(int t, wchar_t* gameFilter, discHdr ** PgameList, u32 *Pg header->id[2]=='C'&&header->id[3]=='F'&& header->id[4]=='G'&&header->id[5]=='_') continue; - + if (Settings.parentalcontrol && !Settings.godmode && t==0) { if (get_block(header) >= Settings.parentalcontrol) continue; @@ -517,13 +518,13 @@ int __Menu_GetGameList(int t, wchar_t* gameFilter, discHdr ** PgameList, u32 *Pg { // Check game rating in WiiTDB, since the default Wii parental control setting is enabled s32 rating = GetRatingForGame((char *) header->id); - if ((rating != -1 && rating > Settings.parental.rating) || + if ((rating != -1 && rating > Settings.parental.rating) || (rating == -1 && get_pegi_block(header) > Settings.parental.rating)) { continue; } } - + if(gameFilter && *gameFilter && t==0) { u32 filter_len = wcslen(gameFilter); wchar_t *gameName = FreeTypeGX::charToWideChar(get_title(header)); @@ -537,7 +538,7 @@ int __Menu_GetGameList(int t, wchar_t* gameFilter, discHdr ** PgameList, u32 *Pg cnt2++; } NewTitles::Instance()->Save(); - + if(cnt > cnt2) { cnt = cnt2; @@ -545,7 +546,7 @@ int __Menu_GetGameList(int t, wchar_t* gameFilter, discHdr ** PgameList, u32 *Pg } if (!buffer) return -1; - + if (Settings.sort==pcount) { qsort(buffer, cnt, sizeof(struct discHdr), __Menu_EntryCmpCount); } else if (Settings.fave) { @@ -557,18 +558,18 @@ int __Menu_GetGameList(int t, wchar_t* gameFilter, discHdr ** PgameList, u32 *Pg /* Set values */ if(PgameList) *PgameList = buffer; else free(buffer); if(PgameCnt) *PgameCnt = cnt; - + return 0; } int __Menu_GetEntries(int t, const wchar_t* Filter) { - +//gprintf("\n__Menu_GetEntries()"); /*if (mountMethod==3) - { + { return buildTitleList(); }*/ - - + + u32 new_gameCnt = 0; struct discHdr *new_gameList = NULL; wchar_t *new_gameFilter = NULL; @@ -576,32 +577,50 @@ int __Menu_GetEntries(int t, const wchar_t* Filter) { wchar_t *new_gameFilterPrev = NULL; new_gameFilter = wcsdup_new(Filter ? Filter : (gameFilter ? gameFilter : L"") ); - if(new_gameFilter == NULL) return -1; - + if(new_gameFilter == NULL) + { + //gprintf("\nnew_gameFilter == NULL"); + return -1; + } + for(;;) { if (mountMethod==3) - {if(buildTitleList(t, new_gameFilter, &new_gameList, &new_gameCnt) < 0) - return -1;} - - else - {if(__Menu_GetGameList(t, new_gameFilter, &new_gameList, &new_gameCnt) < 0) - return -1;} - - + {int butt =buildTitleList(t, new_gameFilter, &new_gameList, &new_gameCnt); + if (butt < 0) + { + gprintf("\nbutt:%d", butt); + return -1; + } + } + + else + { + if(__Menu_GetGameList(t, new_gameFilter, &new_gameList, &new_gameCnt) < 0) + { + gprintf("\n__Menu_GetGameList(t, new_gameFilter, &new_gameList, &new_gameCnt) < 0"); + return -1; + } + } + + if(new_gameCnt > 0 || new_gameFilter[0] == 0) + { + //gprintf("\nnew_gameCnt:%d",new_gameCnt); break; + } new_gameFilter[wcslen(new_gameFilter)-1] = 0; } + if (mountMethod!=3) + { + /* init GameFilterNextList */ + if(__Menu_GetGameFilter_NextList(new_gameList, new_gameCnt, &new_gameFilter, &new_gameFilterNextList) < 0) + goto error; - /* init GameFilterNextList */ - if(__Menu_GetGameFilter_NextList(new_gameList, new_gameCnt, &new_gameFilter, &new_gameFilterNextList) < 0) - goto error; - - /* init GameFilterPrev */ - if(__Menu_GetPrevFilter(t, new_gameFilter, new_gameCnt, &new_gameFilterPrev) < 0) - goto error; - + /* init GameFilterPrev */ + if(__Menu_GetPrevFilter(t, new_gameFilter, new_gameCnt, &new_gameFilterPrev) < 0) + goto error; + } /* Set values */ if(gameList) free(gameList); if(gameFilter) delete [] gameFilter; @@ -610,14 +629,19 @@ int __Menu_GetEntries(int t, const wchar_t* Filter) { gameList = new_gameList; gameCnt = new_gameCnt; - gameFilter = new_gameFilter; - gameFilterNextList = new_gameFilterNextList; - gameFilterPrev = new_gameFilterPrev; + gameFilter = new_gameFilter; + gameFilterNextList = new_gameFilterNextList; + gameFilterPrev = new_gameFilterPrev; - /* Reset variables */ + + /* Reset variables */ gameSelected = gameStart = 0; - return 0; + //gprintf("\ncnt:%d", gameCnt); + + + return 0; error: // clean up + gprintf("\nERROR"); if(new_gameList) free(new_gameList); if(new_gameFilter) delete [] new_gameFilter; if(new_gameFilterNextList) delete [] new_gameFilterNextList; diff --git a/source/video.cpp b/source/video.cpp index c82226cc..b5a67a36 100644 --- a/source/video.cpp +++ b/source/video.cpp @@ -30,6 +30,9 @@ int screenheight; int screenwidth; u32 frameCount = 0; +extern bool textVideoInit; +extern bool geckoinit; + u8 * gameScreenTex = NULL; // a GX texture screen capture of the game u8 * gameScreenTex2 = NULL; // a GX texture screen capture of the game (copy) @@ -198,6 +201,46 @@ InitVideo () { ResetVideo_Menu(); // Finally, the video is up and ready for use :) } + +void InitTextVideo () +{ + unsigned int *xfb = NULL; + gprintf("\nInitTextVideo ()"); + if (textVideoInit) + { + gprintf("...0"); + return; + } + + VIDEO_Init(); + GXRModeObj *vmode = VIDEO_GetPreferredMode(NULL); // get default video mode + + // widescreen fix + VIDEO_Configure (vmode); + + // Allocate the video buffers + xfb = (u32 *) MEM_K0_TO_K1 (SYS_AllocateFramebuffer (vmode)); + + // A console is always useful while debugging + console_init (xfb, 20, 64, vmode->fbWidth, vmode->xfbHeight, vmode->fbWidth * 2); + + // Clear framebuffers etc. + VIDEO_ClearFrameBuffer (vmode, xfb, COLOR_BLACK); + VIDEO_SetNextFramebuffer (xfb); + + VIDEO_SetBlack (FALSE); + VIDEO_Flush (); + VIDEO_WaitVSync (); + if (vmode->viTVMode & VI_NON_INTERLACE) + VIDEO_WaitVSync (); + + //send console output to the gecko + if (geckoinit)CON_EnableGecko(1, true); + textVideoInit = true; + gprintf("...1"); + +} + static unsigned int *xfbDB = NULL; void InitVideodebug () { @@ -241,8 +284,8 @@ void StopGX() { * * Renders everything current sent to GX, and flushes video ***************************************************************************/ -void Menu_Render() { - +void Menu_Render() +{ whichfb ^= 1; // flip framebuffer GX_SetZMode(GX_TRUE, GX_LEQUAL, GX_TRUE); GX_SetColorUpdate(GX_TRUE); @@ -492,6 +535,13 @@ void Menu_DrawTPLImg(f32 xpos, f32 ypos, f32 zpos, f32 width, f32 height, GXTexO ***************************************************************************/ s32 TakeScreenshot(const char *path) { + //check if it is possible to write + FILE *f = fopen(path, "wb"); + if(!f) + return -1; + else + fclose(f); + gprintf("\nTakeScreenshot(%s)", path); IMGCTX ctx = PNGU_SelectImageFromDevice (path); s32 ret = PNGU_EncodeFromYCbYCr(ctx,vmode->fbWidth, vmode->efbHeight,xfb[whichfb],0); @@ -499,3 +549,4 @@ s32 TakeScreenshot(const char *path) gprintf(":%d", ret); return 1; } + diff --git a/source/video.h b/source/video.h index 205f9950..e4f2e3bb 100644 --- a/source/video.h +++ b/source/video.h @@ -13,6 +13,7 @@ void InitVideo (); void InitVideodebug(); +void InitTextVideo(); void StopGX(); void ResetVideo_Menu(); void Menu_Render(); diff --git a/source/wad/wad.cpp b/source/wad/wad.cpp index 56f353ed..78920731 100644 --- a/source/wad/wad.cpp +++ b/source/wad/wad.cpp @@ -8,22 +8,15 @@ #include "utils.h" #include "video.h" #include "wad.h" - - - #include "prompts/PromptWindows.h" #include "libwiigui/gui.h" #include "language/gettext.h" #include "menu.h" #include "filelist.h" -/*** Extern functions ***/ -extern void ResumeGui(); -extern void HaltGui(); + /*** Extern variables ***/ extern GuiWindow * mainWindow; - - /* 'WAD Header' structure */ typedef struct { /* Header length */ @@ -347,9 +340,9 @@ s32 Wad_Install(FILE *fp) snprintf(imgPath, sizeof(imgPath), "%s%d...",tr(">> Installing content #"),content->cid); msg4Txt.SetText(imgPath); // Install content data - while (idx < len) { - - //VIDEO_WaitVSync (); + while (idx < len) { + + //VIDEO_WaitVSync (); u32 size; @@ -371,7 +364,7 @@ s32 Wad_Install(FILE *fp) // Increase variables idx += size; offset += size; - + //snprintf(imgPath, sizeof(imgPath), "%s%d (%d)...",tr(">> Installing content #"),content->cid,idx); //msg4Txt.SetText(imgPath);