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:
madbad 2015-11-23 19:43:11 +00:00
parent afe4ca8a5c
commit cb13a64c13

View file

@ -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);