aboutsummaryrefslogtreecommitdiffstats
path: root/src/include/ipxe/editbox.h
diff options
context:
space:
mode:
authorMichael Brown <mcb30@ipxe.org>2024-05-15 14:10:33 +0100
committerMichael Brown <mcb30@ipxe.org>2024-05-15 14:22:01 +0100
commitdc118c53696af6a0b1a8ee78fc9a4d28a217fb21 (patch)
treea651a3f7fdf3889bd21f74c9fcd2aa8ad71431c6 /src/include/ipxe/editbox.h
parentd7e58c5a812988c341ec4ad19f79faf067388d58 (diff)
downloadipxe-dc118c53696af6a0b1a8ee78fc9a4d28a217fb21.tar.gz
[hci] Provide a general concept of a text widget set
Create a generic abstraction of a text widget, refactor the existing editable text box widget to use this abstraction, add an implementation of a non-editable text label widget, and generalise the login user interface to use this generic widget abstraction. Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/include/ipxe/editbox.h')
-rw-r--r--src/include/ipxe/editbox.h50
1 files changed, 19 insertions, 31 deletions
diff --git a/src/include/ipxe/editbox.h b/src/include/ipxe/editbox.h
index c14bbdc5b..1f62485fe 100644
--- a/src/include/ipxe/editbox.h
+++ b/src/include/ipxe/editbox.h
@@ -11,51 +11,39 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
#include <curses.h>
#include <ipxe/editstring.h>
+#include <ipxe/widget.h>
/** An editable text box widget */
struct edit_box {
+ /** Text widget */
+ struct widget widget;
/** Editable string */
struct edit_string string;
- /** Containing window */
- WINDOW *win;
- /** Row */
- unsigned int row;
- /** Starting column */
- unsigned int col;
- /** Width */
- 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,
- WINDOW *win, unsigned int row, unsigned int col,
- unsigned int width, unsigned int flags )
- __attribute__ (( nonnull (1, 2) ));
-extern void draw_editbox ( struct edit_box *box ) __nonnull;
-static inline int edit_editbox ( struct edit_box *box, int key ) __nonnull;
+extern struct widget_operations editbox_operations;
/**
- * Edit text box widget
+ * Initialise text box widget
*
* @v box Editable text box widget
- * @v key Key pressed by user
- * @ret key Key returned to application, or zero
- *
- * You must call draw_editbox() to update the display after calling
- * edit_editbox().
- *
+ * @v row Row
+ * @v col Starting column
+ * @v width Width
+ * @v flags Flags
+ * @v buf Dynamically allocated string buffer
*/
-static inline int edit_editbox ( struct edit_box *box, int key ) {
- return edit_string ( &box->string, key );
+static inline __attribute__ (( always_inline )) void
+init_editbox ( struct edit_box *box, unsigned int row, unsigned int col,
+ unsigned int width, unsigned int flags, char **buf ) {
+
+ init_widget ( &box->widget, &editbox_operations, row, col,
+ width, ( flags | WIDGET_EDITABLE ) );
+ init_editstring ( &box->string, buf );
+ if ( *buf )
+ box->string.cursor = strlen ( *buf );
}
#endif /* _IPXE_EDITBOX_H */