From 98e5a1579e7d34fe3803240750a1c48efcd9cb15 Mon Sep 17 00:00:00 2001 From: Sam Ravnborg Date: Mon, 24 Jul 2006 21:40:46 +0200 Subject: kconfig/lxdialog: refactor color support Clean up and refactor color support. All color support are now in util.c including color definitions. In the process introduced a global variable named 'dlg' which is used all over to set color - thats the reason why all files are changed. Signed-off-by: Sam Ravnborg --- scripts/kconfig/lxdialog/inputbox.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) (limited to 'scripts/kconfig/lxdialog/inputbox.c') diff --git a/scripts/kconfig/lxdialog/inputbox.c b/scripts/kconfig/lxdialog/inputbox.c index 779503726b0a..f75b51f8e636 100644 --- a/scripts/kconfig/lxdialog/inputbox.c +++ b/scripts/kconfig/lxdialog/inputbox.c @@ -58,17 +58,18 @@ int dialog_inputbox(const char *title, const char *prompt, int height, int width dialog = newwin(height, width, y, x); keypad(dialog, TRUE); - draw_box(dialog, 0, 0, height, width, dialog_attr, border_attr); - wattrset(dialog, border_attr); + draw_box(dialog, 0, 0, height, width, + dlg.dialog.atr, dlg.border.atr); + wattrset(dialog, dlg.border.atr); mvwaddch(dialog, height - 3, 0, ACS_LTEE); for (i = 0; i < width - 2; i++) waddch(dialog, ACS_HLINE); - wattrset(dialog, dialog_attr); + wattrset(dialog, dlg.dialog.atr); waddch(dialog, ACS_RTEE); print_title(dialog, title, width); - wattrset(dialog, dialog_attr); + wattrset(dialog, dlg.dialog.atr); print_autowrap(dialog, prompt, width - 2, 1, 3); /* Draw the input field box */ @@ -76,13 +77,14 @@ int dialog_inputbox(const char *title, const char *prompt, int height, int width getyx(dialog, y, x); box_y = y + 2; box_x = (width - box_width) / 2; - draw_box(dialog, y + 1, box_x - 1, 3, box_width + 2, border_attr, dialog_attr); + draw_box(dialog, y + 1, box_x - 1, 3, box_width + 2, + dlg.border.atr, dlg.dialog.atr); print_buttons(dialog, height, width, 0); /* Set up the initial value */ wmove(dialog, box_y, box_x); - wattrset(dialog, inputbox_attr); + wattrset(dialog, dlg.inputbox.atr); if (!init) instr[0] = '\0'; @@ -120,7 +122,7 @@ int dialog_inputbox(const char *title, const char *prompt, int height, int width case KEY_BACKSPACE: case 127: if (input_x || scroll) { - wattrset(dialog, inputbox_attr); + wattrset(dialog, dlg.inputbox.atr); if (!input_x) { scroll = scroll < box_width - 1 ? 0 : scroll - (box_width - 1); wmove(dialog, box_y, box_x); @@ -140,7 +142,7 @@ int dialog_inputbox(const char *title, const char *prompt, int height, int width default: if (key < 0x100 && isprint(key)) { if (scroll + input_x < MAX_LEN) { - wattrset(dialog, inputbox_attr); + wattrset(dialog, dlg.inputbox.atr); instr[scroll + input_x] = key; instr[scroll + input_x + 1] = '\0'; if (input_x == box_width - 1) { -- cgit v1.2.3 From 2982de6993e6d9944f2215d7cb9b558b465a0c99 Mon Sep 17 00:00:00 2001 From: Sam Ravnborg Date: Thu, 27 Jul 2006 22:10:27 +0200 Subject: kconfig/menuconfig: lxdialog is now built-in lxdialog was previously called as an external program causing screen to flicker when used. With this patch lxdialog is now built-in. It is loosly based om previous work by: Petr Baudis Following is a list of changes: o Moved build of dialog routings to kconfig Makefile o menubox + checklist uses a new item list to hold all menu items o in util.c implmented helper function to deal with item list o menubox now uses parameters to save scroll state (avoids temp file) o textbox now get text to be displayed as parameter and not a file o make sure to properly delete subwin's before main windows o killed unused files: lxdialog.c msgbox.c o modified return value for ESC to match direct calling o in a few places the code has been adjusted to 80 char wide o in textbox a small refactoring was made to make code remotely readable o in mconf removed all unused stuff (functions/variables) Following is a list of know short comings: a) pressing ESC twice will be interpreted as two ESC presses b) resize does not work. menuconfig needs to be restarted to be adjusted Signed-off-by: Sam Ravnborg --- scripts/kconfig/lxdialog/inputbox.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'scripts/kconfig/lxdialog/inputbox.c') diff --git a/scripts/kconfig/lxdialog/inputbox.c b/scripts/kconfig/lxdialog/inputbox.c index f75b51f8e636..9c53098d6b74 100644 --- a/scripts/kconfig/lxdialog/inputbox.c +++ b/scripts/kconfig/lxdialog/inputbox.c @@ -222,5 +222,5 @@ int dialog_inputbox(const char *title, const char *prompt, int height, int width } delwin(dialog); - return -1; /* ESC pressed */ + return 255; /* ESC pressed */ } -- cgit v1.2.3 From f3cbcdc955d0d2c8b4c52d6b73fc536b01b68c64 Mon Sep 17 00:00:00 2001 From: Sam Ravnborg Date: Fri, 28 Jul 2006 23:57:48 +0200 Subject: kconfig/lxdialog: let behave as expected is used to step one back in the dialogs. When lxdialog became built-in pressing once would cause one step back and pressing would cause two steps back. This patch - based on concept from Roman Zippel - makes one a noop and pressing will cause one step backward. In addition the final yes/no dialog now has the option to go back to the the kernel configuration. So if you get too far out you can now go back to configuring the kernel without saving and starting all over again. Signed-off-by: Sam Ravnborg --- scripts/kconfig/lxdialog/inputbox.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'scripts/kconfig/lxdialog/inputbox.c') diff --git a/scripts/kconfig/lxdialog/inputbox.c b/scripts/kconfig/lxdialog/inputbox.c index 9c53098d6b74..edb7975dbaa2 100644 --- a/scripts/kconfig/lxdialog/inputbox.c +++ b/scripts/kconfig/lxdialog/inputbox.c @@ -106,7 +106,7 @@ int dialog_inputbox(const char *title, const char *prompt, int height, int width wrefresh(dialog); - while (key != ESC) { + while (key != KEY_ESC) { key = wgetch(dialog); if (button == -1) { /* Input box selected */ @@ -215,12 +215,14 @@ int dialog_inputbox(const char *title, const char *prompt, int height, int width return (button == -1 ? 0 : button); case 'X': case 'x': - key = ESC; - case ESC: + key = KEY_ESC; + break; + case KEY_ESC: + key = on_key_esc(dialog); break; } } delwin(dialog); - return 255; /* ESC pressed */ + return KEY_ESC; /* ESC pressed */ } -- cgit v1.2.3 From c8dc68ad0fbd934e78e913b8a8d7b45945db4930 Mon Sep 17 00:00:00 2001 From: Sam Ravnborg Date: Sat, 29 Jul 2006 22:48:57 +0200 Subject: kconfig/lxdialog: support resize In all dialogs now properly catch KEY_RESIZE and take proper action. In mconf try to behave sensibly when a dialog routine returns -ERRDISPLAYTOOSMALL. The original check for a screnn size of 80x19 is kept for now. It may make sense to remove it later, but thats anyway what much text is adjusted for. Signed-off-by: Sam Ravnborg --- scripts/kconfig/lxdialog/inputbox.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) (limited to 'scripts/kconfig/lxdialog/inputbox.c') diff --git a/scripts/kconfig/lxdialog/inputbox.c b/scripts/kconfig/lxdialog/inputbox.c index edb7975dbaa2..05e72066b359 100644 --- a/scripts/kconfig/lxdialog/inputbox.c +++ b/scripts/kconfig/lxdialog/inputbox.c @@ -49,6 +49,17 @@ int dialog_inputbox(const char *title, const char *prompt, int height, int width char *instr = dialog_input_result; WINDOW *dialog; + if (!init) + instr[0] = '\0'; + else + strcpy(instr, init); + +do_resize: + if (getmaxy(stdscr) <= (height - 2)) + return -ERRDISPLAYTOOSMALL; + if (getmaxx(stdscr) <= (width - 2)) + return -ERRDISPLAYTOOSMALL; + /* center dialog box on screen */ x = (COLS - width) / 2; y = (LINES - height) / 2; @@ -86,11 +97,6 @@ int dialog_inputbox(const char *title, const char *prompt, int height, int width wmove(dialog, box_y, box_x); wattrset(dialog, dlg.inputbox.atr); - if (!init) - instr[0] = '\0'; - else - strcpy(instr, init); - input_x = strlen(instr); if (input_x >= box_width) { @@ -220,6 +226,10 @@ int dialog_inputbox(const char *title, const char *prompt, int height, int width case KEY_ESC: key = on_key_esc(dialog); break; + case KEY_RESIZE: + delwin(dialog); + on_key_resize(); + goto do_resize; } } -- cgit v1.2.3