replace "extended" by "keymask" for finer grained checks

This commit is contained in:
marschap
2007-10-05 08:21:10 +00:00
parent 254bd128ef
commit 16f1ef6e84
5 changed files with 30 additions and 26 deletions
+4 -3
View File
@@ -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; MenuItem *subitem;
debug(RPT_DEBUG, "%s(menu=[%s], token=%d, key=\"%s\")", __FUNCTION__, 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; return MENURESULT_NONE;
case MENUTOKEN_LEFT: case MENUTOKEN_LEFT:
if (!extended) if (!(keymask & MENUTOKEN_LEFT))
return MENURESULT_NONE; return MENURESULT_NONE;
subitem = menu_get_subitem(menu, menu->data.menu.selector_pos); 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; return MENURESULT_NONE;
case MENUTOKEN_RIGHT: case MENUTOKEN_RIGHT:
if (!extended) if (!(keymask & MENUTOKEN_RIGHT))
return MENURESULT_NONE; return MENURESULT_NONE;
subitem = menu_get_subitem(menu, menu->data.menu.selector_pos); 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; return MENURESULT_NONE;
case MENUTOKEN_OTHER: case MENUTOKEN_OTHER:
/* TODO: move to the selected number and enter it */ /* TODO: move to the selected number and enter it */
default:
return MENURESULT_NONE; return MENURESULT_NONE;
} }
return MENURESULT_ERROR; return MENURESULT_ERROR;
+1 -1
View File
@@ -123,7 +123,7 @@ MenuItem *menu_get_item_for_successor_check(Menu *menu);
* key is only used if token is MENUTOKEN_OTHER. * key is only used if token is MENUTOKEN_OTHER.
* DO NOT CALL THIS FUNCTION, CALL menuitem_process_input INSTEAD ! * 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. */ /** positions current item pointer on subitem subitem_id. */
void menu_select_subitem(Menu *menu, char *subitem_id); void menu_select_subitem(Menu *menu, char *subitem_id);
+22 -17
View File
@@ -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_alpha(MenuItem *item, Screen *s);
void menuitem_update_screen_ip(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_slider(MenuItem *item, MenuToken token, const char *key, unsigned int keymask);
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);
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);
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);
/* information about string representation of IP addresses */ /* 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 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, menu_process_input,
NULL, NULL,
@@ -954,9 +954,9 @@ void menuitem_update_screen_ip(MenuItem *item, Screen *s)
/******** MENU SCREEN INPUT HANDLING FUNCTIONS ********/ /******** 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__, debug(RPT_DEBUG, "%s(item=[%s], token=%d, key=\"%s\")", __FUNCTION__,
((item != NULL) ? item->id : "(null)"), token, key); ((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 */ /* Call type specific screen building function */
process_input = process_input_table [item->type]; process_input = process_input_table [item->type];
if (process_input) { if (process_input) {
return process_input(item, token, key, extended); return process_input(item, token, key, keymask);
} else { } else {
report(RPT_ERR, "%s: given menuitem cannot be active", __FUNCTION__); report(RPT_ERR, "%s: given menuitem cannot be active", __FUNCTION__);
return MENURESULT_ERROR; 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__, debug(RPT_DEBUG, "%s(item=[%s], token=%d, key=\"%s\")", __FUNCTION__,
((item != NULL) ? item->id : "(null)"), token, key); ((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. * because of min(maxvalue, value + stepsize) below.
* Wrapping then happens on the next key press. * 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; item->data.slider.value = item->data.slider.minvalue;
else else
item->data.slider.value = min(item->data.slider.maxvalue, 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; return MENURESULT_NONE;
case MENUTOKEN_DOWN: case MENUTOKEN_DOWN:
case MENUTOKEN_LEFT: 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; item->data.slider.value = item->data.slider.maxvalue;
else else
item->data.slider.value = max(item->data.slider.minvalue, 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; 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 buf1[MAX_NUMERIC_LEN];
char buf2[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; return MENURESULT_NONE;
case MENUTOKEN_ENTER: case MENUTOKEN_ENTER:
if ((extended) || (str[pos] == '\0')) { if ((keymask & MENUTOKEN_LEFT) || (str[pos] == '\0')) {
int value; int value;
/* The user completed his input */ /* 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) if (pos >= display_props->width - 2)
item->data.numeric.edit_offs++; item->data.numeric.edit_offs++;
} }
default:
return MENURESULT_NONE; return MENURESULT_NONE;
} }
} }
return MENURESULT_ERROR; 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; char *p;
static char *chars = NULL; static char *chars = NULL;
@@ -1218,7 +1221,7 @@ MenuResult menuitem_process_input_alpha(MenuItem *item, MenuToken token, const c
} }
return MENURESULT_NONE; return MENURESULT_NONE;
case MENUTOKEN_ENTER: 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 */ /* The user completed his input */
/* It's not too short ? */ /* 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) if (pos >= display_props->width - 2)
item->data.alpha.edit_offs++; item->data.alpha.edit_offs++;
} }
default:
return MENURESULT_NONE; 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... */ /* To make life easy... */
char *str = item->data.ip.edit_str; 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; return MENURESULT_NONE;
case MENUTOKEN_ENTER: 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 // remove the leading spaces/zeros in each octet-representing string
char tmp[40]; // 40 = max. length of IPv4 & IPv6 addresses incl. '\0' char tmp[40]; // 40 = max. length of IPv4 & IPv6 addresses incl. '\0'
char *start = tmp; char *start = tmp;
@@ -1452,6 +1456,7 @@ MenuResult menuitem_process_input_ip(MenuItem *item, MenuToken token, const char
item->data.ip.edit_offs++; item->data.ip.edit_offs++;
} }
} }
default:
return MENURESULT_NONE; return MENURESULT_NONE;
} }
return MENURESULT_ERROR; return MENURESULT_ERROR;
+1 -1
View File
@@ -312,7 +312,7 @@ void menuitem_update_screen(MenuItem *item, Screen *s);
/** Does something with the given input. /** Does something with the given input.
* key is only used if token is MENUTOKEN_OTHER. * 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 */ /** returns the Client that owns the MenuItem. item must not be null */
Client *menuitem_get_client(MenuItem *item); Client *menuitem_get_client(MenuItem *item);
+2 -4
View File
@@ -48,7 +48,7 @@ char *up_key;
char *down_key; char *down_key;
char *left_key; char *left_key;
char *right_key; char *right_key;
static int keymask; /* mask of defined menu keys */ static unsigned int keymask; /* mask of defined menu keys */
Screen *menuscreen = NULL; Screen *menuscreen = NULL;
MenuItem *active_menuitem = NULL; MenuItem *active_menuitem = NULL;
@@ -425,9 +425,7 @@ void menuscreen_key_handler(const char *key)
return; return;
} }
res = menuitem_process_input(active_menuitem, token, key, res = menuitem_process_input(active_menuitem, token, key, keymask);
(keymask & (MENUTOKEN_LEFT | MENUTOKEN_RIGHT)) ? 1 : 0);
switch (res) { switch (res) {
case MENURESULT_ERROR: case MENURESULT_ERROR:
report(RPT_ERR, "%s: Error from menuitem_process_input", __FUNCTION__); report(RPT_ERR, "%s: Error from menuitem_process_input", __FUNCTION__);