kconfig/lxdialog/yesno.c
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Sun Mar 20 00:02:21 2011 +0100 (2011-03-20)
changeset 2339 730e2d63296b
parent 1 eeea35fbf182
permissions -rw-r--r--
scripts: leave changelog in build dir, copy to install dir

Users tend to look for the build log in the current working directory,
rather than in the toolchain's installation dir. While bundling the build
log in the toolchain installation dir is nice for distribution and review,
it can be easier to have the build log readily available in the working
directory, as it is quicker to get to it.

So, the build log stays in the working directory until the toolchain is
completely and successfully built, and then a (compressed) copy is made.

Reported-by: Trevor Woerner <twoerner@gmail.com>
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
yann@1
     1
/*
yann@1
     2
 *  yesno.c -- implements the yes/no box
yann@1
     3
 *
yann@1
     4
 *  ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
yann@1
     5
 *  MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcap@cfw.com)
yann@1
     6
 *
yann@1
     7
 *  This program is free software; you can redistribute it and/or
yann@1
     8
 *  modify it under the terms of the GNU General Public License
yann@1
     9
 *  as published by the Free Software Foundation; either version 2
yann@1
    10
 *  of the License, or (at your option) any later version.
yann@1
    11
 *
yann@1
    12
 *  This program is distributed in the hope that it will be useful,
yann@1
    13
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
yann@1
    14
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
yann@1
    15
 *  GNU General Public License for more details.
yann@1
    16
 *
yann@1
    17
 *  You should have received a copy of the GNU General Public License
yann@1
    18
 *  along with this program; if not, write to the Free Software
yann@1
    19
 *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
yann@1
    20
 */
yann@1
    21
yann@1
    22
#include "dialog.h"
yann@1
    23
yann@1
    24
/*
yann@1
    25
 * Display termination buttons
yann@1
    26
 */
yann@1
    27
static void print_buttons(WINDOW * dialog, int height, int width, int selected)
yann@1
    28
{
yann@1
    29
	int x = width / 2 - 10;
yann@1
    30
	int y = height - 2;
yann@1
    31
yann@943
    32
	print_button(dialog, gettext(" Yes "), y, x, selected == 0);
yann@943
    33
	print_button(dialog, gettext("  No  "), y, x + 13, selected == 1);
yann@1
    34
yann@1
    35
	wmove(dialog, y, x + 1 + 13 * selected);
yann@1
    36
	wrefresh(dialog);
yann@1
    37
}
yann@1
    38
yann@1
    39
/*
yann@1
    40
 * Display a dialog box with two buttons - Yes and No
yann@1
    41
 */
yann@1
    42
int dialog_yesno(const char *title, const char *prompt, int height, int width)
yann@1
    43
{
yann@1
    44
	int i, x, y, key = 0, button = 0;
yann@1
    45
	WINDOW *dialog;
yann@1
    46
yann@1
    47
do_resize:
yann@1
    48
	if (getmaxy(stdscr) < (height + 4))
yann@1
    49
		return -ERRDISPLAYTOOSMALL;
yann@1
    50
	if (getmaxx(stdscr) < (width + 4))
yann@1
    51
		return -ERRDISPLAYTOOSMALL;
yann@1
    52
yann@1
    53
	/* center dialog box on screen */
yann@1
    54
	x = (COLS - width) / 2;
yann@1
    55
	y = (LINES - height) / 2;
yann@1
    56
yann@1
    57
	draw_shadow(stdscr, y, x, height, width);
yann@1
    58
yann@1
    59
	dialog = newwin(height, width, y, x);
yann@1
    60
	keypad(dialog, TRUE);
yann@1
    61
yann@1
    62
	draw_box(dialog, 0, 0, height, width,
yann@1
    63
		 dlg.dialog.atr, dlg.border.atr);
yann@1
    64
	wattrset(dialog, dlg.border.atr);
yann@1
    65
	mvwaddch(dialog, height - 3, 0, ACS_LTEE);
yann@1
    66
	for (i = 0; i < width - 2; i++)
yann@1
    67
		waddch(dialog, ACS_HLINE);
yann@1
    68
	wattrset(dialog, dlg.dialog.atr);
yann@1
    69
	waddch(dialog, ACS_RTEE);
yann@1
    70
yann@1
    71
	print_title(dialog, title, width);
yann@1
    72
yann@1
    73
	wattrset(dialog, dlg.dialog.atr);
yann@1
    74
	print_autowrap(dialog, prompt, width - 2, 1, 3);
yann@1
    75
yann@1
    76
	print_buttons(dialog, height, width, 0);
yann@1
    77
yann@1
    78
	while (key != KEY_ESC) {
yann@1
    79
		key = wgetch(dialog);
yann@1
    80
		switch (key) {
yann@1
    81
		case 'Y':
yann@1
    82
		case 'y':
yann@1
    83
			delwin(dialog);
yann@1
    84
			return 0;
yann@1
    85
		case 'N':
yann@1
    86
		case 'n':
yann@1
    87
			delwin(dialog);
yann@1
    88
			return 1;
yann@1
    89
yann@1
    90
		case TAB:
yann@1
    91
		case KEY_LEFT:
yann@1
    92
		case KEY_RIGHT:
yann@1
    93
			button = ((key == KEY_LEFT ? --button : ++button) < 0) ? 1 : (button > 1 ? 0 : button);
yann@1
    94
yann@1
    95
			print_buttons(dialog, height, width, button);
yann@1
    96
			wrefresh(dialog);
yann@1
    97
			break;
yann@1
    98
		case ' ':
yann@1
    99
		case '\n':
yann@1
   100
			delwin(dialog);
yann@1
   101
			return button;
yann@1
   102
		case KEY_ESC:
yann@1
   103
			key = on_key_esc(dialog);
yann@1
   104
			break;
yann@1
   105
		case KEY_RESIZE:
yann@1
   106
			delwin(dialog);
yann@1
   107
			on_key_resize();
yann@1
   108
			goto do_resize;
yann@1
   109
		}
yann@1
   110
	}
yann@1
   111
yann@1
   112
	delwin(dialog);
yann@1
   113
	return key;		/* ESC pressed */
yann@1
   114
}