mirror of
https://gitlab.com/Nanolx/homebrewfilter.git
synced 2025-02-21 11:37:10 +01:00
277 lines
8.1 KiB
C++
277 lines
8.1 KiB
C++
|
||
#include <unistd.h>
|
||
#include <algorithm>
|
||
|
||
#include "libwiigui/gui.h"
|
||
#include "main.h"
|
||
#include "menu.h"
|
||
#include "Prompts/prompts.h"
|
||
|
||
#include "Network/update.h"
|
||
|
||
/*** Extern variables ***/
|
||
extern GuiWindow * mainWindow;
|
||
extern bool boot_buffer;
|
||
|
||
/*** Extern functions ***/
|
||
extern void ResumeGui();
|
||
extern void HaltGui();
|
||
|
||
|
||
/****************************************************************************
|
||
* MenuSettings
|
||
***************************************************************************/
|
||
int MenuSettings()
|
||
{
|
||
int menu = MENU_NONE;
|
||
|
||
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);
|
||
|
||
GuiText titleTxt(tr("Settings"), 30, (GXColor){Theme.title_1, Theme.title_2, Theme.title_3, 255});
|
||
titleTxt.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
|
||
titleTxt.SetPosition(0,30);
|
||
|
||
// normale Buttons
|
||
GuiImageData btn(Theme.button);
|
||
GuiImage categoryCreateBtnImg(&btn);
|
||
GuiImage categoryEraseBtnImg(&btn);
|
||
GuiImage infoBtnImg(&btn);
|
||
GuiImage optionsBtnImg(&btn);
|
||
GuiImage updateBtnImg(&btn);
|
||
GuiImage backBtnImg(&btn);
|
||
|
||
// normale Buttons over
|
||
GuiImageData btn_over(Theme.button_focus);
|
||
GuiImage categoryCreateBtnImgOver(&btn_over);
|
||
GuiImage categoryEraseBtnImgOver(&btn_over);
|
||
GuiImage infoBtnImgOver(&btn_over);
|
||
GuiImage optionsBtnImgOver(&btn_over);
|
||
GuiImage updateBtnImgOver(&btn_over);
|
||
GuiImage backBtnImgOver(&btn_over);
|
||
|
||
GuiText categoryCreateBtnTxt(tr("Create Category"), 22, (GXColor){Theme.button_small_text_1, Theme.button_small_text_2, Theme.button_small_text_3, 255});
|
||
GuiButton categoryCreateBtn(btn.GetWidth(), btn.GetHeight());
|
||
categoryCreateBtn.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
|
||
categoryCreateBtn.SetPosition(0, 80);
|
||
categoryCreateBtn.SetLabel(&categoryCreateBtnTxt);
|
||
categoryCreateBtn.SetImage(&categoryCreateBtnImg);
|
||
categoryCreateBtn.SetImageOver(&categoryCreateBtnImgOver);
|
||
categoryCreateBtn.SetTrigger(&trigA);
|
||
|
||
GuiText categoryEraseBtnTxt(tr("Delete Category"), 22, (GXColor){Theme.button_small_text_1, Theme.button_small_text_2, Theme.button_small_text_3, 255});
|
||
GuiButton categoryEraseBtn(btn.GetWidth(), btn.GetHeight());
|
||
categoryEraseBtn.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
|
||
categoryEraseBtn.SetPosition(0, 140);
|
||
categoryEraseBtn.SetLabel(&categoryEraseBtnTxt);
|
||
categoryEraseBtn.SetImage(&categoryEraseBtnImg);
|
||
categoryEraseBtn.SetImageOver(&categoryEraseBtnImgOver);
|
||
categoryEraseBtn.SetTrigger(&trigA);
|
||
|
||
GuiText optionsBtnTxt(tr("Options"), 22, (GXColor){Theme.button_small_text_1, Theme.button_small_text_2, Theme.button_small_text_3, 255});
|
||
GuiButton optionsBtn(btn.GetWidth(), btn.GetHeight());
|
||
optionsBtn.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
|
||
optionsBtn.SetPosition(0, 200);
|
||
optionsBtn.SetLabel(&optionsBtnTxt);
|
||
optionsBtn.SetImage(&optionsBtnImg);
|
||
optionsBtn.SetImageOver(&optionsBtnImgOver);
|
||
optionsBtn.SetTrigger(&trigA);
|
||
|
||
GuiText infoBtnTxt(tr("Info"), 22, (GXColor){Theme.button_small_text_1, Theme.button_small_text_2, Theme.button_small_text_3, 255});
|
||
GuiButton infoBtn(btn.GetWidth(), btn.GetHeight());
|
||
infoBtn.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
|
||
infoBtn.SetPosition(0, 260);
|
||
infoBtn.SetLabel(&infoBtnTxt);
|
||
infoBtn.SetImage(&infoBtnImg);
|
||
infoBtn.SetImageOver(&infoBtnImgOver);
|
||
infoBtn.SetTrigger(&trigA);
|
||
|
||
GuiText updateBtnTxt(tr("Update"), 22, (GXColor){Theme.button_small_text_1, Theme.button_small_text_2, Theme.button_small_text_3, 255});
|
||
GuiButton updateBtn(btn.GetWidth(), btn.GetHeight());
|
||
updateBtn.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
|
||
updateBtn.SetPosition(0, 320);
|
||
updateBtn.SetLabel(&updateBtnTxt);
|
||
updateBtn.SetImage(&updateBtnImg);
|
||
updateBtn.SetImageOver(&updateBtnImgOver);
|
||
updateBtn.SetTrigger(&trigA);
|
||
|
||
GuiText backBtnTxt(tr("Back"), 22, (GXColor){Theme.button_small_text_1, Theme.button_small_text_2, Theme.button_small_text_3, 255});
|
||
GuiButton backBtn(btn.GetWidth(), btn.GetHeight());
|
||
backBtn.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
|
||
backBtn.SetPosition(0, 380);
|
||
backBtn.SetLabel(&backBtnTxt);
|
||
backBtn.SetImage(&backBtnImg);
|
||
backBtn.SetImageOver(&backBtnImgOver);
|
||
backBtn.SetTrigger(&trigA);
|
||
backBtn.SetTrigger(&trigHome);
|
||
|
||
HaltGui();
|
||
GuiWindow w(screenwidth, screenheight);
|
||
w.Append(&titleTxt);
|
||
w.Append(&categoryCreateBtn);
|
||
w.Append(&categoryEraseBtn);
|
||
w.Append(&optionsBtn);
|
||
w.Append(&infoBtn);
|
||
w.Append(&updateBtn);
|
||
w.Append(&backBtn);
|
||
|
||
mainWindow->Append(&w);
|
||
|
||
ResumeGui();
|
||
|
||
while(menu == MENU_NONE)
|
||
{
|
||
usleep(100);
|
||
|
||
// kinderschutz aus
|
||
if(strcasecmp(Settings.code,"NULL") == 0 )
|
||
{
|
||
categoryCreateBtn.SetClickable(true);
|
||
categoryEraseBtn.SetClickable(true);
|
||
updateBtn.SetClickable(true);
|
||
}
|
||
// kinderschutz an
|
||
else
|
||
{
|
||
categoryCreateBtn.SetClickable(false);
|
||
categoryEraseBtn.SetClickable(false);
|
||
updateBtn.SetClickable(false);
|
||
}
|
||
|
||
if(categoryCreateBtn.GetState() == STATE_CLICKED)
|
||
{
|
||
categoryCreateBtn.ResetState();
|
||
|
||
char new_category_name[256];
|
||
sprintf (new_category_name, tr(Settings.new_category_name));
|
||
OnScreenKeyboard(new_category_name, 256, false);
|
||
|
||
if(strcasecmp(new_category_name,"NULL") != 0 )
|
||
KategorieEinfuegen(new_category_name);
|
||
}
|
||
else if(categoryEraseBtn.GetState() == STATE_CLICKED)
|
||
{
|
||
categoryEraseBtn.ResetState();
|
||
if(AvailableCategory.categories.size() > 1)
|
||
{
|
||
string entferne_kategorie = eraseCategory();
|
||
|
||
if( entferne_kategorie != "NULL" )
|
||
{
|
||
int choice = WindowPrompt(entferne_kategorie.c_str(), tr("Really remove?"), tr("Yes"), tr("No"));
|
||
if(choice == 1)
|
||
{
|
||
KategorieEntfernen(entferne_kategorie);
|
||
Settings.current_category = 0;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
else if(optionsBtn.GetState() == STATE_CLICKED)
|
||
{
|
||
if(strcasecmp(Settings.code,"NULL") != 0 )
|
||
{
|
||
char buffer[5];
|
||
while(1)
|
||
{
|
||
for(int i = 0; i < (signed)strlen(buffer); i++)
|
||
buffer[i] = '\0';
|
||
|
||
OnScreenCodeboard(buffer, 4);
|
||
// wenn eingabe richtig
|
||
if(strcasecmp(buffer, Settings.code) == 0 )
|
||
{
|
||
menu = MENU_SETTINGS_FILE;
|
||
break;
|
||
}
|
||
// wenn eingabe abgebrochen
|
||
else if(strcasecmp(buffer, "NULL") == 0 )
|
||
break;
|
||
// wenn eingabe falsch
|
||
else
|
||
WindowPrompt(NULL, tr("Error"), tr("Back"));
|
||
}
|
||
}
|
||
else
|
||
menu = MENU_SETTINGS_FILE;
|
||
}
|
||
else if(infoBtn.GetState() == STATE_CLICKED)
|
||
{
|
||
infoBtn.ResetState();
|
||
infoPrompt();
|
||
}
|
||
else if(updateBtn.GetState() == STATE_CLICKED)
|
||
{
|
||
updateBtn.ResetState();
|
||
|
||
string revnumber = checkUpdatePrompt();
|
||
|
||
if(revnumber != "NULL")
|
||
{
|
||
char title[100];
|
||
if(revnumber == "Beta")
|
||
sprintf(title, "%s ( rev.%i %s Beta )", tr("Update"), SvnRev(), "<EFBFBD>");
|
||
else
|
||
sprintf(title, "%s ( rev.%i %s rev.%s )", tr("Update"), SvnRev(), "<EFBFBD>", revnumber.c_str());
|
||
|
||
// auflisten
|
||
string version_text = NewVersionsText();
|
||
vector <string> versions_text;
|
||
|
||
int strpos = version_text.find("//rev");
|
||
while(strpos != -1)
|
||
{
|
||
version_text.erase(0, strpos +2);
|
||
int strpos2 = version_text.find("//rev");
|
||
if(strpos2 != -1)
|
||
{
|
||
versions_text.push_back(version_text.substr(0, strpos2 -2));
|
||
version_text.erase(0, strpos2 -2);
|
||
}
|
||
else
|
||
versions_text.push_back(version_text.substr(0, version_text.find("end") -2));
|
||
|
||
strpos = version_text.find("//rev");
|
||
}
|
||
|
||
char revinfo[10];
|
||
if(revnumber == "Beta")
|
||
sprintf(revinfo, "rev_Beta");
|
||
else
|
||
sprintf(revinfo, "rev%i", atoi(revnumber.c_str()));
|
||
|
||
string text;
|
||
|
||
for(int i=0; i < (signed)versions_text.size(); i++)
|
||
{
|
||
if(strcasecmp(versions_text[i].substr(0, versions_text[i].find(":")).c_str(), revinfo) == 0)
|
||
{
|
||
versions_text[i].erase(0, versions_text[i].find(":") +2);
|
||
text = versions_text[i];
|
||
break;
|
||
}
|
||
}
|
||
revtext(text.c_str());
|
||
|
||
// anzeigen
|
||
int choice = WindowPrompt(title, tr("Do you want to update now ?"), tr("Yes"), tr("No"));
|
||
if(choice == 1)
|
||
{
|
||
updatePrompt(revnumber);
|
||
if(boot_buffer)
|
||
menu = MENU_EXIT;
|
||
}
|
||
}
|
||
}
|
||
else if(backBtn.GetState() == STATE_CLICKED)
|
||
menu = MENU_MAIN;
|
||
}
|
||
|
||
HaltGui();
|
||
mainWindow->Remove(&w);
|
||
return menu;
|
||
}
|
||
|