From 67ee41ad6d3cbd137e390e61a17eac8eaddc30fa Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Tue, 17 Feb 2009 11:55:55 +0000 Subject: [editbox] Allow for password widgets that do not display their contents --- src/hci/mucurses/widgets/editbox.c | 11 ++++++++--- src/hci/tui/settings_ui.c | 2 +- src/include/gpxe/editbox.h | 12 ++++++++++-- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/src/hci/mucurses/widgets/editbox.c b/src/hci/mucurses/widgets/editbox.c index 5c066fda..a52089ce 100644 --- a/src/hci/mucurses/widgets/editbox.c +++ b/src/hci/mucurses/widgets/editbox.c @@ -38,11 +38,11 @@ * @v row Row * @v col Starting column * @v width Width - * + * @v flags Flags */ void init_editbox ( struct edit_box *box, char *buf, size_t len, WINDOW *win, unsigned int row, unsigned int col, - unsigned int width ) { + unsigned int width, unsigned int flags ) { memset ( box, 0, sizeof ( *box ) ); box->string.buf = buf; box->string.len = len; @@ -51,6 +51,7 @@ void init_editbox ( struct edit_box *box, char *buf, size_t len, box->row = row; box->col = col; box->width = width; + box->flags = flags; } /** @@ -86,7 +87,11 @@ void draw_editbox ( struct edit_box *box ) { len = ( strlen ( box->string.buf ) - first ); if ( len > width ) len = width; - memcpy ( buf, ( box->string.buf + first ), len ); + if ( box->flags & EDITBOX_STARS ) { + memset ( buf, '*', len ); + } else { + memcpy ( buf, ( box->string.buf + first ), len ); + } /* Print box content and move cursor */ if ( ! box->win ) diff --git a/src/hci/tui/settings_ui.c b/src/hci/tui/settings_ui.c index 0907bfd3..4ab38270 100644 --- a/src/hci/tui/settings_ui.c +++ b/src/hci/tui/settings_ui.c @@ -123,7 +123,7 @@ static void load_setting ( struct setting_widget *widget ) { init_editbox ( &widget->editbox, widget->value, sizeof ( widget->value ), NULL, widget->row, ( widget->col + offsetof ( struct setting_row, value )), - sizeof ( ( ( struct setting_row * ) NULL )->value ) ); + sizeof ( ( ( struct setting_row * ) NULL )->value ), 0); } /** diff --git a/src/include/gpxe/editbox.h b/src/include/gpxe/editbox.h index 47b07c25..007b042f 100644 --- a/src/include/gpxe/editbox.h +++ b/src/include/gpxe/editbox.h @@ -24,14 +24,22 @@ struct edit_box { unsigned int width; /** First displayed character */ unsigned int first; + /** Flags */ + unsigned int flags; +}; + +/** Editable text box widget flags */ +enum edit_box_flags { + /** Show stars instead of contents (for password widgets) */ + EDITBOX_STARS = 0x0001, }; extern void init_editbox ( struct edit_box *box, char *buf, size_t len, WINDOW *win, unsigned int row, unsigned int col, - unsigned int width ) + unsigned int width, unsigned int flags ) __attribute__ (( nonnull (1, 2) )); extern void draw_editbox ( struct edit_box *box ) __nonnull; -static inline int __pure edit_editbox ( struct edit_box *box, int key ) __nonnull; +static inline int edit_editbox ( struct edit_box *box, int key ) __nonnull; /** * Edit text box widget -- cgit v1.2.3-55-g7522