From 16f1ef6e8496e45563caf10b45693969ab7d4425 Mon Sep 17 00:00:00 2001 From: marschap Date: Fri, 5 Oct 2007 08:21:10 +0000 Subject: [PATCH] replace "extended" by "keymask" for finer grained checks --- server/menu.c | 7 ++++--- server/menu.h | 2 +- server/menuitem.c | 39 ++++++++++++++++++++++----------------- server/menuitem.h | 2 +- server/menuscreens.c | 6 ++---- 5 files changed, 30 insertions(+), 26 deletions(-) diff --git a/server/menu.c b/server/menu.c index d418131..b38cf02 100644 --- a/server/menu.c +++ b/server/menu.c @@ -557,7 +557,7 @@ MenuItem *menu_get_item_for_successor_check(Menu *menu) } } -MenuResult menu_process_input(Menu *menu, MenuToken token, const char *key, bool extended) +MenuResult menu_process_input(Menu *menu, MenuToken token, const char *key, unsigned int keymask) { MenuItem *subitem; debug(RPT_DEBUG, "%s(menu=[%s], token=%d, key=\"%s\")", __FUNCTION__, @@ -635,7 +635,7 @@ MenuResult menu_process_input(Menu *menu, MenuToken token, const char *key, bool } return MENURESULT_NONE; case MENUTOKEN_LEFT: - if (!extended) + if (!(keymask & MENUTOKEN_LEFT)) return MENURESULT_NONE; subitem = menu_get_subitem(menu, menu->data.menu.selector_pos); @@ -667,7 +667,7 @@ MenuResult menu_process_input(Menu *menu, MenuToken token, const char *key, bool } return MENURESULT_NONE; case MENUTOKEN_RIGHT: - if (!extended) + if (!(keymask & MENUTOKEN_RIGHT)) return MENURESULT_NONE; subitem = menu_get_subitem(menu, menu->data.menu.selector_pos); @@ -697,6 +697,7 @@ MenuResult menu_process_input(Menu *menu, MenuToken token, const char *key, bool return MENURESULT_NONE; case MENUTOKEN_OTHER: /* TODO: move to the selected number and enter it */ + default: return MENURESULT_NONE; } return MENURESULT_ERROR; diff --git a/server/menu.h b/server/menu.h index 62463d5..f93658f 100644 --- a/server/menu.h +++ b/server/menu.h @@ -123,7 +123,7 @@ MenuItem *menu_get_item_for_successor_check(Menu *menu); * key is only used if token is MENUTOKEN_OTHER. * DO NOT CALL THIS FUNCTION, CALL menuitem_process_input INSTEAD ! */ -MenuResult menu_process_input(Menu *menu, MenuToken token, const char *key, bool extended); +MenuResult menu_process_input(Menu *menu, MenuToken token, const char *key, unsigned int keymask); /** positions current item pointer on subitem subitem_id. */ void menu_select_subitem(Menu *menu, char *subitem_id); diff --git a/server/menuitem.c b/server/menuitem.c index eadc45c..ff0b981 100644 --- a/server/menuitem.c +++ b/server/menuitem.c @@ -57,10 +57,10 @@ void menuitem_update_screen_numeric(MenuItem *item, Screen *s); void menuitem_update_screen_alpha(MenuItem *item, Screen *s); void menuitem_update_screen_ip(MenuItem *item, Screen *s); -MenuResult menuitem_process_input_slider(MenuItem *item, MenuToken token, const char *key, bool extended); -MenuResult menuitem_process_input_numeric(MenuItem *item, MenuToken token, const char *key, bool extended); -MenuResult menuitem_process_input_alpha(MenuItem *item, MenuToken token, const char *key, bool extended); -MenuResult menuitem_process_input_ip(MenuItem *item, MenuToken token, const char *key, bool extended); +MenuResult menuitem_process_input_slider(MenuItem *item, MenuToken token, const char *key, unsigned int keymask); +MenuResult menuitem_process_input_numeric(MenuItem *item, MenuToken token, const char *key, unsigned int keymask); +MenuResult menuitem_process_input_alpha(MenuItem *item, MenuToken token, const char *key, unsigned int keymask); +MenuResult menuitem_process_input_ip(MenuItem *item, MenuToken token, const char *key, unsigned int keymask); /* information about string representation of IP addresses */ @@ -181,7 +181,7 @@ void (*update_screen_table[NUM_ITEMTYPES]) (MenuItem *item, Screen *s) = menuitem_update_screen_ip }; -MenuResult (*process_input_table[NUM_ITEMTYPES]) (MenuItem *item, MenuToken token, const char *key, bool extended) = +MenuResult (*process_input_table[NUM_ITEMTYPES]) (MenuItem *item, MenuToken token, const char *key, unsigned int keymask) = { menu_process_input, NULL, @@ -954,9 +954,9 @@ void menuitem_update_screen_ip(MenuItem *item, Screen *s) /******** MENU SCREEN INPUT HANDLING FUNCTIONS ********/ -MenuResult menuitem_process_input(MenuItem *item, MenuToken token, const char *key, bool extended) +MenuResult menuitem_process_input(MenuItem *item, MenuToken token, const char *key, unsigned int keymask) { - MenuResult (*process_input) (MenuItem *item, MenuToken token, const char *key, bool extended); + MenuResult (*process_input) (MenuItem *item, MenuToken token, const char *key, unsigned int keymask); debug(RPT_DEBUG, "%s(item=[%s], token=%d, key=\"%s\")", __FUNCTION__, ((item != NULL) ? item->id : "(null)"), token, key); @@ -967,14 +967,14 @@ MenuResult menuitem_process_input(MenuItem *item, MenuToken token, const char *k /* Call type specific screen building function */ process_input = process_input_table [item->type]; if (process_input) { - return process_input(item, token, key, extended); + return process_input(item, token, key, keymask); } else { report(RPT_ERR, "%s: given menuitem cannot be active", __FUNCTION__); return MENURESULT_ERROR; } } -MenuResult menuitem_process_input_slider(MenuItem *item, MenuToken token, const char *key, bool extended) +MenuResult menuitem_process_input_slider(MenuItem *item, MenuToken token, const char *key, unsigned int keymask) { debug(RPT_DEBUG, "%s(item=[%s], token=%d, key=\"%s\")", __FUNCTION__, ((item != NULL) ? item->id : "(null)"), token, key); @@ -996,7 +996,8 @@ MenuResult menuitem_process_input_slider(MenuItem *item, MenuToken token, const * because of min(maxvalue, value + stepsize) below. * Wrapping then happens on the next key press. */ - if ((!extended) && (item->data.slider.value == item->data.slider.maxvalue)) + if ((!(keymask & (MENUTOKEN_LEFT | MENUTOKEN_DOWN))) && + (item->data.slider.value == item->data.slider.maxvalue)) item->data.slider.value = item->data.slider.minvalue; else item->data.slider.value = min(item->data.slider.maxvalue, @@ -1006,7 +1007,8 @@ MenuResult menuitem_process_input_slider(MenuItem *item, MenuToken token, const return MENURESULT_NONE; case MENUTOKEN_DOWN: case MENUTOKEN_LEFT: - if ((!extended) && (item->data.slider.value == item->data.slider.minvalue)) + if ((!(keymask & (MENUTOKEN_LEFT | MENUTOKEN_UP))) && + (item->data.slider.value == item->data.slider.minvalue)) item->data.slider.value = item->data.slider.maxvalue; else item->data.slider.value = max(item->data.slider.minvalue, @@ -1022,7 +1024,7 @@ MenuResult menuitem_process_input_slider(MenuItem *item, MenuToken token, const return MENURESULT_ERROR; } -MenuResult menuitem_process_input_numeric(MenuItem *item, MenuToken token, const char *key, bool extended) +MenuResult menuitem_process_input_numeric(MenuItem *item, MenuToken token, const char *key, unsigned int keymask) { char buf1[MAX_NUMERIC_LEN]; char buf2[MAX_NUMERIC_LEN]; @@ -1059,7 +1061,7 @@ MenuResult menuitem_process_input_numeric(MenuItem *item, MenuToken token, const } return MENURESULT_NONE; case MENUTOKEN_ENTER: - if ((extended) || (str[pos] == '\0')) { + if ((keymask & MENUTOKEN_LEFT) || (str[pos] == '\0')) { int value; /* The user completed his input */ @@ -1173,13 +1175,14 @@ MenuResult menuitem_process_input_numeric(MenuItem *item, MenuToken token, const if (pos >= display_props->width - 2) item->data.numeric.edit_offs++; } + default: return MENURESULT_NONE; } } return MENURESULT_ERROR; } -MenuResult menuitem_process_input_alpha(MenuItem *item, MenuToken token, const char *key, bool extended) +MenuResult menuitem_process_input_alpha(MenuItem *item, MenuToken token, const char *key, unsigned int keymask) { char *p; static char *chars = NULL; @@ -1218,7 +1221,7 @@ MenuResult menuitem_process_input_alpha(MenuItem *item, MenuToken token, const c } return MENURESULT_NONE; case MENUTOKEN_ENTER: - if ((extended) || (str[item->data.alpha.edit_pos] == '\0')) { + if ((keymask & MENUTOKEN_LEFT) || (str[item->data.alpha.edit_pos] == '\0')) { /* The user completed his input */ /* It's not too short ? */ @@ -1321,6 +1324,7 @@ MenuResult menuitem_process_input_alpha(MenuItem *item, MenuToken token, const c if (pos >= display_props->width - 2) item->data.alpha.edit_offs++; } + default: return MENURESULT_NONE; } } @@ -1328,7 +1332,7 @@ MenuResult menuitem_process_input_alpha(MenuItem *item, MenuToken token, const c } -MenuResult menuitem_process_input_ip(MenuItem *item, MenuToken token, const char *key, bool extended) +MenuResult menuitem_process_input_ip(MenuItem *item, MenuToken token, const char *key, unsigned int keymask) { /* To make life easy... */ char *str = item->data.ip.edit_str; @@ -1355,7 +1359,7 @@ MenuResult menuitem_process_input_ip(MenuItem *item, MenuToken token, const char } return MENURESULT_NONE; case MENUTOKEN_ENTER: - if ((extended) || (pos >= item->data.ip.maxlength - 1)) { + if ((keymask & MENUTOKEN_LEFT) || (pos >= item->data.ip.maxlength - 1)) { // remove the leading spaces/zeros in each octet-representing string char tmp[40]; // 40 = max. length of IPv4 & IPv6 addresses incl. '\0' char *start = tmp; @@ -1452,6 +1456,7 @@ MenuResult menuitem_process_input_ip(MenuItem *item, MenuToken token, const char item->data.ip.edit_offs++; } } + default: return MENURESULT_NONE; } return MENURESULT_ERROR; diff --git a/server/menuitem.h b/server/menuitem.h index 458418b..fff4345 100644 --- a/server/menuitem.h +++ b/server/menuitem.h @@ -312,7 +312,7 @@ void menuitem_update_screen(MenuItem *item, Screen *s); /** Does something with the given input. * key is only used if token is MENUTOKEN_OTHER. */ -MenuResult menuitem_process_input(MenuItem *item, MenuToken token, const char *key, bool extended); +MenuResult menuitem_process_input(MenuItem *item, MenuToken token, const char *key, unsigned int keymask); /** returns the Client that owns the MenuItem. item must not be null */ Client *menuitem_get_client(MenuItem *item); diff --git a/server/menuscreens.c b/server/menuscreens.c index 32c6505..02cf428 100644 --- a/server/menuscreens.c +++ b/server/menuscreens.c @@ -48,7 +48,7 @@ char *up_key; char *down_key; char *left_key; char *right_key; -static int keymask; /* mask of defined menu keys */ +static unsigned int keymask; /* mask of defined menu keys */ Screen *menuscreen = NULL; MenuItem *active_menuitem = NULL; @@ -425,9 +425,7 @@ void menuscreen_key_handler(const char *key) return; } - res = menuitem_process_input(active_menuitem, token, key, - (keymask & (MENUTOKEN_LEFT | MENUTOKEN_RIGHT)) ? 1 : 0); - + res = menuitem_process_input(active_menuitem, token, key, keymask); switch (res) { case MENURESULT_ERROR: report(RPT_ERR, "%s: Error from menuitem_process_input", __FUNCTION__);