TORCS  1.3.9
The Open Racing Car Simulator
simuconfig.cpp
Go to the documentation of this file.
1 /***************************************************************************
2 
3  file : simuconfig.cpp
4  created : Wed Nov 3 21:48:26 CET 2004
5  copyright : (C) 2004 by Eric Espi�
6  email : eric.espie@free.fr
7  version : $Id$
8 
9  ***************************************************************************/
10 
11 /***************************************************************************
12  * *
13  * This program is free software; you can redistribute it and/or modify *
14  * it under the terms of the GNU General Public License as published by *
15  * the Free Software Foundation; either version 2 of the License, or *
16  * (at your option) any later version. *
17  * *
18  ***************************************************************************/
19 
25 #include <stdio.h>
26 #include <stdlib.h>
27 #include <tgfclient.h>
28 #include <raceinit.h>
29 
30 #include "simuconfig.h"
31 #include <portability.h>
32 
33 static float LabelColor[] = {1.0, 0.0, 1.0, 1.0};
34 
35 /* list of available simulation engine */
36 static const char *simuVersionList[] = {"simuv2", "simuv3"};
37 static const int nbVersions = sizeof(simuVersionList) / sizeof(simuVersionList[0]);
38 static int curVersion = 0;
39 
40 /* gui label id */
41 static int SimuVersionId;
42 
43 /* gui screen handles */
44 static void *scrHandle = NULL;
45 static void *prevHandle = NULL;
46 
47 
48 static void ReadSimuCfg(void)
49 {
50  const char *versionName;
51  int i;
52 
53  const int BUFSIZE = 1024;
54  char buf[BUFSIZE];
55  snprintf(buf, BUFSIZE, "%s%s", GetLocalDir(), RACE_ENG_CFG);
56 
57  void *paramHandle = GfParmReadFile(buf, GFPARM_RMODE_REREAD | GFPARM_RMODE_CREAT);
58  versionName = GfParmGetStr(paramHandle, "Modules", "simu", simuVersionList[0]);
59 
60  for (i = 0; i < nbVersions; i++) {
61  if (strcmp(versionName, simuVersionList[i]) == 0) {
62  curVersion = i;
63  break;
64  }
65  }
66 
67  GfParmReleaseHandle(paramHandle);
68 
70 }
71 
72 
73 /* Save the choosen values in the corresponding parameter file */
74 static void SaveSimuVersion(void * /* dummy */)
75 {
76  const int BUFSIZE = 1024;
77  char buf[BUFSIZE];
78  snprintf(buf, BUFSIZE, "%s%s", GetLocalDir(), RACE_ENG_CFG);
79 
80  void *paramHandle = GfParmReadFile(buf, GFPARM_RMODE_REREAD | GFPARM_RMODE_CREAT);
81  GfParmSetStr(paramHandle, "Modules", "simu", simuVersionList[curVersion]);
82  GfParmWriteFile(NULL, paramHandle, "raceengine");
83  GfParmReleaseHandle(paramHandle);
84 
85  /* return to previous screen */
87  return;
88 }
89 
90 /* change the simulation version */
91 static void
93 {
94  if (vp == 0) {
95  curVersion--;
96  if (curVersion < 0) {
97  curVersion = nbVersions - 1;
98  }
99  } else {
100  curVersion++;
101  if (curVersion == nbVersions) {
102  curVersion = 0;
103  }
104  }
106 }
107 
108 
109 static void onActivate(void * /* dummy */)
110 {
111  ReadSimuCfg();
112 }
113 
114 
115 /* Menu creation */
116 void *
117 SimuMenuInit(void *prevMenu)
118 {
119  int x, y, x2, x3, x4, dy;
120 
121  /* screen already created */
122  if (scrHandle) {
123  return scrHandle;
124  }
125  prevHandle = prevMenu;
126 
127  scrHandle = GfuiScreenCreateEx((float*)NULL, NULL, onActivate, NULL, (tfuiCallback)NULL, 1);
128  GfuiTitleCreate(scrHandle, "Simulation Configuration", 0);
129  GfuiScreenAddBgImg(scrHandle, "data/img/splash-simucfg.png");
130 
131  x = 20;
132  x2 = 240;
133  x3 = x2 + 100;
134  x4 = x2 + 200;
135  y = 370;
136  dy = 30;
137 
138  y -= dy;
139  GfuiLabelCreate(scrHandle, "Simulation version:", GFUI_FONT_MEDIUM, x, y, GFUI_ALIGN_HL_VB, 0);
140  GfuiGrButtonCreate(scrHandle, "data/img/arrow-left.png", "data/img/arrow-left.png",
141  "data/img/arrow-left.png", "data/img/arrow-left-pushed.png",
142  x2, y, GFUI_ALIGN_HL_VB, 1,
143  (void*)-1, ChangeSimuVersion,
144  NULL, (tfuiCallback)NULL, (tfuiCallback)NULL);
145  GfuiGrButtonCreate(scrHandle, "data/img/arrow-right.png", "data/img/arrow-right.png",
146  "data/img/arrow-right.png", "data/img/arrow-right-pushed.png",
147  x4, y, GFUI_ALIGN_HR_VB, 1,
148  (void*)1, ChangeSimuVersion,
149  NULL, (tfuiCallback)NULL, (tfuiCallback)NULL);
152 
154  NULL, SaveSimuVersion, NULL, (tfuiCallback)NULL, (tfuiCallback)NULL);
155 
157  prevMenu, GfuiScreenActivate, NULL, (tfuiCallback)NULL, (tfuiCallback)NULL);
158 
159  GfuiAddKey(scrHandle, 13, "Save", NULL, SaveSimuVersion, NULL);
160  GfuiAddKey(scrHandle, 27, "Cancel Selection", prevMenu, GfuiScreenActivate, NULL);
161  GfuiAddSKey(scrHandle, GLUT_KEY_F12, "Screen-Shot", NULL, GfuiScreenShot, NULL);
162  GfuiAddSKey(scrHandle, GLUT_KEY_LEFT, "Previous Version in list", (void*)0, ChangeSimuVersion, NULL);
163  GfuiAddSKey(scrHandle, GLUT_KEY_RIGHT, "Next Version in list", (void*)1, ChangeSimuVersion, NULL);
164 
165  ReadSimuCfg();
166 
167  return scrHandle;
168 }
int GfParmSetStr(void *handle, const char *path, const char *key, const char *val)
Set a string parameter in the parameter set handle.
Definition: params.cpp:2477
#define GFUI_MOUSE_UP
Definition: tgfclient.h:80
void * GfParmReadFile(const char *file, int mode)
Read parameter set from file and return handle to parameter set.
Definition: params.cpp:1157
int GfuiButtonCreate(void *scr, const char *text, int font, int x, int y, int width, int align, int mouse, void *userDataOnPush, tfuiCallback onPush, void *userDataOnFocus, tfuiCallback onFocus, tfuiCallback onFocusLost)
Add a button to a screen.
Definition: guibutton.cpp:248
#define RACE_ENG_CFG
Definition: raceinit.h:29
char * GetLocalDir(void)
Definition: tgf.cpp:231
void GfParmReleaseHandle(void *parmHandle)
Release given parameter set handle parmHandle.
Definition: params.cpp:1834
void GfuiAddKey(void *scr, unsigned char key, const char *descr, void *userData, tfuiCallback onKeyPressed, tfuiCallback onKeyReleased)
Add a Keyboard callback to a screen.
Definition: gui.cpp:742
int GfuiLabelCreate(void *scr, const char *text, int font, int x, int y, int align, int maxlen)
Add a label to a screen.
Definition: guilabel.cpp:142
void GfuiScreenAddBgImg(void *scr, const char *filename)
Add an image background to a screen.
Definition: gui.cpp:961
int GfParmWriteFile(const char *file, void *parmHandle, const char *name)
Write parameter set into file.
Definition: params.cpp:1610
static void SaveSimuVersion(void *)
Definition: simuconfig.cpp:74
#define GFUI_ALIGN_HR_VB
Definition: tgfclient.h:75
static void onActivate(void *)
Definition: simuconfig.cpp:109
const char * GfParmGetStr(void *parmHandle, const char *path, const char *key, const char *deflt)
Get a string parameter from the parameter set handle.
Definition: params.cpp:2311
The Gaming Framework API (client part).
#define GFUI_FONT_LARGE
Definition: tgfclient.h:168
static const char * simuVersionList[]
Definition: simuconfig.cpp:36
static int SimuVersionId
Definition: simuconfig.cpp:41
void * GfuiScreenCreateEx(float *bgColor, void *userDataOnActivate, tfuiCallback onActivate, void *userDataOnDeactivate, tfuiCallback onDeactivate, int mouseAllowed)
Create a screen.
Definition: gui.cpp:578
void GfuiLabelSetText(void *scr, int id, const char *text)
Change the text of a label.
Definition: guilabel.cpp:212
static void * scrHandle
Definition: simuconfig.cpp:44
static const int nbVersions
Definition: simuconfig.cpp:37
#define GFPARM_RMODE_REREAD
reread the parameters from file and release the previous ones
Definition: tgf.h:266
void GfuiLabelSetColor(void *scr, int id, float *color)
Change the color of a label.
Definition: guilabel.cpp:239
void(* tfuiCallback)(void *)
Definition: tgfclient.h:105
void GfuiScreenActivate(void *screen)
Activate a screen and make it current.
Definition: gui.cpp:467
void GfuiAddSKey(void *scr, int key, const char *descr, void *userData, tfuiCallback onKeyPressed, tfuiCallback onKeyReleased)
Add a Special Keyboard shortcut to the screen.
Definition: gui.cpp:816
void * SimuMenuInit(void *prevMenu)
Definition: simuconfig.cpp:117
#define GFUI_ALIGN_HC_VB
Definition: tgfclient.h:72
#define GFUI_ALIGN_HL_VB
Definition: tgfclient.h:69
static int curVersion
Definition: simuconfig.cpp:38
void GfuiScreenShot(void *)
Save a screen shot in png format.
Definition: gui.cpp:913
static Vector y[4]
Definition: Convex.cpp:56
static void ChangeSimuVersion(void *vp)
Definition: simuconfig.cpp:92
int GfuiTitleCreate(void *scr, const char *text, int maxlen)
Add a Title to the screen.
Definition: guilabel.cpp:170
int GfuiGrButtonCreate(void *scr, const char *disabled, const char *enabled, const char *focused, const char *pushed, int x, int y, int align, int mouse, void *userDataOnPush, tfuiCallback onPush, void *userDataOnFocus, tfuiCallback onFocus, tfuiCallback onFocusLost)
Add a graphical button to a screen.
Definition: guibutton.cpp:62
static float LabelColor[]
Definition: simuconfig.cpp:33
#define GFUI_FONT_MEDIUM_C
Definition: tgfclient.h:173
#define GFUI_FONT_MEDIUM
Definition: tgfclient.h:169
static void ReadSimuCfg(void)
Definition: simuconfig.cpp:48
static void * prevHandle
Definition: simuconfig.cpp:45
#define GFPARM_RMODE_CREAT
Create the file if doesn&#39;t exist.
Definition: tgf.h:267