From 3c2e7735a0134c5ce6af9624b65b7f3d27c752f1 Mon Sep 17 00:00:00 2001 From: Simon Howard Date: Wed, 3 Jun 2009 23:20:37 +0000 Subject: Add unique key groups for menu navigation and shortcuts. Subversion-branch: /trunk/chocolate-doom Subversion-revision: 1548 --- setup/keyboard.c | 137 ++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 85 insertions(+), 52 deletions(-) diff --git a/setup/keyboard.c b/setup/keyboard.c index c4d4fbec..2e791c7a 100644 --- a/setup/keyboard.c +++ b/setup/keyboard.c @@ -70,9 +70,21 @@ int vanilla_keyboard_mapping = 1; static int always_run = 0; -static int *allkeys[] = {&key_left, &key_right, &key_up, &key_down, - &key_strafeleft, &key_straferight, &key_fire, - &key_use, &key_strafe, &key_speed}; +// Keys within these groups cannot have the same value. + +static int *controls[] = { &key_left, &key_right, &key_up, &key_down, + &key_strafeleft, &key_straferight, &key_fire, + &key_use, &key_strafe, &key_speed, NULL }; + +static int *menu_nav[] = { &key_menu_activate, &key_menu_up, &key_menu_down, + &key_menu_left, &key_menu_right, &key_menu_back, + &key_menu_forward, NULL }; + +static int *shortcuts[] = { &key_menu_help, &key_menu_save, &key_menu_load, + &key_menu_volume, &key_menu_detail, &key_menu_qsave, + &key_menu_endgame, &key_menu_messages, + &key_menu_qload, &key_menu_quit, &key_menu_gamma, + &key_menu_incscreen, &key_menu_decscreen, NULL }; static void UpdateJoybSpeed(TXT_UNCAST_ARG(widget), TXT_UNCAST_ARG(var)) { @@ -94,47 +106,68 @@ static void UpdateJoybSpeed(TXT_UNCAST_ARG(widget), TXT_UNCAST_ARG(var)) } } -// Callback invoked when a key control is set +static int VarInGroup(int *variable, int **group) +{ + unsigned int i; -static void KeySetCallback(TXT_UNCAST_ARG(widget), TXT_UNCAST_ARG(variable)) + for (i=0; group[i] != NULL; ++i) + { + if (group[i] == variable) + { + return 1; + } + } + + return 0; +} + +static void CheckKeyGroup(int *variable, int **group) { - TXT_CAST_ARG(int, variable); unsigned int i; - for (i=0; i