forked from speed-dreams/speed-dreams-code
Converted Race options menus to XML (merged from sdl-port)
git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@1781 30fe4595-0a0c-4342-8851-515496e4dcbd Former-commit-id: f0fc0f8ccf8cca7c44dcc527326e923b9ddf6d2d Former-commit-id: de270586c875b3efb2588e11949b7d93b060917a
This commit is contained in:
parent
7c29a98857
commit
93b45ae496
1 changed files with 87 additions and 70 deletions
|
@ -4,7 +4,7 @@
|
||||||
created : Thu May 2 22:02:51 CEST 2002
|
created : Thu May 2 22:02:51 CEST 2002
|
||||||
copyright : (C) 2001 by Eric Espie
|
copyright : (C) 2001 by Eric Espie
|
||||||
email : eric.espie@torcs.org
|
email : eric.espie@torcs.org
|
||||||
version : $Id: racemenu.cpp,v 1.2 2003/06/24 21:02:24 torcs Exp $
|
version : $Id: racemenu.cpp,v 1.2 20 Mar 2006 04:31:12 torcs Exp $
|
||||||
|
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
|
@ -30,23 +30,31 @@
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <tgfclient.h>
|
#include <tgfclient.h>
|
||||||
#include <track.h>
|
#include <track.h>
|
||||||
#include <car.h>
|
#include <car.h>
|
||||||
#include <raceman.h>
|
#include <raceman.h>
|
||||||
#include <robot.h>
|
#include <robot.h>
|
||||||
|
#include <graphic.h>
|
||||||
|
|
||||||
#include "racescreens.h"
|
#include "racescreens.h"
|
||||||
|
|
||||||
|
|
||||||
|
// Constants.
|
||||||
|
static const char *DispModeValues[] = { RM_VAL_VISIBLE, RM_VAL_INVISIBLE};
|
||||||
|
|
||||||
|
// Global variables.
|
||||||
static void *scrHandle;
|
static void *scrHandle;
|
||||||
static tRmRaceParam *rp;
|
static tRmRaceParam *rp;
|
||||||
static int rmrpDistance;
|
|
||||||
static int rmrpLaps;
|
|
||||||
static char buf[256];
|
|
||||||
static int rmrpDistId;
|
static int rmrpDistId;
|
||||||
static int rmrpLapsId;
|
static int rmrpLapsId;
|
||||||
static int rmDispModeEditId;
|
static int rmrpDispModeId;
|
||||||
static int rmCurDispMode;
|
|
||||||
static const char *rmCurDispModeList[] = { RM_VAL_VISIBLE, RM_VAL_INVISIBLE};
|
static int rmrpDistance;
|
||||||
|
static int rmrpLaps;
|
||||||
|
static int rmrpDispMode;
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -62,6 +70,7 @@ rmrpDeactivate(void *screen)
|
||||||
static void
|
static void
|
||||||
rmrpUpdDist(void * /* dummy */)
|
rmrpUpdDist(void * /* dummy */)
|
||||||
{
|
{
|
||||||
|
char buf[32];
|
||||||
char *val;
|
char *val;
|
||||||
|
|
||||||
val = GfuiEditboxGetString(scrHandle, rmrpDistId);
|
val = GfuiEditboxGetString(scrHandle, rmrpDistId);
|
||||||
|
@ -79,6 +88,7 @@ rmrpUpdDist(void * /* dummy */)
|
||||||
static void
|
static void
|
||||||
rmrpUpdLaps(void * /* dummy */)
|
rmrpUpdLaps(void * /* dummy */)
|
||||||
{
|
{
|
||||||
|
char buf[32];
|
||||||
char *val;
|
char *val;
|
||||||
|
|
||||||
val = GfuiEditboxGetString(scrHandle, rmrpLapsId);
|
val = GfuiEditboxGetString(scrHandle, rmrpLapsId);
|
||||||
|
@ -93,19 +103,25 @@ rmrpUpdLaps(void * /* dummy */)
|
||||||
GfuiEditboxSetString(scrHandle, rmrpLapsId, buf);
|
GfuiEditboxSetString(scrHandle, rmrpLapsId, buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
rmChangeDisplayMode(void * /* dummy */)
|
||||||
|
{
|
||||||
|
rmrpDispMode = 1 - rmrpDispMode;
|
||||||
|
GfuiLabelSetText(scrHandle, rmrpDispModeId, DispModeValues[rmrpDispMode]);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
rmrpValidate(void * /* dummy */)
|
rmrpValidate(void * /* dummy */)
|
||||||
{
|
{
|
||||||
|
GfuiUnSelectCurrent();
|
||||||
|
|
||||||
if (rp->confMask & RM_CONF_RACE_LEN) {
|
if (rp->confMask & RM_CONF_RACE_LEN) {
|
||||||
rmrpUpdDist(0);
|
|
||||||
rmrpUpdLaps(0);
|
|
||||||
GfParmSetNum(rp->param, rp->title, RM_ATTR_DISTANCE, "km", rmrpDistance);
|
GfParmSetNum(rp->param, rp->title, RM_ATTR_DISTANCE, "km", rmrpDistance);
|
||||||
GfParmSetNum(rp->param, rp->title, RM_ATTR_LAPS, (char*)NULL, rmrpLaps);
|
GfParmSetNum(rp->param, rp->title, RM_ATTR_LAPS, (char*)NULL, rmrpLaps);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rp->confMask & RM_CONF_DISP_MODE) {
|
if (rp->confMask & RM_CONF_DISP_MODE) {
|
||||||
GfParmSetStr(rp->param, rp->title, RM_ATTR_DISPMODE, rmCurDispModeList[rmCurDispMode]);
|
GfParmSetStr(rp->param, rp->title, RM_ATTR_DISPMODE, DispModeValues[rmrpDispMode]);
|
||||||
}
|
}
|
||||||
|
|
||||||
rmrpDeactivate(rp->nextScreen);
|
rmrpDeactivate(rp->nextScreen);
|
||||||
|
@ -114,91 +130,92 @@ rmrpValidate(void * /* dummy */)
|
||||||
static void
|
static void
|
||||||
rmrpAddKeys(void)
|
rmrpAddKeys(void)
|
||||||
{
|
{
|
||||||
GfuiAddKey(scrHandle, 27, "Cancel Modifications", rp->prevScreen, rmrpDeactivate, NULL);
|
GfuiAddKey(scrHandle, 13, "Accept", NULL, rmrpValidate, NULL);
|
||||||
|
GfuiAddKey(scrHandle, 27, "Cancel", rp->prevScreen, rmrpDeactivate, NULL);
|
||||||
GfuiAddSKey(scrHandle, GLUT_KEY_F1, "Help", scrHandle, GfuiHelpScreen, NULL);
|
GfuiAddSKey(scrHandle, GLUT_KEY_F1, "Help", scrHandle, GfuiHelpScreen, NULL);
|
||||||
GfuiAddSKey(scrHandle, GLUT_KEY_F12, "Screen-Shot", NULL, GfuiScreenShot, NULL);
|
GfuiAddSKey(scrHandle, GLUT_KEY_F12, "Screen-Shot", NULL, GfuiScreenShot, NULL);
|
||||||
GfuiAddKey(scrHandle, 13, "Validate Modifications", NULL, rmrpValidate, NULL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
rmChangeDisplayMode(void * /* dummy */)
|
|
||||||
{
|
|
||||||
rmCurDispMode = 1 - rmCurDispMode;
|
|
||||||
GfuiLabelSetText(scrHandle, rmDispModeEditId, rmCurDispModeList[rmCurDispMode]);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
RmRaceParamMenu(void *vrp)
|
RmRaceParamMenu(void *vrp)
|
||||||
{
|
{
|
||||||
int y, x, x2, dy, dx;
|
char buf[64];
|
||||||
|
|
||||||
rp = (tRmRaceParam*)vrp;
|
rp = (tRmRaceParam*)vrp;
|
||||||
|
|
||||||
sprintf(buf, "%s Options", rp->title);
|
// Create screen, load menu XML descriptor and create static controls.
|
||||||
scrHandle = GfuiMenuScreenCreate(buf);
|
scrHandle = GfuiScreenCreateEx((float*)NULL, NULL, NULL, NULL, (tfuiCallback)NULL, 1);
|
||||||
GfuiScreenAddBgImg(scrHandle, "data/img/splash-raceopt.png");
|
void *menuXMLDescHdle = LoadMenuXML("racemenu.xml");
|
||||||
|
CreateStaticControls(menuXMLDescHdle,scrHandle);
|
||||||
x = 80;
|
|
||||||
x2 = 240;
|
|
||||||
y = 380;
|
|
||||||
dx = 200;
|
|
||||||
dy = GfuiFontHeight(GFUI_FONT_LARGE) + 5;
|
|
||||||
|
|
||||||
if (rp->confMask & RM_CONF_RACE_LEN) {
|
// Create variable title label.
|
||||||
GfuiLabelCreate(scrHandle, "Race Distance (km):", GFUI_FONT_MEDIUM_C, x, y, GFUI_ALIGN_HL_VB, 0);
|
int titleId = CreateLabelControl(scrHandle,menuXMLDescHdle,"title");
|
||||||
|
sprintf(buf, "%s Options", rp->title);
|
||||||
|
GfuiLabelSetText(scrHandle,titleId,buf);
|
||||||
|
|
||||||
|
if (rp->confMask & RM_CONF_RACE_LEN)
|
||||||
|
{
|
||||||
|
// Create Race distance label.
|
||||||
|
CreateLabelControl(scrHandle,menuXMLDescHdle,"racedistance");
|
||||||
|
|
||||||
|
// Create and initialize Race distance edit.
|
||||||
rmrpDistance = (int)GfParmGetNum(rp->param, rp->title, RM_ATTR_DISTANCE, "km", 0);
|
rmrpDistance = (int)GfParmGetNum(rp->param, rp->title, RM_ATTR_DISTANCE, "km", 0);
|
||||||
if (rmrpDistance == 0) {
|
if (rmrpDistance == 0)
|
||||||
|
{
|
||||||
strcpy(buf, "---");
|
strcpy(buf, "---");
|
||||||
rmrpLaps = (int)GfParmGetNum(rp->param, rp->title, RM_ATTR_LAPS, NULL, 25);
|
rmrpLaps = (int)GfParmGetNum(rp->param, rp->title, RM_ATTR_LAPS, NULL, 25);
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
sprintf(buf, "%d", rmrpDistance);
|
sprintf(buf, "%d", rmrpDistance);
|
||||||
rmrpLaps = 0;
|
rmrpLaps = 0;
|
||||||
}
|
}
|
||||||
rmrpDistId = GfuiEditboxCreate(scrHandle, buf, GFUI_FONT_MEDIUM_C,
|
|
||||||
x + dx, y,
|
|
||||||
0, 8, NULL, (tfuiCallback)NULL, rmrpUpdDist);
|
|
||||||
|
|
||||||
y -= dy;
|
rmrpDistId = CreateEditControl(scrHandle,menuXMLDescHdle,"racedistanceedit",NULL,NULL,rmrpUpdDist);
|
||||||
GfuiLabelCreate(scrHandle, "Laps:", GFUI_FONT_MEDIUM_C, x, y, GFUI_ALIGN_HL_VB, 0);
|
GfuiEditboxSetString(scrHandle,rmrpDistId,buf);
|
||||||
if (rmrpLaps == 0) {
|
|
||||||
|
// Create Laps label.
|
||||||
|
CreateLabelControl(scrHandle,menuXMLDescHdle,"laps");
|
||||||
|
|
||||||
|
// Create and initialize Laps edit.
|
||||||
|
if (rmrpLaps == 0)
|
||||||
|
{
|
||||||
strcpy(buf, "---");
|
strcpy(buf, "---");
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
sprintf(buf, "%d", rmrpLaps);
|
sprintf(buf, "%d", rmrpLaps);
|
||||||
}
|
}
|
||||||
rmrpLapsId = GfuiEditboxCreate(scrHandle, buf, GFUI_FONT_MEDIUM_C,
|
|
||||||
x + dx, y,
|
rmrpLapsId = CreateEditControl(scrHandle,menuXMLDescHdle,"lapsedit",NULL,NULL,rmrpUpdLaps);
|
||||||
0, 8, NULL, (tfuiCallback)NULL, rmrpUpdLaps);
|
GfuiEditboxSetString(scrHandle,rmrpLapsId,buf);
|
||||||
y -= dy;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rp->confMask & RM_CONF_DISP_MODE) {
|
if (rp->confMask & RM_CONF_DISP_MODE)
|
||||||
GfuiLabelCreate(scrHandle, "Display:", GFUI_FONT_MEDIUM_C, x, y, GFUI_ALIGN_HL_VB, 0);
|
{
|
||||||
GfuiGrButtonCreate(scrHandle, "data/img/arrow-left.png", "data/img/arrow-left.png",
|
if (!strcmp(GfParmGetStr(rp->param, rp->title, RM_ATTR_DISPMODE, RM_VAL_VISIBLE), RM_VAL_INVISIBLE))
|
||||||
"data/img/arrow-left.png", "data/img/arrow-left-pushed.png",
|
{
|
||||||
x2, y, GFUI_ALIGN_HL_VB, 1,
|
rmrpDispMode = 1;
|
||||||
(void*)0, rmChangeDisplayMode,
|
|
||||||
NULL, (tfuiCallback)NULL, (tfuiCallback)NULL);
|
|
||||||
GfuiGrButtonCreate(scrHandle, "data/img/arrow-right.png", "data/img/arrow-right.png",
|
|
||||||
"data/img/arrow-right.png", "data/img/arrow-right-pushed.png",
|
|
||||||
x2 + 150, y, GFUI_ALIGN_HL_VB, 1,
|
|
||||||
(void*)1, rmChangeDisplayMode,
|
|
||||||
NULL, (tfuiCallback)NULL, (tfuiCallback)NULL);
|
|
||||||
if (!strcmp(GfParmGetStr(rp->param, rp->title, RM_ATTR_DISPMODE, RM_VAL_VISIBLE), RM_VAL_INVISIBLE)) {
|
|
||||||
rmCurDispMode = 1;
|
|
||||||
} else {
|
|
||||||
rmCurDispMode = 0;
|
|
||||||
}
|
}
|
||||||
rmDispModeEditId = GfuiLabelCreate(scrHandle, rmCurDispModeList[rmCurDispMode], GFUI_FONT_MEDIUM_C, x2 + 35, y, GFUI_ALIGN_HL_VB, 20);
|
else
|
||||||
y -= dy;
|
{
|
||||||
|
rmrpDispMode = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
CreateButtonControl(scrHandle,menuXMLDescHdle,"displayleftarrow",(void*)0, rmChangeDisplayMode);
|
||||||
|
CreateButtonControl(scrHandle,menuXMLDescHdle,"displayrightarrow",(void*)1, rmChangeDisplayMode);
|
||||||
|
rmrpDispModeId = CreateLabelControl(scrHandle,menuXMLDescHdle,"display");
|
||||||
|
GfuiLabelSetText(scrHandle,rmrpDispModeId,DispModeValues[rmrpDispMode]);
|
||||||
}
|
}
|
||||||
|
|
||||||
GfuiButtonCreate(scrHandle, "Accept", GFUI_FONT_LARGE, 210, 40, 150, GFUI_ALIGN_HC_VB, GFUI_MOUSE_UP,
|
// Create Accept and Cancel buttons
|
||||||
NULL, rmrpValidate, NULL, NULL, NULL);
|
CreateButtonControl(scrHandle,menuXMLDescHdle,"accept",NULL,rmrpValidate);
|
||||||
|
CreateButtonControl(scrHandle,menuXMLDescHdle,"cancel",rp->prevScreen,rmrpDeactivate);
|
||||||
GfuiButtonCreate(scrHandle, "Cancel", GFUI_FONT_LARGE, 430, 40, 150, GFUI_ALIGN_HC_VB, GFUI_MOUSE_UP,
|
|
||||||
rp->prevScreen, rmrpDeactivate, NULL, NULL, NULL);
|
// Close menu XML descriptor.
|
||||||
|
GfParmReleaseHandle(menuXMLDescHdle);
|
||||||
|
|
||||||
|
// Register keyboard shortcuts.
|
||||||
rmrpAddKeys();
|
rmrpAddKeys();
|
||||||
|
|
||||||
GfuiScreenActivate(scrHandle);
|
GfuiScreenActivate(scrHandle);
|
||||||
|
|
Loading…
Reference in a new issue