- configurable keys can be edited in keyboard menu now
This commit is contained in:
parent
0f57fe6b92
commit
935895c89f
|
@ -78,6 +78,8 @@ Config::Config() {
|
||||||
cfgType.second = cfgUserGame;
|
cfgType.second = cfgUserGame;
|
||||||
fileName.first = "";
|
fileName.first = "";
|
||||||
fileName.second = "";
|
fileName.second = "";
|
||||||
|
fileNameParameter.first = "";
|
||||||
|
fileNameParameter.second = "";
|
||||||
fileLoaded.first = false;
|
fileLoaded.first = false;
|
||||||
fileLoaded.second = false;
|
fileLoaded.second = false;
|
||||||
}
|
}
|
||||||
|
@ -88,6 +90,8 @@ Config::Config(std::pair<ConfigType,ConfigType> type, std::pair<string,string> f
|
||||||
cfgType = type;
|
cfgType = type;
|
||||||
|
|
||||||
fileName = file;
|
fileName = file;
|
||||||
|
fileNameParameter = file;
|
||||||
|
|
||||||
if(getGameReadWritePath(GameConstants::path_ini_CacheLookupKey) != "") {
|
if(getGameReadWritePath(GameConstants::path_ini_CacheLookupKey) != "") {
|
||||||
fileName.first = getGameReadWritePath(GameConstants::path_ini_CacheLookupKey) + fileName.first;
|
fileName.first = getGameReadWritePath(GameConstants::path_ini_CacheLookupKey) + fileName.first;
|
||||||
fileName.second = getGameReadWritePath(GameConstants::path_ini_CacheLookupKey) + fileName.second;
|
fileName.second = getGameReadWritePath(GameConstants::path_ini_CacheLookupKey) + fileName.second;
|
||||||
|
@ -156,14 +160,15 @@ void Config::CopyAll(Config *src, Config *dest) {
|
||||||
dest->properties = src->properties;
|
dest->properties = src->properties;
|
||||||
dest->cfgType = src->cfgType;
|
dest->cfgType = src->cfgType;
|
||||||
dest->fileName = src->fileName;
|
dest->fileName = src->fileName;
|
||||||
|
dest->fileNameParameter = src->fileNameParameter;
|
||||||
dest->fileLoaded = src->fileLoaded;
|
dest->fileLoaded = src->fileLoaded;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Config::reload() {
|
void Config::reload() {
|
||||||
if(SystemFlags::VERBOSE_MODE_ENABLED) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
if(SystemFlags::VERBOSE_MODE_ENABLED) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
|
|
||||||
std::pair<ConfigType,ConfigType> type = std::make_pair(cfgMainGame,cfgUserGame);
|
std::pair<ConfigType,ConfigType> type = std::make_pair(cfgType.first,cfgType.second);
|
||||||
Config newconfig(type, std::make_pair(glest_ini_filename,glestuser_ini_filename), std::make_pair(true,false));
|
Config newconfig(type, std::make_pair(fileNameParameter.first,fileNameParameter.second), std::make_pair(true,false));
|
||||||
|
|
||||||
if(SystemFlags::VERBOSE_MODE_ENABLED) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
if(SystemFlags::VERBOSE_MODE_ENABLED) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
|
|
||||||
|
@ -565,6 +570,24 @@ vector<pair<string,string> > Config::getUserProperties() const {
|
||||||
return getPropertiesFromContainer(properties.second);
|
return getPropertiesFromContainer(properties.second);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Config::setUserProperties(const vector<pair<string,string> > &valueList) {
|
||||||
|
Properties &propertiesObj = properties.second;
|
||||||
|
|
||||||
|
for(int idx = 0; idx < valueList.size(); ++ idx) {
|
||||||
|
const pair<string,string> &nameValuePair = valueList[idx];
|
||||||
|
propertiesObj.setString(nameValuePair.first,nameValuePair.second);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
string Config::getFileName(bool userFilename) const {
|
||||||
|
string result = fileName.second;
|
||||||
|
if(userFilename == false) {
|
||||||
|
result = fileName.first;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
string Config::toString(){
|
string Config::toString(){
|
||||||
return properties.first.toString();
|
return properties.first.toString();
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,6 +39,7 @@ class Config {
|
||||||
private:
|
private:
|
||||||
std::pair<Properties,Properties> properties;
|
std::pair<Properties,Properties> properties;
|
||||||
std::pair<ConfigType,ConfigType> cfgType;
|
std::pair<ConfigType,ConfigType> cfgType;
|
||||||
|
std::pair<string,string> fileNameParameter;
|
||||||
std::pair<string,string> fileName;
|
std::pair<string,string> fileName;
|
||||||
std::pair<bool,bool> fileLoaded;
|
std::pair<bool,bool> fileLoaded;
|
||||||
|
|
||||||
|
@ -82,6 +83,9 @@ public:
|
||||||
vector<pair<string,string> > getMergedProperties() const;
|
vector<pair<string,string> > getMergedProperties() const;
|
||||||
vector<pair<string,string> > getMasterProperties() const;
|
vector<pair<string,string> > getMasterProperties() const;
|
||||||
vector<pair<string,string> > getUserProperties() const;
|
vector<pair<string,string> > getUserProperties() const;
|
||||||
|
void setUserProperties(const vector<pair<string,string> > &valueList);
|
||||||
|
|
||||||
|
string getFileName(bool userFilename) const;
|
||||||
|
|
||||||
char translateStringToCharKey(const string &value) const;
|
char translateStringToCharKey(const string &value) const;
|
||||||
SDLKey translateSpecialStringToSDLKey(char c) const;
|
SDLKey translateSpecialStringToSDLKey(char c) const;
|
||||||
|
|
|
@ -1289,7 +1289,7 @@ void Renderer::renderLabel(const GraphicLabel *label,const Vec4f *color) {
|
||||||
glPopAttrib();
|
glPopAttrib();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Renderer::renderButton(const GraphicButton *button) {
|
void Renderer::renderButton(const GraphicButton *button, const Vec4f *fontColorOverride) {
|
||||||
if(button->getVisible() == false) {
|
if(button->getVisible() == false) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1314,14 +1314,14 @@ void Renderer::renderButton(const GraphicButton *button) {
|
||||||
|
|
||||||
//button
|
//button
|
||||||
Vec4f fontColor;
|
Vec4f fontColor;
|
||||||
//if(game!=NULL){
|
|
||||||
// fontColor=game->getGui()->getDisplay()->getColor();
|
if(fontColorOverride != NULL) {
|
||||||
// fontColor.w = GraphicComponent::getFade();
|
fontColor= *fontColorOverride;
|
||||||
//}
|
}
|
||||||
//else {
|
else {
|
||||||
// white shadowed is default ( in the menu for example )
|
// white shadowed is default ( in the menu for example )
|
||||||
fontColor=Vec4f(1.f, 1.f, 1.f, GraphicComponent::getFade());
|
fontColor=Vec4f(1.f, 1.f, 1.f, GraphicComponent::getFade());
|
||||||
//}
|
}
|
||||||
|
|
||||||
//Vec4f color= Vec4f(1.f, 1.f, 1.f, GraphicComponent::getFade());
|
//Vec4f color= Vec4f(1.f, 1.f, 1.f, GraphicComponent::getFade());
|
||||||
Vec4f color= fontColor;
|
Vec4f color= fontColor;
|
||||||
|
|
|
@ -357,7 +357,7 @@ public:
|
||||||
void renderLabel(const GraphicLabel *label);
|
void renderLabel(const GraphicLabel *label);
|
||||||
void renderLabel(const GraphicLabel *label,const Vec3f *color);
|
void renderLabel(const GraphicLabel *label,const Vec3f *color);
|
||||||
void renderLabel(const GraphicLabel *label,const Vec4f *color);
|
void renderLabel(const GraphicLabel *label,const Vec4f *color);
|
||||||
void renderButton(const GraphicButton *button);
|
void renderButton(const GraphicButton *button,const Vec4f *fontColorOverride=NULL);
|
||||||
void renderCheckBox(const GraphicCheckBox *box);
|
void renderCheckBox(const GraphicCheckBox *box);
|
||||||
void renderLine(const GraphicLine *line);
|
void renderLine(const GraphicLine *line);
|
||||||
void renderScrollBar(const GraphicScrollBar *sb);
|
void renderScrollBar(const GraphicScrollBar *sb);
|
||||||
|
|
|
@ -63,9 +63,13 @@ MenuStateKeysetup::MenuStateKeysetup(Program *program, MainMenu *mainMenu):
|
||||||
buttonOk.init(200, buttonRowPos, 100);
|
buttonOk.init(200, buttonRowPos, 100);
|
||||||
buttonOk.setText(lang.get("Ok"));
|
buttonOk.setText(lang.get("Ok"));
|
||||||
|
|
||||||
|
buttonDefaults.registerGraphicComponent(containerName,"buttonDefaults");
|
||||||
|
buttonDefaults.init(310, buttonRowPos, 100);
|
||||||
|
buttonDefaults.setText(lang.get("Defaults"));
|
||||||
|
|
||||||
buttonReturn.registerGraphicComponent(containerName,"buttonReturn");
|
buttonReturn.registerGraphicComponent(containerName,"buttonReturn");
|
||||||
buttonReturn.init(310, buttonRowPos, 100);
|
buttonReturn.init(420, buttonRowPos, 100);
|
||||||
buttonReturn.setText(lang.get("Return"));
|
buttonReturn.setText(lang.get("Abort"));
|
||||||
|
|
||||||
keyButtonsLineHeight=25;
|
keyButtonsLineHeight=25;
|
||||||
keyButtonsHeight=20;
|
keyButtonsHeight=20;
|
||||||
|
@ -78,7 +82,8 @@ MenuStateKeysetup::MenuStateKeysetup(Program *program, MainMenu *mainMenu):
|
||||||
Config &configKeys = Config::getInstance(std::pair<ConfigType,ConfigType>(cfgMainKeys,cfgUserKeys));
|
Config &configKeys = Config::getInstance(std::pair<ConfigType,ConfigType>(cfgMainKeys,cfgUserKeys));
|
||||||
mergedProperties=configKeys.getMergedProperties();
|
mergedProperties=configKeys.getMergedProperties();
|
||||||
masterProperties=configKeys.getMasterProperties();
|
masterProperties=configKeys.getMasterProperties();
|
||||||
userProperties=configKeys.getUserProperties();
|
//userProperties=configKeys.getUserProperties();
|
||||||
|
userProperties.clear();
|
||||||
|
|
||||||
for(int i = 0; i < mergedProperties.size(); ++i) {
|
for(int i = 0; i < mergedProperties.size(); ++i) {
|
||||||
|
|
||||||
|
@ -166,10 +171,34 @@ void MenuStateKeysetup::mouseClick(int x, int y, MouseButton mouseButton){
|
||||||
mainMenu->setState(new MenuStateOptions(program, mainMenu));
|
mainMenu->setState(new MenuStateOptions(program, mainMenu));
|
||||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
}
|
}
|
||||||
|
else if(buttonDefaults.mouseClick(x, y)){
|
||||||
|
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
|
soundRenderer.playFx(coreData.getClickSoundB());
|
||||||
|
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
|
|
||||||
|
Config &configKeys = Config::getInstance(std::pair<ConfigType,ConfigType>(cfgMainKeys,cfgUserKeys));
|
||||||
|
string userKeysFile = configKeys.getFileName(true);
|
||||||
|
int result = unlink(userKeysFile.c_str());
|
||||||
|
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] delete file [%s] returned %d\n",__FILE__,__FUNCTION__,__LINE__,userKeysFile.c_str(),result);
|
||||||
|
configKeys.reload();
|
||||||
|
|
||||||
|
mainMenu->setState(new MenuStateOptions(program, mainMenu));
|
||||||
|
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
else if(buttonOk.mouseClick(x, y)){
|
else if(buttonOk.mouseClick(x, y)){
|
||||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
soundRenderer.playFx(coreData.getClickSoundB());
|
soundRenderer.playFx(coreData.getClickSoundB());
|
||||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
|
|
||||||
|
if(userProperties.size() > 0) {
|
||||||
|
Config &configKeys = Config::getInstance(std::pair<ConfigType,ConfigType>(cfgMainKeys,cfgUserKeys));
|
||||||
|
configKeys.setUserProperties(userProperties);
|
||||||
|
configKeys.save();
|
||||||
|
configKeys.reload();
|
||||||
|
}
|
||||||
|
|
||||||
mainMenu->setState(new MenuStateOptions(program, mainMenu));
|
mainMenu->setState(new MenuStateOptions(program, mainMenu));
|
||||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
}
|
}
|
||||||
|
@ -213,12 +242,18 @@ void MenuStateKeysetup::render(){
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
renderer.renderButton(&buttonReturn);
|
renderer.renderButton(&buttonReturn);
|
||||||
|
renderer.renderButton(&buttonDefaults);
|
||||||
renderer.renderButton(&buttonOk);
|
renderer.renderButton(&buttonOk);
|
||||||
renderer.renderLabel(&labelTitle);
|
renderer.renderLabel(&labelTitle);
|
||||||
|
|
||||||
if(keyScrollBar.getElementCount()!=0 ) {
|
if(keyScrollBar.getElementCount()!=0 ) {
|
||||||
for(int i = keyScrollBar.getVisibleStart(); i <= keyScrollBar.getVisibleEnd(); ++i) {
|
for(int i = keyScrollBar.getVisibleStart(); i <= keyScrollBar.getVisibleEnd(); ++i) {
|
||||||
|
if(hotkeyIndex == i) {
|
||||||
|
renderer.renderButton(keyButtons[i],&YELLOW);
|
||||||
|
}
|
||||||
|
else {
|
||||||
renderer.renderButton(keyButtons[i]);
|
renderer.renderButton(keyButtons[i]);
|
||||||
|
}
|
||||||
renderer.renderLabel(labels[i]);
|
renderer.renderLabel(labels[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -269,9 +304,11 @@ void MenuStateKeysetup::keyPress(char c) {
|
||||||
void MenuStateKeysetup::keyUp(char key) {
|
void MenuStateKeysetup::keyUp(char key) {
|
||||||
//Config &configKeys = Config::getInstance(std::pair<ConfigType,ConfigType>(cfgMainKeys,cfgUserKeys));
|
//Config &configKeys = Config::getInstance(std::pair<ConfigType,ConfigType>(cfgMainKeys,cfgUserKeys));
|
||||||
|
|
||||||
if(hotkeyIndex >= 0 && hotkeyChar != 0) {
|
if(hotkeyIndex >= 0) {
|
||||||
|
if(hotkeyChar != 0) {
|
||||||
string keyName = SDL_GetKeyName(static_cast<SDLKey>(hotkeyChar));
|
string keyName = SDL_GetKeyName(static_cast<SDLKey>(hotkeyChar));
|
||||||
|
|
||||||
|
key = hotkeyChar;
|
||||||
if(keyName == "unknown key") {
|
if(keyName == "unknown key") {
|
||||||
Config &configKeys = Config::getInstance(std::pair<ConfigType,ConfigType>(cfgMainKeys,cfgUserKeys));
|
Config &configKeys = Config::getInstance(std::pair<ConfigType,ConfigType>(cfgMainKeys,cfgUserKeys));
|
||||||
SDLKey keysym = configKeys.translateSpecialStringToSDLKey(hotkeyChar);
|
SDLKey keysym = configKeys.translateSpecialStringToSDLKey(hotkeyChar);
|
||||||
|
@ -279,6 +316,7 @@ void MenuStateKeysetup::keyUp(char key) {
|
||||||
if(keysym >= 65 && keysym <= 90) {
|
if(keysym >= 65 && keysym <= 90) {
|
||||||
keysym = (SDLKey)((int)keysym + 32);
|
keysym = (SDLKey)((int)keysym + 32);
|
||||||
}
|
}
|
||||||
|
key = keysym;
|
||||||
keyName = SDL_GetKeyName(keysym);
|
keyName = SDL_GetKeyName(keysym);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -287,6 +325,24 @@ void MenuStateKeysetup::keyUp(char key) {
|
||||||
if(keyName != "unknown key") {
|
if(keyName != "unknown key") {
|
||||||
GraphicLabel *label= labels[hotkeyIndex];
|
GraphicLabel *label= labels[hotkeyIndex];
|
||||||
label->setText(keyName);
|
label->setText(keyName);
|
||||||
|
|
||||||
|
pair<string,string> &nameValuePair = mergedProperties[hotkeyIndex];
|
||||||
|
bool isNewUserKeyEntry = true;
|
||||||
|
for(int i = 0; i < userProperties.size(); ++i) {
|
||||||
|
string hotKeyName = userProperties[i].first;
|
||||||
|
if(nameValuePair.first == hotKeyName) {
|
||||||
|
userProperties[i].second = "";
|
||||||
|
userProperties[i].second.push_back(key);
|
||||||
|
isNewUserKeyEntry = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(isNewUserKeyEntry == true) {
|
||||||
|
pair<string,string> newNameValuePair = nameValuePair;
|
||||||
|
newNameValuePair.second = key;
|
||||||
|
userProperties.push_back(newNameValuePair);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
hotkeyIndex = -1;
|
hotkeyIndex = -1;
|
||||||
hotkeyChar = 0;
|
hotkeyChar = 0;
|
||||||
|
|
|
@ -29,6 +29,7 @@ class MenuStateKeysetup: public MenuState {
|
||||||
private:
|
private:
|
||||||
|
|
||||||
GraphicButton buttonOk;
|
GraphicButton buttonOk;
|
||||||
|
GraphicButton buttonDefaults;
|
||||||
GraphicButton buttonReturn;
|
GraphicButton buttonReturn;
|
||||||
|
|
||||||
GraphicLabel labelTitle;
|
GraphicLabel labelTitle;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user