2005-04-17 02:20:36 +04:00
/*
* yesno . c - - implements the yes / no box
*
* ORIGINAL AUTHOR : Savio Lam ( lam836 @ cs . cuhk . hk )
* MODIFIED FOR LINUX KERNEL CONFIG BY : William Roadcap ( roadcap @ cfw . com )
*
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation ; either version 2
* of the License , or ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software
* Foundation , Inc . , 675 Mass Ave , Cambridge , MA 0213 9 , USA .
*/
# include "dialog.h"
/*
* Display termination buttons
*/
2005-11-19 21:13:34 +03:00
static void print_buttons ( WINDOW * dialog , int height , int width , int selected )
2005-04-17 02:20:36 +04:00
{
2005-11-19 21:13:34 +03:00
int x = width / 2 - 10 ;
int y = height - 2 ;
2005-04-17 02:20:36 +04:00
2008-01-12 01:42:54 +03:00
print_button ( dialog , gettext ( " Yes " ) , y , x , selected = = 0 ) ;
print_button ( dialog , gettext ( " No " ) , y , x + 13 , selected = = 1 ) ;
2005-04-17 02:20:36 +04:00
2005-11-19 21:13:34 +03:00
wmove ( dialog , y , x + 1 + 13 * selected ) ;
wrefresh ( dialog ) ;
2005-04-17 02:20:36 +04:00
}
/*
* Display a dialog box with two buttons - Yes and No
*/
2005-11-19 21:13:34 +03:00
int dialog_yesno ( const char * title , const char * prompt , int height , int width )
2005-04-17 02:20:36 +04:00
{
2005-11-19 21:13:34 +03:00
int i , x , y , key = 0 , button = 0 ;
WINDOW * dialog ;
2006-07-30 00:48:57 +04:00
do_resize :
2013-06-15 13:07:35 +04:00
if ( getmaxy ( stdscr ) < ( height + YESNO_HEIGTH_MIN ) )
2006-07-30 00:48:57 +04:00
return - ERRDISPLAYTOOSMALL ;
2013-06-15 13:07:35 +04:00
if ( getmaxx ( stdscr ) < ( width + YESNO_WIDTH_MIN ) )
2006-07-30 00:48:57 +04:00
return - ERRDISPLAYTOOSMALL ;
2005-11-19 21:13:34 +03:00
/* center dialog box on screen */
2013-05-12 14:30:49 +04:00
x = ( getmaxx ( stdscr ) - width ) / 2 ;
y = ( getmaxy ( stdscr ) - height ) / 2 ;
2005-11-19 21:13:34 +03:00
draw_shadow ( stdscr , y , x , height , width ) ;
dialog = newwin ( height , width , y , x ) ;
keypad ( dialog , TRUE ) ;
2006-07-24 23:40:46 +04:00
draw_box ( dialog , 0 , 0 , height , width ,
dlg . dialog . atr , dlg . border . atr ) ;
wattrset ( dialog , dlg . border . atr ) ;
2005-11-19 21:13:34 +03:00
mvwaddch ( dialog , height - 3 , 0 , ACS_LTEE ) ;
for ( i = 0 ; i < width - 2 ; i + + )
waddch ( dialog , ACS_HLINE ) ;
2006-07-24 23:40:46 +04:00
wattrset ( dialog , dlg . dialog . atr ) ;
2005-11-19 21:13:34 +03:00
waddch ( dialog , ACS_RTEE ) ;
2005-11-20 01:38:06 +03:00
print_title ( dialog , title , width ) ;
2005-11-19 21:13:34 +03:00
2006-07-24 23:40:46 +04:00
wattrset ( dialog , dlg . dialog . atr ) ;
2005-11-19 21:13:34 +03:00
print_autowrap ( dialog , prompt , width - 2 , 1 , 3 ) ;
print_buttons ( dialog , height , width , 0 ) ;
2006-07-29 01:57:48 +04:00
while ( key ! = KEY_ESC ) {
2005-11-19 21:13:34 +03:00
key = wgetch ( dialog ) ;
switch ( key ) {
case ' Y ' :
case ' y ' :
delwin ( dialog ) ;
return 0 ;
case ' N ' :
case ' n ' :
delwin ( dialog ) ;
return 1 ;
case TAB :
case KEY_LEFT :
case KEY_RIGHT :
2005-11-19 23:56:20 +03:00
button = ( ( key = = KEY_LEFT ? - - button : + + button ) < 0 ) ? 1 : ( button > 1 ? 0 : button ) ;
2005-11-19 21:13:34 +03:00
print_buttons ( dialog , height , width , button ) ;
wrefresh ( dialog ) ;
break ;
case ' ' :
case ' \n ' :
delwin ( dialog ) ;
return button ;
2006-07-29 01:57:48 +04:00
case KEY_ESC :
key = on_key_esc ( dialog ) ;
2005-11-19 21:13:34 +03:00
break ;
2006-07-30 00:48:57 +04:00
case KEY_RESIZE :
delwin ( dialog ) ;
on_key_resize ( ) ;
goto do_resize ;
2005-11-19 21:13:34 +03:00
}
}
delwin ( dialog ) ;
2006-07-29 01:57:48 +04:00
return key ; /* ESC pressed */
2005-04-17 02:20:36 +04:00
}