add basic webserver configuration to player configuration screen
git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@6258 30fe4595-0a0c-4342-8851-515496e4dcbd Former-commit-id: d539ef88bad2df0f7e73884e5b4e790ba5fb9a96 Former-commit-id: d83728fa5142eb4c1235a945e9fc773ea3ee6ede
This commit is contained in:
parent
afe4ca8a5c
commit
cb13a64c13
1 changed files with 129 additions and 5 deletions
|
@ -40,6 +40,8 @@ static const char *PlayerNamePrompt = "-- Enter name --";
|
|||
static const char *NoPlayer = "-- No one --";
|
||||
static const char *HumanDriverModuleName = "human";
|
||||
static const char *DefaultCarName = "sc-lynx-220";
|
||||
static const char *DefaultWebserverusername = "username";
|
||||
static const char *DefaultWebserverpassword = "password";
|
||||
|
||||
static const char *SkillLevelString[] = { ROB_VAL_ARCADE, ROB_VAL_SEMI_ROOKIE, ROB_VAL_ROOKIE, ROB_VAL_AMATEUR, ROB_VAL_SEMI_PRO, ROB_VAL_PRO };
|
||||
static const int NbSkillLevels = sizeof(SkillLevelString) / sizeof(SkillLevelString[0]);
|
||||
|
@ -65,12 +67,17 @@ static int AutoReverseEditId;
|
|||
static int AutoReverseLeftId;
|
||||
static int AutoReverseRightId;
|
||||
static int AutoReverseLabelId;
|
||||
static int WebUsernameEditId;
|
||||
static int WebPasswordEditId;
|
||||
|
||||
/* Struct to define a generic ("internal name / id", "displayable name") pair */
|
||||
typedef struct tInfo
|
||||
{
|
||||
char *name;
|
||||
char *dispname;
|
||||
char *webserverusername;
|
||||
char *webserverpassword;
|
||||
|
||||
} tInfo;
|
||||
|
||||
/* Player info struct */
|
||||
|
@ -82,7 +89,9 @@ public:
|
|||
const char *defcarname = 0, int racenumber = 0, int skilllevel = 0,
|
||||
float *color = 0,
|
||||
tGearChangeMode gearchangemode = GEAR_MODE_AUTO, int autoreverse = 0,
|
||||
int nbpitstops = 0)
|
||||
int nbpitstops = 0,
|
||||
const char *webserverusername = 0,
|
||||
const char *webserverpassword = 0)
|
||||
{
|
||||
_info.name = 0;
|
||||
setName(name);
|
||||
|
@ -95,6 +104,10 @@ public:
|
|||
_nbpitstops = nbpitstops;
|
||||
_skilllevel = skilllevel;
|
||||
_autoreverse = autoreverse;
|
||||
_webserverusername = 0;
|
||||
setWebserverusername(webserverusername);
|
||||
_webserverpassword = 0;
|
||||
setWebserverpassword(webserverpassword);
|
||||
_color[0] = color ? color[0] : 1.0;
|
||||
_color[1] = color ? color[1] : 1.0;
|
||||
_color[2] = color ? color[2] : 0.5;
|
||||
|
@ -114,6 +127,10 @@ public:
|
|||
_nbpitstops = src._nbpitstops;
|
||||
_skilllevel = src._skilllevel;
|
||||
_autoreverse = src._autoreverse;
|
||||
_info.webserverusername = 0;
|
||||
setWebserverusername(src._info.webserverusername);
|
||||
_info.webserverpassword = 0;
|
||||
setWebserverpassword(src._info.webserverpassword);
|
||||
_color[0] = src._color[0];
|
||||
_color[1] = src._color[1];
|
||||
_color[2] = src._color[2];
|
||||
|
@ -129,6 +146,8 @@ public:
|
|||
float color(int idx) const { return (idx >= 0 && idx < 4) ? _color[idx] : 0.0; }
|
||||
int skillLevel() const { return _skilllevel; }
|
||||
int autoReverse() const { return _autoreverse; }
|
||||
const char *webserverusername() const { return _webserverusername; }
|
||||
const char *webserverpassword() const { return _webserverpassword; }
|
||||
|
||||
void setName(const char *name)
|
||||
{
|
||||
|
@ -157,6 +176,24 @@ public:
|
|||
_defcarname = new char[strlen(defcarname)+1];
|
||||
strcpy(_defcarname, defcarname); // Can't use strdup : free crashes in destructor !?
|
||||
}
|
||||
void setWebserverusername(const char *webserverusername)
|
||||
{
|
||||
if (_webserverusername)
|
||||
delete[] _webserverusername;
|
||||
if (!webserverusername || strlen(webserverusername) == 0)
|
||||
webserverusername = DefaultWebserverusername;
|
||||
_webserverusername = new char[strlen(webserverusername)+1];
|
||||
strcpy(_webserverusername, webserverusername); // Can't use strdup : free crashes in destructor !?
|
||||
}
|
||||
void setWebserverpassword(const char *webserverpassword)
|
||||
{
|
||||
if (_webserverpassword)
|
||||
delete[] _webserverpassword;
|
||||
if (!webserverpassword || strlen(webserverpassword) == 0)
|
||||
webserverpassword = DefaultWebserverpassword;
|
||||
_webserverpassword = new char[strlen(webserverpassword)+1];
|
||||
strcpy(_webserverpassword, webserverpassword); // Can't use strdup : free crashes in destructor !?
|
||||
}
|
||||
void setRaceNumber(int raceNumber) { _racenumber = raceNumber; }
|
||||
void setGearChangeMode(tGearChangeMode gearChangeMode) { _gearchangemode = gearChangeMode; }
|
||||
void setNbPitStops(int nbPitStops) { _nbpitstops = nbPitStops; }
|
||||
|
@ -171,6 +208,10 @@ public:
|
|||
delete[] _info.name;
|
||||
if (_defcarname)
|
||||
delete[] _defcarname;
|
||||
if (_webserverusername)
|
||||
delete[] _webserverusername;
|
||||
if (_webserverpassword)
|
||||
delete[] _webserverpassword;
|
||||
}
|
||||
|
||||
// Gear change mode enum to string conversion
|
||||
|
@ -201,6 +242,8 @@ private:
|
|||
float _color[4];
|
||||
int _skilllevel;
|
||||
int _autoreverse;
|
||||
char* _webserverusername;
|
||||
char* _webserverpassword;
|
||||
};
|
||||
|
||||
|
||||
|
@ -245,6 +288,13 @@ refreshEditVal(void)
|
|||
GfuiLabelSetText(ScrHandle, AutoReverseEditId, "");
|
||||
GfuiEnable(ScrHandle, AutoReverseEditId, GFUI_DISABLE);
|
||||
|
||||
GfuiEditboxSetString(ScrHandle, WebUsernameEditId, "");
|
||||
GfuiEnable(ScrHandle, WebUsernameEditId, GFUI_DISABLE);
|
||||
|
||||
GfuiEditboxSetString(ScrHandle, WebPasswordEditId, "");
|
||||
GfuiEnable(ScrHandle, WebPasswordEditId, GFUI_DISABLE);
|
||||
|
||||
|
||||
} else {
|
||||
|
||||
if (strcmp((*CurrPlayer)->dispName(), NoPlayer)) {
|
||||
|
@ -271,6 +321,15 @@ refreshEditVal(void)
|
|||
GfuiLabelSetText(ScrHandle, AutoReverseEditId, Yn[(*CurrPlayer)->autoReverse()]);
|
||||
GfuiEnable(ScrHandle, AutoReverseEditId, GFUI_ENABLE);
|
||||
|
||||
snprintf(buf, sizeof(buf), "%s", (*CurrPlayer)->webserverusername());
|
||||
GfuiEditboxSetString(ScrHandle, WebUsernameEditId, buf);
|
||||
GfuiEnable(ScrHandle, WebUsernameEditId, GFUI_ENABLE);
|
||||
|
||||
snprintf(buf, sizeof(buf), "%s", (*CurrPlayer)->webserverpassword());
|
||||
GfuiEditboxSetString(ScrHandle, WebPasswordEditId, buf);
|
||||
GfuiEnable(ScrHandle, WebPasswordEditId, GFUI_ENABLE);
|
||||
|
||||
|
||||
if ((*CurrPlayer)->gearChangeMode() == GEAR_MODE_AUTO)
|
||||
autoRevVisible = GFUI_VISIBLE;
|
||||
}
|
||||
|
@ -372,6 +431,11 @@ PutPlayerSettings(unsigned index)
|
|||
GfParmSetStr(PrefHdle, drvSectionPath, HM_ATT_TRANS, player->gearChangeModeString());
|
||||
GfParmSetNum(PrefHdle, drvSectionPath, HM_ATT_NBPITS, (char*)NULL, (tdble)player->nbPitStops());
|
||||
GfParmSetStr(PrefHdle, drvSectionPath, HM_ATT_AUTOREVERSE, Yn[player->autoReverse()]);
|
||||
GfLogInfo("##########Saving Username: %s\n", player->webserverusername());
|
||||
GfParmSetStr(PrefHdle, drvSectionPath, "WebServerUsername", player->webserverusername());
|
||||
GfLogInfo("##########Saving Username: %s\n", player->webserverpassword());
|
||||
GfParmSetStr(PrefHdle, drvSectionPath, "WebServerPassword", player->webserverpassword());
|
||||
|
||||
|
||||
/* Allow neutral gear in sequential mode if neutral gear command not defined */
|
||||
if (player->gearChangeMode() == GEAR_MODE_SEQ
|
||||
|
@ -563,6 +627,8 @@ GenPlayerList(void)
|
|||
const char *str;
|
||||
int racenumber;
|
||||
float color[4];
|
||||
const char *webserverusername;
|
||||
const char *webserverpassword;
|
||||
|
||||
/* Reset players list */
|
||||
tPlayerInfoList::iterator playerIter;
|
||||
|
@ -570,7 +636,7 @@ GenPlayerList(void)
|
|||
delete *playerIter;
|
||||
PlayersInfo.clear();
|
||||
|
||||
/* Load players settings from human.xml file */
|
||||
/* Load players settings from human.xml file *//*was meant: preferences.xml file?*/
|
||||
snprintf(buf, sizeof(buf), "%s%s", GfLocalDir(), HM_DRV_FILE);
|
||||
PlayerHdle = GfParmReadFile(buf, GFPARM_RMODE_REREAD);
|
||||
if (PlayerHdle == NULL) {
|
||||
|
@ -602,7 +668,8 @@ GenPlayerList(void)
|
|||
defaultCar, // Default car name.
|
||||
racenumber, // Race number
|
||||
skilllevel, // skill level
|
||||
color)); // Colors
|
||||
color)); // Colors
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -637,6 +704,14 @@ GenPlayerList(void)
|
|||
} else {
|
||||
PlayersInfo[i]->setAutoReverse(1);
|
||||
}
|
||||
|
||||
str = GfParmGetStr(PrefHdle, sstring, "WebServerUsername", 0);
|
||||
PlayersInfo[i]->setWebserverusername(str);
|
||||
GfLogInfo("##########Loaded Username: %s\n", str);
|
||||
str = GfParmGetStr(PrefHdle, sstring, "WebServerPassword", 0);
|
||||
PlayersInfo[i]->setWebserverpassword(str);
|
||||
GfLogInfo("##########Loaded Pasword: %s\n", str);
|
||||
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -721,7 +796,52 @@ onChangeName(void * /* dummy */)
|
|||
UpdtScrollList();
|
||||
}
|
||||
|
||||
static void
|
||||
onChangeWebserverusername(void * /* dummy */)
|
||||
{
|
||||
char *val;
|
||||
|
||||
if (CurrPlayer != PlayersInfo.end()) {
|
||||
val = GfuiEditboxGetString(ScrHandle, WebUsernameEditId);
|
||||
GfLogInfo("##########Changed Username: %s\n", val);
|
||||
// Remove leading spaces (#587)
|
||||
std::string strIn(val);
|
||||
size_t startpos = strIn.find_first_not_of(" \t"); // Find the first character position after excluding leading blank spaces
|
||||
size_t endpos = strIn.find_last_not_of(" \t"); // Find last non-whitespace char position
|
||||
if (startpos != std::string::npos && endpos != std::string::npos) {
|
||||
strIn = strIn.substr(startpos, endpos - startpos + 1);
|
||||
} else {
|
||||
strIn.assign(DefaultWebserverusername); // If it was all whitespace, assign default
|
||||
}
|
||||
(*CurrPlayer)->setWebserverusername(strIn.c_str());
|
||||
|
||||
}
|
||||
|
||||
UpdtScrollList();
|
||||
}
|
||||
|
||||
static void
|
||||
onChangeWebserverpassword(void * /* dummy */)
|
||||
{
|
||||
char *val;
|
||||
|
||||
if (CurrPlayer != PlayersInfo.end()) {
|
||||
val = GfuiEditboxGetString(ScrHandle, WebPasswordEditId);
|
||||
|
||||
// Remove leading spaces (#587)
|
||||
std::string strIn(val);
|
||||
size_t startpos = strIn.find_first_not_of(" \t"); // Find the first character position after excluding leading blank spaces
|
||||
size_t endpos = strIn.find_last_not_of(" \t"); // Find last non-whitespace char position
|
||||
if (startpos != std::string::npos && endpos != std::string::npos) {
|
||||
strIn = strIn.substr(startpos, endpos - startpos + 1);
|
||||
} else {
|
||||
strIn.assign(DefaultWebserverpassword); // If it was all whitespace, assign default
|
||||
}
|
||||
(*CurrPlayer)->setWebserverpassword(strIn.c_str());
|
||||
}
|
||||
|
||||
UpdtScrollList();
|
||||
}
|
||||
//#641 New player name should get empty when clicking on it
|
||||
// In the Player Configuration menu, when you create
|
||||
// a new player, his name is set to "-- Enter name --",
|
||||
|
@ -924,6 +1044,10 @@ PlayerConfigMenuInit(void *prevMenu)
|
|||
GfuiMenuCreateButtonControl(ScrHandle, param, "ApplyButton", NULL, onSavePlayerList);
|
||||
GfuiMenuCreateButtonControl(ScrHandle, param, "CancelButton", NULL, onQuitPlayerConfig);
|
||||
|
||||
/* Web username and password editbox */
|
||||
WebUsernameEditId = GfuiMenuCreateEditControl(ScrHandle, param, "webusernameedit", NULL, NULL, onChangeWebserverusername);
|
||||
WebPasswordEditId = GfuiMenuCreateEditControl(ScrHandle, param, "webpasswordedit", NULL, NULL, onChangeWebserverpassword);
|
||||
|
||||
// Close menu XML descriptor.
|
||||
GfParmReleaseHandle(param);
|
||||
|
||||
|
|
Loading…
Reference in a new issue