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 *NoPlayer = "-- No one --";
|
||||||
static const char *HumanDriverModuleName = "human";
|
static const char *HumanDriverModuleName = "human";
|
||||||
static const char *DefaultCarName = "sc-lynx-220";
|
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 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]);
|
static const int NbSkillLevels = sizeof(SkillLevelString) / sizeof(SkillLevelString[0]);
|
||||||
|
@ -65,12 +67,17 @@ static int AutoReverseEditId;
|
||||||
static int AutoReverseLeftId;
|
static int AutoReverseLeftId;
|
||||||
static int AutoReverseRightId;
|
static int AutoReverseRightId;
|
||||||
static int AutoReverseLabelId;
|
static int AutoReverseLabelId;
|
||||||
|
static int WebUsernameEditId;
|
||||||
|
static int WebPasswordEditId;
|
||||||
|
|
||||||
/* Struct to define a generic ("internal name / id", "displayable name") pair */
|
/* Struct to define a generic ("internal name / id", "displayable name") pair */
|
||||||
typedef struct tInfo
|
typedef struct tInfo
|
||||||
{
|
{
|
||||||
char *name;
|
char *name;
|
||||||
char *dispname;
|
char *dispname;
|
||||||
|
char *webserverusername;
|
||||||
|
char *webserverpassword;
|
||||||
|
|
||||||
} tInfo;
|
} tInfo;
|
||||||
|
|
||||||
/* Player info struct */
|
/* Player info struct */
|
||||||
|
@ -82,7 +89,9 @@ public:
|
||||||
const char *defcarname = 0, int racenumber = 0, int skilllevel = 0,
|
const char *defcarname = 0, int racenumber = 0, int skilllevel = 0,
|
||||||
float *color = 0,
|
float *color = 0,
|
||||||
tGearChangeMode gearchangemode = GEAR_MODE_AUTO, int autoreverse = 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;
|
_info.name = 0;
|
||||||
setName(name);
|
setName(name);
|
||||||
|
@ -95,6 +104,10 @@ public:
|
||||||
_nbpitstops = nbpitstops;
|
_nbpitstops = nbpitstops;
|
||||||
_skilllevel = skilllevel;
|
_skilllevel = skilllevel;
|
||||||
_autoreverse = autoreverse;
|
_autoreverse = autoreverse;
|
||||||
|
_webserverusername = 0;
|
||||||
|
setWebserverusername(webserverusername);
|
||||||
|
_webserverpassword = 0;
|
||||||
|
setWebserverpassword(webserverpassword);
|
||||||
_color[0] = color ? color[0] : 1.0;
|
_color[0] = color ? color[0] : 1.0;
|
||||||
_color[1] = color ? color[1] : 1.0;
|
_color[1] = color ? color[1] : 1.0;
|
||||||
_color[2] = color ? color[2] : 0.5;
|
_color[2] = color ? color[2] : 0.5;
|
||||||
|
@ -114,6 +127,10 @@ public:
|
||||||
_nbpitstops = src._nbpitstops;
|
_nbpitstops = src._nbpitstops;
|
||||||
_skilllevel = src._skilllevel;
|
_skilllevel = src._skilllevel;
|
||||||
_autoreverse = src._autoreverse;
|
_autoreverse = src._autoreverse;
|
||||||
|
_info.webserverusername = 0;
|
||||||
|
setWebserverusername(src._info.webserverusername);
|
||||||
|
_info.webserverpassword = 0;
|
||||||
|
setWebserverpassword(src._info.webserverpassword);
|
||||||
_color[0] = src._color[0];
|
_color[0] = src._color[0];
|
||||||
_color[1] = src._color[1];
|
_color[1] = src._color[1];
|
||||||
_color[2] = src._color[2];
|
_color[2] = src._color[2];
|
||||||
|
@ -129,6 +146,8 @@ public:
|
||||||
float color(int idx) const { return (idx >= 0 && idx < 4) ? _color[idx] : 0.0; }
|
float color(int idx) const { return (idx >= 0 && idx < 4) ? _color[idx] : 0.0; }
|
||||||
int skillLevel() const { return _skilllevel; }
|
int skillLevel() const { return _skilllevel; }
|
||||||
int autoReverse() const { return _autoreverse; }
|
int autoReverse() const { return _autoreverse; }
|
||||||
|
const char *webserverusername() const { return _webserverusername; }
|
||||||
|
const char *webserverpassword() const { return _webserverpassword; }
|
||||||
|
|
||||||
void setName(const char *name)
|
void setName(const char *name)
|
||||||
{
|
{
|
||||||
|
@ -157,6 +176,24 @@ public:
|
||||||
_defcarname = new char[strlen(defcarname)+1];
|
_defcarname = new char[strlen(defcarname)+1];
|
||||||
strcpy(_defcarname, defcarname); // Can't use strdup : free crashes in destructor !?
|
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 setRaceNumber(int raceNumber) { _racenumber = raceNumber; }
|
||||||
void setGearChangeMode(tGearChangeMode gearChangeMode) { _gearchangemode = gearChangeMode; }
|
void setGearChangeMode(tGearChangeMode gearChangeMode) { _gearchangemode = gearChangeMode; }
|
||||||
void setNbPitStops(int nbPitStops) { _nbpitstops = nbPitStops; }
|
void setNbPitStops(int nbPitStops) { _nbpitstops = nbPitStops; }
|
||||||
|
@ -171,6 +208,10 @@ public:
|
||||||
delete[] _info.name;
|
delete[] _info.name;
|
||||||
if (_defcarname)
|
if (_defcarname)
|
||||||
delete[] _defcarname;
|
delete[] _defcarname;
|
||||||
|
if (_webserverusername)
|
||||||
|
delete[] _webserverusername;
|
||||||
|
if (_webserverpassword)
|
||||||
|
delete[] _webserverpassword;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Gear change mode enum to string conversion
|
// Gear change mode enum to string conversion
|
||||||
|
@ -201,6 +242,8 @@ private:
|
||||||
float _color[4];
|
float _color[4];
|
||||||
int _skilllevel;
|
int _skilllevel;
|
||||||
int _autoreverse;
|
int _autoreverse;
|
||||||
|
char* _webserverusername;
|
||||||
|
char* _webserverpassword;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -245,6 +288,13 @@ refreshEditVal(void)
|
||||||
GfuiLabelSetText(ScrHandle, AutoReverseEditId, "");
|
GfuiLabelSetText(ScrHandle, AutoReverseEditId, "");
|
||||||
GfuiEnable(ScrHandle, AutoReverseEditId, GFUI_DISABLE);
|
GfuiEnable(ScrHandle, AutoReverseEditId, GFUI_DISABLE);
|
||||||
|
|
||||||
|
GfuiEditboxSetString(ScrHandle, WebUsernameEditId, "");
|
||||||
|
GfuiEnable(ScrHandle, WebUsernameEditId, GFUI_DISABLE);
|
||||||
|
|
||||||
|
GfuiEditboxSetString(ScrHandle, WebPasswordEditId, "");
|
||||||
|
GfuiEnable(ScrHandle, WebPasswordEditId, GFUI_DISABLE);
|
||||||
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
if (strcmp((*CurrPlayer)->dispName(), NoPlayer)) {
|
if (strcmp((*CurrPlayer)->dispName(), NoPlayer)) {
|
||||||
|
@ -271,6 +321,15 @@ refreshEditVal(void)
|
||||||
GfuiLabelSetText(ScrHandle, AutoReverseEditId, Yn[(*CurrPlayer)->autoReverse()]);
|
GfuiLabelSetText(ScrHandle, AutoReverseEditId, Yn[(*CurrPlayer)->autoReverse()]);
|
||||||
GfuiEnable(ScrHandle, AutoReverseEditId, GFUI_ENABLE);
|
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)
|
if ((*CurrPlayer)->gearChangeMode() == GEAR_MODE_AUTO)
|
||||||
autoRevVisible = GFUI_VISIBLE;
|
autoRevVisible = GFUI_VISIBLE;
|
||||||
}
|
}
|
||||||
|
@ -372,6 +431,11 @@ PutPlayerSettings(unsigned index)
|
||||||
GfParmSetStr(PrefHdle, drvSectionPath, HM_ATT_TRANS, player->gearChangeModeString());
|
GfParmSetStr(PrefHdle, drvSectionPath, HM_ATT_TRANS, player->gearChangeModeString());
|
||||||
GfParmSetNum(PrefHdle, drvSectionPath, HM_ATT_NBPITS, (char*)NULL, (tdble)player->nbPitStops());
|
GfParmSetNum(PrefHdle, drvSectionPath, HM_ATT_NBPITS, (char*)NULL, (tdble)player->nbPitStops());
|
||||||
GfParmSetStr(PrefHdle, drvSectionPath, HM_ATT_AUTOREVERSE, Yn[player->autoReverse()]);
|
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 */
|
/* Allow neutral gear in sequential mode if neutral gear command not defined */
|
||||||
if (player->gearChangeMode() == GEAR_MODE_SEQ
|
if (player->gearChangeMode() == GEAR_MODE_SEQ
|
||||||
|
@ -563,6 +627,8 @@ GenPlayerList(void)
|
||||||
const char *str;
|
const char *str;
|
||||||
int racenumber;
|
int racenumber;
|
||||||
float color[4];
|
float color[4];
|
||||||
|
const char *webserverusername;
|
||||||
|
const char *webserverpassword;
|
||||||
|
|
||||||
/* Reset players list */
|
/* Reset players list */
|
||||||
tPlayerInfoList::iterator playerIter;
|
tPlayerInfoList::iterator playerIter;
|
||||||
|
@ -570,7 +636,7 @@ GenPlayerList(void)
|
||||||
delete *playerIter;
|
delete *playerIter;
|
||||||
PlayersInfo.clear();
|
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);
|
snprintf(buf, sizeof(buf), "%s%s", GfLocalDir(), HM_DRV_FILE);
|
||||||
PlayerHdle = GfParmReadFile(buf, GFPARM_RMODE_REREAD);
|
PlayerHdle = GfParmReadFile(buf, GFPARM_RMODE_REREAD);
|
||||||
if (PlayerHdle == NULL) {
|
if (PlayerHdle == NULL) {
|
||||||
|
@ -603,6 +669,7 @@ GenPlayerList(void)
|
||||||
racenumber, // Race number
|
racenumber, // Race number
|
||||||
skilllevel, // skill level
|
skilllevel, // skill level
|
||||||
color)); // Colors
|
color)); // Colors
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -637,6 +704,14 @@ GenPlayerList(void)
|
||||||
} else {
|
} else {
|
||||||
PlayersInfo[i]->setAutoReverse(1);
|
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;
|
return 0;
|
||||||
|
@ -721,7 +796,52 @@ onChangeName(void * /* dummy */)
|
||||||
UpdtScrollList();
|
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
|
//#641 New player name should get empty when clicking on it
|
||||||
// In the Player Configuration menu, when you create
|
// In the Player Configuration menu, when you create
|
||||||
// a new player, his name is set to "-- Enter name --",
|
// 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, "ApplyButton", NULL, onSavePlayerList);
|
||||||
GfuiMenuCreateButtonControl(ScrHandle, param, "CancelButton", NULL, onQuitPlayerConfig);
|
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.
|
// Close menu XML descriptor.
|
||||||
GfParmReleaseHandle(param);
|
GfParmReleaseHandle(param);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue