- 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;
|
||||
fileName.first = "";
|
||||
fileName.second = "";
|
||||
fileNameParameter.first = "";
|
||||
fileNameParameter.second = "";
|
||||
fileLoaded.first = false;
|
||||
fileLoaded.second = false;
|
||||
}
|
||||
|
@ -88,6 +90,8 @@ Config::Config(std::pair<ConfigType,ConfigType> type, std::pair<string,string> f
|
|||
cfgType = type;
|
||||
|
||||
fileName = file;
|
||||
fileNameParameter = file;
|
||||
|
||||
if(getGameReadWritePath(GameConstants::path_ini_CacheLookupKey) != "") {
|
||||
fileName.first = getGameReadWritePath(GameConstants::path_ini_CacheLookupKey) + fileName.first;
|
||||
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->cfgType = src->cfgType;
|
||||
dest->fileName = src->fileName;
|
||||
dest->fileNameParameter = src->fileNameParameter;
|
||||
dest->fileLoaded = src->fileLoaded;
|
||||
}
|
||||
|
||||
void Config::reload() {
|
||||
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);
|
||||
Config newconfig(type, std::make_pair(glest_ini_filename,glestuser_ini_filename), std::make_pair(true,false));
|
||||
std::pair<ConfigType,ConfigType> type = std::make_pair(cfgType.first,cfgType.second);
|
||||
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__);
|
||||
|
||||
|
@ -565,6 +570,24 @@ vector<pair<string,string> > Config::getUserProperties() const {
|
|||
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(){
|
||||
return properties.first.toString();
|
||||
}
|
||||
|
|
|
@ -39,6 +39,7 @@ class Config {
|
|||
private:
|
||||
std::pair<Properties,Properties> properties;
|
||||
std::pair<ConfigType,ConfigType> cfgType;
|
||||
std::pair<string,string> fileNameParameter;
|
||||
std::pair<string,string> fileName;
|
||||
std::pair<bool,bool> fileLoaded;
|
||||
|
||||
|
@ -82,6 +83,9 @@ public:
|
|||
vector<pair<string,string> > getMergedProperties() const;
|
||||
vector<pair<string,string> > getMasterProperties() 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;
|
||||
SDLKey translateSpecialStringToSDLKey(char c) const;
|
||||
|
|
|
@ -1289,7 +1289,7 @@ void Renderer::renderLabel(const GraphicLabel *label,const Vec4f *color) {
|
|||
glPopAttrib();
|
||||
}
|
||||
|
||||
void Renderer::renderButton(const GraphicButton *button) {
|
||||
void Renderer::renderButton(const GraphicButton *button, const Vec4f *fontColorOverride) {
|
||||
if(button->getVisible() == false) {
|
||||
return;
|
||||
}
|
||||
|
@ -1314,14 +1314,14 @@ void Renderer::renderButton(const GraphicButton *button) {
|
|||
|
||||
//button
|
||||
Vec4f fontColor;
|
||||
//if(game!=NULL){
|
||||
// fontColor=game->getGui()->getDisplay()->getColor();
|
||||
// fontColor.w = GraphicComponent::getFade();
|
||||
//}
|
||||
//else {
|
||||
|
||||
if(fontColorOverride != NULL) {
|
||||
fontColor= *fontColorOverride;
|
||||
}
|
||||
else {
|
||||
// white shadowed is default ( in the menu for example )
|
||||
fontColor=Vec4f(1.f, 1.f, 1.f, GraphicComponent::getFade());
|
||||
//}
|
||||
}
|
||||
|
||||
//Vec4f color= Vec4f(1.f, 1.f, 1.f, GraphicComponent::getFade());
|
||||
Vec4f color= fontColor;
|
||||
|
|
|
@ -357,7 +357,7 @@ public:
|
|||
void renderLabel(const GraphicLabel *label);
|
||||
void renderLabel(const GraphicLabel *label,const Vec3f *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 renderLine(const GraphicLine *line);
|
||||
void renderScrollBar(const GraphicScrollBar *sb);
|
||||
|
|
|
@ -63,9 +63,13 @@ MenuStateKeysetup::MenuStateKeysetup(Program *program, MainMenu *mainMenu):
|
|||
buttonOk.init(200, buttonRowPos, 100);
|
||||
buttonOk.setText(lang.get("Ok"));
|
||||
|
||||
buttonDefaults.registerGraphicComponent(containerName,"buttonDefaults");
|
||||
buttonDefaults.init(310, buttonRowPos, 100);
|
||||
buttonDefaults.setText(lang.get("Defaults"));
|
||||
|
||||
buttonReturn.registerGraphicComponent(containerName,"buttonReturn");
|
||||
buttonReturn.init(310, buttonRowPos, 100);
|
||||
buttonReturn.setText(lang.get("Return"));
|
||||
buttonReturn.init(420, buttonRowPos, 100);
|
||||
buttonReturn.setText(lang.get("Abort"));
|
||||
|
||||
keyButtonsLineHeight=25;
|
||||
keyButtonsHeight=20;
|
||||
|
@ -78,7 +82,8 @@ MenuStateKeysetup::MenuStateKeysetup(Program *program, MainMenu *mainMenu):
|
|||
Config &configKeys = Config::getInstance(std::pair<ConfigType,ConfigType>(cfgMainKeys,cfgUserKeys));
|
||||
mergedProperties=configKeys.getMergedProperties();
|
||||
masterProperties=configKeys.getMasterProperties();
|
||||
userProperties=configKeys.getUserProperties();
|
||||
//userProperties=configKeys.getUserProperties();
|
||||
userProperties.clear();
|
||||
|
||||
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));
|
||||
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)){
|
||||
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__);
|
||||
|
||||
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));
|
||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
}
|
||||
|
@ -213,12 +242,18 @@ void MenuStateKeysetup::render(){
|
|||
else
|
||||
{
|
||||
renderer.renderButton(&buttonReturn);
|
||||
renderer.renderButton(&buttonDefaults);
|
||||
renderer.renderButton(&buttonOk);
|
||||
renderer.renderLabel(&labelTitle);
|
||||
|
||||
if(keyScrollBar.getElementCount()!=0 ) {
|
||||
for(int i = keyScrollBar.getVisibleStart(); i <= keyScrollBar.getVisibleEnd(); ++i) {
|
||||
renderer.renderButton(keyButtons[i]);
|
||||
if(hotkeyIndex == i) {
|
||||
renderer.renderButton(keyButtons[i],&YELLOW);
|
||||
}
|
||||
else {
|
||||
renderer.renderButton(keyButtons[i]);
|
||||
}
|
||||
renderer.renderLabel(labels[i]);
|
||||
}
|
||||
}
|
||||
|
@ -269,25 +304,46 @@ void MenuStateKeysetup::keyPress(char c) {
|
|||
void MenuStateKeysetup::keyUp(char key) {
|
||||
//Config &configKeys = Config::getInstance(std::pair<ConfigType,ConfigType>(cfgMainKeys,cfgUserKeys));
|
||||
|
||||
if(hotkeyIndex >= 0 && hotkeyChar != 0) {
|
||||
string keyName = SDL_GetKeyName(static_cast<SDLKey>(hotkeyChar));
|
||||
if(hotkeyIndex >= 0) {
|
||||
if(hotkeyChar != 0) {
|
||||
string keyName = SDL_GetKeyName(static_cast<SDLKey>(hotkeyChar));
|
||||
|
||||
if(keyName == "unknown key") {
|
||||
Config &configKeys = Config::getInstance(std::pair<ConfigType,ConfigType>(cfgMainKeys,cfgUserKeys));
|
||||
SDLKey keysym = configKeys.translateSpecialStringToSDLKey(hotkeyChar);
|
||||
// SDL skips capital letters
|
||||
if(keysym >= 65 && keysym <= 90) {
|
||||
keysym = (SDLKey)((int)keysym + 32);
|
||||
key = hotkeyChar;
|
||||
if(keyName == "unknown key") {
|
||||
Config &configKeys = Config::getInstance(std::pair<ConfigType,ConfigType>(cfgMainKeys,cfgUserKeys));
|
||||
SDLKey keysym = configKeys.translateSpecialStringToSDLKey(hotkeyChar);
|
||||
// SDL skips capital letters
|
||||
if(keysym >= 65 && keysym <= 90) {
|
||||
keysym = (SDLKey)((int)keysym + 32);
|
||||
}
|
||||
key = keysym;
|
||||
keyName = SDL_GetKeyName(keysym);
|
||||
}
|
||||
keyName = SDL_GetKeyName(keysym);
|
||||
}
|
||||
|
||||
if(SystemFlags::VERBOSE_MODE_ENABLED) printf ("In [%s::%s Line: %d] keyName [%s] char [%d]\n",__FILE__,__FUNCTION__,__LINE__,keyName.c_str(),hotkeyChar);
|
||||
if(SystemFlags::VERBOSE_MODE_ENABLED) printf ("In [%s::%s Line: %d] keyName [%s] char [%d]\n",__FILE__,__FUNCTION__,__LINE__,keyName.c_str(),hotkeyChar);
|
||||
|
||||
if(keyName != "unknown key") {
|
||||
GraphicLabel *label= labels[hotkeyIndex];
|
||||
label->setText(keyName);
|
||||
}
|
||||
if(keyName != "unknown key") {
|
||||
GraphicLabel *label= labels[hotkeyIndex];
|
||||
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;
|
||||
hotkeyChar = 0;
|
||||
}
|
||||
|
|
|
@ -29,6 +29,7 @@ class MenuStateKeysetup: public MenuState {
|
|||
private:
|
||||
|
||||
GraphicButton buttonOk;
|
||||
GraphicButton buttonDefaults;
|
||||
GraphicButton buttonReturn;
|
||||
|
||||
GraphicLabel labelTitle;
|
||||
|
|
Loading…
Reference in New Issue