Update GUI::Key constructs

svn-id: r27643
This commit is contained in:
Max Horn 2007-06-23 00:05:32 +00:00
parent 05a70fc8e4
commit f97cbb8294
9 changed files with 85 additions and 82 deletions

View file

@ -59,7 +59,7 @@ static int mapKey(SDLKey key, SDLMod mod, Uint16 unicode)
return key;
} else if (unicode) {
return unicode;
} else if (key >= 'a' && key <= 'z' && mod & KMOD_SHIFT) {
} else if (key >= 'a' && key <= 'z' && (mod & KMOD_SHIFT)) {
return key & ~0x20;
} else if (key >= SDLK_NUMLOCK && key <= SDLK_EURO) {
return 0;

View file

@ -122,7 +122,7 @@ void SymbianActions::initInstanceMain(OSystem *mainSystem) {
// Skip
_action_enabled[ACTION_SKIP] = true;
_key_action[ACTION_SKIP].setAscii(SDLK_ESCAPE);
_key_action[ACTION_SKIP].setKey(SDLK_ESCAPE);
}
void SymbianActions::initInstanceGame() {
@ -150,28 +150,27 @@ void SymbianActions::initInstanceGame() {
_action_enabled[ACTION_SAVE] = true;
if (is_queen) {
_key_action[ACTION_SAVE].setAscii(SDLK_F1); // F1 key for FOTAQ
_key_action[ACTION_SAVE].setKey(Common::ASCII_F5, SDLK_F5); // F1 key for FOTAQ
} else if (is_sky) {
_key_action[ACTION_SAVE].setAscii(63);
_key_action[ACTION_SAVE].setKey(Common::ASCII_F5, SDLK_F5);
} else if (is_cine) {
_key_action[ACTION_SAVE].setAscii(SDLK_F10); // F10
_key_action[ACTION_SAVE].setKey(Common::ASCII_F10, SDLK_F10); // F10
} else if (is_agi) {
_key_action[ACTION_SAVE].setAscii(SDLK_ESCAPE);
_key_action[ACTION_SAVE].setKey(Common::ASCII_ESCAPE, SDLK_ESCAPE);
} else if (is_parallaction) {
_key_action[ACTION_SAVE].setAscii(SDLK_s);
_key_action[ACTION_SAVE].setKey('s', SDLK_s);
} else {
_key_action[ACTION_SAVE].setAscii(SDLK_F5); // F5 key
_key_action[ACTION_SAVE].setKey(Common::ASCII_F5, SDLK_F5); // F5 key
}
}
// Enable fast mode
_action_enabled[ACTION_FASTMODE] = true;
_key_action[ACTION_FASTMODE].setAscii('f');
_key_action[ACTION_FASTMODE].setFlags(KMOD_CTRL);
_key_action[ACTION_FASTMODE].setKey('f', SDLK_f, KMOD_CTRL);
// Swap character
_action_enabled[ACTION_SWAPCHAR] = true;
_key_action[ACTION_SWAPCHAR].setAscii('b'); // b
_key_action[ACTION_SWAPCHAR].setKey('b'); // b
// Zone
_action_enabled[ACTION_ZONE] = true;
@ -179,31 +178,30 @@ void SymbianActions::initInstanceGame() {
// Multi function key
_action_enabled[ACTION_MULTI] = true;
if (is_agi)
_key_action[ACTION_MULTI].setAscii(SDLK_PAUSE); // agi: show predictive dialog
_key_action[ACTION_MULTI].setKey(SDLK_PAUSE); // agi: show predictive dialog
else if (is_gob)
_key_action[ACTION_MULTI].setAscii(315); // bargon : F1 to start
_key_action[ACTION_MULTI].setKey(Common::ASCII_F1, SDLK_F1); // bargon : F1 to start
else if (gameid == "atlantis")
_key_action[ACTION_MULTI].setAscii(SDLK_KP0); // fate of atlantis : Ins to sucker-punch
_key_action[ACTION_MULTI].setKey(0, SDLK_KP0); // fate of atlantis : Ins to sucker-punch
else
_key_action[ACTION_MULTI].setAscii(86); // FT cheat : shift-V
_key_action[ACTION_MULTI].setKey('V', SDLK_v, KMOD_SHIFT); // FT cheat : shift-V
// Enable debugger
_action_enabled[ACTION_DEBUGGER] = true;
_key_action[ACTION_DEBUGGER].setAscii('d');
_key_action[ACTION_DEBUGGER].setFlags(KMOD_CTRL);
_key_action[ACTION_DEBUGGER].setKey('d', SDLK_d, KMOD_CTRL);
// Skip text
if (!is_cine)
_action_enabled[ACTION_SKIP_TEXT] = true;
if (is_queen) {
_key_action[ACTION_SKIP_TEXT].setAscii(SDLK_SPACE);
_key_action[ACTION_SKIP_TEXT].setKey(SDLK_SPACE);
} else {
_key_action[ACTION_SKIP_TEXT].setAscii(SDLK_PERIOD);
_key_action[ACTION_SKIP_TEXT].setKey(SDLK_PERIOD);
}
// Pause
_key_action[ACTION_PAUSE].setAscii(' ');
_key_action[ACTION_PAUSE].setKey(' ');
_action_enabled[ACTION_PAUSE] = true;
// Quit

View file

@ -141,29 +141,29 @@ void CEActionsPocket::initInstanceGame() {
// Initialize keys for different actions
// Pause
_key_action[POCKET_ACTION_PAUSE].setAscii(VK_SPACE);
_key_action[POCKET_ACTION_PAUSE].setKey(VK_SPACE);
_action_enabled[POCKET_ACTION_PAUSE] = true;
// Save
if (is_simon || is_sword2 || is_gob || is_kyra || is_touche)
_action_enabled[POCKET_ACTION_SAVE] = false;
else if (is_queen) {
_action_enabled[POCKET_ACTION_SAVE] = true;
_key_action[POCKET_ACTION_SAVE].setAscii(286); // F1 key for FOTAQ
_key_action[POCKET_ACTION_SAVE].setKey(Common::ASCII_F5, SDLK_F5); // F1 key for FOTAQ
} else if (is_sky) {
_action_enabled[POCKET_ACTION_SAVE] = true;
_key_action[POCKET_ACTION_SAVE].setAscii(63);
_key_action[POCKET_ACTION_SAVE].setKey(Common::ASCII_F5, SDLK_F5);
} else if (is_cine) {
_action_enabled[POCKET_ACTION_SAVE] = true;
_key_action[POCKET_ACTION_SAVE].setAscii(291); // F10
_key_action[POCKET_ACTION_SAVE].setKey(Common::ASCII_F10, SDLK_F10); // F10
} else if (is_agi) {
_action_enabled[POCKET_ACTION_SAVE] = true;
_key_action[POCKET_ACTION_SAVE].setAscii(SDLK_ESCAPE);
_key_action[POCKET_ACTION_SAVE].setKey(Common::ASCII_ESCAPE, SDLK_ESCAPE);
} else if (is_parallaction) {
_action_enabled[POCKET_ACTION_SAVE] = true;
_key_action[POCKET_ACTION_SAVE].setAscii(SDLK_s);
_key_action[POCKET_ACTION_SAVE].setKey('s', SDLK_s);
} else {
_action_enabled[POCKET_ACTION_SAVE] = true;
_key_action[POCKET_ACTION_SAVE].setAscii(319); // F5 key
_key_action[POCKET_ACTION_SAVE].setKey(Common::ASCII_F5, SDLK_F5); // F5 key
}
// Quit
_action_enabled[POCKET_ACTION_QUIT] = true;
@ -171,9 +171,9 @@ void CEActionsPocket::initInstanceGame() {
if (!is_cine && !is_parallaction)
_action_enabled[POCKET_ACTION_SKIP] = true;
if (is_simon || is_sky || is_sword2 || is_queen || is_sword1 || is_gob || is_saga || is_kyra || is_touche)
_key_action[POCKET_ACTION_SKIP].setAscii(VK_ESCAPE);
_key_action[POCKET_ACTION_SKIP].setKey(VK_ESCAPE);
else
_key_action[POCKET_ACTION_SKIP].setAscii(KEY_ALL_SKIP);
_key_action[POCKET_ACTION_SKIP].setKey(KEY_ALL_SKIP);
// Hide
_action_enabled[POCKET_ACTION_HIDE] = true;
// Keyboard
@ -195,13 +195,13 @@ void CEActionsPocket::initInstanceGame() {
// Multi function key
_action_enabled[POCKET_ACTION_MULTI] = true;
if (is_agi)
_key_action[POCKET_ACTION_MULTI].setAscii(SDLK_PAUSE); // agi: show predictive dialog
_key_action[POCKET_ACTION_MULTI].setKey(SDLK_PAUSE); // agi: show predictive dialog
else if (is_gob)
_key_action[POCKET_ACTION_MULTI].setAscii(315); // bargon : F1 to start
_key_action[POCKET_ACTION_MULTI].setKey(Common::ASCII_F1, SDLK_F1); // bargon : F1 to start
else if (gameid == "atlantis")
_key_action[POCKET_ACTION_MULTI].setAscii(SDLK_KP0); // fate of atlantis : Ins to sucker-punch
_key_action[POCKET_ACTION_MULTI].setKey(0, SDLK_KP0); // fate of atlantis : Ins to sucker-punch
else
_key_action[POCKET_ACTION_MULTI].setAscii(86); // FT cheat : shift-V
_key_action[POCKET_ACTION_MULTI].setKey('V', SDLK_v, KMOD_SHIFT); // FT cheat : shift-V
// Key bind method
_action_enabled[POCKET_ACTION_BINDKEYS] = true;
}
@ -242,9 +242,9 @@ bool CEActionsPocket::perform(GUI::ActionType action, bool pushed) {
// Note that the user can accomplish this via the virtual keyboard as well, this is just for convenience
GUI::MessageDialog alert("Do you want to load or save the game?", "Load", "Save");
if (alert.runModal() == GUI::kMessageOK)
_key_action[action].setAscii(SDLK_l);
_key_action[action].setKey(SDLK_l);
else
_key_action[action].setAscii(SDLK_s);
_key_action[action].setKey(SDLK_s);
}
EventsBuffer::simulateKey(&_key_action[action], true);
return true;

View file

@ -131,41 +131,41 @@ void CEActionsSmartphone::initInstanceGame() {
_action_enabled[SMARTPHONE_ACTION_SAVE] = false;
else if (is_queen) {
_action_enabled[SMARTPHONE_ACTION_SAVE] = true;
_key_action[SMARTPHONE_ACTION_SAVE].setAscii(SDLK_F5); // F1 key for FOTAQ
_key_action[SMARTPHONE_ACTION_SAVE].setKey(Common::ASCII_F5, SDLK_F5); // F1 key for FOTAQ
} else if (is_sky) {
_action_enabled[SMARTPHONE_ACTION_SAVE] = true;
_key_action[SMARTPHONE_ACTION_SAVE].setAscii(SDLK_QUESTION);
_key_action[SMARTPHONE_ACTION_SAVE].setKey(Common::ASCII_F5, SDLK_F5);
} else if (is_cine) {
_action_enabled[SMARTPHONE_ACTION_SAVE] = true;
_key_action[SMARTPHONE_ACTION_SAVE].setAscii(SDLK_F10); //F10
_key_action[SMARTPHONE_ACTION_SAVE].setKey(Common::ASCII_F10, SDLK_F10); //F10
} else if (is_agi) {
_action_enabled[SMARTPHONE_ACTION_SAVE] = true;
_key_action[SMARTPHONE_ACTION_SAVE].setAscii(SDLK_ESCAPE);
_key_action[SMARTPHONE_ACTION_SAVE].setKey(Common::ASCII_ESCAPE, SDLK_ESCAPE);
} else if (is_parallaction) {
_action_enabled[SMARTPHONE_ACTION_SAVE] = true;
_key_action[SMARTPHONE_ACTION_SAVE].setAscii(SDLK_s);
_key_action[SMARTPHONE_ACTION_SAVE].setKey('s', SDLK_s);
} else {
_action_enabled[SMARTPHONE_ACTION_SAVE] = true;
_key_action[SMARTPHONE_ACTION_SAVE].setAscii(Common::ASCII_F5); // F5 key
_key_action[SMARTPHONE_ACTION_SAVE].setKey(Common::ASCII_F5, SDLK_F5); // F5 key
}
// Skip
_action_enabled[SMARTPHONE_ACTION_SKIP] = true;
if (is_simon || is_sky || is_sword2 || is_queen || is_sword1 || is_gob || is_saga || is_kyra || is_touche)
_key_action[SMARTPHONE_ACTION_SKIP].setAscii(VK_ESCAPE);
_key_action[SMARTPHONE_ACTION_SKIP].setKey(VK_ESCAPE);
else
_key_action[SMARTPHONE_ACTION_SKIP].setAscii(KEY_ALL_SKIP);
_key_action[SMARTPHONE_ACTION_SKIP].setKey(KEY_ALL_SKIP);
// Zone
_action_enabled[SMARTPHONE_ACTION_ZONE] = true;
// Multi function key
_action_enabled[SMARTPHONE_ACTION_MULTI] = true;
if (is_agi)
_key_action[SMARTPHONE_ACTION_MULTI].setAscii(SDLK_PAUSE); // agi: show predictive dialog
_key_action[SMARTPHONE_ACTION_MULTI].setKey(SDLK_PAUSE); // agi: show predictive dialog
else if (is_gob)
_key_action[SMARTPHONE_ACTION_MULTI].setAscii(Common::ASCII_F1); // bargon : F1 to start
_key_action[SMARTPHONE_ACTION_MULTI].setKey(Common::ASCII_F1, SDLK_F1) // bargon : F1 to start
else if (gameid == "atlantis")
_key_action[SMARTPHONE_ACTION_MULTI].setAscii(SDLK_KP0); // fate of atlantis : Ins to sucker-punch
_key_action[SMARTPHONE_ACTION_MULTI].setKey(0, SDLK_KP0); // fate of atlantis : Ins to sucker-punch
else
_key_action[SMARTPHONE_ACTION_MULTI].setAscii(86); // FT cheat : shift-V
_key_action[SMARTPHONE_ACTION_MULTI].setKey('V', SDLK_v, KMOD_SHIFT); // FT cheat : shift-V
// Bind keys
_action_enabled[SMARTPHONE_ACTION_BINDKEYS] = true;
}
@ -203,9 +203,9 @@ bool CEActionsSmartphone::perform(GUI::ActionType action, bool pushed) {
// Note that the user can accomplish this via the virtual keyboard as well, this is just for convenience
GUI::MessageDialog alert("Do you want to load or save the game?", "Load", "Save");
if (alert.runModal() == GUI::kMessageOK)
_key_action[action].setAscii(SDLK_l);
_key_action[action].setKey(SDLK_l);
else
_key_action[action].setAscii(SDLK_s);
_key_action[action].setKey(SDLK_s);
}
EventsBuffer::simulateKey(&_key_action[action], true);
return true;

View file

@ -36,8 +36,7 @@ namespace CEGUI {
PanelKeyboard::PanelKeyboard(WORD reference) : Toolbar() {
setBackground(reference);
_state = false;
_lastKey.setAscii(0);
_lastKey.setKeycode(0);
_lastKey.setKey(0);
}
@ -78,25 +77,21 @@ namespace CEGUI {
keyCode = _lastKey.keycode();
}
_state = pushed;
_lastKey.setAscii(keyAscii);
_lastKey.setKeycode(tolower(keyCode));
_lastKey.setKey(keyAscii, tolower(keyCode));
key.setAscii(keyAscii);
key.setKeycode(tolower(keyCode));
key.setKey(keyAscii, tolower(keyCode));
return EventsBuffer::simulateKey(&key, pushed);
}
else if (_state && !pushed) { // cursor is in some forbidden region and is up
_state = false;
key.setAscii(_lastKey.ascii());
key.setKeycode(_lastKey.keycode());
key = _lastKey;
return EventsBuffer::simulateKey(&key, false);
} else
return false;
}
else if (_state && !pushed) { // cursor left the keyboard area and is up
_state = false;
key.setAscii(_lastKey.ascii());
key.setKeycode(_lastKey.keycode());
key = _lastKey;
return EventsBuffer::simulateKey(&key, false);
} else
return false;

View file

@ -32,10 +32,9 @@ namespace CEKEYS {
SDL_Event ev = {0};
if (!key->keycode())
key->setKeycode(key->ascii());
if (!key->ascii())
key->setAscii(key->keycode());
key->setKey(key->ascii(), key->ascii());
else if (!key->ascii())
key->setKey(key->keycode());
ev.type = (pushed ? SDL_KEYDOWN : SDL_KEYUP);
ev.key.keysym.mod = (SDLMod)key->flags();

View file

@ -2105,7 +2105,7 @@ static int mapKeyCE(SDLKey key, SDLMod mod, Uint16 unicode, bool unfilter)
return key;
} else if (unicode) {
return unicode;
} else if (key >= 'a' && key <= 'z' && mod & KMOD_SHIFT) {
} else if (key >= 'a' && key <= 'z' && (mod & KMOD_SHIFT)) {
return key & ~0x20;
} else if (key >= SDLK_NUMLOCK && key <= SDLK_EURO) {
return 0;

View file

@ -32,10 +32,30 @@ Key::Key() :
_ascii(0), _keycode(0), _flags(0) {
}
Key::Key(int ascii) :
_ascii(ascii), _keycode(ascii), _flags(0) {
}
Key::Key(int ascii, int keycode, int flags) :
_ascii(ascii), _keycode(keycode), _flags(flags) {
}
void Key::setKey(int ascii) {
_ascii = ascii;
_keycode = ascii;
}
void Key::setKey(int ascii, int keycode) {
_ascii = ascii;
_keycode = keycode;
}
void Key::setKey(int ascii, int keycode, int flags) {
_ascii = ascii;
_keycode = keycode;
_flags = flags;
}
int Key::ascii() {
return _ascii;
}
@ -48,18 +68,4 @@ int Key::flags() {
return _flags;
}
void Key::setAscii(int ascii) {
_ascii = ascii;
_keycode = ascii; // default
}
void Key::setKeycode(int keycode) {
_keycode = keycode;
}
void Key::setFlags(int flags) {
_flags = flags;
}
} // namespace GUI

View file

@ -32,13 +32,18 @@
namespace GUI {
// TODO/FIXME: Make use of Common::KeyState from common/keyboard.h
class Key {
public:
Key(int ascii, int keycode = 0, int flags = 0);
Key(int ascii);
Key(int ascii, int keycode, int flags = 0);
Key();
void setAscii(int ascii);
void setKeycode(int keycode);
void setFlags(int flags);
void setKey(int ascii);
void setKey(int ascii, int keycode);
void setKey(int ascii, int keycode, int flags);
int ascii();
int keycode();
int flags();