Fix original bug with wrong calculated dims for items list.
Add args check for functions when autosizing impossible.
This commit is contained in:
parent
0cb06fc009
commit
04339572bc
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=4565
@ -35,7 +35,7 @@ static int list_width, check_x, item_x;
|
||||
int dialog_checklist(unsigned char *title, unsigned char *prompt, int height, int width, int list_height, int item_no, unsigned char **items, unsigned char *result)
|
||||
{
|
||||
int i, j, x, y, cur_x, cur_y, box_x, box_y, key = 0, button = 0, choice = 0,
|
||||
scroll = 0, max_choice, *status;
|
||||
l, k, scroll = 0, max_choice, *status;
|
||||
WINDOW *dialog, *list;
|
||||
|
||||
/* Allocate space for storing item on/off status */
|
||||
@ -54,8 +54,12 @@ int dialog_checklist(unsigned char *title, unsigned char *prompt, int height, in
|
||||
item_x = 0;
|
||||
/* Find length of longest item in order to center checklist */
|
||||
for (i = 0; i < item_no; i++) {
|
||||
check_x = MAX(check_x, strlen(items[i*3]) + strlen(items[i*3 + 1]) + 6);
|
||||
item_x = MAX(item_x, strlen(items[i*3]));
|
||||
l = strlen(items[i*3]);
|
||||
for (j = 0; j < item_no; j++) {
|
||||
k = strlen(items[j*3 + 1]);
|
||||
check_x = MAX(check_x, l + k + 6);
|
||||
}
|
||||
item_x = MAX(item_x, l);
|
||||
}
|
||||
if (height < 0)
|
||||
height = strheight(prompt)+list_height+4+2;
|
||||
@ -63,7 +67,7 @@ int dialog_checklist(unsigned char *title, unsigned char *prompt, int height, in
|
||||
i = strwidth(prompt);
|
||||
j = strwidth(title);
|
||||
width = MAX(i,j);
|
||||
width = MAX(width,check_x+10)+4;
|
||||
width = MAX(width,check_x+4)+4;
|
||||
}
|
||||
|
||||
/* center dialog box on screen */
|
||||
@ -122,13 +126,6 @@ int dialog_checklist(unsigned char *title, unsigned char *prompt, int height, in
|
||||
/* draw a box around the list items */
|
||||
draw_box(dialog, box_y, box_x, list_height+2, list_width+2, menubox_border_attr, menubox_attr);
|
||||
|
||||
check_x = 0;
|
||||
item_x = 0;
|
||||
/* Find length of longest item in order to center checklist */
|
||||
for (i = 0; i < item_no; i++) {
|
||||
check_x = MAX(check_x, strlen(items[i*3]) + strlen(items[i*3 + 1]) + 6);
|
||||
item_x = MAX(item_x, strlen(items[i*3]));
|
||||
}
|
||||
check_x = (list_width - check_x) / 2;
|
||||
item_x = check_x + item_x + 6;
|
||||
|
||||
|
@ -35,7 +35,7 @@ static int menu_width, tag_x, item_x;
|
||||
int dialog_menu(unsigned char *title, unsigned char *prompt, int height, int width, int menu_height, int item_no, unsigned char **items, unsigned char *result)
|
||||
{
|
||||
int i, j, x, y, cur_x, cur_y, box_x, box_y, key = 0, button = 0, choice = 0,
|
||||
scroll = 0, max_choice;
|
||||
l, k, scroll = 0, max_choice;
|
||||
WINDOW *dialog, *menu;
|
||||
|
||||
max_choice = MIN(menu_height, item_no);
|
||||
@ -44,8 +44,12 @@ int dialog_menu(unsigned char *title, unsigned char *prompt, int height, int wid
|
||||
item_x = 0;
|
||||
/* Find length of longest item in order to center menu */
|
||||
for (i = 0; i < item_no; i++) {
|
||||
tag_x = MAX(tag_x, strlen(items[i*2]) + strlen(items[i*2 + 1]) + 2);
|
||||
item_x = MAX(item_x, strlen(items[i*2]));
|
||||
l = strlen(items[i*2]);
|
||||
for (j = 0; j < item_no; j++) {
|
||||
k = strlen(items[j*2 + 1]);
|
||||
tag_x = MAX(tag_x, l + k + 2);
|
||||
}
|
||||
item_x = MAX(item_x, l);
|
||||
}
|
||||
if (height < 0)
|
||||
height = strheight(prompt)+menu_height+4+2;
|
||||
|
@ -34,6 +34,11 @@ int dialog_prgbox(unsigned char *title, const unsigned char *line, int height, i
|
||||
FILE *f;
|
||||
unsigned char *s, buf[MAX_LEN];
|
||||
|
||||
if (height < 0 || width < 0) {
|
||||
endwin();
|
||||
fprintf(stderr, "\nAutosizing is impossible in dialog_prgbox().\n");
|
||||
exit(-1);
|
||||
}
|
||||
/* center dialog box on screen */
|
||||
x = (COLS - width)/2;
|
||||
y = (LINES - height)/2;
|
||||
|
@ -36,7 +36,7 @@ static int list_width, check_x, item_x;
|
||||
int dialog_radiolist(unsigned char *title, unsigned char *prompt, int height, int width, int list_height, int item_no, unsigned char **items, unsigned char *result)
|
||||
{
|
||||
int i, j, x, y, cur_x, cur_y, box_x, box_y, key = 0, button = 0, choice = 0,
|
||||
scroll = 0, max_choice, *status, was_on = 0;
|
||||
l, k, scroll = 0, max_choice, *status, was_on = 0;
|
||||
WINDOW *dialog, *list;
|
||||
|
||||
/* Allocate space for storing item on/off status */
|
||||
@ -62,8 +62,12 @@ int dialog_radiolist(unsigned char *title, unsigned char *prompt, int height, in
|
||||
item_x = 0;
|
||||
/* Find length of longest item in order to center radiolist */
|
||||
for (i = 0; i < item_no; i++) {
|
||||
check_x = MAX(check_x, strlen(items[i*3]) + strlen(items[i*3 + 1]) + 6);
|
||||
item_x = MAX(item_x, strlen(items[i*3]));
|
||||
l = strlen(items[i*3]);
|
||||
for (j = 0; j < item_no; j++) {
|
||||
k = strlen(items[j*3 + 1]);
|
||||
check_x = MAX(check_x, l + k + 6);
|
||||
}
|
||||
item_x = MAX(item_x, l);
|
||||
}
|
||||
if (height < 0)
|
||||
height = strheight(prompt)+list_height+4+2;
|
||||
@ -71,7 +75,7 @@ int dialog_radiolist(unsigned char *title, unsigned char *prompt, int height, in
|
||||
i = strwidth(prompt);
|
||||
j = strwidth(title);
|
||||
width = MAX(i,j);
|
||||
width = MAX(width,check_x+10)+4;
|
||||
width = MAX(width,check_x+4)+4;
|
||||
}
|
||||
|
||||
/* center dialog box on screen */
|
||||
|
@ -48,6 +48,12 @@ int dialog_textbox(unsigned char *title, unsigned char *file, int height, int wi
|
||||
unsigned char search_term[MAX_LEN+1], *tempptr, *found;
|
||||
WINDOW *dialog, *text;
|
||||
|
||||
if (height < 0 || width < 0) {
|
||||
endwin();
|
||||
fprintf(stderr, "\nAutosizing is impossible in dialog_textbox().\n");
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
search_term[0] = '\0'; /* no search term entered yet */
|
||||
|
||||
/* Open input file for reading */
|
||||
|
Loading…
Reference in New Issue
Block a user