#include #include "libwiigui/gui.h" #include "main.h" /*** Extern variables ***/ extern GuiWindow * mainWindow; /*** Extern functions ***/ extern void ResumeGui(); extern void HaltGui(); /**************************************************************************** * OnScreenKeyboard * * Opens an on-screen keyboard window, with the data entered being stored * into the specified variable. ***************************************************************************/ void OnScreenKeyboard(char * var, u16 maxlen, bool br) { int save = -1; GuiKeyboard keyboard(var, maxlen, br); GuiImageData btnOutline(Theme.button_small); GuiImageData btnOutlineOver(Theme.button_small_focus); GuiTrigger trigA; trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A); GuiText okBtnTxt("OK", 22, (GXColor){Theme.button_small_text_1, Theme.button_small_text_2, Theme.button_small_text_3, 255}); GuiImage okBtnImg(&btnOutline); GuiImage okBtnImgOver(&btnOutlineOver); GuiButton okBtn(btnOutline.GetWidth(), btnOutline.GetHeight()); okBtn.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM); okBtn.SetPosition(25, -25); okBtn.SetLabel(&okBtnTxt); okBtn.SetImage(&okBtnImg); okBtn.SetImageOver(&okBtnImgOver); okBtn.SetTrigger(&trigA); okBtn.SetEffectGrow(); GuiText cancelBtnTxt(tr("Stop"), 22, (GXColor){Theme.button_small_text_1, Theme.button_small_text_2, Theme.button_small_text_3, 255}); GuiImage cancelBtnImg(&btnOutline); GuiImage cancelBtnImgOver(&btnOutlineOver); GuiButton cancelBtn(btnOutline.GetWidth(), btnOutline.GetHeight()); cancelBtn.SetAlignment(ALIGN_RIGHT, ALIGN_BOTTOM); cancelBtn.SetPosition(-25, -25); cancelBtn.SetLabel(&cancelBtnTxt); cancelBtn.SetImage(&cancelBtnImg); cancelBtn.SetImageOver(&cancelBtnImgOver); cancelBtn.SetTrigger(&trigA); cancelBtn.SetEffectGrow(); keyboard.Append(&okBtn); keyboard.Append(&cancelBtn); HaltGui(); mainWindow->SetState(STATE_DISABLED); mainWindow->Append(&keyboard); mainWindow->ChangeFocus(&keyboard); ResumeGui(); int textpointertime = 0; bool textpointerswitch = true; while(save == -1) { usleep(100); textpointertime++; if(textpointerswitch && textpointertime >= 5000) { textpointertime = 0; textpointerswitch = false; } else if(!textpointerswitch && textpointertime >= 5000) { textpointertime = 0; textpointerswitch = true; } keyboard.textpointerImg->SetVisible(textpointerswitch); if(okBtn.GetState() == STATE_CLICKED) save = 1; else if(cancelBtn.GetState() == STATE_CLICKED) save = 0; } if(save) snprintf(var, maxlen, "%s", keyboard.kbtextstr); else snprintf(var, maxlen, "%s", "NULL"); HaltGui(); mainWindow->Remove(&keyboard); mainWindow->SetState(STATE_DEFAULT); ResumeGui(); }