From 5171b1c54fc57b6f1963e2482cfc07587296100d Mon Sep 17 00:00:00 2001 From: Jeremy Kerr Date: Tue, 15 Apr 2014 11:08:39 +0800 Subject: [PATCH] ui/ncurses: Use a fixed-sized for small, known-length fields Fields without O_STATIC can "scroll" horizontally, and we may miss a left-hand section of text from the current display. This can mean that the user can't leave a validated field with no indication why, if the off-to-the-left data is not a valid entry. This change adds a widgetset function to mark a field as fixed-size, so we don't have this scrolling behaviour. This means that the entire field contents will always be visible, and any validation errors can be seen. Signed-off-by: Jeremy Kerr --- ui/ncurses/nc-config.c | 6 +++++- ui/ncurses/nc-widgets.c | 5 +++++ ui/ncurses/nc-widgets.h | 1 + 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/ui/ncurses/nc-config.c b/ui/ncurses/nc-config.c index f4fa073..3107c72 100644 --- a/ui/ncurses/nc-config.c +++ b/ui/ncurses/nc-config.c @@ -503,6 +503,7 @@ static void config_screen_setup_widgets(struct config_screen *screen, screen->widgets.timeout_f = widget_new_textbox(set, 0, 0, 5, str); screen->widgets.timeout_help_l = widget_new_label(set, 0, 0, "seconds"); + widget_textbox_set_fixed_size(screen->widgets.timeout_f); widget_textbox_set_validator_integer(screen->widgets.timeout_f, 0, 999); screen->widgets.network_l = widget_new_label(set, 0, 0, "Network"); @@ -561,10 +562,12 @@ static void config_screen_setup_widgets(struct config_screen *screen, screen->widgets.ip_addr_l = widget_new_label(set, 0, 0, "IP/mask:"); screen->widgets.ip_addr_f = widget_new_textbox(set, 0, 0, 16, ip); screen->widgets.ip_mask_l = widget_new_label(set, 0, 0, "/"); - screen->widgets.ip_mask_f = widget_new_textbox(set, 0, 0, 4, mask); + screen->widgets.ip_mask_f = widget_new_textbox(set, 0, 0, 3, mask); screen->widgets.ip_addr_mask_help_l = widget_new_label(set, 0, 0, "(eg. 192.168.0.10 / 24)"); + widget_textbox_set_fixed_size(screen->widgets.ip_addr_f); + widget_textbox_set_fixed_size(screen->widgets.ip_mask_f); widget_textbox_set_validator_ipv4(screen->widgets.ip_addr_f); widget_textbox_set_validator_integer(screen->widgets.ip_mask_f, 1, 31); @@ -573,6 +576,7 @@ static void config_screen_setup_widgets(struct config_screen *screen, screen->widgets.gateway_help_l = widget_new_label(set, 0, 0, "(eg. 192.168.0.1)"); + widget_textbox_set_fixed_size(screen->widgets.gateway_f); widget_textbox_set_validator_ipv4(screen->widgets.gateway_f); str = talloc_strdup(screen, ""); diff --git a/ui/ncurses/nc-widgets.c b/ui/ncurses/nc-widgets.c index 2829040..bd78927 100644 --- a/ui/ncurses/nc-widgets.c +++ b/ui/ncurses/nc-widgets.c @@ -353,6 +353,11 @@ struct nc_widget_textbox *widget_new_textbox(struct nc_widgetset *set, return textbox; } +void widget_textbox_set_fixed_size(struct nc_widget_textbox *textbox) +{ + field_opts_on(textbox->widget.field, O_STATIC); +} + void widget_textbox_set_validator_integer(struct nc_widget_textbox *textbox, long min, long max) { diff --git a/ui/ncurses/nc-widgets.h b/ui/ncurses/nc-widgets.h index 32b6bae..09c3b1f 100644 --- a/ui/ncurses/nc-widgets.h +++ b/ui/ncurses/nc-widgets.h @@ -35,6 +35,7 @@ struct nc_widget_button *widget_new_button(struct nc_widgetset *set, int y, int x, int size, const char *str, void (*click)(void *), void *arg); +void widget_textbox_set_fixed_size(struct nc_widget_textbox *textbox); void widget_textbox_set_validator_integer(struct nc_widget_textbox *textbox, long min, long max); void widget_textbox_set_validator_ipv4(struct nc_widget_textbox *textbox); -- 2.39.2