menu.h 3.57 KB
Newer Older
Andreas Schwab's avatar
Andreas Schwab committed
1
/* Functions to manipulate menus.
2
   Copyright (C) 2008-2014 Free Software Foundation, Inc.
Andreas Schwab's avatar
Andreas Schwab committed
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21

This file is part of GNU Emacs.

GNU Emacs is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

GNU Emacs is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */

#ifndef MENU_H
#define MENU_H

22
#include "systime.h" /* for Time */
23
#if defined (USE_X_TOOLKIT) || defined (USE_GTK) || defined (HAVE_NS)
24 25
#include "../lwlib/lwlib.h" /* for widget_value */
#endif
26

27
#ifdef HAVE_NTGUI
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
/* This is based on the one in ../lwlib/lwlib.h, with unused portions
   removed.  HAVE_NTGUI cannot include lwlib.h, as that pulls in X11
   headers.  */

enum button_type
{
  BUTTON_TYPE_NONE,
  BUTTON_TYPE_TOGGLE,
  BUTTON_TYPE_RADIO
};

typedef struct _widget_value
{
  /* name of widget */
  Lisp_Object   lname;
  const char*   name;
  /* value (meaning depend on widget type) */
  const char*   value;
  /* keyboard equivalent. no implications for XtTranslations */
  Lisp_Object   lkey;
  const char*   key;
  /* Help string or nil if none.
     GC finds this string through the frame's menu_bar_vector
     or through menu_items.  */
  Lisp_Object   help;
  /* true if enabled */
  unsigned char enabled;
  /* true if selected */
  unsigned char selected;
  /* The type of a button.  */
  enum button_type button_type;
  /* true if menu title */
  unsigned char title;
  /* Contents of the sub-widgets, also selected slot for checkbox */
  struct _widget_value* contents;
  /* data passed to callback */
  void  *call_data;
  /* next one in the list */
  struct _widget_value* next;
} widget_value;

69 70 71
extern Lisp_Object Qunsupported__w32_dialog;
#endif

72 73 74 75
extern void x_set_menu_bar_lines (struct frame *f,
                                  Lisp_Object value,
                                  Lisp_Object oldval);

Jan D's avatar
Jan D committed
76
extern void init_menu_items (void);
77
extern void finish_menu_items (void) ATTRIBUTE_CONST;
Jan D's avatar
Jan D committed
78 79
extern void discard_menu_items (void);
extern void save_menu_items (void);
80
extern bool parse_single_submenu (Lisp_Object, Lisp_Object, Lisp_Object);
Jan D's avatar
Jan D committed
81
extern void list_of_panes (Lisp_Object);
82 83
#if defined (USE_X_TOOLKIT) || defined (USE_GTK) || defined (HAVE_NTGUI) \
  || defined (HAVE_NS)
Jan D's avatar
Jan D committed
84 85
extern void free_menubar_widget_value_tree (widget_value *);
extern void update_submenu_strings (widget_value *);
Dmitry Antipov's avatar
Dmitry Antipov committed
86
extern void find_and_call_menu_selection (struct frame *, int,
Jan D's avatar
Jan D committed
87
                                          Lisp_Object, void *);
88
extern widget_value *make_widget_value (const char *, char *, bool, Lisp_Object);
89
extern widget_value *digest_single_submenu (int, int, bool);
Andreas Schwab's avatar
Andreas Schwab committed
90 91
#endif

92
#ifdef HAVE_X_WINDOWS
Dmitry Antipov's avatar
Dmitry Antipov committed
93
extern void mouse_position_for_popup (struct frame *f, int *x, int *y);
94 95
#endif

Dmitry Antipov's avatar
Dmitry Antipov committed
96
extern Lisp_Object w32_menu_show (struct frame *, int, int, int, int,
97
				  Lisp_Object, const char **);
Dmitry Antipov's avatar
Dmitry Antipov committed
98
extern Lisp_Object ns_menu_show (struct frame *, int, int, bool, bool,
99
				 Lisp_Object, const char **);
Dmitry Antipov's avatar
Dmitry Antipov committed
100
extern Lisp_Object xmenu_show (struct frame *, int, int, bool, bool,
101
			       Lisp_Object, const char **);
102 103
extern Lisp_Object tty_menu_show (struct frame *, int, int, bool, bool,
				  Lisp_Object, bool, const char **);
104
extern ptrdiff_t menu_item_width (const unsigned char *);
Andreas Schwab's avatar
Andreas Schwab committed
105
#endif /* MENU_H */