lwlib.h 4.61 KB
Newer Older
1 2
/*
Copyright (C) 1992, 1993 Lucid, Inc.
Paul Eggert's avatar
Paul Eggert committed
3
Copyright (C) 1994, 1999-2020 Free Software Foundation, Inc.
4 5 6 7 8 9 10 11 12 13 14 15 16 17

This file is part of the Lucid Widget Library.

The Lucid Widget Library 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 1, or (at your option)
any later version.

The Lucid Widget Library 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
18
along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.  */
19 20


Richard M. Stallman's avatar
Richard M. Stallman committed
21 22 23 24 25 26 27
#ifndef LWLIB_H
#define LWLIB_H

#include <X11/Intrinsic.h>

/*
** Widget values depend on the Widget type:
28
**
Richard M. Stallman's avatar
Richard M. Stallman committed
29 30 31 32
** widget:   (name value key enabled data contents/selected)
**
** label:    ("name" "string" NULL NULL NULL NULL)
** button:   ("name" "string" "key" T/F data <default-button-p>)
33
** button w/menu:
Richard M. Stallman's avatar
Richard M. Stallman committed
34 35 36 37 38 39 40 41
**           ("name" "string" "key" T/F data (label|button|button w/menu...))
** menubar:  ("name" NULL NULL T/F data (button w/menu))
** selectable thing:
**           ("name" "string" "key" T/F data T/F)
** checkbox: selectable thing
** radio:    ("name" NULL NULL T/F data (selectable thing...))
** strings:  ("name" NULL NULL T/F data (selectable thing...))
** text:     ("name" "string" <ign> T/F data)
Paul Reilly's avatar
Paul Reilly committed
42
** main:     ("name")
Richard M. Stallman's avatar
Richard M. Stallman committed
43 44
*/

45
#include "lwlib-widget.h"
Richard M. Stallman's avatar
Richard M. Stallman committed
46

47
typedef unsigned int LWLIB_ID;
Gerd Moellmann's avatar
Gerd Moellmann committed
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63

/* Menu separator types.  */

enum menu_separator
{
  /* These values are Motif compatible.  */
  SEPARATOR_NO_LINE,
  SEPARATOR_SINGLE_LINE,
  SEPARATOR_DOUBLE_LINE,
  SEPARATOR_SINGLE_DASHED_LINE,
  SEPARATOR_DOUBLE_DASHED_LINE,
  SEPARATOR_SHADOW_ETCHED_IN,
  SEPARATOR_SHADOW_ETCHED_OUT,
  SEPARATOR_SHADOW_ETCHED_IN_DASH,
  SEPARATOR_SHADOW_ETCHED_OUT_DASH,

64
  /* The following are supported by Lucid menus.  */
Gerd Moellmann's avatar
Gerd Moellmann committed
65 66 67 68 69 70
  SEPARATOR_SHADOW_DOUBLE_ETCHED_IN,
  SEPARATOR_SHADOW_DOUBLE_ETCHED_OUT,
  SEPARATOR_SHADOW_DOUBLE_ETCHED_IN_DASH,
  SEPARATOR_SHADOW_DOUBLE_ETCHED_OUT_DASH
};

Richard M. Stallman's avatar
Richard M. Stallman committed
71

Jan D's avatar
Jan D committed
72 73
typedef void (*lw_callback) (Widget w, LWLIB_ID id, void* data);

74
void  lw_register_widget (const char* type, const char* name, LWLIB_ID id,
Jan D's avatar
Jan D committed
75 76 77 78 79 80
                          widget_value* val, lw_callback pre_activate_cb,
                          lw_callback selection_cb,
                          lw_callback post_activate_cb,
                          lw_callback highlight_cb);
Widget lw_get_widget (LWLIB_ID id, Widget parent, Boolean pop_up_p);
Widget lw_make_widget (LWLIB_ID id, Widget parent, Boolean pop_up_p);
81
Widget lw_create_widget (const char* type, const char* name, LWLIB_ID id,
Jan D's avatar
Jan D committed
82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
                         widget_value* val, Widget parent, Boolean pop_up_p,
                         lw_callback pre_activate_cb,
                         lw_callback selection_cb,
                         lw_callback post_activate_cb,
                         lw_callback highlight_cb);
LWLIB_ID lw_get_widget_id (Widget w);
int lw_modify_all_widgets (LWLIB_ID id, widget_value* val, Boolean deep_p);
void lw_destroy_widget (Widget w);
void lw_destroy_all_widgets (LWLIB_ID id);
void lw_destroy_everything (void);
void lw_destroy_all_pop_ups (void);
Widget lw_raise_all_pop_up_widgets (void);
widget_value* lw_get_all_values (LWLIB_ID id);
Boolean lw_get_some_values (LWLIB_ID id, widget_value* val);
void lw_pop_up_all_widgets (LWLIB_ID id);
void lw_pop_down_all_widgets (LWLIB_ID id);
void lw_popup_menu (Widget, XEvent *);
Richard M. Stallman's avatar
Richard M. Stallman committed
99 100

/* Toolkit independent way of focusing on a Widget at the Xt level. */
Jan D's avatar
Jan D committed
101
void lw_set_keyboard_focus (Widget parent, Widget w);
Richard M. Stallman's avatar
Richard M. Stallman committed
102 103

/* Silly Energize hack to invert the "sheet" button */
Jan D's avatar
Jan D committed
104
void lw_show_busy (Widget w, Boolean busy);
Paul Reilly's avatar
Paul Reilly committed
105 106

/* Silly hack to assist with Lucid/Athena geometry management. */
Jan D's avatar
Jan D committed
107
void lw_refigure_widget (Widget w, Boolean doit);
Paul Reilly's avatar
Paul Reilly committed
108 109 110

/* Toolkit independent way of determining if an event occurred on a
   menubar. */
Jan D's avatar
Jan D committed
111
Boolean lw_window_is_in_menubar (Window win, Widget menubar_widget);
Paul Reilly's avatar
Paul Reilly committed
112 113

/* Manage resizing: TRUE permits resizing widget w; FALSE disallows it. */
Jan D's avatar
Jan D committed
114
void lw_allow_resizing (Widget w, Boolean flag);
Richard M. Stallman's avatar
Richard M. Stallman committed
115

Paul Reilly's avatar
Paul Reilly committed
116
/* Set up the main window. */
Jan D's avatar
Jan D committed
117 118 119
void lw_set_main_areas (Widget parent,
                        Widget menubar,
                        Widget work_area);
Paul Reilly's avatar
Paul Reilly committed
120

Gerd Moellmann's avatar
Gerd Moellmann committed
121 122 123 124 125
/* Value is non-zero if LABEL is a menu separator.  If it is, *TYPE is
   set to an appropriate enumerator of type enum menu_separator.
   MOTIF_P non-zero means map separator types not supported by Motif
   to similar ones that are supported.  */

126
int lw_separator_p (const char *label, enum menu_separator *type,
Jan D's avatar
Jan D committed
127
                    int motif_p);
Dave Love's avatar
Dave Love committed
128

Richard M. Stallman's avatar
Richard M. Stallman committed
129
#endif /* LWLIB_H */