menu.h revision 01037d57
1/* $XTermId: menu.h,v 1.135 2014/09/04 00:17:55 tom Exp $ */
2
3/*
4 * Copyright 1999-2013,2014 by Thomas E. Dickey
5 *
6 *                         All Rights Reserved
7 *
8 * Permission is hereby granted, free of charge, to any person obtaining a
9 * copy of this software and associated documentation files (the
10 * "Software"), to deal in the Software without restriction, including
11 * without limitation the rights to use, copy, modify, merge, publish,
12 * distribute, sublicense, and/or sell copies of the Software, and to
13 * permit persons to whom the Software is furnished to do so, subject to
14 * the following conditions:
15 *
16 * The above copyright notice and this permission notice shall be included
17 * in all copies or substantial portions of the Software.
18 *
19 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
20 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
22 * IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY
23 * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
24 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
25 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
26 *
27 * Except as contained in this notice, the name(s) of the above copyright
28 * holders shall not be used in advertising or otherwise to promote the
29 * sale, use or other dealings in this Software without prior written
30 * authorization.
31 *
32 *
33 * Copyright 1989  The Open Group
34 *
35 * Permission to use, copy, modify, distribute, and sell this software and its
36 * documentation for any purpose is hereby granted without fee, provided that
37 * the above copyright notice appear in all copies and that both that
38 * copyright notice and this permission notice appear in supporting
39 * documentation.
40 *
41 * The above copyright notice and this permission notice shall be included
42 * in all copies or substantial portions of the Software.
43 *
44 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
45 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
46 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
47 * IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
48 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
49 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
50 * OTHER DEALINGS IN THE SOFTWARE.
51 *
52 * Except as contained in this notice, the name of The Open Group shall
53 * not be used in advertising or otherwise to promote the sale, use or
54 * other dealings in this Software without prior written authorization
55 * from The Open Group.
56 *
57 */
58
59#ifndef included_menu_h
60#define included_menu_h
61/* *INDENT-OFF* */
62
63#include <xterm.h>
64
65typedef struct _MenuEntry {
66    const char *name;
67    void (*function) PROTO_XT_CALLBACK_ARGS;
68    Widget widget;
69} MenuEntry;
70
71extern MenuEntry mainMenuEntries[], vtMenuEntries[];
72extern MenuEntry fontMenuEntries[];
73#if OPT_TEK4014
74extern MenuEntry tekMenuEntries[];
75#endif
76
77extern void Handle8BitControl      PROTO_XT_ACTIONS_ARGS;
78extern void HandleAllow132         PROTO_XT_ACTIONS_ARGS;
79extern void HandleAllowBoldFonts   PROTO_XT_ACTIONS_ARGS;
80extern void HandleAllowColorOps    PROTO_XT_ACTIONS_ARGS;
81extern void HandleAllowFontOps     PROTO_XT_ACTIONS_ARGS;
82extern void HandleAllowSends       PROTO_XT_ACTIONS_ARGS;
83extern void HandleAllowTcapOps     PROTO_XT_ACTIONS_ARGS;
84extern void HandleAllowTitleOps    PROTO_XT_ACTIONS_ARGS;
85extern void HandleAllowWindowOps   PROTO_XT_ACTIONS_ARGS;
86extern void HandleAltEsc           PROTO_XT_ACTIONS_ARGS;
87extern void HandleAltScreen        PROTO_XT_ACTIONS_ARGS;
88extern void HandleAppCursor        PROTO_XT_ACTIONS_ARGS;
89extern void HandleAppKeypad        PROTO_XT_ACTIONS_ARGS;
90extern void HandleAutoLineFeed     PROTO_XT_ACTIONS_ARGS;
91extern void HandleAutoWrap         PROTO_XT_ACTIONS_ARGS;
92extern void HandleBackarrow        PROTO_XT_ACTIONS_ARGS;
93extern void HandleBellIsUrgent     PROTO_XT_ACTIONS_ARGS;
94extern void HandleClearSavedLines  PROTO_XT_ACTIONS_ARGS;
95extern void HandleCreateMenu       PROTO_XT_ACTIONS_ARGS;
96extern void HandleCursesEmul       PROTO_XT_ACTIONS_ARGS;
97extern void HandleCursorBlink      PROTO_XT_ACTIONS_ARGS;
98extern void HandleDeleteIsDEL      PROTO_XT_ACTIONS_ARGS;
99extern void HandleFontBoxChars     PROTO_XT_ACTIONS_ARGS;
100extern void HandleFontDoublesize   PROTO_XT_ACTIONS_ARGS;
101extern void HandleFontLoading      PROTO_XT_ACTIONS_ARGS;
102extern void HandleFontPacked       PROTO_XT_ACTIONS_ARGS;
103extern void HandleFullscreen       PROTO_XT_ACTIONS_ARGS;
104extern void HandleHardReset        PROTO_XT_ACTIONS_ARGS;
105extern void HandleHpFunctionKeys   PROTO_XT_ACTIONS_ARGS;
106extern void HandleJumpscroll       PROTO_XT_ACTIONS_ARGS;
107extern void HandleKeepSelection    PROTO_XT_ACTIONS_ARGS;
108extern void HandleLogging          PROTO_XT_ACTIONS_ARGS;
109extern void HandleMarginBell       PROTO_XT_ACTIONS_ARGS;
110extern void HandleMetaEsc          PROTO_XT_ACTIONS_ARGS;
111extern void HandleNumLock          PROTO_XT_ACTIONS_ARGS;
112extern void HandleOldFunctionKeys  PROTO_XT_ACTIONS_ARGS;
113extern void HandlePopupMenu        PROTO_XT_ACTIONS_ARGS;
114extern void HandlePrintControlMode PROTO_XT_ACTIONS_ARGS;
115extern void HandlePrintEverything  PROTO_XT_ACTIONS_ARGS;
116extern void HandlePrintScreen      PROTO_XT_ACTIONS_ARGS;
117extern void HandleQuit             PROTO_XT_ACTIONS_ARGS;
118extern void HandleRedraw           PROTO_XT_ACTIONS_ARGS;
119extern void HandleRenderFont       PROTO_XT_ACTIONS_ARGS;
120extern void HandleReverseVideo     PROTO_XT_ACTIONS_ARGS;
121extern void HandleReverseWrap      PROTO_XT_ACTIONS_ARGS;
122extern void HandleScoFunctionKeys  PROTO_XT_ACTIONS_ARGS;
123extern void HandleScrollKey        PROTO_XT_ACTIONS_ARGS;
124extern void HandleScrollTtyOutput  PROTO_XT_ACTIONS_ARGS;
125extern void HandleScrollbar        PROTO_XT_ACTIONS_ARGS;
126extern void HandleSecure           PROTO_XT_ACTIONS_ARGS;
127extern void HandleSendSignal       PROTO_XT_ACTIONS_ARGS;
128extern void HandleSetPopOnBell     PROTO_XT_ACTIONS_ARGS;
129extern void HandleSetPrivateColorRegisters PROTO_XT_ACTIONS_ARGS;
130extern void HandleSetSelect        PROTO_XT_ACTIONS_ARGS;
131extern void HandleSetTekText       PROTO_XT_ACTIONS_ARGS;
132extern void HandleSetTerminalType  PROTO_XT_ACTIONS_ARGS;
133extern void HandleSetVisualBell    PROTO_XT_ACTIONS_ARGS;
134extern void HandleSixelScrolling   PROTO_XT_ACTIONS_ARGS;
135extern void HandleSoftReset        PROTO_XT_ACTIONS_ARGS;
136extern void HandleSunFunctionKeys  PROTO_XT_ACTIONS_ARGS;
137extern void HandleSunKeyboard      PROTO_XT_ACTIONS_ARGS;
138extern void HandleTekCopy          PROTO_XT_ACTIONS_ARGS;
139extern void HandleTekPage          PROTO_XT_ACTIONS_ARGS;
140extern void HandleTekReset         PROTO_XT_ACTIONS_ARGS;
141extern void HandleTiteInhibit      PROTO_XT_ACTIONS_ARGS;
142extern void HandleToolbar          PROTO_XT_ACTIONS_ARGS;
143extern void HandleUTF8Fonts        PROTO_XT_ACTIONS_ARGS;
144extern void HandleUTF8Mode         PROTO_XT_ACTIONS_ARGS;
145extern void HandleUTF8Title        PROTO_XT_ACTIONS_ARGS;
146extern void HandleVisibility       PROTO_XT_ACTIONS_ARGS;
147extern void HandleWriteError       PROTO_XT_ACTIONS_ARGS;
148extern void HandleWriteNow         PROTO_XT_ACTIONS_ARGS;
149
150extern void SetupMenus (Widget /*shell*/, Widget */*forms*/, Widget */*menus*/, Dimension * /*menu_high*/);
151
152#if OPT_TOOLBAR
153extern void ShowToolbar(Bool);
154#endif
155
156/*
157 * The following definitions MUST match the order of entries given in
158 * the mainMenuEntries, vtMenuEntries, and tekMenuEntries arrays in menu.c.
159 */
160
161/*
162 * items in primary menu
163 */
164typedef enum {
165#if OPT_TOOLBAR
166    mainMenu_toolbar,
167#endif
168#if OPT_MAXIMIZE
169    mainMenu_fullscreen,
170#endif
171    mainMenu_securekbd,
172    mainMenu_allowsends,
173    mainMenu_redraw,
174    mainMenu_line1,
175#ifdef ALLOWLOGGING
176    mainMenu_logging,
177#endif
178#if OPT_PRINT_ON_EXIT
179    mainMenu_write_now,
180    mainMenu_write_error,
181#endif
182    mainMenu_print,
183    mainMenu_print_redir,
184    mainMenu_line2,
185    mainMenu_8bit_ctrl,
186    mainMenu_backarrow,
187#if OPT_NUM_LOCK
188    mainMenu_num_lock,
189    mainMenu_alt_esc,
190    mainMenu_meta_esc,
191#endif
192    mainMenu_delete_del,
193    mainMenu_old_fkeys,
194#if OPT_TCAP_FKEYS
195    mainMenu_tcap_fkeys,
196#endif
197#if OPT_HP_FUNC_KEYS
198    mainMenu_hp_fkeys,
199#endif
200#if OPT_SCO_FUNC_KEYS
201    mainMenu_sco_fkeys,
202#endif
203#if OPT_SUN_FUNC_KEYS
204    mainMenu_sun_fkeys,
205#endif
206#if OPT_SUNPC_KBD
207    mainMenu_sun_kbd,
208#endif
209    mainMenu_line3,
210    mainMenu_suspend,
211    mainMenu_continue,
212    mainMenu_interrupt,
213    mainMenu_hangup,
214    mainMenu_terminate,
215    mainMenu_kill,
216    mainMenu_line4,
217    mainMenu_quit,
218    mainMenu_LAST
219} mainMenuIndices;
220
221
222/*
223 * items in vt100 mode menu
224 */
225typedef enum {
226    vtMenu_scrollbar,
227    vtMenu_jumpscroll,
228    vtMenu_reversevideo,
229    vtMenu_autowrap,
230    vtMenu_reversewrap,
231    vtMenu_autolinefeed,
232    vtMenu_appcursor,
233    vtMenu_appkeypad,
234    vtMenu_scrollkey,
235    vtMenu_scrollttyoutput,
236    vtMenu_allow132,
237    vtMenu_keepSelection,
238    vtMenu_selectToClipboard,
239    vtMenu_visualbell,
240    vtMenu_bellIsUrgent,
241    vtMenu_poponbell,
242#if OPT_BLINK_CURS
243    vtMenu_cursorblink,
244#endif
245    vtMenu_titeInhibit,
246#ifndef NO_ACTIVE_ICON
247    vtMenu_activeicon,
248#endif /* NO_ACTIVE_ICON */
249    vtMenu_line1,
250    vtMenu_softreset,
251    vtMenu_hardreset,
252    vtMenu_clearsavedlines,
253    vtMenu_line2,
254#if OPT_TEK4014
255    vtMenu_tekshow,
256    vtMenu_tekmode,
257    vtMenu_vthide,
258#endif
259    vtMenu_altscreen,
260#if OPT_SIXEL_GRAPHICS
261    vtMenu_sixelscrolling,
262#endif
263#if OPT_GRAPHICS
264    vtMenu_privatecolorregisters,
265#endif
266    vtMenu_LAST
267} vtMenuIndices;
268
269/*
270 * items in vt100 font menu
271 */
272typedef enum {
273    fontMenu_default,
274    fontMenu_font1,
275    fontMenu_font2,
276    fontMenu_font3,
277    fontMenu_font4,
278    fontMenu_font5,
279    fontMenu_font6,
280#define fontMenu_lastBuiltin fontMenu_font6
281    fontMenu_fontescape,
282    fontMenu_fontsel,
283/* number of non-line items down to here should match NMENUFONTS in ptyx.h */
284
285#if OPT_DEC_CHRSET || OPT_BOX_CHARS || OPT_DEC_SOFTFONT
286    fontMenu_line1,
287    fontMenu_allowBoldFonts,
288#if OPT_BOX_CHARS
289    fontMenu_font_boxchars,
290    fontMenu_font_packedfont,
291#endif
292#if OPT_DEC_CHRSET
293    fontMenu_font_doublesize,
294#endif
295#if OPT_DEC_SOFTFONT
296    fontMenu_font_loadable,
297#endif
298#endif
299
300#if OPT_RENDERFONT || OPT_WIDE_CHARS
301    fontMenu_line2,
302#if OPT_RENDERFONT
303    fontMenu_render_font,
304#endif
305#if OPT_WIDE_CHARS
306    fontMenu_utf8_mode,
307    fontMenu_utf8_fonts,
308    fontMenu_utf8_title,
309#endif
310#endif
311#if OPT_ALLOW_XXX_OPS
312    fontMenu_line3,
313    fontMenu_allowColorOps,
314    fontMenu_allowFontOps,
315    fontMenu_allowTcapOps,
316    fontMenu_allowTitleOps,
317    fontMenu_allowWindowOps,
318#endif
319
320    fontMenu_LAST
321} fontMenuIndices;
322
323/*
324 * items in tek4014 mode menu
325 */
326#if OPT_TEK4014
327typedef enum {
328    tekMenu_tektextlarge,
329    tekMenu_tektext2,
330    tekMenu_tektext3,
331    tekMenu_tektextsmall,
332    tekMenu_line1,
333    tekMenu_tekpage,
334    tekMenu_tekreset,
335    tekMenu_tekcopy,
336    tekMenu_line2,
337    tekMenu_vtshow,
338    tekMenu_vtmode,
339    tekMenu_tekhide,
340    tekMenu_LAST
341} tekMenuIndices;
342#endif
343
344
345/*
346 * functions for updating menus
347 */
348
349extern void SetItemSensitivity(Widget mi, Bool val);
350
351typedef enum {
352    toggleErr = -2,
353    toggleAll = -1,
354    toggleOff = 0,
355    toggleOn = 1
356} ToggleEnum;
357
358extern int decodeToggle(XtermWidget /* xw */, String * /* params */, Cardinal /* nparams */);
359
360/*
361 * there should be one of each of the following for each checkable item
362 */
363#if OPT_TOOLBAR
364extern void update_toolbar(void);
365#else
366#define update_toolbar() /* nothing */
367#endif
368
369#if OPT_MAXIMIZE
370extern void update_fullscreen(void);
371#else
372#define update_fullscreen() /* nothing */
373#endif
374
375extern void update_securekbd(void);
376extern void update_allowsends(void);
377
378#ifdef ALLOWLOGGING
379extern void update_logging(void);
380#else
381#define update_logging() /*nothing*/
382#endif
383
384#if OPT_PRINT_ON_EXIT
385extern void update_write_error(void);
386#else
387#define update_write_error() /*nothing*/
388#endif
389
390extern void update_print_redir(void);
391extern void update_8bit_control(void);
392extern void update_decbkm(void);
393
394#if OPT_NUM_LOCK
395extern void update_num_lock(void);
396extern void update_alt_esc(void);
397extern void update_meta_esc(void);
398#else
399#define update_num_lock() /*nothing*/
400#define update_alt_esc()  /*nothing*/
401#define update_meta_esc() /*nothing*/
402#endif
403
404extern void update_old_fkeys(void);
405extern void update_delete_del(void);
406
407#if OPT_SUNPC_KBD
408extern void update_sun_kbd(void);
409#endif
410
411#if OPT_HP_FUNC_KEYS
412extern void update_hp_fkeys(void);
413#else
414#define update_hp_fkeys() /*nothing*/
415#endif
416
417#if OPT_SCO_FUNC_KEYS
418extern void update_sco_fkeys(void);
419#else
420#define update_sco_fkeys() /*nothing*/
421#endif
422
423#if OPT_SUN_FUNC_KEYS
424extern void update_sun_fkeys(void);
425#else
426#define update_sun_fkeys() /*nothing*/
427#endif
428
429#if OPT_TCAP_FKEYS
430extern void update_tcap_fkeys(void);
431#else
432#define update_tcap_fkeys() /*nothing*/
433#endif
434
435extern void update_scrollbar(void);
436extern void update_jumpscroll(void);
437extern void update_reversevideo(void);
438extern void update_autowrap(void);
439extern void update_reversewrap(void);
440extern void update_autolinefeed(void);
441extern void update_appcursor(void);
442extern void update_appkeypad(void);
443extern void update_scrollkey(void);
444extern void update_keepSelection(void);
445extern void update_selectToClipboard(void);
446extern void update_scrollttyoutput(void);
447extern void update_allow132(void);
448extern void update_cursesemul(void);
449extern void update_visualbell(void);
450extern void update_bellIsUrgent(void);
451extern void update_poponbell(void);
452
453#define update_marginbell() /* nothing */
454
455#if OPT_LOAD_VTFONTS
456extern void update_font_escape(void);
457#else
458#define update_font_escape() /* nothing */
459#endif
460
461#if OPT_ALLOW_XXX_OPS
462extern void update_menu_allowColorOps(void);
463extern void update_menu_allowFontOps(void);
464extern void update_menu_allowTcapOps(void);
465extern void update_menu_allowTitleOps(void);
466extern void update_menu_allowWindowOps(void);
467#endif
468
469#if OPT_BLINK_CURS
470extern void update_cursorblink(void);
471#else
472#define update_cursorblink() /* nothing */
473#endif
474
475extern void update_altscreen(void);
476extern void update_titeInhibit(void);
477
478#ifndef NO_ACTIVE_ICON
479extern void update_activeicon(void);
480#endif /* NO_ACTIVE_ICON */
481
482#if OPT_DEC_CHRSET
483extern void update_font_doublesize(void);
484#else
485#define update_font_doublesize() /* nothing */
486#endif
487
488#if OPT_BOX_CHARS
489extern void update_font_boxchars(void);
490extern void update_font_packed(void);
491#else
492#define update_font_boxchars() /* nothing */
493#define update_font_packed() /* nothing */
494#endif
495
496#if OPT_SIXEL_GRAPHICS
497extern void update_decsdm(void);
498#else
499#define update_decsdm() /* nothing */
500#endif
501
502#if OPT_GRAPHICS
503extern void update_privatecolorregisters(void);
504#else
505#define update_privatecolorregisters() /* nothing */
506#endif
507
508#if OPT_DEC_SOFTFONT
509extern void update_font_loadable(void);
510#else
511#define update_font_loadable() /* nothing */
512#endif
513
514#if OPT_RENDERFONT
515extern void update_font_renderfont(void);
516#else
517#define update_font_renderfont() /* nothing */
518#endif
519
520#if OPT_WIDE_CHARS
521extern void update_font_utf8_mode(void);
522extern void update_font_utf8_fonts(void);
523extern void update_font_utf8_title(void);
524#else
525#define update_font_utf8_mode() /* nothing */
526#define update_font_utf8_fonts() /* nothing */
527#define update_font_utf8_title() /* nothing */
528#endif
529
530#if OPT_TEK4014
531extern void update_tekshow(void);
532extern void update_vttekmode(void);
533extern void update_vtshow(void);
534extern void set_vthide_sensitivity(void);
535extern void set_tekhide_sensitivity(void);
536#else
537#define update_tekshow() /*nothing*/
538#define update_vttekmode() /*nothing*/
539#define update_vtshow() /*nothing*/
540#define set_vthide_sensitivity() /*nothing*/
541#define set_tekhide_sensitivity() /*nothing*/
542#endif
543
544#if OPT_DEC_CHRSET || OPT_BOX_CHARS || OPT_DEC_SOFTFONT
545extern void update_menu_allowBoldFonts(void);
546#else
547#define update_menu_allowBoldFonts() /*nothing*/
548#endif
549
550/*
551 * macros for mapping font size to tekMenu placement
552 */
553#define FS2MI(n) (n)			/* font_size_to_menu_item */
554#define MI2FS(n) (n)			/* menu_item_to_font_size */
555
556#if OPT_TEK4014
557extern void set_tekfont_menu_item(int n,int val);
558#else
559#define set_tekfont_menu_item(n,val) /*nothing*/
560#endif
561
562extern void set_menu_font(int val);
563
564/* *INDENT-ON* */
565
566#endif /* included_menu_h */
567