summaryrefslogtreecommitdiffstats
path: root/src/include/ipxe/editbox.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/include/ipxe/editbox.h')
-rw-r--r--src/include/ipxe/editbox.h51
1 files changed, 20 insertions, 31 deletions
diff --git a/src/include/ipxe/editbox.h b/src/include/ipxe/editbox.h
index 2c70e0b6b..85d5919c9 100644
--- a/src/include/ipxe/editbox.h
+++ b/src/include/ipxe/editbox.h
@@ -8,54 +8,43 @@
*/
FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
+FILE_SECBOOT ( PERMITTED );
#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, size_t len,
- 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 */