mirror of
https://gitlab.com/Nanolx/homebrewfilter.git
synced 2025-02-21 11:37:10 +01:00
116 lines
3.2 KiB
C++
116 lines
3.2 KiB
C++
|
|
#include <unistd.h>
|
|
|
|
#include "libwiigui/gui.h"
|
|
#include "main.h"
|
|
|
|
/*** Extern variables ***/
|
|
extern GuiWindow * mainWindow;
|
|
|
|
/*** Extern functions ***/
|
|
extern void ResumeGui();
|
|
extern void HaltGui();
|
|
|
|
/****************************************************************************
|
|
* WindowPrompt
|
|
*
|
|
* Displays a prompt window to user, with information, an error message, or
|
|
* presenting a user with a choice
|
|
***************************************************************************/
|
|
int
|
|
WindowPrompt(const char *title, const char *msg, const char *btn1Label, const char *btn2Label)
|
|
{
|
|
int choice = -1;
|
|
|
|
GuiWindow promptWindow(520,360);
|
|
promptWindow.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE);
|
|
promptWindow.SetPosition(0, -10);
|
|
GuiTrigger trigA;
|
|
trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A);
|
|
|
|
|
|
GuiImageData dialogBox(Theme.dialog_background);
|
|
GuiImage dialogBoxImg(&dialogBox);
|
|
|
|
GuiImageData btnOutline(Theme.button_small);
|
|
GuiImage btn1Img(&btnOutline);
|
|
|
|
GuiImageData btnOutlineOver(Theme.button_small_focus);
|
|
GuiImage btn1ImgOver(&btnOutlineOver);
|
|
|
|
GuiText titleTxt(title, 26, (GXColor){Theme.text_1, Theme.text_2, Theme.text_3, 255});
|
|
titleTxt.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
|
|
titleTxt.SetPosition(0,40);
|
|
GuiText msgTxt(msg, 22, (GXColor){Theme.text_1, Theme.text_2, Theme.text_3, 255});
|
|
msgTxt.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE);
|
|
msgTxt.SetPosition(0,-20);
|
|
msgTxt.SetMaxWidth(400);
|
|
|
|
GuiText btn1Txt(btn1Label, 22, (GXColor){Theme.button_small_text_1, Theme.button_small_text_2, Theme.button_small_text_3, 255});
|
|
GuiButton btn1(btnOutline.GetWidth(), btnOutline.GetHeight());
|
|
|
|
if(btn2Label)
|
|
{
|
|
btn1.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM);
|
|
btn1.SetPosition(20, -25);
|
|
}
|
|
else
|
|
{
|
|
btn1.SetAlignment(ALIGN_CENTRE, ALIGN_BOTTOM);
|
|
btn1.SetPosition(0, -25);
|
|
}
|
|
|
|
btn1.SetLabel(&btn1Txt);
|
|
btn1.SetImage(&btn1Img);
|
|
btn1.SetImageOver(&btn1ImgOver);
|
|
btn1.SetTrigger(&trigA);
|
|
btn1.SetState(STATE_SELECTED);
|
|
btn1.SetEffectGrow();
|
|
|
|
GuiText btn2Txt(btn2Label, 22, (GXColor){Theme.button_small_text_1, Theme.button_small_text_2, Theme.button_small_text_3, 255});
|
|
GuiImage btn2Img(&btnOutline);
|
|
GuiImage btn2ImgOver(&btnOutlineOver);
|
|
GuiButton btn2(btnOutline.GetWidth(), btnOutline.GetHeight());
|
|
btn2.SetAlignment(ALIGN_RIGHT, ALIGN_BOTTOM);
|
|
btn2.SetPosition(-20, -25);
|
|
btn2.SetLabel(&btn2Txt);
|
|
btn2.SetImage(&btn2Img);
|
|
btn2.SetImageOver(&btn2ImgOver);
|
|
btn2.SetTrigger(&trigA);
|
|
btn2.SetEffectGrow();
|
|
|
|
promptWindow.Append(&dialogBoxImg);
|
|
promptWindow.Append(&titleTxt);
|
|
promptWindow.Append(&msgTxt);
|
|
promptWindow.Append(&btn1);
|
|
|
|
if(btn2Label)
|
|
promptWindow.Append(&btn2);
|
|
|
|
promptWindow.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_IN, 50);
|
|
HaltGui();
|
|
mainWindow->SetState(STATE_DISABLED);
|
|
mainWindow->Append(&promptWindow);
|
|
mainWindow->ChangeFocus(&promptWindow);
|
|
ResumeGui();
|
|
|
|
while(choice == -1)
|
|
{
|
|
usleep(100);
|
|
|
|
if(btn1.GetState() == STATE_CLICKED)
|
|
choice = 1;
|
|
else if(btn2.GetState() == STATE_CLICKED)
|
|
choice = 0;
|
|
}
|
|
|
|
promptWindow.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_OUT, 50);
|
|
while(promptWindow.GetEffect() > 0) usleep(100);
|
|
HaltGui();
|
|
mainWindow->Remove(&promptWindow);
|
|
mainWindow->SetState(STATE_DEFAULT);
|
|
ResumeGui();
|
|
return choice;
|
|
}
|
|
|