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;
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;
+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.
* 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);
+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_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;
+1 -1
View File
@@ -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);
+2 -4
View File
@@ -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__);