menu.h revision 913cc679
1/* $XTermId: menu.h,v 1.139 2016/12/22 02:04:51 tom Exp $ */
2
3/*
4 * Copyright 1999-2015,2016 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 HandleAllowMouseOps    PROTO_XT_ACTIONS_ARGS;
83extern void HandleAllowSends       PROTO_XT_ACTIONS_ARGS;
84extern void HandleAllowTcapOps     PROTO_XT_ACTIONS_ARGS;
85extern void HandleAllowTitleOps    PROTO_XT_ACTIONS_ARGS;
86extern void HandleAllowWindowOps   PROTO_XT_ACTIONS_ARGS;
87extern void HandleAltEsc           PROTO_XT_ACTIONS_ARGS;
88extern void HandleAltScreen        PROTO_XT_ACTIONS_ARGS;
89extern void HandleAppCursor        PROTO_XT_ACTIONS_ARGS;
90extern void HandleAppKeypad        PROTO_XT_ACTIONS_ARGS;
91extern void HandleAutoLineFeed     PROTO_XT_ACTIONS_ARGS;
92extern void HandleAutoWrap         PROTO_XT_ACTIONS_ARGS;
93extern void HandleBackarrow        PROTO_XT_ACTIONS_ARGS;
94extern void HandleBellIsUrgent     PROTO_XT_ACTIONS_ARGS;
95extern void HandleClearSavedLines  PROTO_XT_ACTIONS_ARGS;
96extern void HandleCreateMenu       PROTO_XT_ACTIONS_ARGS;
97extern void HandleCursesEmul       PROTO_XT_ACTIONS_ARGS;
98extern void HandleCursorBlink      PROTO_XT_ACTIONS_ARGS;
99extern void HandleDeleteIsDEL      PROTO_XT_ACTIONS_ARGS;
100extern void HandleDumpHtml         PROTO_XT_ACTIONS_ARGS;
101extern void HandleDumpSvg          PROTO_XT_ACTIONS_ARGS;
102extern void HandleFontBoxChars     PROTO_XT_ACTIONS_ARGS;
103extern void HandleFontDoublesize   PROTO_XT_ACTIONS_ARGS;
104extern void HandleFontLoading      PROTO_XT_ACTIONS_ARGS;
105extern void HandleFontPacked       PROTO_XT_ACTIONS_ARGS;
106extern void HandleFullscreen       PROTO_XT_ACTIONS_ARGS;
107extern void HandleHardReset        PROTO_XT_ACTIONS_ARGS;
108extern void HandleHpFunctionKeys   PROTO_XT_ACTIONS_ARGS;
109extern void HandleJumpscroll       PROTO_XT_ACTIONS_ARGS;
110extern void HandleKeepClipboard    PROTO_XT_ACTIONS_ARGS;
111extern void HandleKeepSelection    PROTO_XT_ACTIONS_ARGS;
112extern void HandleLogging          PROTO_XT_ACTIONS_ARGS;
113extern void HandleMarginBell       PROTO_XT_ACTIONS_ARGS;
114extern void HandleMetaEsc          PROTO_XT_ACTIONS_ARGS;
115extern void HandleNumLock          PROTO_XT_ACTIONS_ARGS;
116extern void HandleOldFunctionKeys  PROTO_XT_ACTIONS_ARGS;
117extern void HandlePopupMenu        PROTO_XT_ACTIONS_ARGS;
118extern void HandlePrintControlMode PROTO_XT_ACTIONS_ARGS;
119extern void HandlePrintEverything  PROTO_XT_ACTIONS_ARGS;
120extern void HandlePrintScreen      PROTO_XT_ACTIONS_ARGS;
121extern void HandleQuit             PROTO_XT_ACTIONS_ARGS;
122extern void HandleRedraw           PROTO_XT_ACTIONS_ARGS;
123extern void HandleRenderFont       PROTO_XT_ACTIONS_ARGS;
124extern void HandleReverseVideo     PROTO_XT_ACTIONS_ARGS;
125extern void HandleReverseWrap      PROTO_XT_ACTIONS_ARGS;
126extern void HandleScoFunctionKeys  PROTO_XT_ACTIONS_ARGS;
127extern void HandleScrollKey        PROTO_XT_ACTIONS_ARGS;
128extern void HandleScrollTtyOutput  PROTO_XT_ACTIONS_ARGS;
129extern void HandleScrollbar        PROTO_XT_ACTIONS_ARGS;
130extern void HandleSecure           PROTO_XT_ACTIONS_ARGS;
131extern void HandleSendSignal       PROTO_XT_ACTIONS_ARGS;
132extern void HandleSetPopOnBell     PROTO_XT_ACTIONS_ARGS;
133extern void HandleSetPrivateColorRegisters PROTO_XT_ACTIONS_ARGS;
134extern void HandleSetSelect        PROTO_XT_ACTIONS_ARGS;
135extern void HandleSetTekText       PROTO_XT_ACTIONS_ARGS;
136extern void HandleSetTerminalType  PROTO_XT_ACTIONS_ARGS;
137extern void HandleSetVisualBell    PROTO_XT_ACTIONS_ARGS;
138extern void HandleSixelScrolling   PROTO_XT_ACTIONS_ARGS;
139extern void HandleSoftReset        PROTO_XT_ACTIONS_ARGS;
140extern void HandleSunFunctionKeys  PROTO_XT_ACTIONS_ARGS;
141extern void HandleSunKeyboard      PROTO_XT_ACTIONS_ARGS;
142extern void HandleTekCopy          PROTO_XT_ACTIONS_ARGS;
143extern void HandleTekPage          PROTO_XT_ACTIONS_ARGS;
144extern void HandleTekReset         PROTO_XT_ACTIONS_ARGS;
145extern void HandleTiteInhibit      PROTO_XT_ACTIONS_ARGS;
146extern void HandleToolbar          PROTO_XT_ACTIONS_ARGS;
147extern void HandleUTF8Fonts        PROTO_XT_ACTIONS_ARGS;
148extern void HandleUTF8Mode         PROTO_XT_ACTIONS_ARGS;
149extern void HandleUTF8Title        PROTO_XT_ACTIONS_ARGS;
150extern void HandleVisibility       PROTO_XT_ACTIONS_ARGS;
151extern void HandleWriteError       PROTO_XT_ACTIONS_ARGS;
152extern void HandleWriteNow         PROTO_XT_ACTIONS_ARGS;
153
154extern void SetupMenus (Widget /*shell*/, Widget */*forms*/, Widget */*menus*/, Dimension * /*menu_high*/);
155
156#if OPT_TOOLBAR
157extern void ShowToolbar(Bool);
158#endif
159
160/*
161 * The following definitions MUST match the order of entries given in
162 * the mainMenuEntries, vtMenuEntries, and tekMenuEntries arrays in menu.c.
163 */
164
165/*
166 * items in primary menu
167 */
168typedef enum {
169#if OPT_TOOLBAR
170    mainMenu_toolbar,
171#endif
172#if OPT_MAXIMIZE
173    mainMenu_fullscreen,
174#endif
175    mainMenu_securekbd,
176    mainMenu_allowsends,
177    mainMenu_redraw,
178    mainMenu_line1,
179#ifdef ALLOWLOGGING
180    mainMenu_logging,
181#endif
182#if OPT_PRINT_ON_EXIT
183    mainMenu_write_now,
184    mainMenu_write_error,
185#endif
186    mainMenu_print,
187    mainMenu_print_redir,
188#if OPT_SCREEN_DUMPS
189    mainMenu_dump_html,
190    mainMenu_dump_svg,
191#endif
192    mainMenu_line2,
193    mainMenu_8bit_ctrl,
194    mainMenu_backarrow,
195#if OPT_NUM_LOCK
196    mainMenu_num_lock,
197    mainMenu_alt_esc,
198    mainMenu_meta_esc,
199#endif
200    mainMenu_delete_del,
201    mainMenu_old_fkeys,
202#if OPT_TCAP_FKEYS
203    mainMenu_tcap_fkeys,
204#endif
205#if OPT_HP_FUNC_KEYS
206    mainMenu_hp_fkeys,
207#endif
208#if OPT_SCO_FUNC_KEYS
209    mainMenu_sco_fkeys,
210#endif
211#if OPT_SUN_FUNC_KEYS
212    mainMenu_sun_fkeys,
213#endif
214#if OPT_SUNPC_KBD
215    mainMenu_sun_kbd,
216#endif
217    mainMenu_line3,
218    mainMenu_suspend,
219    mainMenu_continue,
220    mainMenu_interrupt,
221    mainMenu_hangup,
222    mainMenu_terminate,
223    mainMenu_kill,
224    mainMenu_line4,
225    mainMenu_quit,
226    mainMenu_LAST
227} mainMenuIndices;
228
229
230/*
231 * items in vt100 mode menu
232 */
233typedef enum {
234    vtMenu_scrollbar,
235    vtMenu_jumpscroll,
236    vtMenu_reversevideo,
237    vtMenu_autowrap,
238    vtMenu_reversewrap,
239    vtMenu_autolinefeed,
240    vtMenu_appcursor,
241    vtMenu_appkeypad,
242    vtMenu_scrollkey,
243    vtMenu_scrollttyoutput,
244    vtMenu_allow132,
245    vtMenu_keepSelection,
246    vtMenu_selectToClipboard,
247    vtMenu_visualbell,
248    vtMenu_bellIsUrgent,
249    vtMenu_poponbell,
250#if OPT_BLINK_CURS
251    vtMenu_cursorblink,
252#endif
253    vtMenu_titeInhibit,
254#ifndef NO_ACTIVE_ICON
255    vtMenu_activeicon,
256#endif /* NO_ACTIVE_ICON */
257    vtMenu_line1,
258    vtMenu_softreset,
259    vtMenu_hardreset,
260    vtMenu_clearsavedlines,
261    vtMenu_line2,
262#if OPT_TEK4014
263    vtMenu_tekshow,
264    vtMenu_tekmode,
265    vtMenu_vthide,
266#endif
267    vtMenu_altscreen,
268#if OPT_SIXEL_GRAPHICS
269    vtMenu_sixelscrolling,
270#endif
271#if OPT_GRAPHICS
272    vtMenu_privatecolorregisters,
273#endif
274    vtMenu_LAST
275} vtMenuIndices;
276
277/*
278 * items in vt100 font menu
279 */
280typedef enum {
281    fontMenu_default,
282    fontMenu_font1,
283    fontMenu_font2,
284    fontMenu_font3,
285    fontMenu_font4,
286    fontMenu_font5,
287    fontMenu_font6,
288#define fontMenu_lastBuiltin fontMenu_font6
289    fontMenu_fontescape,
290    fontMenu_fontsel,
291/* number of non-line items down to here should match NMENUFONTS in ptyx.h */
292
293#if OPT_DEC_CHRSET || OPT_BOX_CHARS || OPT_DEC_SOFTFONT
294    fontMenu_line1,
295    fontMenu_allowBoldFonts,
296#if OPT_BOX_CHARS
297    fontMenu_font_boxchars,
298    fontMenu_font_packedfont,
299#endif
300#if OPT_DEC_CHRSET
301    fontMenu_font_doublesize,
302#endif
303#if OPT_DEC_SOFTFONT
304    fontMenu_font_loadable,
305#endif
306#endif
307
308#if OPT_RENDERFONT || OPT_WIDE_CHARS
309    fontMenu_line2,
310#if OPT_RENDERFONT
311    fontMenu_render_font,
312#endif
313#if OPT_WIDE_CHARS
314    fontMenu_utf8_mode,
315    fontMenu_utf8_fonts,
316    fontMenu_utf8_title,
317#endif
318#endif
319#if OPT_ALLOW_XXX_OPS
320    fontMenu_line3,
321    fontMenu_allowColorOps,
322    fontMenu_allowFontOps,
323    fontMenu_allowMouseOps,
324    fontMenu_allowTcapOps,
325    fontMenu_allowTitleOps,
326    fontMenu_allowWindowOps,
327#endif
328
329    fontMenu_LAST
330} fontMenuIndices;
331
332/*
333 * items in tek4014 mode menu
334 */
335#if OPT_TEK4014
336typedef enum {
337    tekMenu_tektextlarge,
338    tekMenu_tektext2,
339    tekMenu_tektext3,
340    tekMenu_tektextsmall,
341    tekMenu_line1,
342    tekMenu_tekpage,
343    tekMenu_tekreset,
344    tekMenu_tekcopy,
345    tekMenu_line2,
346    tekMenu_vtshow,
347    tekMenu_vtmode,
348    tekMenu_tekhide,
349    tekMenu_LAST
350} tekMenuIndices;
351#endif
352
353
354/*
355 * functions for updating menus
356 */
357
358extern void SetItemSensitivity(Widget mi, Bool val);
359
360typedef enum {
361    toggleErr = -2,
362    toggleAll = -1,
363    toggleOff = 0,
364    toggleOn = 1
365} ToggleEnum;
366
367extern int decodeToggle(XtermWidget /* xw */, String * /* params */, Cardinal /* nparams */);
368
369/*
370 * there should be one of each of the following for each checkable item
371 */
372#if OPT_TOOLBAR
373extern void update_toolbar(void);
374#else
375#define update_toolbar() /* nothing */
376#endif
377
378#if OPT_MAXIMIZE
379extern void update_fullscreen(void);
380#else
381#define update_fullscreen() /* nothing */
382#endif
383
384extern void update_securekbd(void);
385extern void update_allowsends(void);
386
387#ifdef ALLOWLOGGING
388extern void update_logging(void);
389#else
390#define update_logging() /*nothing*/
391#endif
392
393#if OPT_PRINT_ON_EXIT
394extern void update_write_error(void);
395#else
396#define update_write_error() /*nothing*/
397#endif
398
399extern void update_print_redir(void);
400extern void update_8bit_control(void);
401extern void update_decbkm(void);
402
403#if OPT_NUM_LOCK
404extern void update_num_lock(void);
405extern void update_alt_esc(void);
406extern void update_meta_esc(void);
407#else
408#define update_num_lock() /*nothing*/
409#define update_alt_esc()  /*nothing*/
410#define update_meta_esc() /*nothing*/
411#endif
412
413extern void update_old_fkeys(void);
414extern void update_delete_del(void);
415
416#if OPT_SUNPC_KBD
417extern void update_sun_kbd(void);
418#endif
419
420#if OPT_HP_FUNC_KEYS
421extern void update_hp_fkeys(void);
422#else
423#define update_hp_fkeys() /*nothing*/
424#endif
425
426#if OPT_SCO_FUNC_KEYS
427extern void update_sco_fkeys(void);
428#else
429#define update_sco_fkeys() /*nothing*/
430#endif
431
432#if OPT_SUN_FUNC_KEYS
433extern void update_sun_fkeys(void);
434#else
435#define update_sun_fkeys() /*nothing*/
436#endif
437
438#if OPT_TCAP_FKEYS
439extern void update_tcap_fkeys(void);
440#else
441#define update_tcap_fkeys() /*nothing*/
442#endif
443
444extern void update_scrollbar(void);
445extern void update_jumpscroll(void);
446extern void update_reversevideo(void);
447extern void update_autowrap(void);
448extern void update_reversewrap(void);
449extern void update_autolinefeed(void);
450extern void update_appcursor(void);
451extern void update_appkeypad(void);
452extern void update_scrollkey(void);
453extern void update_keepSelection(void);
454extern void update_selectToClipboard(void);
455extern void update_scrollttyoutput(void);
456extern void update_allow132(void);
457extern void update_cursesemul(void);
458extern void update_visualbell(void);
459extern void update_bellIsUrgent(void);
460extern void update_poponbell(void);
461
462#define update_keepClipboard() /* nothing */
463#define update_marginbell() /* nothing */
464
465#if OPT_LOAD_VTFONTS
466extern void update_font_escape(void);
467#else
468#define update_font_escape() /* nothing */
469#endif
470
471#if OPT_ALLOW_XXX_OPS
472extern void update_menu_allowColorOps(void);
473extern void update_menu_allowFontOps(void);
474extern void update_menu_allowMouseOps(void);
475extern void update_menu_allowTcapOps(void);
476extern void update_menu_allowTitleOps(void);
477extern void update_menu_allowWindowOps(void);
478#endif
479
480#if OPT_BLINK_CURS
481extern void update_cursorblink(void);
482#else
483#define update_cursorblink() /* nothing */
484#endif
485
486extern void update_altscreen(void);
487extern void update_titeInhibit(void);
488
489#ifndef NO_ACTIVE_ICON
490extern void update_activeicon(void);
491#endif /* NO_ACTIVE_ICON */
492
493#if OPT_DEC_CHRSET
494extern void update_font_doublesize(void);
495#else
496#define update_font_doublesize() /* nothing */
497#endif
498
499#if OPT_BOX_CHARS
500extern void update_font_boxchars(void);
501extern void update_font_packed(void);
502#else
503#define update_font_boxchars() /* nothing */
504#define update_font_packed() /* nothing */
505#endif
506
507#if OPT_SIXEL_GRAPHICS
508extern void update_decsdm(void);
509#else
510#define update_decsdm() /* nothing */
511#endif
512
513#if OPT_GRAPHICS
514extern void update_privatecolorregisters(void);
515#else
516#define update_privatecolorregisters() /* nothing */
517#endif
518
519#if OPT_DEC_SOFTFONT
520extern void update_font_loadable(void);
521#else
522#define update_font_loadable() /* nothing */
523#endif
524
525#if OPT_RENDERFONT
526extern void update_font_renderfont(void);
527#else
528#define update_font_renderfont() /* nothing */
529#endif
530
531#if OPT_WIDE_CHARS
532extern void update_font_utf8_mode(void);
533extern void update_font_utf8_fonts(void);
534extern void update_font_utf8_title(void);
535#else
536#define update_font_utf8_mode() /* nothing */
537#define update_font_utf8_fonts() /* nothing */
538#define update_font_utf8_title() /* nothing */
539#endif
540
541#if OPT_TEK4014
542extern void update_tekshow(void);
543extern void update_vttekmode(void);
544extern void update_vtshow(void);
545extern void set_vthide_sensitivity(void);
546extern void set_tekhide_sensitivity(void);
547#else
548#define update_tekshow() /*nothing*/
549#define update_vttekmode() /*nothing*/
550#define update_vtshow() /*nothing*/
551#define set_vthide_sensitivity() /*nothing*/
552#define set_tekhide_sensitivity() /*nothing*/
553#endif
554
555#if OPT_DEC_CHRSET || OPT_BOX_CHARS || OPT_DEC_SOFTFONT
556extern void update_menu_allowBoldFonts(void);
557#else
558#define update_menu_allowBoldFonts() /*nothing*/
559#endif
560
561/*
562 * macros for mapping font size to tekMenu placement
563 */
564#define FS2MI(n) (n)			/* font_size_to_menu_item */
565#define MI2FS(n) (n)			/* menu_item_to_font_size */
566
567#if OPT_TEK4014
568extern void set_tekfont_menu_item(int n,int val);
569#else
570#define set_tekfont_menu_item(n,val) /*nothing*/
571#endif
572
573extern void set_menu_font(int val);
574
575/* *INDENT-ON* */
576
577#endif /* included_menu_h */
578