diff --git a/HBC/META.XML b/HBC/META.XML index d8fe77d0..3ea60fd1 100644 --- a/HBC/META.XML +++ b/HBC/META.XML @@ -2,8 +2,8 @@ USB Loader GX USB Loader GX Team - 1.0 r993 - 201010280642 + 1.0 r994 + 201010280947 Loads games from USB-devices USB Loader GX is a libwiigui based USB iso loader with a wii-like GUI. You can install games to your HDDs and boot them with shorter loading times. The interactive GUI is completely controllable with WiiMote, Classic Controller or GC Controller. diff --git a/gui.pnproj b/gui.pnproj index 5c91f098..5e0f6eb6 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/cheats/cheatmenu.cpp b/source/cheats/cheatmenu.cpp index 3ad52d34..81684d4e 100644 --- a/source/cheats/cheatmenu.cpp +++ b/source/cheats/cheatmenu.cpp @@ -79,14 +79,13 @@ int CheatMenu(const char * gameID) else break; case 1: int cntcheats = c.getCnt(); - customOptionList cheatslst(cntcheats); + OptionList cheatslst; GuiCustomOptionBrowser chtBrowser(400, 280, &cheatslst, "bg_options_settings.png", 1, 90); chtBrowser.SetPosition(0, 90); chtBrowser.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); chtBrowser.SetClickable(true); - GuiText titleTxt(c.getGameName().c_str(), 28, ( GXColor ) - { 0, 0, 0, 255}); + GuiText titleTxt(c.getGameName().c_str(), 28, ( GXColor ) {0, 0, 0, 255}); titleTxt.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); titleTxt.SetMaxWidth(350, SCROLL_HORIZONTAL); titleTxt.SetPosition(12, 40); diff --git a/source/homebrewboot/HomebrewBrowse.cpp b/source/homebrewboot/HomebrewBrowse.cpp index 0936bd51..6f1db56d 100644 --- a/source/homebrewboot/HomebrewBrowse.cpp +++ b/source/homebrewboot/HomebrewBrowse.cpp @@ -212,18 +212,15 @@ int MenuHomebrewBrowse() GuiImage MainButton2Img(&MainButtonImgData); GuiImage MainButton2ImgOver(&MainButtonImgOverData); - GuiText MainButton2Txt(MainButtonText, 18, ( GXColor ) - { 0, 0, 0, 255}); + GuiText MainButton2Txt(MainButtonText, 18, ( GXColor ) {0, 0, 0, 255}); MainButton2Txt.SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE); MainButton2Txt.SetPosition(148, -12); MainButton2Txt.SetMaxWidth(MainButton2Img.GetWidth() - 150, DOTTED); - GuiText MainButton2DescTxt(MainButtonText, 18, ( GXColor ) - { 0, 0, 0, 255}); + GuiText MainButton2DescTxt(MainButtonText, 18, ( GXColor ) {0, 0, 0, 255}); MainButton2DescTxt.SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE); MainButton2DescTxt.SetPosition(148, 15); MainButton2DescTxt.SetMaxWidth(MainButton2Img.GetWidth() - 150, DOTTED); - GuiText MainButton2DescOverTxt(MainButtonText, 18, ( GXColor ) - { 0, 0, 0, 255}); + GuiText MainButton2DescOverTxt(MainButtonText, 18, ( GXColor ) {0, 0, 0, 255}); MainButton2DescOverTxt.SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE); MainButton2DescOverTxt.SetPosition(148, 15); MainButton2DescOverTxt.SetMaxWidth(MainButton2Img.GetWidth() - 150, SCROLL_HORIZONTAL); @@ -242,18 +239,15 @@ int MenuHomebrewBrowse() GuiImage MainButton3Img(&MainButtonImgData); GuiImage MainButton3ImgOver(&MainButtonImgOverData); - GuiText MainButton3Txt(MainButtonText, 18, ( GXColor ) - { 0, 0, 0, 255}); + GuiText MainButton3Txt(MainButtonText, 18, ( GXColor ) {0, 0, 0, 255}); MainButton3Txt.SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE); MainButton3Txt.SetPosition(148, -12); MainButton3Txt.SetMaxWidth(MainButton3Img.GetWidth() - 150, DOTTED); - GuiText MainButton3DescTxt(MainButtonText, 18, ( GXColor ) - { 0, 0, 0, 255}); + GuiText MainButton3DescTxt(MainButtonText, 18, ( GXColor ) {0, 0, 0, 255}); MainButton3DescTxt.SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE); MainButton3DescTxt.SetPosition(148, 15); MainButton3DescTxt.SetMaxWidth(MainButton3Img.GetWidth() - 150, DOTTED); - GuiText MainButton3DescOverTxt(MainButtonText, 18, ( GXColor ) - { 0, 0, 0, 255}); + GuiText MainButton3DescOverTxt(MainButtonText, 18, ( GXColor ) {0, 0, 0, 255}); MainButton3DescOverTxt.SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE); MainButton3DescOverTxt.SetPosition(148, 15); MainButton3DescOverTxt.SetMaxWidth(MainButton3Img.GetWidth() - 150, SCROLL_HORIZONTAL); @@ -436,11 +430,9 @@ int MenuHomebrewBrowse() snprintf(temp, sizeof(temp), "%smeta.xml", HomebrewFiles.GetFilepath(fileoffset)); if (XMLInfo[0].LoadHomebrewXMLData(temp) > 0) { - snprintf(MainButtonText, sizeof(MainButtonText), "%s", XMLInfo[0].GetName()); - MainButton1Txt.SetText(MainButtonText); - snprintf(MainButtonText, sizeof(MainButtonText), "%s", XMLInfo[0].GetShortDescription()); - MainButton1DescTxt.SetText(MainButtonText); - MainButton1DescOverTxt.SetText(MainButtonText); + MainButton1Txt.SetText(XMLInfo[0].GetName()); + MainButton1DescTxt.SetText(XMLInfo[0].GetShortDescription()); + MainButton1DescOverTxt.SetText(XMLInfo[0].GetShortDescription()); } else { @@ -462,11 +454,9 @@ int MenuHomebrewBrowse() snprintf(temp, sizeof(temp), "%smeta.xml", HomebrewFiles.GetFilepath(fileoffset + 1)); if (XMLInfo[1].LoadHomebrewXMLData(temp) > 0) { - snprintf(MainButtonText, sizeof(MainButtonText), "%s", XMLInfo[1].GetName()); - MainButton2Txt.SetText(MainButtonText); - snprintf(MainButtonText, sizeof(MainButtonText), "%s", XMLInfo[1].GetShortDescription()); - MainButton2DescTxt.SetText(MainButtonText); - MainButton2DescOverTxt.SetText(MainButtonText); + MainButton2Txt.SetText(XMLInfo[1].GetName()); + MainButton2DescTxt.SetText(XMLInfo[1].GetShortDescription()); + MainButton2DescOverTxt.SetText(XMLInfo[1].GetShortDescription()); } else { @@ -486,13 +476,11 @@ int MenuHomebrewBrowse() if (buttonsleft > 2) { snprintf(temp, sizeof(temp), "%smeta.xml", HomebrewFiles.GetFilepath(fileoffset + 2)); - if (XMLInfo[3].LoadHomebrewXMLData(temp) > 0) + if (XMLInfo[2].LoadHomebrewXMLData(temp) > 0) { - snprintf(MainButtonText, sizeof(MainButtonText), "%s", XMLInfo[3].GetName()); - MainButton3Txt.SetText(MainButtonText); - snprintf(MainButtonText, sizeof(MainButtonText), "%s", XMLInfo[3].GetShortDescription()); - MainButton3DescTxt.SetText(MainButtonText); - MainButton3DescOverTxt.SetText(MainButtonText); + MainButton3Txt.SetText(XMLInfo[2].GetName()); + MainButton3DescTxt.SetText(XMLInfo[2].GetShortDescription()); + MainButton3DescOverTxt.SetText(XMLInfo[2].GetShortDescription()); } else { @@ -514,11 +502,9 @@ int MenuHomebrewBrowse() snprintf(temp, sizeof(temp), "%smeta.xml", HomebrewFiles.GetFilepath(fileoffset + 3)); if (XMLInfo[3].LoadHomebrewXMLData(temp) > 0) { - snprintf(MainButtonText, sizeof(MainButtonText), "%s", XMLInfo[3].GetName()); - MainButton4Txt.SetText(MainButtonText); - snprintf(MainButtonText, sizeof(MainButtonText), "%s", XMLInfo[3].GetShortDescription()); - MainButton4DescTxt.SetText(MainButtonText); - MainButton4DescOverTxt.SetText(MainButtonText); + MainButton4Txt.SetText(XMLInfo[3].GetName()); + MainButton4DescTxt.SetText(XMLInfo[3].GetShortDescription()); + MainButton4DescOverTxt.SetText(XMLInfo[3].GetShortDescription()); } else { @@ -592,11 +578,11 @@ int MenuHomebrewBrowse() w.Append(&MainButton2); snprintf(temp, sizeof(temp), "%smeta.xml", HomebrewFiles.GetFilepath(fileoffset + 2)); - if (XMLInfo[3].LoadHomebrewXMLData(temp) > 0) + if (XMLInfo[2].LoadHomebrewXMLData(temp) > 0) { - snprintf(MainButtonText, sizeof(MainButtonText), "%s", XMLInfo[3].GetName()); + snprintf(MainButtonText, sizeof(MainButtonText), "%s", XMLInfo[2].GetName()); MainButton3Txt.SetText(MainButtonText); - snprintf(MainButtonText, sizeof(MainButtonText), "%s", XMLInfo[3].GetShortDescription()); + snprintf(MainButtonText, sizeof(MainButtonText), "%s", XMLInfo[2].GetShortDescription()); MainButton3DescTxt.SetText(MainButtonText); MainButton3DescOverTxt.SetText(MainButtonText); } diff --git a/source/libwiigui/OptionList.cpp b/source/libwiigui/OptionList.cpp new file mode 100644 index 00000000..b0f1b9b8 --- /dev/null +++ b/source/libwiigui/OptionList.cpp @@ -0,0 +1,137 @@ +/*************************************************************************** + * Copyright (C) 2010 + * by Dimok + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any + * damages arising from the use of this software. + * + * Permission is granted to anyone to use this software for any + * purpose, including commercial applications, and to alter it and + * redistribute it freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you + * must not claim that you wrote the original software. If you use + * this software in a product, an acknowledgment in the product + * documentation would be appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and + * must not be misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source + * distribution. + * + * for WiiXplorer 2010 + ***************************************************************************/ +#include +#include +#include +#include +#include +#include "OptionList.hpp" + +OptionList::OptionList() +{ +} + +OptionList::~OptionList() +{ + ClearList(); +} + +void OptionList::SetName(int i, const char *format, ...) +{ + if(i < (int) name.size()) + name[i].clear(); + + if(!format) + return; + + char *tmp=0; + va_list va; + va_start(va, format); + if((vasprintf(&tmp, format, va)>=0) && tmp) + { + if(i >= (int) name.size()) + { + Resize(i+1); + } + + name[i].assign(tmp); + + listChanged = true; + } + va_end(va); + + if(tmp) + free(tmp); +} + +void OptionList::SetValue(int i, const char *format, ...) +{ + if(i < (int) value.size()) + value[i].clear(); + + char *tmp=0; + va_list va; + va_start(va, format); + if((vasprintf(&tmp, format, va)>=0) && tmp) + { + if(i >= (int) value.size()) + { + Resize(i+1); + } + + value[i].assign(tmp); + + listChanged = true; + } + va_end(va); + + if(tmp) + free(tmp); +} + +const char * OptionList::GetName(int i) +{ + if(i < 0 || i >= (int) name.size()) + return NULL; + + return name.at(i).c_str(); +} + +const char * OptionList::GetValue(int i) +{ + if(i < 0 || i >= (int) value.size()) + return NULL; + + return value.at(i).c_str(); +} + +void OptionList::Resize(int size) +{ + while(size < (int) name.size()) + RemoveOption(name.size()-1); + + int oldsize = name.size(); + + name.resize(oldsize+1); + value.resize(oldsize+1); +} + +void OptionList::RemoveOption(int i) +{ + if(i < 0 || i >= (int) name.size()) + return; + + name.erase(name.begin()+i); + value.erase(value.begin()+i); +} + +void OptionList::ClearList() +{ + name.clear(); + value.clear(); + std::vector().swap(name); + std::vector().swap(value); +} diff --git a/source/libwiigui/OptionList.hpp b/source/libwiigui/OptionList.hpp new file mode 100644 index 00000000..7e47fda7 --- /dev/null +++ b/source/libwiigui/OptionList.hpp @@ -0,0 +1,53 @@ +/*************************************************************************** + * Copyright (C) 2010 + * by Dimok + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any + * damages arising from the use of this software. + * + * Permission is granted to anyone to use this software for any + * purpose, including commercial applications, and to alter it and + * redistribute it freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you + * must not claim that you wrote the original software. If you use + * this software in a product, an acknowledgment in the product + * documentation would be appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and + * must not be misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source + * distribution. + * + * for WiiXplorer 2010 + ***************************************************************************/ +#ifndef OPTIONLIST_HPP_ +#define OPTIONLIST_HPP_ + +#include +#include + +class OptionList +{ + public: + OptionList(); + ~OptionList(); + void SetName(int i, const char *format, ...) __attribute__((format (printf, 3, 4))); + void SetValue(int i, const char *format, ...) __attribute__((format (printf, 3, 4))); + const char * GetName(int i); + const char * GetValue(int i); + void Resize(int size); + int GetLength() { return name.size(); } + bool IsChanged() { bool ret = listChanged; listChanged = false; return ret;} + void RemoveOption(int i); + void ClearList(); + private: + std::vector name; + std::vector value; + bool listChanged; +}; + +#endif + diff --git a/source/libwiigui/gui.h b/source/libwiigui/gui.h index 7aa4e475..f1e8f74b 100644 --- a/source/libwiigui/gui.h +++ b/source/libwiigui/gui.h @@ -45,6 +45,7 @@ #include "video.h" #include "filelist.h" #include "input.h" +#include "OptionList.hpp" extern FreeTypeGX *fontSystem; @@ -1032,13 +1033,6 @@ class GuiNumpad: public GuiWindow GuiTrigger * trigB; }; -typedef struct _optionlist -{ - int length; - char name[MAX_OPTIONS][60]; - char value[MAX_OPTIONS][30]; -} OptionList; - //!Display a list of menu options class GuiOptionBrowser: public GuiElement { diff --git a/source/libwiigui/gui_customoptionbrowser.cpp b/source/libwiigui/gui_customoptionbrowser.cpp index 028d4088..a3542c1e 100644 --- a/source/libwiigui/gui_customoptionbrowser.cpp +++ b/source/libwiigui/gui_customoptionbrowser.cpp @@ -17,131 +17,11 @@ #include #define GAMESELECTSIZE 30 -#define OPTION_LIST_PADDING PAGESIZE - -customOptionList::customOptionList(int Size) -{ - name = value = NULL; - size = 0; - SetSize(Size == 0 ? PAGESIZE : Size); - length = Size; - changed = false; -} -customOptionList::~customOptionList() -{ - for (int i = 0; i < size; i++) - { - free(name[i]); - free(value[i]); - } - delete[] name; - delete[] value; -} -void customOptionList::SetLength(int Length) //set number of lines -{ - if (Length < 0 || Length == length) return; - - if (Length > size) SetSize(Length + OPTION_LIST_PADDING); - if (Length < length) - { - for (int i = Length; i < length; i++) - { - free(name[i]); // clear unused - name[i] = NULL; - free(value[i]); - value[i] = NULL; - } - } - length = Length; - changed = true; -} -void customOptionList::SetSize(int Size) //set number of lines -{ - if (Size < 0 || Size == size) return; - - if (Size > size) - { - char **newName = new char *[Size]; - char **newValue = new char *[Size]; - int i; - for (i = 0; i < size; i++) - { - newName[i] = name[i]; // copy - newValue[i] = value[i]; - } - for (; i < Size; i++) - { - newName[i] = NULL; // fill rest with NULL - newValue[i] = NULL; - } - delete[] name; - name = newName; // set new - delete[] value; - value = newValue; - size = Size; - } -} -void customOptionList::SetName(int i, const char *format, ...) -{ - if (i >= length) SetLength(i + 1); - - if (i >= 0 && i < length) - { - if (name[i]) free(name[i]); - name[i] = 0; - va_list va; - va_start( va, format ); - vasprintf(&name[i], format, va); - va_end( va ); - changed = true; - } - //gprintf("customOptionList::SetName( %d, %s )\n", i, name[i] ); -} -void customOptionList::SetValue(int i, const char *format, ...) -{ - if (i >= length) SetLength(i + 1); - - if (i >= 0 && i < length) - { - char *tmp = 0; - va_list va; - va_start( va, format ); - vasprintf(&tmp, format, va); - va_end( va ); - - if (tmp) - { - if (value[i] && !strcmp(tmp, value[i])) - free(tmp); - else - { - free(value[i]); - value[i] = tmp; - changed = true; - } - } - } - //gprintf("customOptionList::SetValue( %d, %s )\n", i, value[i] ); -} -void customOptionList::Clear(bool OnlyValue/*=false*/) -{ - for (int i = 0; i < size; i++) - { - if (!OnlyValue) - { - free(name[i]); - name[i] = NULL; - } - free(value[i]); - value[i] = NULL; - } - changed = true; -} /** * Constructor for the GuiCustomOptionBrowser class. */ -GuiCustomOptionBrowser::GuiCustomOptionBrowser(int w, int h, customOptionList * l, const char * custombg, int scrollon, int col2) +GuiCustomOptionBrowser::GuiCustomOptionBrowser(int w, int h, OptionList * l, const char * custombg, int scrollon, int col2) { width = w; height = h; diff --git a/source/libwiigui/gui_customoptionbrowser.h b/source/libwiigui/gui_customoptionbrowser.h index 1e717995..f5bd304b 100644 --- a/source/libwiigui/gui_customoptionbrowser.h +++ b/source/libwiigui/gui_customoptionbrowser.h @@ -1,50 +1,10 @@ #include "gui.h" -class customOptionList -{ - public: - customOptionList(int Size); - ~customOptionList(); - void SetLength(int Length); - void SetName(int i, const char *format, ...) __attribute__( ( format ( printf, 3, 4 ) ) ); - const char *GetName(int i) - { - if (i >= 0 && i < length && name[i]) - return name[i]; - else return ""; - } - void SetValue(int i, const char *format, ...) __attribute__( ( format ( printf, 3, 4 ) ) ); - const char *GetValue(int i) - { - if (i >= 0 && i < length && value[i]) - return value[i]; - else return ""; - } - void Clear(bool OnlyValue = false); - int GetLength() - { - return length; - } - bool IsChanged() - { - bool ret = changed; - changed = false; - return ret; - } - private: - void SetSize(int Size); - int size; - char ** name; - char ** value; - int length; - bool changed; -}; - //!Display a list of menu options class GuiCustomOptionBrowser: public GuiElement { public: - GuiCustomOptionBrowser(int w, int h, customOptionList * l, const char * background, int scrollbar, int col2); + GuiCustomOptionBrowser(int w, int h, OptionList * l, const char * background, int scrollbar, int col2); ~GuiCustomOptionBrowser(); int FindMenuItem(int c, int d); int GetClickedOption(); @@ -64,7 +24,7 @@ class GuiCustomOptionBrowser: public GuiElement int coL2; int scrollbaron; - customOptionList * options; + OptionList * options; int * optionIndex; GuiButton ** optionBtn; GuiText ** optionTxt; diff --git a/source/libwiigui/gui_optionbrowser.cpp b/source/libwiigui/gui_optionbrowser.cpp index ddc93095..0f5dbea3 100644 --- a/source/libwiigui/gui_optionbrowser.cpp +++ b/source/libwiigui/gui_optionbrowser.cpp @@ -223,8 +223,7 @@ GuiOptionBrowser::GuiOptionBrowser(int w, int h, OptionList * l, const char *ima // optionBg = new GuiImage(bgOptionsEntry); for (int i = 0; i < PAGESIZE; i++) { - optionTxt[i] = new GuiText(options->name[i], 20, ( GXColor ) - { 0, 0, 0, 0xff}); + optionTxt[i] = new GuiText(options->GetName(i), 20, ( GXColor ) {0, 0, 0, 0xff}); optionTxt[i]->SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE); optionTxt[i]->SetPosition(24, 0); @@ -362,11 +361,12 @@ int GuiOptionBrowser::FindMenuItem(int currentItem, int direction) { int nextItem = currentItem + direction; - if (nextItem < 0 || nextItem >= options->length) return -1; + if (nextItem < 0 || nextItem >= options->GetLength()) return -1; - if (strlen(options->name[nextItem]) > 0) + if (options->GetName(nextItem) && strlen(options->GetName(nextItem)) > 0) return nextItem; - else return FindMenuItem(nextItem, direction); + else + return FindMenuItem(nextItem, direction); } /** @@ -409,7 +409,7 @@ void GuiOptionBrowser::TriggerUpdate() void GuiOptionBrowser::Update(GuiTrigger * t) { LOCK( this ); - int next, prev, lang = options->length; + int next, prev, lang = options->GetLength(); //go to the last game selected if ((loaded == 0) && (startat > 0)) @@ -465,8 +465,8 @@ void GuiOptionBrowser::Update(GuiTrigger * t) optionBtn[i]->SetState(STATE_DEFAULT); } - optionTxt[i]->SetText(options->name[next]); - optionVal[i]->SetText(options->value[next]); + optionTxt[i]->SetText(options->GetName(next)); + optionVal[i]->SetText(options->GetValue(next)); optionIndex[i] = next; next = this->FindMenuItem(next, 1); } @@ -579,7 +579,7 @@ void GuiOptionBrowser::Update(GuiTrigger * t) } if (scrollbarBoxBtn->GetState() == STATE_HELD && scrollbarBoxBtn->GetStateChan() == t->chan && t->wpad.ir.valid - && options->length > PAGESIZE) + && options->GetLength() > PAGESIZE) { scrollbarBoxBtn->SetPosition(width / 2 - 18 + 7, 0); int position = t->wpad.ir.y - 50 - scrollbarBoxBtn->GetTop(); diff --git a/source/menu/menu_disclist.cpp b/source/menu/menu_disclist.cpp index a1ddfd15..5b4e855a 100644 --- a/source/menu/menu_disclist.cpp +++ b/source/menu/menu_disclist.cpp @@ -21,7 +21,6 @@ #include "libwiigui/gui_gamecarousel.h" #include "libwiigui/gui_searchbar.h" -#define MAX_CHARACTERS 38 extern u8 * gameScreenTex; extern struct discHdr *dvdheader; extern u8 mountMethod; @@ -53,7 +52,6 @@ static u32 startat = 0; ***************************************************************************/ int MenuDiscList() { - gprintf("MenuDiscList()\n"); gameList.FilterList(); int offset = MIN( ( int )startat, gameList.size() - 1 ); @@ -79,7 +77,6 @@ int MenuDiscList() int menu = MENU_NONE; u32 nolist; - char text[MAX_CHARACTERS + 4]; int choice = 0, selectedold = 100; s32 ret; @@ -1403,16 +1400,6 @@ int MenuDiscList() if (!mountMethod)//only get this stuff it we are booting a game from USB { WBFS_GameSize(header->id, &size); - if (strlen(GameTitles.GetTitle(header)) < (MAX_CHARACTERS + 3)) - { - sprintf(text, "%s", GameTitles.GetTitle(header)); - } - else - { - strncpy(text, GameTitles.GetTitle(header), MAX_CHARACTERS); - text[MAX_CHARACTERS] = '\0'; - strncat(text, "...", 3); - } } //check if alt Dol and gct file is present diff --git a/source/menu/menu_install.cpp b/source/menu/menu_install.cpp index b85a3a8b..04d1192d 100644 --- a/source/menu/menu_install.cpp +++ b/source/menu/menu_install.cpp @@ -39,131 +39,104 @@ int MenuInstall() ResumeGui(); - while (menu == MENU_NONE) + ret = DiscWait(tr( "Insert Disk" ), tr( "Waiting..." ), tr( "Cancel" ), 0, 0); + if (ret < 0) { - VIDEO_WaitVSync(); + WindowPrompt(tr( "Error reading Disc" ), 0, tr( "Back" )); + menu = MENU_DISCLIST; + } + ret = Disc_Open(); + if (ret < 0) + { + WindowPrompt(tr( "Could not open Disc" ), 0, tr( "Back" )); + menu = MENU_DISCLIST; + } - ret = DiscWait(tr( "Insert Disk" ), tr( "Waiting..." ), tr( "Cancel" ), 0, 0); - if (ret < 0) - { - WindowPrompt(tr( "Error reading Disc" ), 0, tr( "Back" )); - menu = MENU_DISCLIST; - break; - } - ret = Disc_Open(); - if (ret < 0) - { - WindowPrompt(tr( "Could not open Disc" ), 0, tr( "Back" )); - menu = MENU_DISCLIST; - break; - } - - ret = Disc_IsWii(); - if (ret < 0) - { - choice = WindowPrompt(tr( "Not a Wii Disc" ), tr( "Insert a Wii Disc!" ), tr( "OK" ), tr( "Back" )); - - if (choice == 1) - { - menu = MENU_INSTALL; - break; - } - else menu = MENU_DISCLIST; - break; - } - - Disc_ReadHeader(&headerdisc); - snprintf(name, sizeof(name), "%s", headerdisc.title); - - ret = WBFS_CheckGame(headerdisc.id); - if (ret) - { - WindowPrompt(tr( "Game is already installed:" ), name, tr( "Back" )); - menu = MENU_DISCLIST; - break; - } - - f32 freespace, used; - - WBFS_DiskSpace(&used, &freespace); - gamesize = WBFS_EstimeGameSize() / GB_SIZE; - - char gametxt[50]; - - sprintf(gametxt, "%s : %.2fGB", name, gamesize); - - wiilight(1); - choice = WindowPrompt(tr( "Continue to install game?" ), gametxt, tr( "OK" ), tr( "Cancel" )); + ret = Disc_IsWii(); + if (ret < 0) + { + choice = WindowPrompt(tr( "Not a Wii Disc" ), tr( "Insert a Wii Disc!" ), tr( "OK" ), tr( "Back" )); if (choice == 1) { + menu = MENU_INSTALL; + } + else menu = MENU_DISCLIST; + } - sprintf(gametxt, "%s", tr( "Installing game:" )); + Disc_ReadHeader(&headerdisc); + snprintf(name, sizeof(name), "%s", headerdisc.title); - if (gamesize > freespace) - { - char errortxt[50]; - sprintf(errortxt, "%s: %.2fGB, %s: %.2fGB", tr( "Game Size" ), gamesize, tr( "Free Space" ), freespace); - WindowPrompt(tr( "Not enough free space!" ), errortxt, tr( "OK" )); - menu = MENU_DISCLIST; - break; - } - else - { - USBStorage2_Watchdog(0); - SetupGameInstallProgress(gametxt, name); - ret = WBFS_AddGame(); - ProgressStop(); - USBStorage2_Watchdog(1); - wiilight(0); - if (ret != 0) - { - WindowPrompt(tr( "Install Error!" ), 0, tr( "Back" )); - menu = MENU_DISCLIST; - break; - } - else - { - gameList.ReadGameList(); //get the entries again - gameList.FilterList(); - GuiSound * instsuccess = NULL; - bgMusic->Pause(); - instsuccess = new GuiSound(success_ogg, success_ogg_size, Settings.sfxvolume); - instsuccess->SetVolume(Settings.sfxvolume); - instsuccess->SetLoop(0); - instsuccess->Play(); - WindowPrompt(tr( "Successfully installed:" ), name, tr( "OK" )); - instsuccess->Stop(); - delete instsuccess; - bgMusic->Resume(); - menu = MENU_DISCLIST; - break; - } - } + ret = WBFS_CheckGame(headerdisc.id); + if (ret) + { + WindowPrompt(tr( "Game is already installed:" ), name, tr( "Back" )); + menu = MENU_DISCLIST; + } + + f32 freespace, used; + + WBFS_DiskSpace(&used, &freespace); + gamesize = WBFS_EstimeGameSize() / GB_SIZE; + + char gametxt[50]; + + sprintf(gametxt, "%s : %.2fGB", name, gamesize); + + wiilight(1); + choice = WindowPrompt(tr( "Continue to install game?" ), gametxt, tr( "OK" ), tr( "Cancel" )); + + if (choice == 1) + { + sprintf(gametxt, "%s", tr( "Installing game:" )); + + if (gamesize > freespace) + { + char errortxt[50]; + sprintf(errortxt, "%s: %.2fGB, %s: %.2fGB", tr( "Game Size" ), gamesize, tr( "Free Space" ), freespace); + WindowPrompt(tr( "Not enough free space!" ), errortxt, tr( "OK" )); + menu = MENU_DISCLIST; } else { - menu = MENU_DISCLIST; - break; - } - - if (shutdown == 1) - { + USBStorage2_Watchdog(0); + SetupGameInstallProgress(gametxt, name); + ret = WBFS_AddGame(); + ProgressStop(); + USBStorage2_Watchdog(1); wiilight(0); - Sys_Shutdown(); - } - if (reset == 1) - { - wiilight(0); - Sys_Reboot(); + if (ret != 0) + { + WindowPrompt(tr( "Install Error!" ), 0, tr( "Back" )); + menu = MENU_DISCLIST; + } + else + { + gameList.ReadGameList(); //get the entries again + gameList.FilterList(); + GuiSound * instsuccess = NULL; + bgMusic->Pause(); + instsuccess = new GuiSound(success_ogg, success_ogg_size, Settings.sfxvolume); + instsuccess->SetVolume(Settings.sfxvolume); + instsuccess->SetLoop(0); + instsuccess->Play(); + WindowPrompt(tr( "Successfully installed:" ), name, tr( "OK" )); + instsuccess->Stop(); + delete instsuccess; + bgMusic->Resume(); + menu = MENU_DISCLIST; + } } } + else + { + menu = MENU_DISCLIST; + } //Turn off the WiiLight wiilight(0); HaltGui(); - mainWindow->Remove(&w); ResumeGui(); return menu; diff --git a/source/menu/menu_partition_selection.cpp b/source/menu/menu_partition_selection.cpp index ed71e29a..d63f8772 100644 --- a/source/menu/menu_partition_selection.cpp +++ b/source/menu/menu_partition_selection.cpp @@ -16,7 +16,7 @@ extern PartList partitions; int SelectPartitionMenu() { bool ExitSelect = false; - customOptionList options(MAX_PARTITIONS_EX); + OptionList options; u32 cnt, counter = 0; int choice = -1; diff --git a/source/prompts/DiscBrowser.cpp b/source/prompts/DiscBrowser.cpp index 9ea1d212..d94d44bd 100644 --- a/source/prompts/DiscBrowser.cpp +++ b/source/prompts/DiscBrowser.cpp @@ -75,7 +75,7 @@ int DiscBrowse(struct discHdr * header, char * alternatedname, int alternatednam u32 discfilecount = fstbuffer[0].filelen; u32 dolfilecount = 0; - customOptionList options3(discfilecount); + OptionList options3; for (u32 i = 0; i < discfilecount; i++) { diff --git a/source/prompts/PromptWindows.cpp b/source/prompts/PromptWindows.cpp index d81f4dd8..f90ba598 100644 --- a/source/prompts/PromptWindows.cpp +++ b/source/prompts/PromptWindows.cpp @@ -24,6 +24,7 @@ #include "prompts/PromptWindows.h" #include "prompts/gameinfo.h" #include "themes/CTheme.h" +#include "utils/StringTools.h" #include "mload/mload.h" #include "fatmounter.h" #include "FileOperations/fileops.h" @@ -3811,12 +3812,8 @@ int HBCWindowPrompt(const char *name, const char *coder, const char *version, co bool iconExist = CheckFile(imgPath); if (iconExist) { + //! This does not crash even if there is no file iconData = new GuiImageData(imgPath); - if(!iconData->GetImage()) - { - delete iconData; - iconData = new GuiImageData(Resources::GetFile("dialogue_box.png"), Resources::GetFileSize("dialogue_box.png")); - } iconImg = new GuiImage(iconData); iconImg->SetAlignment(ALIGN_LEFT, ALIGN_TOP); iconImg->SetPosition(45, 10); @@ -3829,31 +3826,22 @@ int HBCWindowPrompt(const char *name, const char *coder, const char *version, co whiteBoxImg.SetPosition(0, 110); whiteBoxImg.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); whiteBoxImg.SetSkew(0, 0, 0, 0, 0, -120, 0, -120); - /*if (Settings.wsprompt){ - dialogBoxImg.SetWidescreen(Settings.widescreen); - }*/ - - char tmp[510]; GuiText nameTxt(name, 30, Theme.prompttext); nameTxt.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); nameTxt.SetPosition(0, -15); nameTxt.SetMaxWidth(430, SCROLL_HORIZONTAL); - if (strcmp(coder, "")) snprintf(tmp, sizeof(tmp), tr( "Coded by: %s" ), coder); - GuiText coderTxt(tmp, 16, Theme.prompttext); + GuiText coderTxt(fmt(tr( "Coded by: %s" ), coder), 16, Theme.prompttext); coderTxt.SetAlignment(ALIGN_LEFT, ALIGN_TOP); coderTxt.SetPosition(180, 30); coderTxt.SetMaxWidth(280); - if (strcmp(version, "")) snprintf(tmp, sizeof(tmp), tr( "Version: %s" ), version); - GuiText versionTxt(tmp, 16, Theme.prompttext); + GuiText versionTxt(fmt(tr( "Version: %s" ), version), 16, Theme.prompttext); versionTxt.SetAlignment(ALIGN_LEFT, ALIGN_TOP); versionTxt.SetPosition(40, 65); versionTxt.SetMaxWidth(430); - //if (release_date) - //snprintf(tmp, sizeof(tmp), tr("Released: %s"),release_date); GuiText release_dateTxt(release_date, 16, Theme.prompttext); release_dateTxt.SetAlignment(ALIGN_LEFT, ALIGN_TOP); release_dateTxt.SetPosition(40, 85); @@ -3868,30 +3856,14 @@ int HBCWindowPrompt(const char *name, const char *coder, const char *version, co long_descriptionTxt.Refresh(); //convert filesize from u64 to char and put unit of measurement after it - char temp2[7]; char filesizeCH[15]; - f32 sizeAdjusted; if (filesize <= 1024.0) - { - sizeAdjusted = filesize; - snprintf(temp2, sizeof(temp2), "%.2f", sizeAdjusted); - snprintf(filesizeCH, sizeof(filesizeCH), "%s B", temp2); - - } + snprintf(filesizeCH, sizeof(filesizeCH), "%lld B", filesize); if (filesize > 1024.0) - { - sizeAdjusted = filesize / 1024.0; - snprintf(temp2, sizeof(temp2), "%.2f", sizeAdjusted); - snprintf(filesizeCH, sizeof(filesizeCH), "%s KB", temp2); - - } + snprintf(filesizeCH, sizeof(filesizeCH), "%0.2f KB", filesize / 1024.0); if (filesize > 1048576.0) - { - sizeAdjusted = filesize / 1048576.0; - snprintf(temp2, sizeof(temp2), "%.2f", sizeAdjusted); - snprintf(filesizeCH, sizeof(filesizeCH), "%s MB", temp2); + snprintf(filesizeCH, sizeof(filesizeCH), "%0.2f MB", filesize / 1048576.0); - } GuiText filesizeTxt(filesizeCH, 16, Theme.prompttext); filesizeTxt.SetAlignment(ALIGN_RIGHT, ALIGN_TOP); filesizeTxt.SetPosition(-40, 12); @@ -3933,18 +3905,18 @@ int HBCWindowPrompt(const char *name, const char *coder, const char *version, co promptWindow.Append(&screenShotBtn); promptWindow.Append(&dialogBoxImg); - if (strcmp(long_description, "")) promptWindow.Append(&whiteBoxImg); - if (strcmp(long_description, "")) promptWindow.Append(&scrollbarImg); - if (strcmp(long_description, "")) promptWindow.Append(&arrowDownBtn); - if (strcmp(long_description, "")) promptWindow.Append(&arrowUpBtn); + promptWindow.Append(&whiteBoxImg); + promptWindow.Append(&scrollbarImg); + promptWindow.Append(&arrowDownBtn); + promptWindow.Append(&arrowUpBtn); - if (strcmp(name, "")) promptWindow.Append(&nameTxt); - if (strcmp(version, "")) promptWindow.Append(&versionTxt); - if (strcmp(coder, "")) promptWindow.Append(&coderTxt); - if (strcmp(release_date, "")) promptWindow.Append(&release_dateTxt); - if (strcmp(long_description, "")) promptWindow.Append(&long_descriptionTxt); + if(strcmp(name, "") != 0) promptWindow.Append(&nameTxt); + if(strcmp(version, "") != 0) promptWindow.Append(&versionTxt); + if(strcmp(coder, "") != 0) promptWindow.Append(&coderTxt); + if(strcmp(release_date, "") != 0) promptWindow.Append(&release_dateTxt); + if(strcmp(long_description, "") != 0) promptWindow.Append(&long_descriptionTxt); promptWindow.Append(&filesizeTxt); - if (iconExist) promptWindow.Append(iconImg); + promptWindow.Append(iconImg); promptWindow.Append(&btn1); promptWindow.Append(&btn2); diff --git a/source/prompts/TitleBrowser.cpp b/source/prompts/TitleBrowser.cpp index d0c7d7ec..0a854961 100644 --- a/source/prompts/TitleBrowser.cpp +++ b/source/prompts/TitleBrowser.cpp @@ -84,7 +84,7 @@ bool TitleSelector(char output[]) gprintf("TitleLister(): out of memory!\n"); return false; } - customOptionList options4(num_titles + 1); + OptionList options4; //write the titles on the option browser s32 i = 0; @@ -280,7 +280,7 @@ int TitleBrowser() gprintf("TitleBrowser(): out of memory!\n"); return -1; } - customOptionList options3(num_titles + num_sys_titles + 1); + OptionList options3; //write the titles on the option browser u32 i = 0; diff --git a/source/settings/Settings.cpp b/source/settings/Settings.cpp index 3ef4d05b..edb45bd0 100644 --- a/source/settings/Settings.cpp +++ b/source/settings/Settings.cpp @@ -142,8 +142,7 @@ int MenuSettings() GuiTrigger trigPlus; trigPlus.SetButtonOnlyTrigger(-1, WPAD_BUTTON_PLUS | WPAD_CLASSIC_BUTTON_PLUS, 0); - GuiText titleTxt(tr( "Settings" ), 28, ( GXColor ) - { 0, 0, 0, 255}); + GuiText titleTxt(tr( "Settings" ), 28, ( GXColor ) {0, 0, 0, 255}); titleTxt.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); titleTxt.SetPosition(0, 40); @@ -165,8 +164,7 @@ int MenuSettings() homo.SetTrigger(&trigHome); GuiImage PageindicatorImg1(&PageindicatorImgData); - GuiText PageindicatorTxt1("1", 22, ( GXColor ) - { 0, 0, 0, 255}); + GuiText PageindicatorTxt1("1", 22, ( GXColor ) {0, 0, 0, 255}); GuiButton PageIndicatorBtn1(PageindicatorImg1.GetWidth(), PageindicatorImg1.GetHeight()); PageIndicatorBtn1.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); PageIndicatorBtn1.SetPosition(165, 400); @@ -178,8 +176,7 @@ int MenuSettings() PageIndicatorBtn1.SetEffectGrow(); GuiImage PageindicatorImg2(&PageindicatorImgData); - GuiText PageindicatorTxt2("2", 22, ( GXColor ) - { 0, 0, 0, 255}); + GuiText PageindicatorTxt2("2", 22, ( GXColor ) {0, 0, 0, 255}); GuiButton PageIndicatorBtn2(PageindicatorImg2.GetWidth(), PageindicatorImg2.GetHeight()); PageIndicatorBtn2.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); PageIndicatorBtn2.SetPosition(200, 400); @@ -191,8 +188,7 @@ int MenuSettings() PageIndicatorBtn2.SetEffectGrow(); GuiImage PageindicatorImg3(&PageindicatorImgData); - GuiText PageindicatorTxt3("3", 22, ( GXColor ) - { 0, 0, 0, 255}); + GuiText PageindicatorTxt3("3", 22, ( GXColor ) {0, 0, 0, 255}); GuiButton PageIndicatorBtn3(PageindicatorImg3.GetWidth(), PageindicatorImg3.GetHeight()); PageIndicatorBtn3.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); PageIndicatorBtn3.SetPosition(235, 400); @@ -232,8 +228,7 @@ int MenuSettings() GuiImage MainButton1Img(&MainButtonImgData); GuiImage MainButton1ImgOver(&MainButtonImgOverData); - GuiText MainButton1Txt(MainButtonText, 22, ( GXColor ) - { 0, 0, 0, 255}); + GuiText MainButton1Txt(MainButtonText, 22, ( GXColor ) {0, 0, 0, 255}); MainButton1Txt.SetMaxWidth(MainButton1Img.GetWidth()); GuiButton MainButton1(MainButton1Img.GetWidth(), MainButton1Img.GetHeight()); MainButton1.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); @@ -248,8 +243,7 @@ int MenuSettings() GuiImage MainButton2Img(&MainButtonImgData); GuiImage MainButton2ImgOver(&MainButtonImgOverData); - GuiText MainButton2Txt(MainButtonText, 22, ( GXColor ) - { 0, 0, 0, 255}); + GuiText MainButton2Txt(MainButtonText, 22, ( GXColor ) {0, 0, 0, 255}); MainButton2Txt.SetMaxWidth(MainButton2Img.GetWidth()); GuiButton MainButton2(MainButton2Img.GetWidth(), MainButton2Img.GetHeight()); MainButton2.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); @@ -264,8 +258,7 @@ int MenuSettings() GuiImage MainButton3Img(&MainButtonImgData); GuiImage MainButton3ImgOver(&MainButtonImgOverData); - GuiText MainButton3Txt(MainButtonText, 22, ( GXColor ) - { 0, 0, 0, 255}); + GuiText MainButton3Txt(MainButtonText, 22, ( GXColor ) {0, 0, 0, 255}); MainButton3Txt.SetMaxWidth(MainButton3Img.GetWidth()); GuiButton MainButton3(MainButton3Img.GetWidth(), MainButton3Img.GetHeight()); MainButton3.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); @@ -280,8 +273,7 @@ int MenuSettings() GuiImage MainButton4Img(&MainButtonImgData); GuiImage MainButton4ImgOver(&MainButtonImgOverData); - GuiText MainButton4Txt(MainButtonText, 22, ( GXColor ) - { 0, 0, 0, 255}); + GuiText MainButton4Txt(MainButtonText, 22, ( GXColor ) {0, 0, 0, 255}); MainButton4Txt.SetMaxWidth(MainButton4Img.GetWidth()); GuiButton MainButton4(MainButton4Img.GetWidth(), MainButton4Img.GetHeight()); MainButton4.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); @@ -294,7 +286,7 @@ int MenuSettings() MainButton4.SetEffectGrow(); MainButton4.SetTrigger(&trigA); - customOptionList options2(MAXOPTIONS); + OptionList options2; GuiCustomOptionBrowser optionBrowser2(396, 280, &options2, "bg_options_settings.png", 0, 150); optionBrowser2.SetPosition(0, 90); optionBrowser2.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); @@ -657,7 +649,7 @@ int MenuSettings() w.Remove(&MainButton4); titleTxt.SetText(tr( "GUI Settings" )); exit = false; - options2.SetLength(0); + options2.ClearList(); // optionBrowser2.SetScrollbar(1); w.Append(&optionBrowser2); optionBrowser2.SetClickable(true); @@ -929,7 +921,7 @@ int MenuSettings() w.Remove(&MainButton4); titleTxt.SetText(tr( "Game Load" )); exit = false; - options2.SetLength(0); + options2.ClearList(); w.Append(&optionBrowser2); optionBrowser2.SetClickable(true); ResumeGui(); @@ -1161,7 +1153,7 @@ int MenuSettings() w.Remove(&MainButton4); titleTxt.SetText(tr( "Parental Control" )); exit = false; - options2.SetLength(0); + options2.ClearList(); w.Append(&optionBrowser2); optionBrowser2.SetClickable(true); ResumeGui(); @@ -1352,7 +1344,7 @@ int MenuSettings() w.Remove(&MainButton4); titleTxt.SetText(tr( "Sound" )); exit = false; - options2.SetLength(0); + options2.ClearList(); w.Append(&optionBrowser2); optionBrowser2.SetClickable(true); ResumeGui(); @@ -1564,7 +1556,7 @@ int MenuSettings() w.Remove(&MainButton4); titleTxt.SetText(tr( "Custom Paths" )); exit = false; - options2.SetLength(0); + options2.ClearList(); // optionBrowser2.SetScrollbar(1); w.Append(&optionBrowser2); optionBrowser2.SetClickable(true); @@ -2389,8 +2381,7 @@ int MenuGameSettings(struct discHdr * header) GuiImage MainButton4Img(&MainButtonImgData); GuiImage MainButton4ImgOver(&MainButtonImgOverData); - GuiText MainButton4Txt(MainButtonText, 22, ( GXColor ) - { 0, 0, 0, 255}); + GuiText MainButton4Txt(MainButtonText, 22, ( GXColor ) {0, 0, 0, 255}); MainButton4Txt.SetMaxWidth(MainButton4Img.GetWidth()); GuiButton MainButton4(MainButton4Img.GetWidth(), MainButton4Img.GetHeight()); MainButton4.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); @@ -2403,7 +2394,7 @@ int MenuGameSettings(struct discHdr * header) MainButton4.SetEffectGrow(); MainButton4.SetTrigger(&trigA); - customOptionList options2(MAXOPTIONS); + OptionList options2; GuiCustomOptionBrowser optionBrowser2(396, 280, &options2, "bg_options_settings.png", 0, 150); optionBrowser2.SetPosition(0, 90); optionBrowser2.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); @@ -2523,7 +2514,7 @@ int MenuGameSettings(struct discHdr * header) w.Remove(&MainButton3); w.Remove(&MainButton4); exit = false; - options2.SetLength(0); + options2.ClearList(); w.Append(&optionBrowser2); optionBrowser2.SetClickable(true); ResumeGui(); @@ -2705,7 +2696,7 @@ int MenuGameSettings(struct discHdr * header) if (last_alternatedol != 1) { firstRun = true; // force re-init follow Entries - options2.SetLength(Idx + 1); + options2.Resize(Idx + 1); } } @@ -2779,7 +2770,7 @@ int MenuGameSettings(struct discHdr * header) if (game_cfg.loadalternatedol == 0) { firstRun = true; // force re-init follow Entries - options2.SetLength(Idx--); // remove this Entry + options2.Resize(Idx--); // remove this Entry options2.SetValue(Idx, "%s", tr( "Default" )); // re-set prev Entry } else options2.SetValue(Idx, alternatedname); @@ -2835,7 +2826,7 @@ int MenuGameSettings(struct discHdr * header) w.Remove(&MainButton3); w.Remove(&MainButton4); exit = false; - options2.SetLength(0); + options2.ClearList(); w.Append(&optionBrowser2); optionBrowser2.SetClickable(true); ResumeGui(); diff --git a/source/settings/SettingsPrompts.cpp b/source/settings/SettingsPrompts.cpp index 5e782048..1ba8ddf8 100644 --- a/source/settings/SettingsPrompts.cpp +++ b/source/settings/SettingsPrompts.cpp @@ -191,7 +191,7 @@ int MenuLanguageSelect() updateBtn.SetTrigger( &trigA ); updateBtn.SetEffectGrow(); - customOptionList options2( Dir.GetFilecount() ); + OptionList options2; for ( cnt = 0; cnt < Dir.GetFilecount(); cnt++ ) { diff --git a/source/usbloader/GameList.cpp b/source/usbloader/GameList.cpp index aa6c6261..3c25585b 100644 --- a/source/usbloader/GameList.cpp +++ b/source/usbloader/GameList.cpp @@ -44,6 +44,8 @@ GameList::GameList() void GameList::clear() { + GameFilter.clear(); + AvailableSearchChars.clear(); FullGameList.clear(); FilteredList.clear(); //! Clear memory of the vector completely @@ -71,8 +73,8 @@ struct discHdr * GameList::GetDiscHeader(const char * gameID) int GameList::ReadGameList() { - FullGameList.clear(); - FilteredList.clear(); + // Clear list + clear(); // Retrieve all stuff from WBFS u32 cnt; @@ -80,6 +82,10 @@ int GameList::ReadGameList() int ret = WBFS_GetCount(&cnt); if (ret < 0) return -1; + // We are done here if no games are there + if(cnt == 0) + return 0; + /* Buffer length */ u32 len = sizeof(struct discHdr) * cnt;