void GfuiMenuScreen::addDefaultShortcuts() { if (!m_priv->xmlDescParmHdle && !openXMLDescriptor()) return; GfuiMenuDefaultKeysAdd(m_priv->menuHdle); }
void * MouseCalMenuInit(void *prevMenu, tCmdInfo *cmd, int maxcmd) { //int x, y, dy; Cmd = cmd; maxCmd = maxcmd; if (scrHandle2) { return scrHandle2; } scrHandle2 = GfuiScreenCreateEx(NULL, NULL, onActivate2, NULL, NULL, 1); GfuiTitleCreate(scrHandle2, "Mouse Calibration", 0); GfuiMenuDefaultKeysAdd(scrHandle2); GfuiScreenAddBgImg(scrHandle2, "data/img/splash-mousecal.png"); //x = 128; //y = 300; //dy = 50; InstId = GfuiLabelCreate(scrHandle2, "", GFUI_FONT_MEDIUM, 320, 80, GFUI_ALIGN_HC_VB, 60); GfuiButtonCreate(scrHandle2, "Back", GFUI_FONT_LARGE, 160, 40, 150, GFUI_ALIGN_HC_VB, GFUI_MOUSE_UP, prevMenu, GfuiScreenActivate, NULL, (tfuiCallback)NULL, (tfuiCallback)NULL); GfuiButtonCreate(scrHandle2, "Reset", GFUI_FONT_LARGE, 480, 40, 150, GFUI_ALIGN_HC_VB, GFUI_MOUSE_UP, NULL, onActivate2, NULL, (tfuiCallback)NULL, (tfuiCallback)NULL); return scrHandle2; }
void * JoyCalMenuInit(void *prevMenu, void *nextMenu, tCmdInfo *cmd, int maxcmd) { int i; char pszBuf[64]; Cmd = cmd; MaxCmd = maxcmd; PrevMenuHandle = prevMenu; NextMenuHandle = nextMenu; if (ScrHandle) { return ScrHandle; } // Create screen, load menu XML descriptor and create static controls. ScrHandle = GfuiScreenCreate(NULL, NULL, onActivate, NULL, NULL, 1); void *menuXMLDescHdle = GfuiMenuLoad("joystickconfigmenu.xml"); GfuiMenuCreateStaticControls(ScrHandle, menuXMLDescHdle); // Create joystick axis label controls (axis name, axis Id, axis min value, axis max value) for (i = 0; i < NbMaxCalAxis; i++) { sprintf(pszBuf, "%saxislabel", LabName[i]); LabAxisId[i] = GfuiMenuCreateLabelControl(ScrHandle, menuXMLDescHdle, pszBuf); sprintf(pszBuf, "%sminlabel", LabName[i]); LabMinId[i] = GfuiMenuCreateLabelControl(ScrHandle, menuXMLDescHdle, pszBuf); sprintf(pszBuf, "%smaxlabel", LabName[i]); LabMaxId[i] = GfuiMenuCreateLabelControl(ScrHandle, menuXMLDescHdle, pszBuf); } // Create instruction variable label. InstId = GfuiMenuCreateLabelControl(ScrHandle, menuXMLDescHdle, "instructionlabel"); // Create Cancel and Reset buttons. GfuiMenuCreateButtonControl(ScrHandle, menuXMLDescHdle, "resetbutton", NULL, onActivate); if (nextMenu != NULL) { NextBut = GfuiMenuCreateButtonControl(ScrHandle, menuXMLDescHdle, "nextbutton", NULL, onNext); GfuiEnable(ScrHandle, NextBut, GFUI_DISABLE); } else { DoneBut = GfuiMenuCreateButtonControl(ScrHandle, menuXMLDescHdle, "donebutton", NULL, onNext); GfuiEnable(ScrHandle, DoneBut, GFUI_DISABLE); } CancelBut = GfuiMenuCreateButtonControl(ScrHandle, menuXMLDescHdle, "cancelbutton", NULL, onNext); // Close menu XML descriptor. GfParmReleaseHandle(menuXMLDescHdle); // Register keyboard shortcuts. GfuiMenuDefaultKeysAdd(ScrHandle); GfuiAddKey(ScrHandle, GFUIK_ESCAPE, "Next", NULL, onNext, NULL); GfuiAddKey(ScrHandle, GFUIK_RETURN, "Next", NULL, onNext, NULL); return ScrHandle; }
/** Create a new menu screen. Set the title of the menu Add the default keyboard callbacks to the menu. @ingroup gui @param title title of the screen @return Handle of the menu */ void * GfuiMenuScreenCreate(char *title) { void *scr; scr = GfuiScreenCreate(); GfuiTitleCreate(scr, title, strlen(title)); GfuiMenuDefaultKeysAdd(scr); return scr; }
int ReRacemanMenu(void) { char *str; void *params = ReInfo->params; if (racemanMenuHdle) { GfuiScreenRelease(racemanMenuHdle); } racemanMenuHdle = GfuiScreenCreateEx(NULL, NULL, (tfuiCallback)NULL, NULL, (tfuiCallback)NULL, 1); str = GfParmGetStr(params, RM_SECT_HEADER, RM_ATTR_BGIMG, 0); if (str) { GfuiScreenAddBgImg(racemanMenuHdle, str); } GfuiMenuDefaultKeysAdd(racemanMenuHdle); str = GfParmGetStr(params, RM_SECT_HEADER, RM_ATTR_NAME, 0); if (str) { GfuiTitleCreate(racemanMenuHdle, str, strlen(str)); } GfuiMenuButtonCreate(racemanMenuHdle, "New Race", "Start a New Race", NULL, ReStartNewRace); GfuiMenuButtonCreate(racemanMenuHdle, "Configure Race", "Configure The Race", NULL, reConfigureMenu); /* GfuiMenuButtonCreate(racemanMenuHdle, */ /* "Configure Players", "Players configuration menu", */ /* TorcsDriverMenuInit(racemanMenuHdle), GfuiScreenActivate); */ if (GfParmGetEltNb(params, RM_SECT_TRACKS) > 1) { GfuiMenuButtonCreate(racemanMenuHdle, "Load", "Load a Previously Saved Game", racemanMenuHdle, reLoadMenu); } GfuiMenuBackQuitButtonCreate(racemanMenuHdle, "Back to Main", "Return to previous Menu", ReInfo->_reMenuScreen, GfuiScreenActivate); GfuiScreenActivate(racemanMenuHdle); return RM_ASYNC | RM_NEXT_STEP; }
int ReNewTrackMenu(void) { void *params = ReInfo->params; void *results = ReInfo->results; if (newTrackMenuHdle) { GfuiScreenRelease(newTrackMenuHdle); } newTrackMenuHdle = GfuiScreenCreateEx(NULL, NULL, (tfuiCallback)NULL, NULL, (tfuiCallback)NULL, 1); const char* str = GfParmGetStr(params, RM_SECT_HEADER, RM_ATTR_BGIMG, 0); if (str) { GfuiScreenAddBgImg(newTrackMenuHdle, str); } str = GfParmGetStr(params, RM_SECT_HEADER, RM_ATTR_NAME, ""); GfuiTitleCreate(newTrackMenuHdle, str, strlen(str)); GfuiMenuDefaultKeysAdd(newTrackMenuHdle); sprintf(buf, "Race Day #%d/%d on %s", (int)GfParmGetNum(results, RE_SECT_CURRENT, RE_ATTR_CUR_TRACK, NULL, 1), GfParmGetEltNb(params, RM_SECT_TRACKS), ReInfo->track->name); GfuiLabelCreateEx(newTrackMenuHdle, buf, red, GFUI_FONT_MEDIUM_C, 320, 420, GFUI_ALIGN_HC_VB, 50); GfuiMenuButtonCreate(newTrackMenuHdle, "Start Event", "Start The Current Race", NULL, reStateManage); GfuiMenuButtonCreate(newTrackMenuHdle, "Abandon", "Abandon The Race", ReInfo->_reMenuScreen, GfuiScreenActivate); GfuiAddKey(newTrackMenuHdle, 27, "Abandon", ReInfo->_reMenuScreen, GfuiScreenActivate, NULL); GfuiScreenActivate(newTrackMenuHdle); return RM_ASYNC | RM_NEXT_STEP; }
void * JoyCalMenuInit(void *prevMenu, tCmdInfo *cmd, int maxcmd) { int x, y, dy, i, index; Cmd = cmd; maxCmd = maxcmd; if (scrHandle2) { return scrHandle2; } scrHandle2 = GfuiScreenCreateEx(NULL, NULL, onActivate, NULL, NULL, 1); GfuiTitleCreate(scrHandle2, "Joystick Calibration", 0); GfuiMenuDefaultKeysAdd(scrHandle2); GfuiScreenAddBgImg(scrHandle2, "data/img/splash-joycal.png"); x = 128; y = 300; dy = 50; for (i = 0; i < 4; i++) { GfuiLabelCreate(scrHandle2, LabName[i], GFUI_FONT_LARGE, x, y, GFUI_ALIGN_HC_VC, 0); LabAxisId[i] = GfuiLabelCreate(scrHandle2, " ", GFUI_FONT_MEDIUM, 2 * x, y, GFUI_ALIGN_HC_VC, 0); LabMinId[i] = GfuiLabelCreate(scrHandle2, " ", GFUI_FONT_MEDIUM, 3 * x, y, GFUI_ALIGN_HC_VC, 0); LabMaxId[i] = GfuiLabelCreate(scrHandle2, " ", GFUI_FONT_MEDIUM, 4 * x, y, GFUI_ALIGN_HC_VC, 0); y -= dy; } for (index = 0; index < NUM_JOY; index++) { if (js[index] == NULL) { js[index] = new jsJoystick(index); } if (js[index]->notWorking()) { /* don't configure the joystick */ js[index] = NULL; } } InstId = GfuiLabelCreate(scrHandle2, Instructions[0], GFUI_FONT_MEDIUM, 320, 80, GFUI_ALIGN_HC_VB, 60); GfuiButtonCreate(scrHandle2, "Back", GFUI_FONT_LARGE, 160, 40, 150, GFUI_ALIGN_HC_VB, GFUI_MOUSE_UP, prevMenu, onBack, NULL, (tfuiCallback)NULL, (tfuiCallback)NULL); GfuiButtonCreate(scrHandle2, "Reset", GFUI_FONT_LARGE, 480, 40, 150, GFUI_ALIGN_HC_VB, GFUI_MOUSE_UP, NULL, onActivate, NULL, (tfuiCallback)NULL, (tfuiCallback)NULL); return scrHandle2; }
// Generic function for creating and activating the menu. static void* rmStopRaceMenu(const tButtonDesc aButtons[], int nButtons, int nCancelIndex) { // Create screen, load menu XML descriptor and create static controls. void *hscreen = GfuiScreenCreate(NULL, NULL, NULL, NULL, NULL, 1); void *hmenu = GfuiMenuLoad("stopracemenu.xml"); GfuiMenuCreateStaticControls(hscreen, hmenu); // Create buttons from menu properties and button template. const int xpos = (int)GfuiMenuGetNumProperty(hmenu, "xButton", 270); const int dy = (int)GfuiMenuGetNumProperty(hmenu, "buttonShift", 30); int ypos = (int)GfuiMenuGetNumProperty(hmenu, "yTopButton", 380); char pszPropName[64]; const char* pszCancelTip = ""; for (int nButInd = 0; nButInd < nButtons; nButInd++) { // Get text and tip from button role and menu properties. sprintf(pszPropName, "%s.text", aButtons[nButInd].role); const char* pszText = GfuiMenuGetStrProperty(hmenu, pszPropName, ""); sprintf(pszPropName, "%s.tip", aButtons[nButInd].role); const char* pszTip = GfuiMenuGetStrProperty(hmenu, pszPropName, ""); if (nButInd == nCancelIndex) pszCancelTip = pszTip; // Create the button from the template. GfuiMenuCreateTextButtonControl(hscreen, hmenu, "button", aButtons[nButInd].screen, GfuiScreenActivate, 0, 0, 0, true, // From template. pszText, pszTip, xpos, ypos); // Next button if not last. ypos -= dy; } // Register keyboard shortcuts. GfuiMenuDefaultKeysAdd(hscreen); GfuiAddKey(hscreen, GFUIK_ESCAPE, pszCancelTip, aButtons[nCancelIndex].screen, GfuiScreenActivate, NULL); // Close menu XML descriptor. GfParmReleaseHandle(hmenu); // Activate the created screen. GfuiScreenActivate(hscreen); return hscreen; }
void * Joy2butCalMenuInit(void *prevMenu, void *nextMenu, tCmdInfo *cmd, int maxcmd) { Cmd = cmd; MaxCmd = maxcmd; PrevMenuHandle = prevMenu; NextMenuHandle = nextMenu; if (ScrHandle) { return ScrHandle; } // Create screen, load menu XML descriptor and create static controls. ScrHandle = GfuiScreenCreate(NULL, NULL, onActivate, NULL, NULL, 1); void *menuXMLDescHdle = GfuiMenuLoad("joy2butconfigmenu.xml"); GfuiMenuCreateStaticControls(ScrHandle, menuXMLDescHdle); AtobAxisID = GfuiMenuCreateLabelControl(ScrHandle, menuXMLDescHdle, "AtobAxisID"); AtobCommandID = GfuiMenuCreateLabelControl(ScrHandle, menuXMLDescHdle, "AtobCommandID"); // Create instruction variable label. InstId = GfuiMenuCreateLabelControl(ScrHandle, menuXMLDescHdle, "instructionlabel"); // Create Cancel and Reset buttons. GfuiMenuCreateButtonControl(ScrHandle, menuXMLDescHdle, "resetbutton", NULL, onActivate); if (nextMenu != NULL) { NextBut = GfuiMenuCreateButtonControl(ScrHandle, menuXMLDescHdle, "nextbutton", NULL, onNext); GfuiEnable(ScrHandle, NextBut, GFUI_DISABLE); } else { DoneBut = GfuiMenuCreateButtonControl(ScrHandle, menuXMLDescHdle, "donebutton", NULL, onNext); GfuiEnable(ScrHandle, DoneBut, GFUI_DISABLE); } CancelBut = GfuiMenuCreateButtonControl(ScrHandle, menuXMLDescHdle, "cancelbutton", NULL, onNext); // Close menu XML descriptor. GfParmReleaseHandle(menuXMLDescHdle); // Register keyboard shortcuts. GfuiMenuDefaultKeysAdd(ScrHandle); GfuiAddKey(ScrHandle, GFUIK_ESCAPE, "Next", NULL, onNext, NULL); GfuiAddKey(ScrHandle, GFUIK_RETURN, "Next", NULL, onNext, NULL); return ScrHandle; }
/* * Function * TorcsMainMenuInit * * Description * init the main menus * * Parameters * none * * Return * 0 ok -1 nok * * Remarks * */ int TorcsMainMenuInit(void) { if (getTextOnly()) ReSinglePlayerInit(NULL); else { menuHandle = GfuiScreenCreateEx((float*)NULL, NULL, TorcsMainMenuActivate, NULL, (tfuiCallback)NULL, 1); GfuiScreenAddBgImg(menuHandle, "data/img/splash-main.png"); GfuiTitleCreate(menuHandle, "TORCS", 0); GfuiLabelCreate(menuHandle, "The Open Racing Car Simulator", GFUI_FONT_LARGE, 320, 420, GFUI_ALIGN_HC_VB, 0); GfuiMenuButtonCreate(menuHandle, "Race", "Races Menu", ReSinglePlayerInit(menuHandle), GfuiScreenActivate); GfuiMenuButtonCreate(menuHandle, "Configure Players", "Players configuration menu", TorcsDriverMenuInit(menuHandle), GfuiScreenActivate); GfuiMenuButtonCreate(menuHandle, "Options", "Configure", TorcsOptionOptionInit(menuHandle), GfuiScreenActivate); GfuiMenuDefaultKeysAdd(menuHandle); GfuiMenuBackQuitButtonCreate(menuHandle, "Quit", "Quit TORCS", TorcsMainExitMenuInit(menuHandle), GfuiScreenActivate); } return 0; }
void RmNetworkMenu(void *) { GfLogTrace("Entering Network menu.\n"); tRmInfo* reInfo = LmRaceEngine().inData(); void *params = reInfo->params; if (NetGetNetwork()) { NetGetNetwork()->ResetNetwork(); } racemanMenuHdle = GfuiScreenCreate(NULL, NULL, (tfuiCallback)NULL, NULL, (tfuiCallback)NULL, 1); void *mparam = GfuiMenuLoad("networkmenu.xml"); GfuiMenuCreateStaticControls(racemanMenuHdle, mparam); const int nTitleLabelId = GfuiMenuCreateLabelControl(racemanMenuHdle, mparam, "TitleLabel"); const char* pszTitle = GfParmGetStr(params, RM_SECT_HEADER, RM_ATTR_NAME, 0); if (pszTitle) GfuiLabelSetText(racemanMenuHdle, nTitleLabelId, pszTitle); GfuiMenuCreateButtonControl(racemanMenuHdle, mparam, "HostButton", 0, RmNetworkHostMenu); GfuiMenuCreateButtonControl(racemanMenuHdle, mparam, "JoinButton", 0, NetworkClientConnectMenu); GfuiMenuCreateButtonControl(racemanMenuHdle, mparam, "BackButton", RmRaceSelectMenuHandle, GfuiScreenActivate); GfuiMenuDefaultKeysAdd(racemanMenuHdle); GfuiAddKey(racemanMenuHdle, GFUIK_ESCAPE, "Back to previous menu", RmRaceSelectMenuHandle, 0, GfuiScreenActivate); GfParmReleaseHandle(mparam); GfuiScreenActivate(racemanMenuHdle); }
static void ShowWaitingToConnectScreen() { GfLogTrace("Entering Network Wait Connection menu.\n"); if (racemanMenuHdle) GfuiScreenRelease(racemanMenuHdle); racemanMenuHdle = GfuiScreenCreate(NULL, NULL, (tfuiCallback) NULL, NULL, (tfuiCallback)NULL, 1); void *mparam = GfuiMenuLoad("networkwaitconnectmenu.xml"); GfuiMenuCreateStaticControls(racemanMenuHdle, mparam); GfuiMenuDefaultKeysAdd(racemanMenuHdle); GfuiScreenActivate(racemanMenuHdle); GfuiApp().eventLoop().postRedisplay(); }
/** File selection @param vs Pointer on tRmFileSelect structure (cast to void) @return none */ void RmFileSelect(void *vs) { tFList *FileCur; rmFs = (tRmFileSelect*)vs; if (scrHandle) { GfuiScreenRelease(scrHandle); } scrHandle = GfuiScreenCreateEx((float*)NULL, NULL, rmActivate, NULL, (tfuiCallback)NULL, 1); GfuiScreenAddBgImg(scrHandle, "data/img/splash-filesel.png"); GfuiTitleCreate(scrHandle, rmFs->title, 0); /* Scroll List containing the File list */ fileScrollList = GfuiScrollListCreate(scrHandle, GFUI_FONT_MEDIUM_C, 120, 80, GFUI_ALIGN_HC_VB, 400, 310, GFUI_SB_RIGHT, NULL, rmClickOnFile); FileList = GfDirGetList(rmFs->path); if (FileList == NULL) { GfuiScreenActivate(rmFs->prevScreen); return; } FileSelected = FileList; FileCur = FileList; do { FileCur = FileCur->next; GfuiScrollListInsertElement(scrHandle, fileScrollList, FileCur->name, 1000, (void*)FileCur); } while (FileCur != FileList); /* Bottom buttons */ GfuiButtonCreate(scrHandle, "Select", GFUI_FONT_LARGE, 210, 40, 150, GFUI_ALIGN_HC_VB, GFUI_MOUSE_UP, NULL, rmSelect, NULL, (tfuiCallback)NULL, (tfuiCallback)NULL); GfuiButtonCreate(scrHandle, "Cancel", GFUI_FONT_LARGE, 430, 40, 150, GFUI_ALIGN_HC_VB, GFUI_MOUSE_UP, NULL, rmDeactivate, NULL, (tfuiCallback)NULL, (tfuiCallback)NULL); /* Default menu keyboard actions */ GfuiMenuDefaultKeysAdd(scrHandle); GfuiScreenActivate(scrHandle); }
/* * Function * TorcsMainMenuInit * * Description * init the main menus * * Parameters * none * * Return * 0 ok -1 nok * * Remarks * */ int TorcsMainMenuInit(void) { menuHandle = GfuiScreenCreateEx((float*)NULL, NULL, TorcsMainMenuActivate, NULL, (tfuiCallback)NULL, 1); GfuiScreenAddBgImg(menuHandle, "data/img/splash-main.png"); GfuiTitleCreate(menuHandle, "TORCS Adaptive", 0); GfuiLabelCreate(menuHandle, "A TORCS Modification with procedural tracks", GFUI_FONT_LARGE, 320, 420, GFUI_ALIGN_HC_VB, 0); GfuiMenuButtonCreate(menuHandle, "Race", "Races Menu", ReSinglePlayerInit(menuHandle), GfuiScreenActivate); GfuiMenuButtonCreate(menuHandle, "Configure Players", "Players configuration menu", TorcsDriverMenuInit(menuHandle), GfuiScreenActivate); GfuiMenuButtonCreate(menuHandle, "Options", "Configure", TorcsOptionOptionInit(menuHandle), GfuiScreenActivate); GfuiMenuDefaultKeysAdd(menuHandle); GfuiMenuBackQuitButtonCreate(menuHandle, "Quit", "Quit TORCS", TorcsMainExitMenuInit(menuHandle), GfuiScreenActivate); return 0; }
static void NetworkClientConnectMenu(void * /* dummy */) { GfLogTrace("Entering Network Client Connect menu.\n"); LookupPlayerSetup(g_strDriver,g_strCar); if (racemanMenuHdle) GfuiScreenRelease(racemanMenuHdle); racemanMenuHdle = GfuiScreenCreate(NULL, NULL, (tfuiCallback)NULL, NULL, (tfuiCallback)NULL, 1); void *mparam = GfuiMenuLoad("networkclientconnectmenu.xml"); GfuiMenuCreateStaticControls(racemanMenuHdle, mparam); g_IPEditId = GfuiMenuCreateEditControl(racemanMenuHdle, mparam, "IPAddrEdit", 0, 0, ChangeIP); char namebuf[255]; snprintf(namebuf, sizeof(namebuf), "%s", g_strDriver.c_str()); g_NameId = GfuiMenuCreateEditControl(racemanMenuHdle, mparam, "PlayerNameEdit", 0, 0, ChangeName); GfuiEditboxSetString(racemanMenuHdle, g_NameId, namebuf); GfuiMenuCreateButtonControl(racemanMenuHdle, mparam, "ConnectButton", 0, RmNetworkClientMenu); GfuiMenuCreateButtonControl(racemanMenuHdle, mparam, "BackButton", RmRaceSelectMenuHandle, GfuiScreenActivate); GfuiMenuDefaultKeysAdd(racemanMenuHdle); GfuiAddKey(racemanMenuHdle, GFUIK_ESCAPE, "Back to previous menu", RmRaceSelectMenuHandle, 0, GfuiScreenActivate); GfParmReleaseHandle(mparam); GfuiScreenActivate(racemanMenuHdle); }
/** * This function shows the pit menu and let the user fill in the amount * of fuel he wants and the number of damage he want to repair * * @param car The current car (pitcmd is modified on user decisions) * @param s The current situation (used to calculate the remaining time) * @param callback The function which is called after the user made a decision */ void RmPitMenuStart(tCarElt *car, tSituation *s, tfuiCallback callback) { char buf[128]; rmCar = car; rmCallback = callback; if (menuHandle) GfuiScreenRelease(menuHandle); GfLogInfo("Entering Pit menu\n"); // Create screen, load menu XML descriptor and create static controls. menuHandle = GfuiScreenCreate(NULL, NULL, NULL, NULL, NULL, 1); void *menuXMLDescHdle = GfuiMenuLoad("pitmenu.xml"); GfuiMenuCreateStaticControls(menuHandle, menuXMLDescHdle); // Create variable title label. int titleId = GfuiMenuCreateLabelControl(menuHandle, menuXMLDescHdle, "titlelabel"); snprintf(buf, sizeof(buf), "Pit Stop for %s", car->_name); GfuiLabelSetText(menuHandle, titleId, buf); // Create labels for remaining laps and remaining fuel. int remainLapsTimeId = GfuiMenuCreateLabelControl(menuHandle, menuXMLDescHdle, "remaininglapstimelabel"); if( s->_totTime > 0 && s->_totTime > s->currentTime ) // Timed part of the timed session { GfuiMenuCreateLabelControl(menuHandle, menuXMLDescHdle, "remainingtimelabel"); if( s->_extraLaps > 0) snprintf(buf, sizeof(buf), "%s + %d laps", GfTime2Str( s->_totTime - s->currentTime, NULL, true, 0 ), s->_extraLaps); else snprintf(buf, sizeof(buf), "%s", GfTime2Str( s->_totTime - s->currentTime, NULL, true, 0 ) ); } else { GfuiMenuCreateLabelControl(menuHandle, menuXMLDescHdle, "remaininglapslabel"); snprintf(buf, sizeof(buf), "%d", car->_remainingLaps); //Laps tot drive to win the race } GfuiLabelSetText(menuHandle, remainLapsTimeId, buf); int remainFuelId = GfuiMenuCreateLabelControl(menuHandle, menuXMLDescHdle, "remainingfuellabel"); snprintf(buf, sizeof(buf), "%.1f", car->_fuel); GfuiLabelSetText(menuHandle, remainFuelId, buf); // Create edit boxes for fuel and repair amounts. fuelId = GfuiMenuCreateEditControl(menuHandle, menuXMLDescHdle, "fuelamountedit", NULL, NULL, rmUpdtFuel); snprintf(buf, sizeof(buf), "%.1f", car->pitcmd.fuel); GfuiEditboxSetString(menuHandle, fuelId, buf); repairId = GfuiMenuCreateEditControl(menuHandle, menuXMLDescHdle, "repairamountedit", NULL, NULL, rmUpdtRepair); snprintf(buf, sizeof(buf), "%d", (int)car->pitcmd.repair); GfuiEditboxSetString(menuHandle, repairId, buf); // Create Repair and Stop&Go buttons. GfuiMenuCreateButtonControl(menuHandle, menuXMLDescHdle, "repairbutton", NULL, rmRepair); GfuiMenuCreateButtonControl(menuHandle, menuXMLDescHdle, "stopgobutton", NULL, rmStopAndGo); // Close menu XML descriptor. GfParmReleaseHandle(menuXMLDescHdle); // Register keyboard shortcuts. GfuiMenuDefaultKeysAdd(menuHandle); // Activate the created screen. GfuiScreenActivate(menuHandle); }
void RmNetworkClientMenu(void * /* dummy */) { GfLogTrace("Entering Network Client menu.\n"); ShowWaitingToConnectScreen(); if (!NetGetClient()) { NetSetServer(false); NetSetClient(true); NetDriver driver; GetHumanDriver(driver,1); driver.client = true; driver.active = true; strcpy(driver.name,g_strDriver.c_str()); if (!NetGetClient()->ConnectToServer((char*)g_strHostIP.c_str(),SPEEDDREAMSPORT,&driver)) { //failed so back to connect menu NetworkClientConnectMenu(NULL); return; } //NetGetClient()->SendDriverInfoPacket(&driver); } if (racemanMenuHdle) GfuiScreenRelease(racemanMenuHdle); racemanMenuHdle = GfuiScreenCreate(NULL, NULL, (tfuiCallback)OnActivateNetworkClient, NULL, (tfuiCallback)NULL, 1); void *mparam = GfuiMenuLoad("networkclientmenu.xml"); GfuiMenuCreateStaticControls(racemanMenuHdle, mparam); GfuiMenuDefaultKeysAdd(racemanMenuHdle); RmSetRacemanMenuHandle(racemanMenuHdle); g_trackHd = GfuiMenuCreateLabelControl(racemanMenuHdle,mparam,"trackname"); g_lapsHd = GfuiMenuCreateLabelControl(racemanMenuHdle,mparam,"lapcountname"); g_catHd = GfuiMenuCreateLabelControl(racemanMenuHdle,mparam,"carcatname"); g_OutlineId = GfuiMenuCreateStaticImageControl(racemanMenuHdle,mparam,"outlineimage"); //Show players for (int i = 0; i < MAXNETWORKPLAYERS; i++) { char buf[1024]; sprintf(buf,"ready%i",i); g_readystatus[i] = GfuiMenuCreateStaticImageControl(racemanMenuHdle,mparam,buf); GfuiVisibilitySet(racemanMenuHdle,g_readystatus[i],false); sprintf(buf,"driver%i",i); g_playerNames[i] = GfuiMenuCreateLabelControl(racemanMenuHdle,mparam,buf); GfuiLabelSetText(racemanMenuHdle,g_playerNames[i],""); sprintf(buf,"car%i",i); g_carNames[i] = GfuiMenuCreateLabelControl(racemanMenuHdle,mparam,buf); GfuiLabelSetText(racemanMenuHdle,g_carNames[i],""); } g_ReadyCheckboxId = GfuiMenuCreateCheckboxControl(racemanMenuHdle, mparam, "playerreadycheckbox", NULL, onClientPlayerReady); g_CarSetupButtonId = GfuiMenuCreateButtonControl(racemanMenuHdle, mparam, "garage", racemanMenuHdle, rmCarSettingsMenu); g_DisconnectButtonId = GfuiMenuCreateButtonControl(racemanMenuHdle, mparam, "disconnect", NULL,rmNetworkClientDisconnect); GfParmReleaseHandle(mparam); UpdateNetworkPlayers(); GfuiScreenActivate(racemanMenuHdle); GfuiApp().eventLoop().setRecomputeCB(ClientIdle); }
/** Interactive Drivers list selection @param vs Pointer on tRmDrvSelect structure (cast to void) @warning The race manager params are modified but not saved. */ void RmDriversSelect(void *vs) { tModList *list; tModList *curmod; char dname[256]; char *sp; char *cardllname; int i, index; tDrvElt *curDrv; int nCars, robotIdx; void *robhdle; struct stat st; char *carName; void *carhdle; int human; #define B_BASE 380 #define B_HT 30 ds = (tRmDrvSelect*)vs; GF_TAILQ_INIT(&DrvList); scrHandle = GfuiScreenCreateEx((float*)NULL, NULL, rmdsActivate, NULL, (tfuiCallback)NULL, 1); GfuiScreenAddBgImg(scrHandle, "data/img/splash-qrdrv.png"); GfuiTitleCreate(scrHandle, "Select Drivers", sizeof("Select Drivers")); GfuiLabelCreate(scrHandle, "Selected", GFUI_FONT_LARGE, 120, 400, GFUI_ALIGN_HC_VB, 0); GfuiLabelCreate(scrHandle, "Not Selected", GFUI_FONT_LARGE, 496, 400, GFUI_ALIGN_HC_VB, 0); selectedScrollList = GfuiScrollListCreate(scrHandle, GFUI_FONT_MEDIUM_C, 20, 80, GFUI_ALIGN_HL_VB, 200, 310, GFUI_SB_RIGHT, NULL, rmdsClickOnDriver); unselectedScrollList = GfuiScrollListCreate(scrHandle, GFUI_FONT_MEDIUM_C, 396, 80, GFUI_ALIGN_HL_VB, 200, 310, GFUI_SB_RIGHT, NULL, rmdsClickOnDriver); GfuiButtonCreate(scrHandle, "Accept", GFUI_FONT_LARGE, 210, 40, 150, GFUI_ALIGN_HC_VB, GFUI_MOUSE_UP, NULL, rmdsSelect, NULL, (tfuiCallback)NULL, (tfuiCallback)NULL); GfuiButtonCreate(scrHandle, "Cancel", GFUI_FONT_LARGE, 430, 40, 150, GFUI_ALIGN_HC_VB, GFUI_MOUSE_UP, ds->prevScreen, rmdsDeactivate, NULL, (tfuiCallback)NULL, (tfuiCallback)NULL); GfuiButtonCreate(scrHandle, "Move Up", GFUI_FONT_MEDIUM, 320, B_BASE, 100, GFUI_ALIGN_HC_VB, GFUI_MOUSE_UP, (void*)-1, rmMove, NULL, (tfuiCallback)NULL, (tfuiCallback)NULL); GfuiButtonCreate(scrHandle, "Move Down", GFUI_FONT_MEDIUM, 320, B_BASE - B_HT, 100, GFUI_ALIGN_HC_VB, GFUI_MOUSE_UP, (void*)1, rmMove, NULL, (tfuiCallback)NULL, (tfuiCallback)NULL); GfuiButtonCreate(scrHandle, "(De)Select", GFUI_FONT_MEDIUM, 320, B_BASE - 2 * B_HT, 100, GFUI_ALIGN_HC_VB, GFUI_MOUSE_UP, (void*)0, rmSelectDeselect, NULL, (tfuiCallback)NULL, (tfuiCallback)NULL); GfuiButtonCreate(scrHandle, "Set Focus", GFUI_FONT_MEDIUM, 320, B_BASE - 3 * B_HT, 100, GFUI_ALIGN_HC_VB, GFUI_MOUSE_UP, NULL, rmdsSetFocus, NULL, (tfuiCallback)NULL, (tfuiCallback)NULL); list = (tModList *)NULL; sprintf(buf, "%sdrivers", GetLibDir ()); GfModInfoDir(CAR_IDENT, buf, 1, &list); curmod = list; if (curmod != NULL) { do { curmod = curmod->next; for (i = 0; i < MAX_MOD_ITF; i++) { if (curmod->modInfo[i].name) { sp = strrchr(curmod->sopath, '/'); if (sp == NULL) { sp = curmod->sopath; } else { sp++; } strcpy(dname, sp); dname[strlen(dname) - strlen(DLLEXT) - 1] = 0; /* cut .so or .dll */ sprintf(buf, "%sdrivers/%s/%s.xml", GetLocalDir(), dname, dname); robhdle = GfParmReadFile(buf, GFPARM_RMODE_STD); if (!robhdle) { sprintf(buf, "drivers/%s/%s.xml", dname, dname); robhdle = GfParmReadFile(buf, GFPARM_RMODE_STD); } sprintf(path, "%s/%s/%d", ROB_SECT_ROBOTS, ROB_LIST_INDEX, curmod->modInfo[i].index); carName = GfParmGetStr(robhdle, path, ROB_ATTR_CAR, ""); if (strcmp(GfParmGetStr(robhdle, path, ROB_ATTR_TYPE, ROB_VAL_ROBOT), ROB_VAL_ROBOT)) { human = 1; } else { human = 0; } sprintf(path, "cars/%s/%s.xml", carName, carName); if (!stat(path, &st)) { carhdle = GfParmReadFile(path, GFPARM_RMODE_STD); if (carhdle) { curDrv = (tDrvElt*)calloc(1, sizeof(tDrvElt)); curDrv->index = curmod->modInfo[i].index; curDrv->dname = strdup(dname); curDrv->name = strdup(curmod->modInfo[i].name); curDrv->car = carhdle; if (human) { curDrv->human = 1; GF_TAILQ_INSERT_HEAD(&DrvList, curDrv, link); } else { curDrv->human = 0; GF_TAILQ_INSERT_TAIL(&DrvList, curDrv, link); } } else { GfOut("Driver %s not selected because car %s is not readable\n", curmod->modInfo[i].name, carName); } } else { GfOut("Driver %s not selected because car %s is not present\n", curmod->modInfo[i].name, carName); } GfParmReleaseHandle(robhdle); } } } while (curmod != list); } nbSelectedDrivers = 0; nbMaxSelectedDrivers = (int)GfParmGetNum(ds->param, RM_SECT_DRIVERS, RM_ATTR_MAXNUM, NULL, 0); nCars = GfParmGetEltNb(ds->param, RM_SECT_DRIVERS); index = 1; for (i = 1; i < nCars+1; i++) { sprintf(dname, "%s/%d", RM_SECT_DRIVERS, i); cardllname = GfParmGetStr(ds->param, dname, RM_ATTR_MODULE, ""); robotIdx = (int)GfParmGetNum(ds->param, dname, RM_ATTR_IDX, (char*)NULL, 0); curDrv = GF_TAILQ_FIRST(&DrvList); if (curDrv != NULL) { do { if ((curDrv->index == robotIdx) && (strcmp(curDrv->dname, cardllname) == 0)) { if (nbSelectedDrivers < nbMaxSelectedDrivers) { GfuiScrollListInsertElement(scrHandle, selectedScrollList, curDrv->name, index, (void*)curDrv); curDrv->sel = index++; nbSelectedDrivers++; } break; } } while ((curDrv = GF_TAILQ_NEXT(curDrv, link)) != NULL); } } curDrv = GF_TAILQ_FIRST(&DrvList); if (curDrv != NULL) { do { if (curDrv->sel == 0) { GfuiScrollListInsertElement(scrHandle, unselectedScrollList, curDrv->name, 1000, (void*)curDrv); } } while ((curDrv = GF_TAILQ_NEXT(curDrv, link)) != NULL); } GfuiLabelCreate(scrHandle, "Focused:", GFUI_FONT_MEDIUM, 320, B_BASE - 5 * B_HT, GFUI_ALIGN_HC_VB, 0); cardllname = GfParmGetStr(ds->param, RM_SECT_DRIVERS, RM_ATTR_FOCUSED, ""); robotIdx = (int)GfParmGetNum(ds->param, RM_SECT_DRIVERS, RM_ATTR_FOCUSEDIDX, (char*)NULL, 0); curDrv = GF_TAILQ_FIRST(&DrvList); if (curDrv != NULL) { do { if ((curDrv->index == robotIdx) && (strcmp(curDrv->dname, cardllname) == 0)) { break; } } while ((curDrv = GF_TAILQ_NEXT(curDrv, link)) != NULL); } if (curDrv == NULL) { curDrv = GF_TAILQ_FIRST(&DrvList); } if (curDrv == NULL) { FocDrvLabelId = GfuiLabelCreate(scrHandle, "", GFUI_FONT_MEDIUM_C, 320, B_BASE - 5 * B_HT - GfuiFontHeight(GFUI_FONT_MEDIUM), GFUI_ALIGN_HC_VB, 256); } else { FocDrvLabelId = GfuiLabelCreate(scrHandle, curDrv->name, GFUI_FONT_MEDIUM_C, 320, B_BASE - 5 * B_HT - GfuiFontHeight(GFUI_FONT_MEDIUM), GFUI_ALIGN_HC_VB, 256); } /* Picked Driver Info */ GfuiLabelCreate(scrHandle, "Driver:", GFUI_FONT_MEDIUM, 320, B_BASE - 7 * B_HT, GFUI_ALIGN_HC_VB, 0); PickDrvNameLabelId = GfuiLabelCreateEx(scrHandle, "", aColor, GFUI_FONT_MEDIUM_C, 320, B_BASE - 7 * B_HT - GfuiFontHeight(GFUI_FONT_MEDIUM), GFUI_ALIGN_HC_VB, 256); GfuiLabelCreate(scrHandle, "Car:", GFUI_FONT_MEDIUM, 320, B_BASE - 8 * B_HT, GFUI_ALIGN_HC_VB, 0); PickDrvCarLabelId = GfuiLabelCreateEx(scrHandle, "", aColor, GFUI_FONT_MEDIUM_C, 320, B_BASE - 8 * B_HT - GfuiFontHeight(GFUI_FONT_MEDIUM), GFUI_ALIGN_HC_VB, 256); GfuiLabelCreate(scrHandle, "Category:", GFUI_FONT_MEDIUM, 320, B_BASE - 9 * B_HT, GFUI_ALIGN_HC_VB, 0); PickDrvCategoryLabelId = GfuiLabelCreateEx(scrHandle, "", aColor, GFUI_FONT_MEDIUM_C, 320, B_BASE - 9 * B_HT - GfuiFontHeight(GFUI_FONT_MEDIUM), GFUI_ALIGN_HC_VB, 256); GfuiMenuDefaultKeysAdd(scrHandle); rmdsAddKeys(); GfuiScreenActivate(scrHandle); }
void RmNextEventMenu(void) { char buf[128]; tRmInfo* reInfo = LmRaceEngine().inData(); void *params = reInfo->params; void *results = reInfo->results; int raceNumber; int xx; if (rmScrHandle) { GfuiScreenRelease(rmScrHandle); } GfLogTrace("Entering Next Event menu\n"); // Create screen, load menu XML descriptor and create static controls. rmScrHandle = GfuiScreenCreate(NULL, NULL, (tfuiCallback)NULL, NULL, (tfuiCallback)NULL, 1); void *menuXMLDescHdle = GfuiMenuLoad("racenexteventmenu.xml"); GfuiMenuCreateStaticControls(rmScrHandle, menuXMLDescHdle); // Create background image from race params. const char* pszBGImg = GfParmGetStr(params, RM_SECT_HEADER, RM_ATTR_BGIMG, 0); if (pszBGImg) { GfuiScreenAddBgImg(rmScrHandle, pszBGImg); } // Create variable title label from race params. int titleId = GfuiMenuCreateLabelControl(rmScrHandle, menuXMLDescHdle, "TitleLabel"); char pszTitle[128]; if (LmRaceEngine().race()->getManager()->hasSubFiles()) { const char* pszGroup = GfParmGetStr(reInfo->params, RM_SECT_HEADER, RM_ATTR_NAME, "<no group>"); snprintf(pszTitle, sizeof(pszTitle), "%s - %s", reInfo->_reName, pszGroup); } else snprintf(pszTitle, sizeof(pszTitle), "%s", reInfo->_reName); GfuiLabelSetText(rmScrHandle, titleId, pszTitle); // Calculate which race of the series this is raceNumber = 1; for (xx = 1; xx < (int)GfParmGetNum(results, RE_SECT_CURRENT, RE_ATTR_CUR_TRACK, NULL, 1); ++xx) { snprintf(buf, sizeof(buf), "%s/%d", RM_SECT_TRACKS, xx); if (!strcmp( GfParmGetStr(reInfo->params, buf, RM_ATTR_NAME, "free"), "free") == 0) ++raceNumber; } // Create variable subtitle label from race params. snprintf(buf, sizeof(buf), "Race Day #%d/%d at %s", raceNumber, (int)GfParmGetNum(params, RM_SECT_TRACKS, RM_ATTR_NUMBER, NULL, -1 ) >= 0 ? (int)GfParmGetNum(params, RM_SECT_TRACKS, RM_ATTR_NUMBER, NULL, -1 ) : GfParmGetEltNb(params, RM_SECT_TRACKS), reInfo->track->name); int subTitleId = GfuiMenuCreateLabelControl(rmScrHandle, menuXMLDescHdle, "SubTitleLabel"); GfuiLabelSetText(rmScrHandle, subTitleId, buf); // Create Start and Abandon buttons. GfuiMenuCreateButtonControl(rmScrHandle, menuXMLDescHdle, "StartButton", NULL, rmStateManage); GfuiMenuCreateButtonControl(rmScrHandle, menuXMLDescHdle, "AbandonButton", RmRaceSelectMenuHandle, GfuiScreenActivate); // Close menu XML descriptor. GfParmReleaseHandle(menuXMLDescHdle); // Register keyboard shortcuts. GfuiMenuDefaultKeysAdd(rmScrHandle); GfuiAddKey(rmScrHandle, GFUIK_RETURN, "Start Event", NULL, rmStateManage, NULL); GfuiAddKey(rmScrHandle, GFUIK_ESCAPE, "Abandon", RmRaceSelectMenuHandle, GfuiScreenActivate, NULL); // Activate screen. GfuiScreenActivate(rmScrHandle); }
// Host on-line race menu. void RmNetworkHostMenu(void * /* dummy */) { GfLogTrace("Entering Network Host menu.\n"); if (!NetGetNetwork()) { NetSetServer(true); NetSetClient(false); if (!NetGetServer()->Start(SPEEDDREAMSPORT)) { NetSetServer(false); return; } } if (racemanMenuHdle) GfuiScreenRelease(racemanMenuHdle); racemanMenuHdle = GfuiScreenCreate(NULL, NULL, (tfuiCallback)OnActivateNetworkHost, NULL, (tfuiCallback)NULL, 1); void *mparam = GfuiMenuLoad("networkhostmenu.xml"); GfuiMenuCreateStaticControls(racemanMenuHdle, mparam); RmSetRacemanMenuHandle(racemanMenuHdle); NetworkRaceInfo(); g_trackHd = GfuiMenuCreateLabelControl(racemanMenuHdle,mparam,"trackname"); g_lapsHd = GfuiMenuCreateLabelControl(racemanMenuHdle,mparam,"lapcountname"); g_catHd = GfuiMenuCreateLabelControl(racemanMenuHdle,mparam,"carcatname"); g_OutlineId = GfuiMenuCreateStaticImageControl(racemanMenuHdle,mparam,"outlineimage"); //Show players for (int i = 0; i < MAXNETWORKPLAYERS; i++) { char buf[1024]; sprintf(buf,"ready%i",i); g_readystatus[i] = GfuiMenuCreateStaticImageControl(racemanMenuHdle,mparam,buf); GfuiVisibilitySet(racemanMenuHdle,g_readystatus[i],false); sprintf(buf,"driver%i",i); g_playerNames[i] = GfuiMenuCreateLabelControl(racemanMenuHdle,mparam,buf); GfuiLabelSetText(racemanMenuHdle,g_playerNames[i],""); sprintf(buf,"car%i",i); g_carNames[i] = GfuiMenuCreateLabelControl(racemanMenuHdle,mparam,buf); GfuiLabelSetText(racemanMenuHdle,g_carNames[i],""); } g_ReadyCheckboxId = GfuiMenuCreateCheckboxControl(racemanMenuHdle, mparam, "playerreadycheckbox", NULL, onHostPlayerReady); g_HostSettingsButtonId = GfuiMenuCreateButtonControl(racemanMenuHdle, mparam, "networkhostsettings", racemanMenuHdle, rmNetworkHostSettingsMenu); GfuiEnable(racemanMenuHdle, g_HostSettingsButtonId, GFUI_DISABLE); g_RaceSetupId = GfuiMenuCreateButtonControl(racemanMenuHdle, mparam, "racesetup", racemanMenuHdle, RmConfigureRace); GfuiMenuCreateButtonControl(racemanMenuHdle, mparam, "start race", NULL, ServerPrepareStartNetworkRace); g_CancelButtonId = GfuiMenuCreateButtonControl(racemanMenuHdle, mparam, "cancel", NULL, rmNetworkServerDisconnect); GfParmReleaseHandle(mparam); GfuiMenuDefaultKeysAdd(racemanMenuHdle); GfuiAddKey(racemanMenuHdle, GFUIK_ESCAPE, "Back to previous menu", 0, 0, rmNetworkServerDisconnect); UpdateNetworkPlayers(); GfuiScreenActivate(racemanMenuHdle); }
/** Generate a help screen. @ingroup gui @param prevScreen Previous screen to return to @warning The help screen is activated. */ void GfuiHelpScreen(void *prevScreen) { int x, x2, dx, y; tGfuiKey *curKey; tGfuiKey *curSKey; tGfuiScreen *pscr = (tGfuiScreen*)prevScreen; scrHandle = GfuiScreenCreate(); GfuiLabelCreateEx(scrHandle, "Keys Definition", fgColor2, GFUI_FONT_BIG, 320, 440, GFUI_ALIGN_HC_VB, 0); x = 30; dx = 80; x2 = 330; y = 380; curSKey = pscr->userSpecKeys; curKey = pscr->userKeys; do { if (curSKey != NULL) { curSKey = curSKey->next; GfuiLabelCreateEx(scrHandle, curSKey->name, fgColor1, GFUI_FONT_SMALL_C, x, y, GFUI_ALIGN_HL_VB, 0); GfuiLabelCreateEx(scrHandle, curSKey->descr, fgColor2, GFUI_FONT_SMALL_C, x + dx, y, GFUI_ALIGN_HL_VB, 0); } if (curKey != NULL) { curKey = curKey->next; GfuiLabelCreateEx(scrHandle, curKey->name, fgColor1, GFUI_FONT_SMALL_C, x2, y, GFUI_ALIGN_HL_VB, 0); GfuiLabelCreateEx(scrHandle, curKey->descr, fgColor2, GFUI_FONT_SMALL_C, x2 + dx, y, GFUI_ALIGN_HL_VB, 0); } y -= 12; if (curKey == pscr->userKeys) curKey = (tGfuiKey*)NULL; if (curSKey == pscr->userSpecKeys) curSKey = (tGfuiKey*)NULL; } while ((curKey != NULL) || (curSKey != NULL)); GfuiButtonCreate(scrHandle, "Back", GFUI_FONT_LARGE, 320, 40, GFUI_BTNSZ, GFUI_ALIGN_HC_VB, 0, prevScreen, GfuiScreenActivate, NULL, (tfuiCallback)NULL, (tfuiCallback)NULL); GfuiAddKey(scrHandle, (unsigned char)27, "", prevScreen, GfuiScreenReplace, NULL); GfuiAddSKey(scrHandle, GLUT_KEY_F1, "", prevScreen, GfuiScreenReplace, NULL); GfuiAddKey(scrHandle, (unsigned char)13, "", prevScreen, GfuiScreenReplace, NULL); GfuiMenuDefaultKeysAdd(scrHandle); GfuiScreenActivate(scrHandle); }