00001 /**************************************************************************** 00002 * libwiigui Template 00003 * Tantric 2009 00004 * 00005 * menu.cpp 00006 * Menu flow routines - handles all menu logic 00007 ***************************************************************************/ 00008 00009 #include <gccore.h> 00010 #include <ogcsys.h> 00011 #include <stdio.h> 00012 #include <unistd.h> 00013 #include <stdlib.h> 00014 #include <string.h> 00015 #include <wiiuse/wpad.h> 00016 00017 #include "libwiigui/gui.h" 00018 #include "menu.h" 00019 #include "demo.h" 00020 #include "input.h" 00021 #include "filelist.h" 00022 #include "filebrowser.h" 00023 00024 GuiImageData * pointer[4]; 00025 GuiImage * bgImg = NULL; 00026 GuiSound * bgMusic = NULL; 00027 GuiWindow * mainWindow = NULL; 00028 static lwp_t guithread = LWP_THREAD_NULL; 00029 static bool guiHalt = true; 00030 int ExitRequested = 0; 00031 00032 /**************************************************************************** 00033 * ResumeGui 00034 * 00035 * Signals the GUI thread to start, and resumes the thread. This is called 00036 * after finishing the removal/insertion of new elements, and after initial 00037 * GUI setup. 00038 ***************************************************************************/ 00039 //static 00040 void ResumeGui() 00041 { 00042 guiHalt = false; 00043 LWP_ResumeThread (guithread); 00044 } 00045 00046 /**************************************************************************** 00047 * HaltGui 00048 * 00049 * Signals the GUI thread to stop, and waits for GUI thread to stop 00050 * This is necessary whenever removing/inserting new elements into the GUI. 00051 * This eliminates the possibility that the GUI is in the middle of accessing 00052 * an element that is being changed. 00053 ***************************************************************************/ 00054 //static 00055 void HaltGui() 00056 { 00057 guiHalt = true; 00058 00059 // wait for thread to finish 00060 while(!LWP_ThreadIsSuspended(guithread)) 00061 usleep(THREAD_SLEEP); 00062 } 00063 00064 /**************************************************************************** 00065 * WindowPrompt 00066 * 00067 * Displays a prompt window to user, with information, an error message, or 00068 * presenting a user with a choice 00069 ***************************************************************************/ 00070 int 00071 WindowPrompt(const char *title, const char *msg, const char *btn1Label, const char *btn2Label, GuiWindow *parentWindow) 00072 { 00073 int choice = -1; 00074 00075 GuiWindow promptWindow(448,288); 00076 promptWindow.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE); 00077 promptWindow.SetPosition(0, -10); 00078 GuiSound btnSoundOver(button_over_pcm, button_over_pcm_size, SOUND_PCM); 00079 GuiImageData btnOutline(button_png); 00080 GuiImageData btnOutlineOver(button_over_png); 00081 GuiTrigger trigA; 00082 trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A); 00083 00084 GuiImageData dialogBox(dialogue_box_png); 00085 GuiImage dialogBoxImg(&dialogBox); 00086 00087 GXColor helpTxtColor = (GXColor){0, 170, 0, 255}; 00088 GuiText titleTxt(title, 24, helpTxtColor); 00089 titleTxt.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); 00090 titleTxt.SetPosition(0, 30); 00091 GuiText msgTxt(msg, 20, (GXColor){0, 0, 0, 255}); 00092 msgTxt.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE); 00093 msgTxt.SetPosition(0, -40); 00094 msgTxt.SetWrap(true, 400); 00095 00096 GuiText btn1Txt(btn1Label, 22, (GXColor){0, 0, 0, 255}); 00097 GuiImage btn1Img(&btnOutline); 00098 GuiImage btn1ImgOver(&btnOutlineOver); 00099 GuiButton btn1(btnOutline.GetWidth(), btnOutline.GetHeight()); 00100 00101 if(btn2Label) 00102 { 00103 btn1.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM); 00104 btn1.SetPosition(20, -25); 00105 } 00106 else 00107 { 00108 btn1.SetAlignment(ALIGN_CENTRE, ALIGN_BOTTOM); 00109 btn1.SetPosition(0, -25); 00110 } 00111 00112 btn1.SetLabel(&btn1Txt); 00113 btn1.SetImage(&btn1Img); 00114 btn1.SetImageOver(&btn1ImgOver); 00115 btn1.SetSoundOver(&btnSoundOver); 00116 btn1.SetTrigger(&trigA); 00117 btn1.SetState(STATE_SELECTED); 00118 btn1.SetEffectGrow(); 00119 00120 GuiText btn2Txt(btn2Label, 22, (GXColor){0, 0, 0, 255}); 00121 GuiImage btn2Img(&btnOutline); 00122 GuiImage btn2ImgOver(&btnOutlineOver); 00123 GuiButton btn2(btnOutline.GetWidth(), btnOutline.GetHeight()); 00124 btn2.SetAlignment(ALIGN_RIGHT, ALIGN_BOTTOM); 00125 btn2.SetPosition(-20, -25); 00126 btn2.SetLabel(&btn2Txt); 00127 btn2.SetImage(&btn2Img); 00128 btn2.SetImageOver(&btn2ImgOver); 00129 btn2.SetSoundOver(&btnSoundOver); 00130 btn2.SetTrigger(&trigA); 00131 btn2.SetEffectGrow(); 00132 00133 promptWindow.Append(&dialogBoxImg); 00134 promptWindow.Append(&titleTxt); 00135 promptWindow.Append(&msgTxt); 00136 promptWindow.Append(&btn1); 00137 00138 if(btn2Label) 00139 promptWindow.Append(&btn2); 00140 00141 promptWindow.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_IN, 50); 00142 00143 if (!parentWindow) 00144 parentWindow = mainWindow; 00145 00146 HaltGui(); 00147 parentWindow->DisableChildren(); 00148 parentWindow->Append(&promptWindow); 00149 parentWindow->ChangeFocus(&promptWindow); 00150 ResumeGui(); 00151 00152 while(choice == -1) 00153 { 00154 usleep(THREAD_SLEEP); 00155 00156 if(btn1.GetState() == STATE_CLICKED) 00157 choice = 1; 00158 else if(btn2.GetState() == STATE_CLICKED) 00159 choice = 0; 00160 } 00161 00162 promptWindow.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_OUT, 50); 00163 while(promptWindow.GetEffect() > 0) usleep(THREAD_SLEEP); 00164 HaltGui(); 00165 parentWindow->Remove(&promptWindow); 00166 parentWindow->SetState(STATE_DEFAULT); 00167 ResumeGui(); 00168 return choice; 00169 } 00170 00171 /**************************************************************************** 00172 * UpdateGUI 00173 * 00174 * Primary thread to allow GUI to respond to state changes, and draws GUI 00175 ***************************************************************************/ 00176 00177 static void * 00178 UpdateGUI (void *arg) 00179 { 00180 int i; 00181 00182 while(1) 00183 { 00184 if(guiHalt) 00185 { 00186 LWP_SuspendThread(guithread); 00187 } 00188 else 00189 { 00190 UpdatePads(); 00191 mainWindow->Draw(); 00192 00193 #ifdef HW_RVL 00194 for(i=3; i >= 0; i--) // so that player 1's cursor appears on top! 00195 { 00196 if(userInput[i].wpad->ir.valid) 00197 Menu_DrawImg(userInput[i].wpad->ir.x-48, userInput[i].wpad->ir.y-48, 00198 96, 96, pointer[i]->GetImage(), userInput[i].wpad->ir.angle, 1, 1, 255); 00199 DoRumble(i); 00200 } 00201 #endif 00202 00203 Menu_Render(); 00204 00205 for(i=0; i < 4; i++) 00206 mainWindow->Update(&userInput[i]); 00207 00208 if(ExitRequested) 00209 { 00210 for(i = 0; i < 255; i += 15) 00211 { 00212 mainWindow->Draw(); 00213 Menu_DrawRectangle(0,0,screenwidth,screenheight,(GXColor){0, 0, 0, i},1); 00214 Menu_Render(); 00215 } 00216 //ExitApp(); 00217 //return NULL; 00218 } 00219 } 00220 } 00221 return NULL; 00222 } 00223 00224 /**************************************************************************** 00225 * InitGUIThread 00226 * 00227 * Startup GUI threads 00228 ***************************************************************************/ 00229 void 00230 InitGUIThreads() 00231 { 00232 LWP_CreateThread (&guithread, UpdateGUI, NULL, NULL, 0, 70); 00233 } 00234 00235 /**************************************************************************** 00236 * OnScreenKeyboard 00237 * 00238 * Opens an on-screen keyboard window, with the data entered being stored 00239 * into the specified variable. 00240 ***************************************************************************/ 00241 /*static void OnScreenKeyboard(char * var, u16 maxlen) 00242 { 00243 int save = -1; 00244 00245 GuiKeyboard keyboard(var, maxlen); 00246 00247 GuiSound btnSoundOver(button_over_pcm, button_over_pcm_size, SOUND_PCM); 00248 GuiImageData btnOutline(button_png); 00249 GuiImageData btnOutlineOver(button_over_png); 00250 GuiTrigger trigA; 00251 trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A); 00252 00253 GuiText okBtnTxt("OK", 22, (GXColor){0, 0, 0, 255}); 00254 GuiImage okBtnImg(&btnOutline); 00255 GuiImage okBtnImgOver(&btnOutlineOver); 00256 GuiButton okBtn(btnOutline.GetWidth(), btnOutline.GetHeight()); 00257 00258 okBtn.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM); 00259 okBtn.SetPosition(25, -25); 00260 00261 okBtn.SetLabel(&okBtnTxt); 00262 okBtn.SetImage(&okBtnImg); 00263 okBtn.SetImageOver(&okBtnImgOver); 00264 okBtn.SetSoundOver(&btnSoundOver); 00265 okBtn.SetTrigger(&trigA); 00266 okBtn.SetEffectGrow(); 00267 00268 GuiText cancelBtnTxt("Cancel", 22, (GXColor){0, 0, 0, 255}); 00269 GuiImage cancelBtnImg(&btnOutline); 00270 GuiImage cancelBtnImgOver(&btnOutlineOver); 00271 GuiButton cancelBtn(btnOutline.GetWidth(), btnOutline.GetHeight()); 00272 cancelBtn.SetAlignment(ALIGN_RIGHT, ALIGN_BOTTOM); 00273 cancelBtn.SetPosition(-25, -25); 00274 cancelBtn.SetLabel(&cancelBtnTxt); 00275 cancelBtn.SetImage(&cancelBtnImg); 00276 cancelBtn.SetImageOver(&cancelBtnImgOver); 00277 cancelBtn.SetSoundOver(&btnSoundOver); 00278 cancelBtn.SetTrigger(&trigA); 00279 cancelBtn.SetEffectGrow(); 00280 00281 keyboard.Append(&okBtn); 00282 keyboard.Append(&cancelBtn); 00283 00284 HaltGui(); 00285 mainWindow->SetState(STATE_DISABLED); 00286 mainWindow->Append(&keyboard); 00287 mainWindow->ChangeFocus(&keyboard); 00288 ResumeGui(); 00289 00290 while(save == -1) 00291 { 00292 usleep(THREAD_SLEEP); 00293 00294 if(okBtn.GetState() == STATE_CLICKED) 00295 save = 1; 00296 else if(cancelBtn.GetState() == STATE_CLICKED) 00297 save = 0; 00298 } 00299 00300 if(save) 00301 { 00302 snprintf(var, maxlen, "%s", keyboard.kbtextstr); 00303 } 00304 00305 HaltGui(); 00306 mainWindow->Remove(&keyboard); 00307 mainWindow->SetState(STATE_DEFAULT); 00308 ResumeGui(); 00309 }*/ 00310 00311 /**************************************************************************** 00312 * MenuBrowseDevice 00313 ***************************************************************************/ 00314 /*static int MenuBrowseDevice() 00315 { 00316 char title[100]; 00317 int i; 00318 00319 ShutoffRumble(); 00320 00321 // populate initial directory listing 00322 if(BrowseDevice() <= 0) 00323 { 00324 int choice = WindowPrompt( 00325 "Error", 00326 "Unable to display files on selected load device.", 00327 "Retry", 00328 "Check Settings"); 00329 00330 if(choice) 00331 return MENU_BROWSE_DEVICE; 00332 else 00333 return MENU_SETTINGS; 00334 } 00335 00336 int menu = MENU_NONE; 00337 00338 sprintf(title, "Browse Files"); 00339 00340 GuiText titleTxt(title, 28, (GXColor){255, 255, 255, 255}); 00341 titleTxt.SetAlignment(ALIGN_LEFT, ALIGN_TOP); 00342 titleTxt.SetPosition(100,50); 00343 00344 GuiTrigger trigA; 00345 trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A); 00346 00347 GuiFileBrowser fileBrowser(552, 248); 00348 fileBrowser.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); 00349 fileBrowser.SetPosition(0, 100); 00350 00351 GuiImageData btnOutline(button_png); 00352 GuiImageData btnOutlineOver(button_over_png); 00353 GuiText backBtnTxt("Go Back", 24, (GXColor){0, 0, 0, 255}); 00354 GuiImage backBtnImg(&btnOutline); 00355 GuiImage backBtnImgOver(&btnOutlineOver); 00356 GuiButton backBtn(btnOutline.GetWidth(), btnOutline.GetHeight()); 00357 backBtn.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM); 00358 backBtn.SetPosition(30, -35); 00359 backBtn.SetLabel(&backBtnTxt); 00360 backBtn.SetImage(&backBtnImg); 00361 backBtn.SetImageOver(&backBtnImgOver); 00362 backBtn.SetTrigger(&trigA); 00363 backBtn.SetEffectGrow(); 00364 00365 GuiWindow buttonWindow(screenwidth, screenheight); 00366 buttonWindow.Append(&backBtn); 00367 00368 HaltGui(); 00369 mainWindow->Append(&titleTxt); 00370 mainWindow->Append(&fileBrowser); 00371 mainWindow->Append(&buttonWindow); 00372 ResumeGui(); 00373 00374 while(menu == MENU_NONE) 00375 { 00376 usleep(THREAD_SLEEP); 00377 00378 // update file browser based on arrow buttons 00379 // set MENU_EXIT if A button pressed on a file 00380 for(i=0; i < FILE_PAGESIZE; i++) 00381 { 00382 if(fileBrowser.fileList[i]->GetState() == STATE_CLICKED) 00383 { 00384 fileBrowser.fileList[i]->ResetState(); 00385 // check corresponding browser entry 00386 if(browserList[browser.selIndex].isdir) 00387 { 00388 if(BrowserChangeFolder()) 00389 { 00390 fileBrowser.ResetState(); 00391 fileBrowser.fileList[0]->SetState(STATE_SELECTED); 00392 fileBrowser.TriggerUpdate(); 00393 } 00394 else 00395 { 00396 menu = MENU_BROWSE_DEVICE; 00397 break; 00398 } 00399 } 00400 else 00401 { 00402 ShutoffRumble(); 00403 mainWindow->SetState(STATE_DISABLED); 00404 // load file 00405 mainWindow->SetState(STATE_DEFAULT); 00406 } 00407 } 00408 } 00409 if(backBtn.GetState() == STATE_CLICKED) 00410 menu = MENU_SETTINGS; 00411 } 00412 HaltGui(); 00413 mainWindow->Remove(&titleTxt); 00414 mainWindow->Remove(&buttonWindow); 00415 mainWindow->Remove(&fileBrowser); 00416 return menu; 00417 }*/ 00418 00419 /**************************************************************************** 00420 * MenuSettings 00421 ***************************************************************************/ 00422 /*static int MenuSettings() 00423 { 00424 int menu = MENU_NONE; 00425 00426 GuiText titleTxt("Settings", 28, (GXColor){255, 255, 255, 255}); 00427 titleTxt.SetAlignment(ALIGN_LEFT, ALIGN_TOP); 00428 titleTxt.SetPosition(50,50); 00429 00430 GuiSound btnSoundOver(button_over_pcm, button_over_pcm_size, SOUND_PCM); 00431 GuiImageData btnOutline(button_png); 00432 GuiImageData btnOutlineOver(button_over_png); 00433 GuiImageData btnLargeOutline(button_large_png); 00434 GuiImageData btnLargeOutlineOver(button_large_over_png); 00435 00436 GuiTrigger trigA; 00437 trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A); 00438 GuiTrigger trigHome; 00439 trigHome.SetButtonOnlyTrigger(-1, WPAD_BUTTON_HOME | WPAD_CLASSIC_BUTTON_HOME, 0); 00440 00441 GuiText fileBtnTxt("File Browser", 22, (GXColor){0, 0, 0, 255}); 00442 fileBtnTxt.SetWrap(true, btnLargeOutline.GetWidth()-30); 00443 GuiImage fileBtnImg(&btnLargeOutline); 00444 GuiImage fileBtnImgOver(&btnLargeOutlineOver); 00445 GuiButton fileBtn(btnLargeOutline.GetWidth(), btnLargeOutline.GetHeight()); 00446 fileBtn.SetAlignment(ALIGN_LEFT, ALIGN_TOP); 00447 fileBtn.SetPosition(50, 120); 00448 fileBtn.SetLabel(&fileBtnTxt); 00449 fileBtn.SetImage(&fileBtnImg); 00450 fileBtn.SetImageOver(&fileBtnImgOver); 00451 fileBtn.SetSoundOver(&btnSoundOver); 00452 fileBtn.SetTrigger(&trigA); 00453 fileBtn.SetEffectGrow(); 00454 00455 GuiText videoBtnTxt("Video", 22, (GXColor){0, 0, 0, 255}); 00456 videoBtnTxt.SetWrap(true, btnLargeOutline.GetWidth()-30); 00457 GuiImage videoBtnImg(&btnLargeOutline); 00458 GuiImage videoBtnImgOver(&btnLargeOutlineOver); 00459 GuiButton videoBtn(btnLargeOutline.GetWidth(), btnLargeOutline.GetHeight()); 00460 videoBtn.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); 00461 videoBtn.SetPosition(0, 120); 00462 videoBtn.SetLabel(&videoBtnTxt); 00463 videoBtn.SetImage(&videoBtnImg); 00464 videoBtn.SetImageOver(&videoBtnImgOver); 00465 videoBtn.SetSoundOver(&btnSoundOver); 00466 videoBtn.SetTrigger(&trigA); 00467 videoBtn.SetEffectGrow(); 00468 00469 GuiText savingBtnTxt1("Saving", 22, (GXColor){0, 0, 0, 255}); 00470 GuiText savingBtnTxt2("&", 18, (GXColor){0, 0, 0, 255}); 00471 GuiText savingBtnTxt3("Loading", 22, (GXColor){0, 0, 0, 255}); 00472 savingBtnTxt1.SetPosition(0, -20); 00473 savingBtnTxt3.SetPosition(0, +20); 00474 GuiImage savingBtnImg(&btnLargeOutline); 00475 GuiImage savingBtnImgOver(&btnLargeOutlineOver); 00476 GuiButton savingBtn(btnLargeOutline.GetWidth(), btnLargeOutline.GetHeight()); 00477 savingBtn.SetAlignment(ALIGN_RIGHT, ALIGN_TOP); 00478 savingBtn.SetPosition(-50, 120); 00479 savingBtn.SetLabel(&savingBtnTxt1, 0); 00480 savingBtn.SetLabel(&savingBtnTxt2, 1); 00481 savingBtn.SetLabel(&savingBtnTxt3, 2); 00482 savingBtn.SetImage(&savingBtnImg); 00483 savingBtn.SetImageOver(&savingBtnImgOver); 00484 savingBtn.SetSoundOver(&btnSoundOver); 00485 savingBtn.SetTrigger(&trigA); 00486 savingBtn.SetEffectGrow(); 00487 00488 GuiText menuBtnTxt("Menu", 22, (GXColor){0, 0, 0, 255}); 00489 menuBtnTxt.SetWrap(true, btnLargeOutline.GetWidth()-30); 00490 GuiImage menuBtnImg(&btnLargeOutline); 00491 GuiImage menuBtnImgOver(&btnLargeOutlineOver); 00492 GuiButton menuBtn(btnLargeOutline.GetWidth(), btnLargeOutline.GetHeight()); 00493 menuBtn.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); 00494 menuBtn.SetPosition(-125, 250); 00495 menuBtn.SetLabel(&menuBtnTxt); 00496 menuBtn.SetImage(&menuBtnImg); 00497 menuBtn.SetImageOver(&menuBtnImgOver); 00498 menuBtn.SetSoundOver(&btnSoundOver); 00499 menuBtn.SetTrigger(&trigA); 00500 menuBtn.SetEffectGrow(); 00501 00502 GuiText networkBtnTxt("Network", 22, (GXColor){0, 0, 0, 255}); 00503 networkBtnTxt.SetWrap(true, btnLargeOutline.GetWidth()-30); 00504 GuiImage networkBtnImg(&btnLargeOutline); 00505 GuiImage networkBtnImgOver(&btnLargeOutlineOver); 00506 GuiButton networkBtn(btnLargeOutline.GetWidth(), btnLargeOutline.GetHeight()); 00507 networkBtn.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); 00508 networkBtn.SetPosition(125, 250); 00509 networkBtn.SetLabel(&networkBtnTxt); 00510 networkBtn.SetImage(&networkBtnImg); 00511 networkBtn.SetImageOver(&networkBtnImgOver); 00512 networkBtn.SetSoundOver(&btnSoundOver); 00513 networkBtn.SetTrigger(&trigA); 00514 networkBtn.SetEffectGrow(); 00515 00516 GuiText exitBtnTxt("TetriCycle", 22, (GXColor){0, 0, 0, 255}); 00517 GuiImage exitBtnImg(&btnOutline); 00518 GuiImage exitBtnImgOver(&btnOutlineOver); 00519 GuiButton exitBtn(btnOutline.GetWidth(), btnOutline.GetHeight()); 00520 exitBtn.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM); 00521 exitBtn.SetPosition(100, -35); 00522 exitBtn.SetLabel(&exitBtnTxt); 00523 exitBtn.SetImage(&exitBtnImg); 00524 exitBtn.SetImageOver(&exitBtnImgOver); 00525 exitBtn.SetSoundOver(&btnSoundOver); 00526 exitBtn.SetTrigger(&trigA); 00527 exitBtn.SetTrigger(&trigHome); 00528 exitBtn.SetEffectGrow(); 00529 00530 GuiText resetBtnTxt("Reset Settings", 22, (GXColor){0, 0, 0, 255}); 00531 GuiImage resetBtnImg(&btnOutline); 00532 GuiImage resetBtnImgOver(&btnOutlineOver); 00533 GuiButton resetBtn(btnOutline.GetWidth(), btnOutline.GetHeight()); 00534 resetBtn.SetAlignment(ALIGN_RIGHT, ALIGN_BOTTOM); 00535 resetBtn.SetPosition(-100, -35); 00536 resetBtn.SetLabel(&resetBtnTxt); 00537 resetBtn.SetImage(&resetBtnImg); 00538 resetBtn.SetImageOver(&resetBtnImgOver); 00539 resetBtn.SetSoundOver(&btnSoundOver); 00540 resetBtn.SetTrigger(&trigA); 00541 resetBtn.SetEffectGrow(); 00542 00543 HaltGui(); 00544 GuiWindow w(screenwidth, screenheight); 00545 w.Append(&titleTxt); 00546 w.Append(&fileBtn); 00547 w.Append(&videoBtn); 00548 w.Append(&savingBtn); 00549 w.Append(&menuBtn); 00550 00551 #ifdef HW_RVL 00552 w.Append(&networkBtn); 00553 #endif 00554 00555 w.Append(&exitBtn); 00556 w.Append(&resetBtn); 00557 00558 mainWindow->Append(&w); 00559 00560 ResumeGui(); 00561 00562 while(menu == MENU_NONE) 00563 { 00564 usleep(THREAD_SLEEP); 00565 00566 if(fileBtn.GetState() == STATE_CLICKED) 00567 { 00568 menu = MENU_BROWSE_DEVICE; 00569 } 00570 else if(videoBtn.GetState() == STATE_CLICKED) 00571 { 00572 menu = MENU_SETTINGS_FILE; 00573 } 00574 else if(savingBtn.GetState() == STATE_CLICKED) 00575 { 00576 menu = MENU_SETTINGS_FILE; 00577 } 00578 else if(menuBtn.GetState() == STATE_CLICKED) 00579 { 00580 menu = MENU_SETTINGS_FILE; 00581 } 00582 else if(networkBtn.GetState() == STATE_CLICKED) 00583 { 00584 menu = MENU_SETTINGS_FILE; 00585 } 00586 else if(exitBtn.GetState() == STATE_CLICKED) 00587 { 00588 menu = MENU_EXIT; 00589 } 00590 else if(resetBtn.GetState() == STATE_CLICKED) 00591 { 00592 resetBtn.ResetState(); 00593 00594 int choice = WindowPrompt( 00595 "Reset Settings", 00596 "Are you sure that you want to reset your settings?", 00597 "Yes", 00598 "No"); 00599 if(choice == 1) 00600 { 00601 // reset settings 00602 } 00603 } 00604 } 00605 00606 HaltGui(); 00607 mainWindow->Remove(&w); 00608 return menu; 00609 }*/ 00610 00611 /**************************************************************************** 00612 * MenuSettingsFile 00613 ***************************************************************************/ 00614 /*static int MenuSettingsFile() 00615 { 00616 int menu = MENU_NONE; 00617 int ret; 00618 int i = 0; 00619 bool firstRun = true; 00620 OptionList options; 00621 sprintf(options.name[i++], "Load Device"); 00622 sprintf(options.name[i++], "Save Device"); 00623 sprintf(options.name[i++], "Folder 1"); 00624 sprintf(options.name[i++], "Folder 2"); 00625 sprintf(options.name[i++], "Folder 3"); 00626 sprintf(options.name[i++], "Auto Load"); 00627 sprintf(options.name[i++], "Auto Save"); 00628 options.length = i; 00629 00630 GuiText titleTxt("Settings - Saving & Loading", 28, (GXColor){255, 255, 255, 255}); 00631 titleTxt.SetAlignment(ALIGN_LEFT, ALIGN_TOP); 00632 titleTxt.SetPosition(50,50); 00633 00634 GuiSound btnSoundOver(button_over_pcm, button_over_pcm_size, SOUND_PCM); 00635 GuiImageData btnOutline(button_png); 00636 GuiImageData btnOutlineOver(button_over_png); 00637 00638 GuiTrigger trigA; 00639 trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A); 00640 00641 GuiText backBtnTxt("Go Back", 22, (GXColor){0, 0, 0, 255}); 00642 GuiImage backBtnImg(&btnOutline); 00643 GuiImage backBtnImgOver(&btnOutlineOver); 00644 GuiButton backBtn(btnOutline.GetWidth(), btnOutline.GetHeight()); 00645 backBtn.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM); 00646 backBtn.SetPosition(100, -35); 00647 backBtn.SetLabel(&backBtnTxt); 00648 backBtn.SetImage(&backBtnImg); 00649 backBtn.SetImageOver(&backBtnImgOver); 00650 backBtn.SetSoundOver(&btnSoundOver); 00651 backBtn.SetTrigger(&trigA); 00652 backBtn.SetEffectGrow(); 00653 00654 GuiOptionBrowser optionBrowser(552, 248, &options); 00655 optionBrowser.SetPosition(0, 108); 00656 optionBrowser.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); 00657 optionBrowser.SetCol2Position(185); 00658 00659 HaltGui(); 00660 GuiWindow w(screenwidth, screenheight); 00661 w.Append(&backBtn); 00662 mainWindow->Append(&optionBrowser); 00663 mainWindow->Append(&w); 00664 mainWindow->Append(&titleTxt); 00665 ResumeGui(); 00666 00667 while(menu == MENU_NONE) 00668 { 00669 usleep(THREAD_SLEEP); 00670 00671 ret = optionBrowser.GetClickedOption(); 00672 00673 switch (ret) 00674 { 00675 case 0: 00676 Settings.LoadMethod++; 00677 break; 00678 00679 case 1: 00680 Settings.SaveMethod++; 00681 break; 00682 00683 case 2: 00684 OnScreenKeyboard(Settings.Folder1, 256); 00685 break; 00686 00687 case 3: 00688 OnScreenKeyboard(Settings.Folder2, 256); 00689 break; 00690 00691 case 4: 00692 OnScreenKeyboard(Settings.Folder3, 256); 00693 break; 00694 00695 case 5: 00696 Settings.AutoLoad++; 00697 if (Settings.AutoLoad > 2) 00698 Settings.AutoLoad = 0; 00699 break; 00700 00701 case 6: 00702 Settings.AutoSave++; 00703 if (Settings.AutoSave > 3) 00704 Settings.AutoSave = 0; 00705 break; 00706 } 00707 00708 if(ret >= 0 || firstRun) 00709 { 00710 firstRun = false; 00711 00712 // correct load/save methods out of bounds 00713 if(Settings.LoadMethod > 4) 00714 Settings.LoadMethod = 0; 00715 if(Settings.SaveMethod > 6) 00716 Settings.SaveMethod = 0; 00717 00718 if (Settings.LoadMethod == METHOD_AUTO) sprintf (options.value[0],"Auto Detect"); 00719 else if (Settings.LoadMethod == METHOD_SD) sprintf (options.value[0],"SD"); 00720 else if (Settings.LoadMethod == METHOD_USB) sprintf (options.value[0],"USB"); 00721 else if (Settings.LoadMethod == METHOD_DVD) sprintf (options.value[0],"DVD"); 00722 else if (Settings.LoadMethod == METHOD_SMB) sprintf (options.value[0],"Network"); 00723 00724 if (Settings.SaveMethod == METHOD_AUTO) sprintf (options.value[1],"Auto Detect"); 00725 else if (Settings.SaveMethod == METHOD_SD) sprintf (options.value[1],"SD"); 00726 else if (Settings.SaveMethod == METHOD_USB) sprintf (options.value[1],"USB"); 00727 else if (Settings.SaveMethod == METHOD_SMB) sprintf (options.value[1],"Network"); 00728 else if (Settings.SaveMethod == METHOD_MC_SLOTA) sprintf (options.value[1],"MC Slot A"); 00729 else if (Settings.SaveMethod == METHOD_MC_SLOTB) sprintf (options.value[1],"MC Slot B"); 00730 00731 snprintf (options.value[2], 256, "%s", Settings.Folder1); 00732 snprintf (options.value[3], 256, "%s", Settings.Folder2); 00733 snprintf (options.value[4], 256, "%s", Settings.Folder3); 00734 00735 if (Settings.AutoLoad == 0) sprintf (options.value[5],"Off"); 00736 else if (Settings.AutoLoad == 1) sprintf (options.value[5],"Some"); 00737 else if (Settings.AutoLoad == 2) sprintf (options.value[5],"All"); 00738 00739 if (Settings.AutoSave == 0) sprintf (options.value[5],"Off"); 00740 else if (Settings.AutoSave == 1) sprintf (options.value[6],"Some"); 00741 else if (Settings.AutoSave == 2) sprintf (options.value[6],"All"); 00742 00743 optionBrowser.TriggerUpdate(); 00744 } 00745 00746 if(backBtn.GetState() == STATE_CLICKED) 00747 { 00748 menu = MENU_SETTINGS; 00749 } 00750 } 00751 HaltGui(); 00752 mainWindow->Remove(&optionBrowser); 00753 mainWindow->Remove(&w); 00754 mainWindow->Remove(&titleTxt); 00755 return menu; 00756 }*/ 00757 00758 /**************************************************************************** 00759 * MainMenu 00760 ***************************************************************************/