[3/7] kconfig: Add print_title helper in lxdialog

From: Sam Ravnborg
Date: Mon Nov 21 2005 - 17:39:01 EST


kconfig: Add print_title helper in lxdialog

Simplify check for long title and use a helper function in util.c

Signed-off-by: Sam Ravnborg <sam@xxxxxxxxxxxx>

diff --git a/scripts/lxdialog/checklist.c b/scripts/lxdialog/checklist.c
index ae40a2b..3fb681f 100644
--- a/scripts/lxdialog/checklist.c
+++ b/scripts/lxdialog/checklist.c
@@ -156,24 +156,11 @@ int dialog_checklist(const char *title,
for (i = 0; i < width - 2; i++)
waddch(dialog, ACS_HLINE);
wattrset(dialog, dialog_attr);
waddch(dialog, ACS_RTEE);

- if (title != NULL && strlen(title) >= width - 2) {
- /* truncate long title -- mec */
- char *title2 = malloc(width - 2 + 1);
- memcpy(title2, title, width - 2);
- title2[width - 2] = '\0';
- title = title2;
- }
-
- if (title != NULL) {
- wattrset(dialog, title_attr);
- mvwaddch(dialog, 0, (width - strlen(title)) / 2 - 1, ' ');
- waddstr(dialog, (char *)title);
- waddch(dialog, ' ');
- }
+ print_title(dialog, title, width);

wattrset(dialog, dialog_attr);
print_autowrap(dialog, prompt, width - 2, 1, 3);

list_width = width - 6;
diff --git a/scripts/lxdialog/dialog.h b/scripts/lxdialog/dialog.h
index 3cf3d35..f882204 100644
--- a/scripts/lxdialog/dialog.h
+++ b/scripts/lxdialog/dialog.h
@@ -143,10 +143,11 @@ void end_dialog(void);
void attr_clear(WINDOW * win, int height, int width, chtype attr);
void dialog_clear(void);
void color_setup(void);
void print_autowrap(WINDOW * win, const char *prompt, int width, int y, int x);
void print_button(WINDOW * win, const char *label, int y, int x, int selected);
+void print_title(WINDOW *dialog, const char *title, int width);
void draw_box(WINDOW * win, int y, int x, int height, int width, chtype box,
chtype border);
void draw_shadow(WINDOW * win, int y, int x, int height, int width);

int first_alpha(const char *string, const char *exempt);
diff --git a/scripts/lxdialog/inputbox.c b/scripts/lxdialog/inputbox.c
index bc135c7..7795037 100644
--- a/scripts/lxdialog/inputbox.c
+++ b/scripts/lxdialog/inputbox.c
@@ -64,24 +64,11 @@ int dialog_inputbox(const char *title, c
for (i = 0; i < width - 2; i++)
waddch(dialog, ACS_HLINE);
wattrset(dialog, dialog_attr);
waddch(dialog, ACS_RTEE);

- if (title != NULL && strlen(title) >= width - 2) {
- /* truncate long title -- mec */
- char *title2 = malloc(width - 2 + 1);
- memcpy(title2, title, width - 2);
- title2[width - 2] = '\0';
- title = title2;
- }
-
- if (title != NULL) {
- wattrset(dialog, title_attr);
- mvwaddch(dialog, 0, (width - strlen(title)) / 2 - 1, ' ');
- waddstr(dialog, (char *)title);
- waddch(dialog, ' ');
- }
+ print_title(dialog, title, width);

wattrset(dialog, dialog_attr);
print_autowrap(dialog, prompt, width - 2, 1, 3);

/* Draw the input field box */
diff --git a/scripts/lxdialog/menubox.c b/scripts/lxdialog/menubox.c
index ff3a617..ebfe6a3 100644
--- a/scripts/lxdialog/menubox.c
+++ b/scripts/lxdialog/menubox.c
@@ -187,24 +187,11 @@ int dialog_menu(const char *title, const
waddch(dialog, ACS_HLINE);
wattrset(dialog, dialog_attr);
wbkgdset(dialog, dialog_attr & A_COLOR);
waddch(dialog, ACS_RTEE);

- if (title != NULL && strlen(title) >= width - 2) {
- /* truncate long title -- mec */
- char *title2 = malloc(width - 2 + 1);
- memcpy(title2, title, width - 2);
- title2[width - 2] = '\0';
- title = title2;
- }
-
- if (title != NULL) {
- wattrset(dialog, title_attr);
- mvwaddch(dialog, 0, (width - strlen(title)) / 2 - 1, ' ');
- waddstr(dialog, (char *)title);
- waddch(dialog, ' ');
- }
+ print_title(dialog, title, width);

wattrset(dialog, dialog_attr);
print_autowrap(dialog, prompt, width - 2, 1, 3);

menu_width = width - 6;
diff --git a/scripts/lxdialog/msgbox.c b/scripts/lxdialog/msgbox.c
index b394057..7323f54 100644
--- a/scripts/lxdialog/msgbox.c
+++ b/scripts/lxdialog/msgbox.c
@@ -40,24 +40,12 @@ int dialog_msgbox(const char *title, con
dialog = newwin(height, width, y, x);
keypad(dialog, TRUE);

draw_box(dialog, 0, 0, height, width, dialog_attr, border_attr);

- if (title != NULL && strlen(title) >= width - 2) {
- /* truncate long title -- mec */
- char *title2 = malloc(width - 2 + 1);
- memcpy(title2, title, width - 2);
- title2[width - 2] = '\0';
- title = title2;
- }
+ print_title(dialog, title, width);

- if (title != NULL) {
- wattrset(dialog, title_attr);
- mvwaddch(dialog, 0, (width - strlen(title)) / 2 - 1, ' ');
- waddstr(dialog, (char *)title);
- waddch(dialog, ' ');
- }
wattrset(dialog, dialog_attr);
print_autowrap(dialog, prompt, width - 2, 1, 2);

if (pause) {
wattrset(dialog, border_attr);
diff --git a/scripts/lxdialog/textbox.c b/scripts/lxdialog/textbox.c
index fa8d92e..77848bb 100644
--- a/scripts/lxdialog/textbox.c
+++ b/scripts/lxdialog/textbox.c
@@ -101,24 +101,12 @@ int dialog_textbox(const char *title, co
waddch(dialog, ACS_HLINE);
wattrset(dialog, dialog_attr);
wbkgdset(dialog, dialog_attr & A_COLOR);
waddch(dialog, ACS_RTEE);

- if (title != NULL && strlen(title) >= width - 2) {
- /* truncate long title -- mec */
- char *title2 = malloc(width - 2 + 1);
- memcpy(title2, title, width - 2);
- title2[width - 2] = '\0';
- title = title2;
- }
+ print_title(dialog, title, width);

- if (title != NULL) {
- wattrset(dialog, title_attr);
- mvwaddch(dialog, 0, (width - strlen(title)) / 2 - 1, ' ');
- waddstr(dialog, (char *)title);
- waddch(dialog, ' ');
- }
print_button(dialog, " Exit ", height - 2, width / 2 - 4, TRUE);
wnoutrefresh(dialog);
getyx(dialog, cur_y, cur_x); /* Save cursor position */

/* Print first page of text */
diff --git a/scripts/lxdialog/util.c b/scripts/lxdialog/util.c
index ce41147..f82cebb 100644
--- a/scripts/lxdialog/util.c
+++ b/scripts/lxdialog/util.c
@@ -175,10 +175,24 @@ void color_setup(void)
void end_dialog(void)
{
endwin();
}

+/* Print the title of the dialog. Center the title and truncate
+ * tile if wider than dialog (- 2 chars).
+ **/
+void print_title(WINDOW *dialog, const char *title, int width)
+{
+ if (title) {
+ int tlen = MIN(width - 2, strlen(title));
+ wattrset(dialog, title_attr);
+ mvwaddch(dialog, 0, (width - tlen) / 2 - 1, ' ');
+ mvwaddnstr(dialog, 0, (width - tlen)/2, title, tlen);
+ waddch(dialog, ' ');
+ }
+}
+
/*
* Print a string of text in a window, automatically wrap around to the
* next line if the string is too long to fit on one line. Newline
* characters '\n' are replaced by spaces. We start on a new line
* if there is no room for at least 4 nonblanks following a double-space.
diff --git a/scripts/lxdialog/yesno.c b/scripts/lxdialog/yesno.c
index 84f3e8e..cb2568a 100644
--- a/scripts/lxdialog/yesno.c
+++ b/scripts/lxdialog/yesno.c
@@ -59,24 +59,11 @@ int dialog_yesno(const char *title, cons
for (i = 0; i < width - 2; i++)
waddch(dialog, ACS_HLINE);
wattrset(dialog, dialog_attr);
waddch(dialog, ACS_RTEE);

- if (title != NULL && strlen(title) >= width - 2) {
- /* truncate long title -- mec */
- char *title2 = malloc(width - 2 + 1);
- memcpy(title2, title, width - 2);
- title2[width - 2] = '\0';
- title = title2;
- }
-
- if (title != NULL) {
- wattrset(dialog, title_attr);
- mvwaddch(dialog, 0, (width - strlen(title)) / 2 - 1, ' ');
- waddstr(dialog, (char *)title);
- waddch(dialog, ' ');
- }
+ print_title(dialog, title, width);

wattrset(dialog, dialog_attr);
print_autowrap(dialog, prompt, width - 2, 1, 3);

print_buttons(dialog, height, width, 0);
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/