From: Michael Brown Date: Mon, 15 Jul 2013 09:59:13 +0000 (+0200) Subject: [settings] Add support for navigation keys in "config" user interface X-Git-Tag: v1.20.1~1473 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=75bd5b54a8673ea4843903d0e7c743aa5b440d38;p=thirdparty%2Fipxe.git [settings] Add support for navigation keys in "config" user interface Add support for page up, page down, home and end keys, matching the navigation logic used in the menu user interface. Originally-implemented-by: Marin Hannache Signed-off-by: Michael Brown --- diff --git a/src/hci/tui/settings_ui.c b/src/hci/tui/settings_ui.c index eb82ae54c..f7efbbb4d 100644 --- a/src/hci/tui/settings_ui.c +++ b/src/hci/tui/settings_ui.c @@ -508,13 +508,25 @@ static int main_loop ( struct settings *settings ) { key = getkey ( 0 ); move = 0; switch ( key ) { + case KEY_UP: + move = -1; + break; case KEY_DOWN: - if ( widget.current < ( widget.num_rows - 1 ) ) - move = +1; + move = +1; break; - case KEY_UP: - if ( widget.current > 0 ) - move = -1; + case KEY_PPAGE: + move = ( widget.first_visible - + widget.current - 1 ); + break; + case KEY_NPAGE: + move = ( widget.first_visible - widget.current + + SETTINGS_LIST_ROWS ); + break; + case KEY_HOME: + move = -widget.num_rows; + break; + case KEY_END: + move = +widget.num_rows; break; case CTRL_D: if ( ! widget.row.setting ) @@ -545,10 +557,16 @@ static int main_loop ( struct settings *settings ) { } if ( move ) { next = ( widget.current + move ); - draw_setting_row ( &widget ); - redraw = 1; - reveal_setting_row ( &widget, next ); - select_setting_row ( &widget, next ); + if ( ( int ) next < 0 ) + next = 0; + if ( next >= widget.num_rows ) + next = ( widget.num_rows - 1 ); + if ( next != widget.current ) { + draw_setting_row ( &widget ); + redraw = 1; + reveal_setting_row ( &widget, next ); + select_setting_row ( &widget, next ); + } } } }