]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[settings] Add support for navigation keys in "config" user interface
authorMichael Brown <mcb30@ipxe.org>
Mon, 15 Jul 2013 09:59:13 +0000 (11:59 +0200)
committerMichael Brown <mcb30@ipxe.org>
Mon, 15 Jul 2013 10:01:08 +0000 (12:01 +0200)
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 <git@mareo.fr>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/hci/tui/settings_ui.c

index eb82ae54cf6f62618661bd9dba2b12bc2868e708..f7efbbb4d7ac592175d016d839d412e9a39fb5ef 100644 (file)
@@ -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 );
+                               }
                        }
                }
        }