1217309Snwhitehorn/*
2251843Sbapt *  $Id: dlg_keys.h,v 1.32 2012/12/21 21:54:30 tom Exp $
3217309Snwhitehorn *
4224014Snwhitehorn *  dlg_keys.h -- runtime binding support for dialog
5217309Snwhitehorn *
6251843Sbapt *  Copyright 2005-2011,2012 Thomas E.  Dickey
7217309Snwhitehorn *
8217309Snwhitehorn *  This program is free software; you can redistribute it and/or modify
9217309Snwhitehorn *  it under the terms of the GNU Lesser General Public License, version 2.1
10217309Snwhitehorn *  as published by the Free Software Foundation.
11217309Snwhitehorn *
12217309Snwhitehorn *  This program is distributed in the hope that it will be useful, but
13217309Snwhitehorn *  WITHOUT ANY WARRANTY; without even the implied warranty of
14217309Snwhitehorn *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15217309Snwhitehorn *  Lesser General Public License for more details.
16217309Snwhitehorn *
17217309Snwhitehorn *  You should have received a copy of the GNU Lesser General Public
18217309Snwhitehorn *  License along with this program; if not, write to
19217309Snwhitehorn *	Free Software Foundation, Inc.
20217309Snwhitehorn *	51 Franklin St., Fifth Floor
21217309Snwhitehorn *	Boston, MA 02110, USA.
22217309Snwhitehorn */
23217309Snwhitehorn
24217309Snwhitehorn#ifndef DLG_KEYS_H_included
25217309Snwhitehorn#define DLG_KEYS_H_included 1
26251843Sbapt/* *INDENT-OFF* */
27217309Snwhitehorn
28217309Snwhitehorn#include <dialog.h>
29217309Snwhitehorn
30217309Snwhitehorn#ifdef USE_WIDE_CURSES
31217309Snwhitehorn#include <wctype.h>
32217309Snwhitehorn#define dlg_toupper(ch) towupper((wint_t)ch)
33217309Snwhitehorn#define dlg_isupper(ch) iswupper((wint_t)ch)
34217309Snwhitehorn#else
35251843Sbapt#define dlg_toupper(ch) (((ch) > 0 && (ch) <= 255) ? toupper(ch) : (ch))
36217309Snwhitehorn#define dlg_isupper(ch) (isalpha(ch) && isupper(ch))
37217309Snwhitehorn#endif
38217309Snwhitehorn
39217309Snwhitehorn#ifdef __cplusplus
40217309Snwhitehornextern "C" {
41217309Snwhitehorn#endif
42217309Snwhitehorn
43217309Snwhitehorntypedef struct {
44217309Snwhitehorn    int is_function_key;
45217309Snwhitehorn    int	curses_key;
46217309Snwhitehorn    int dialog_key;
47217309Snwhitehorn} DLG_KEYS_BINDING;
48217309Snwhitehorn
49251843Sbapt#define DLG_KEYS_DATA(dialog, curses)  { (curses) >= KEY_MIN, curses, dialog }
50217309Snwhitehorn
51217309Snwhitehorn#define END_KEYS_BINDING { -1, 0, 0 }
52217309Snwhitehorn
53217309Snwhitehorn/*
54217309Snwhitehorn * Define dialog's internal function-keys past the range used by curses.
55217309Snwhitehorn */
56217309Snwhitehorntypedef enum {
57217309Snwhitehorn    DLGK_MIN = KEY_MAX + 1,
58217309Snwhitehorn    /* predefined buttons */
59217309Snwhitehorn    DLGK_OK,
60217309Snwhitehorn    DLGK_CANCEL,
61217309Snwhitehorn    DLGK_EXTRA,
62217309Snwhitehorn    DLGK_HELP,
63217309Snwhitehorn    DLGK_ESC,
64217309Snwhitehorn    /* moving from screen to screen (pages) */
65217309Snwhitehorn    DLGK_PAGE_FIRST,
66217309Snwhitehorn    DLGK_PAGE_LAST,
67217309Snwhitehorn    DLGK_PAGE_NEXT,
68217309Snwhitehorn    DLGK_PAGE_PREV,
69217309Snwhitehorn    /* moving within a list */
70217309Snwhitehorn    DLGK_ITEM_FIRST,
71217309Snwhitehorn    DLGK_ITEM_LAST,
72217309Snwhitehorn    DLGK_ITEM_NEXT,
73217309Snwhitehorn    DLGK_ITEM_PREV,
74217309Snwhitehorn    /* moving from field to field (or buttons) */
75217309Snwhitehorn    DLGK_FIELD_FIRST,
76217309Snwhitehorn    DLGK_FIELD_LAST,
77217309Snwhitehorn    DLGK_FIELD_NEXT,
78217309Snwhitehorn    DLGK_FIELD_PREV,
79251843Sbapt    /* moving from form-field to form-field (or buttons) */
80251843Sbapt    DLGK_FORM_FIRST,
81251843Sbapt    DLGK_FORM_LAST,
82251843Sbapt    DLGK_FORM_NEXT,
83251843Sbapt    DLGK_FORM_PREV,
84217309Snwhitehorn    /* moving within a grid */
85217309Snwhitehorn    DLGK_GRID_UP,
86217309Snwhitehorn    DLGK_GRID_DOWN,
87217309Snwhitehorn    DLGK_GRID_LEFT,
88217309Snwhitehorn    DLGK_GRID_RIGHT,
89217309Snwhitehorn    /* delete */
90217309Snwhitehorn    DLGK_DELETE_LEFT,
91217309Snwhitehorn    DLGK_DELETE_RIGHT,
92217309Snwhitehorn    DLGK_DELETE_ALL,
93217309Snwhitehorn    /* special */
94217309Snwhitehorn    DLGK_ENTER,
95217309Snwhitehorn    DLGK_BEGIN,
96217309Snwhitehorn    DLGK_FINAL,
97217309Snwhitehorn    DLGK_SELECT,
98224014Snwhitehorn    DLGK_HELPFILE,
99217309Snwhitehorn    DLGK_TRACE
100217309Snwhitehorn} DLG_KEYS_ENUM;
101217309Snwhitehorn
102217309Snwhitehorn#define is_DLGK_MOUSE(code)	((code) >= M_EVENT)
103217309Snwhitehorn#define DLGK_MOUSE(code)	((code) + M_EVENT)
104217309Snwhitehorn
105224014Snwhitehorn#define HELPKEY_BINDINGS \
106224014Snwhitehorn	DLG_KEYS_DATA( DLGK_HELPFILE,	   CHR_HELP ), \
107224014Snwhitehorn	DLG_KEYS_DATA( DLGK_HELPFILE,	   KEY_F(1) ), \
108224014Snwhitehorn	DLG_KEYS_DATA( DLGK_HELPFILE,	   KEY_HELP )
109224014Snwhitehorn
110217309Snwhitehorn#define ENTERKEY_BINDINGS \
111217309Snwhitehorn	DLG_KEYS_DATA( DLGK_ENTER,	   '\n' ), \
112217309Snwhitehorn	DLG_KEYS_DATA( DLGK_ENTER,	   '\r' ), \
113217309Snwhitehorn	DLG_KEYS_DATA( DLGK_ENTER,	   KEY_ENTER )
114217309Snwhitehorn
115217309Snwhitehorn/* ^U == 21 */
116217309Snwhitehorn#define INPUTSTR_BINDINGS \
117217309Snwhitehorn	DLG_KEYS_DATA( DLGK_BEGIN,	   KEY_HOME ), \
118217309Snwhitehorn	DLG_KEYS_DATA( DLGK_DELETE_ALL,    CHR_KILL ), \
119217309Snwhitehorn	DLG_KEYS_DATA( DLGK_DELETE_LEFT,   CHR_BACKSPACE ), \
120217309Snwhitehorn	DLG_KEYS_DATA( DLGK_DELETE_LEFT,   KEY_BACKSPACE ), \
121217309Snwhitehorn	DLG_KEYS_DATA( DLGK_DELETE_RIGHT,  CHR_DELETE ), \
122217309Snwhitehorn	DLG_KEYS_DATA( DLGK_DELETE_RIGHT,  KEY_DC ), \
123217309Snwhitehorn	DLG_KEYS_DATA( DLGK_FINAL,	   KEY_END ), \
124217309Snwhitehorn	DLG_KEYS_DATA( DLGK_GRID_LEFT,	   KEY_LEFT ), \
125217309Snwhitehorn	DLG_KEYS_DATA( DLGK_GRID_RIGHT,	   KEY_RIGHT )
126217309Snwhitehorn
127251843Sbapt#define SCROLL_FKEY_BINDINGS \
128251843Sbapt	DLG_KEYS_DATA( DLGK_GRID_DOWN,	KEY_DOWN ), \
129251843Sbapt	DLG_KEYS_DATA( DLGK_GRID_UP,	KEY_UP ), \
130251843Sbapt	DLG_KEYS_DATA( DLGK_PAGE_FIRST,	KEY_HOME ), \
131251843Sbapt	DLG_KEYS_DATA( DLGK_PAGE_LAST,	KEY_END ), \
132251843Sbapt	DLG_KEYS_DATA( DLGK_PAGE_NEXT,	KEY_NPAGE ), \
133251843Sbapt	DLG_KEYS_DATA( DLGK_PAGE_PREV,	KEY_PPAGE )
134251843Sbapt
135217309Snwhitehorn#define SCROLLKEY_BINDINGS \
136251843Sbapt	SCROLL_FKEY_BINDINGS, \
137217309Snwhitehorn	DLG_KEYS_DATA( DLGK_GRID_DOWN,	'J' ), \
138217309Snwhitehorn	DLG_KEYS_DATA( DLGK_GRID_DOWN,	'j' ), \
139217309Snwhitehorn	DLG_KEYS_DATA( DLGK_GRID_UP,	'K' ), \
140217309Snwhitehorn	DLG_KEYS_DATA( DLGK_GRID_UP,	'k' ), \
141217309Snwhitehorn	DLG_KEYS_DATA( DLGK_PAGE_FIRST,	'g' ), \
142217309Snwhitehorn	DLG_KEYS_DATA( DLGK_PAGE_LAST,	'G' ), \
143217309Snwhitehorn	DLG_KEYS_DATA( DLGK_PAGE_NEXT,	'F' ), \
144217309Snwhitehorn	DLG_KEYS_DATA( DLGK_PAGE_NEXT,	'f' ), \
145217309Snwhitehorn	DLG_KEYS_DATA( DLGK_PAGE_PREV,	'B' ), \
146251843Sbapt	DLG_KEYS_DATA( DLGK_PAGE_PREV,	'b' )
147217309Snwhitehorn
148251843Sbapt#define TRAVERSE_BINDINGS \
149251843Sbapt	DLG_KEYS_DATA( DLGK_ENTER,	' ' ), \
150251843Sbapt	DLG_KEYS_DATA( DLGK_FIELD_NEXT,	KEY_DOWN ), \
151251843Sbapt	DLG_KEYS_DATA( DLGK_FIELD_NEXT, KEY_RIGHT ), \
152251843Sbapt	DLG_KEYS_DATA( DLGK_FIELD_NEXT, TAB ), \
153251843Sbapt	DLG_KEYS_DATA( DLGK_FIELD_PREV,	KEY_UP ), \
154251843Sbapt	DLG_KEYS_DATA( DLGK_FIELD_PREV, KEY_BTAB ), \
155251843Sbapt	DLG_KEYS_DATA( DLGK_FIELD_PREV, KEY_LEFT )
156251843Sbapt
157217309Snwhitehornextern int dlg_lookup_key(WINDOW * /*win*/, int /*curses_key*/, int * /*dialog_key*/);
158217309Snwhitehornextern int dlg_result_key(int /*dialog_key*/, int /*fkey*/, int * /*resultp*/);
159217309Snwhitehornextern void dlg_register_buttons(WINDOW * /*win*/, const char * /*name*/, const char ** /*buttons*/);
160217309Snwhitehornextern void dlg_register_window(WINDOW * /*win*/, const char * /*name*/, DLG_KEYS_BINDING * /*binding*/);
161217309Snwhitehornextern void dlg_unregister_window(WINDOW * /*win*/);
162217309Snwhitehorn
163217309Snwhitehorn#ifdef HAVE_RC_FILE
164217309Snwhitehornextern int dlg_parse_bindkey(char * /*params*/);
165217309Snwhitehornextern void dlg_dump_keys(FILE * /*fp*/);
166251843Sbaptextern void dlg_dump_window_keys(FILE * /*fp*/, WINDOW * /*win*/);
167217309Snwhitehorn#endif
168217309Snwhitehorn
169217309Snwhitehorn#ifdef __cplusplus
170217309Snwhitehorn}
171217309Snwhitehorn#endif
172251843Sbapt/* *INDENT-ON* */
173217309Snwhitehorn
174217309Snwhitehorn#endif /* DLG_KEYS_H_included */
175