- bugfix for hotkey processing (allow single quoted characters to fix grouping units)

This commit is contained in:
Mark Vejvoda 2010-06-13 17:55:39 +00:00
parent 6c28167e5e
commit f619aad383
5 changed files with 39 additions and 27 deletions

View File

@ -14,16 +14,16 @@ ChangeFontColor=C
GameSpeedIncrease=vkAdd
GameSpeedDecrease=vkSubtract
ExitKey=vkEscape
GroupUnitsKey1=0
GroupUnitsKey2=1
GroupUnitsKey3=2
GroupUnitsKey4=3
GroupUnitsKey5=4
GroupUnitsKey6=5
GroupUnitsKey7=6
GroupUnitsKey8=7
GroupUnitsKey9=8
GroupUnitsKey10=9
GroupUnitsKey1='0'
GroupUnitsKey2='1'
GroupUnitsKey3='2'
GroupUnitsKey4='3'
GroupUnitsKey5='4'
GroupUnitsKey6='5'
GroupUnitsKey7='6'
GroupUnitsKey8='7'
GroupUnitsKey9='8'
GroupUnitsKey10='9'
CameraRotateLeft=A
CameraRotateRight=D
CameraRotateUp=S

View File

@ -810,7 +810,7 @@ void Game::eventMouseWheel(int x, int y, int zDelta) {
void Game::keyDown(char key){
try {
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] key = %d\n",__FILE__,__FUNCTION__,__LINE__,key);
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] key = [%c] [%d]\n",__FILE__,__FUNCTION__,__LINE__,key,key);
Lang &lang= Lang::getInstance();
bool speedChangesAllowed= !NetworkManager::getInstance().isNetworkGame();
@ -909,9 +909,12 @@ void Game::keyDown(char key){
for(int idx = 1; idx <= Selection::maxGroups; idx++) {
string keyName = "GroupUnitsKey" + intToStr(idx);
if(key == configKeys.getCharKey(keyName.c_str())) {
char groupHotKey = configKeys.getCharKey(keyName.c_str());
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] keyName [%s] group index = %d, key = [%c] [%d]\n",__FILE__,__FUNCTION__,__LINE__,keyName.c_str(),idx,groupHotKey,groupHotKey);
if(key == groupHotKey) {
//gui.groupKey(key-'0');
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] key = %d\n",__FILE__,__FUNCTION__,__LINE__,key);
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
gui.groupKey(idx-1);
break;
}

View File

@ -214,7 +214,12 @@ char Config::translateStringToCharKey(const string &value) const {
}
}
else if(value.length() >= 1) {
result = value[0];
if(value.length() == 3 && value[0] == '\'' && value[2] == '\'') {
result = value[1];
}
else {
result = value[0];
}
}
else {
string sError = "Unsupported key translation" + value;

View File

@ -194,7 +194,7 @@ private:
void handleMouseDown(SDL_Event event);
static MouseButton getMouseButton(int sdlButton);
static char getKey(SDL_keysym keysym);
static char getKey(SDL_keysym keysym, bool skipSpecialKeys=false);
static void toggleFullscreen();
};

View File

@ -147,7 +147,7 @@ bool Window::handleEvent() {
if(global_window) {
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
global_window->eventKeyDown(getKey(event.key.keysym));
global_window->eventKeyDown(getKey(event.key.keysym,true));
global_window->eventKeyPress(static_cast<char>(event.key.keysym.unicode));
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
@ -160,7 +160,7 @@ bool Window::handleEvent() {
keystate = event.key.keysym;
if(global_window) {
global_window->eventKeyUp(getKey(event.key.keysym));
global_window->eventKeyUp(getKey(event.key.keysym,true));
}
break;
case SDL_ACTIVEEVENT:
@ -491,7 +491,20 @@ MouseButton Window::getMouseButton(int sdlButton) {
}
}
char Window::getKey(SDL_keysym keysym) {
char Window::getKey(SDL_keysym keysym,bool skipSpecialKeys) {
if(skipSpecialKeys == false) {
switch(keysym.sym) {
case SDLK_LALT:
case SDLK_RALT:
return vkAlt;
case SDLK_LCTRL:
case SDLK_RCTRL:
return vkControl;
case SDLK_LSHIFT:
case SDLK_RSHIFT:
return vkShift;
}
}
switch(keysym.sym) {
case SDLK_PLUS:
case SDLK_KP_PLUS:
@ -499,15 +512,6 @@ char Window::getKey(SDL_keysym keysym) {
case SDLK_MINUS:
case SDLK_KP_MINUS:
return vkSubtract;
case SDLK_LALT:
case SDLK_RALT:
return vkAlt;
case SDLK_LCTRL:
case SDLK_RCTRL:
return vkControl;
case SDLK_LSHIFT:
case SDLK_RSHIFT:
return vkShift;
case SDLK_ESCAPE:
return vkEscape;
case SDLK_UP: