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