diff options
author | Baptiste Daroussin <bapt@FreeBSD.org> | 2018-10-20 20:32:57 +0000 |
---|---|---|
committer | Baptiste Daroussin <bapt@FreeBSD.org> | 2018-10-20 20:32:57 +0000 |
commit | 4dccdce4191d6e2bc3ba9f782b0fe1aa46b743e3 (patch) | |
tree | 3f3f729ef0455b62fba0c60263ba2c0180f4b4ec /buttons.c | |
parent | 42c10d5d7d5ba2fde22838d594f29d2f73b3ead2 (diff) |
Import dialog 1.3-20180621vendor/dialog/1.3-20180621
Notes
Notes:
svn path=/vendor/dialog/dist/; revision=339482
svn path=/vendor/dialog/1.3-20180621/; revision=339483; tag=vendor/dialog/1.3-20180621
Diffstat (limited to 'buttons.c')
-rw-r--r-- | buttons.c | 55 |
1 files changed, 33 insertions, 22 deletions
diff --git a/buttons.c b/buttons.c index d37cfe50118f..b22f64158988 100644 --- a/buttons.c +++ b/buttons.c @@ -1,9 +1,9 @@ /* - * $Id: buttons.c,v 1.94 2012/12/30 20:51:01 tom Exp $ + * $Id: buttons.c,v 1.99 2018/06/18 22:11:16 tom Exp $ * * buttons.c -- draw buttons, e.g., OK/Cancel * - * Copyright 2000-2011,2012 Thomas E. Dickey + * Copyright 2000-2017,2018 Thomas E. Dickey * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License, version 2.1 @@ -29,6 +29,7 @@ #endif #define MIN_BUTTON (-dialog_state.visit_cols) +#define CHR_BUTTON (!dialog_state.plain_buttons) static void center_label(char *buffer, int longest, const char *label) @@ -160,6 +161,12 @@ get_hotkeys(const char **labels) return result; } +typedef enum { + sFIND_KEY = 0 + ,sHAVE_KEY = 1 + ,sHAD_KEY = 2 +} HOTKEY; + /* * Print a button */ @@ -167,7 +174,7 @@ static void print_button(WINDOW *win, char *label, int hotkey, int y, int x, int selected) { int i; - int state = 0; + HOTKEY state = sFIND_KEY; const int *indx = dlg_index_wchars(label); int limit = dlg_count_wchars(label); chtype key_attr = (selected @@ -178,18 +185,18 @@ print_button(WINDOW *win, char *label, int hotkey, int y, int x, int selected) : button_label_inactive_attr); (void) wmove(win, y, x); - (void) wattrset(win, selected - ? button_active_attr - : button_inactive_attr); + dlg_attrset(win, selected + ? button_active_attr + : button_inactive_attr); (void) waddstr(win, "<"); - (void) wattrset(win, label_attr); + dlg_attrset(win, label_attr); for (i = 0; i < limit; ++i) { int check; int first = indx[i]; int last = indx[i + 1]; switch (state) { - case 0: + case sFIND_KEY: check = UCH(label[first]); #ifdef USE_WIDE_CURSES if ((last - first) != 1) { @@ -198,22 +205,24 @@ print_button(WINDOW *win, char *label, int hotkey, int y, int x, int selected) } #endif if (check == hotkey) { - (void) wattrset(win, key_attr); - state = 1; + dlg_attrset(win, key_attr); + state = sHAVE_KEY; } break; - case 1: - wattrset(win, label_attr); - state = 2; + case sHAVE_KEY: + dlg_attrset(win, label_attr); + state = sHAD_KEY; + break; + default: break; } waddnstr(win, label + first, last - first); } - (void) wattrset(win, selected - ? button_active_attr - : button_inactive_attr); + dlg_attrset(win, selected + ? button_active_attr + : button_inactive_attr); (void) waddstr(win, ">"); - (void) wmove(win, y, x + ((int) strspn(label, " ")) + 1); + (void) wmove(win, y, x + ((int) (strspn) (label, " ")) + 1); } /* @@ -374,7 +383,9 @@ dlg_draw_buttons(WINDOW *win, for (n = 0; labels[n] != 0; n++) { center_label(buffer, longest, labels[n]); mouse_mkbutton(y, x, dlg_count_columns(buffer), n); - print_button(win, buffer, hotkeys[n], y, x, + print_button(win, buffer, + CHR_BUTTON ? hotkeys[n] : -1, + y, x, (selected == n) || (n == 0 && selected < 0)); if (selected == n) getyx(win, final_y, final_x); @@ -389,7 +400,7 @@ dlg_draw_buttons(WINDOW *win, } (void) wmove(win, final_y, final_x); wrefresh(win); - (void) wattrset(win, save); + dlg_attrset(win, save); free(buffer); free(hotkeys); } @@ -629,7 +640,7 @@ dlg_ok_buttoncode(int button) } else if (dialog_vars.help_button && (button == n)) { result = DLG_EXIT_HELP; } - dlg_trace_msg("# dlg_ok_buttoncode(%d) = %d\n", button, result); + DLG_TRACE(("# dlg_ok_buttoncode(%d) = %d\n", button, result)); return result; } @@ -679,7 +690,7 @@ dlg_defaultno_button(void) while (dlg_ok_buttoncode(result) != DLG_EXIT_CANCEL) ++result; } - dlg_trace_msg("# dlg_defaultno_button() = %d\n", result); + DLG_TRACE(("# dlg_defaultno_button() = %d\n", result)); return result; } @@ -702,7 +713,7 @@ dlg_default_button(void) } } } - dlg_trace_msg("# dlg_default_button() = %d\n", result); + DLG_TRACE(("# dlg_default_button() = %d\n", result)); return result; } |