76178
|
1 /*
|
|
2 Copyright (C) 1992, 1993 Lucid, Inc.
|
|
3 Copyright (C) 1994, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
|
79747
|
4 2007, 2008 Free Software Foundation, Inc.
|
76178
|
5
|
|
6 This file is part of the Lucid Widget Library.
|
|
7
|
|
8 The Lucid Widget Library is free software; you can redistribute it and/or
|
|
9 modify it under the terms of the GNU General Public License as published by
|
|
10 the Free Software Foundation; either version 1, or (at your option)
|
|
11 any later version.
|
|
12
|
|
13 The Lucid Widget Library is distributed in the hope that it will be useful,
|
|
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
16 GNU General Public License for more details.
|
|
17
|
|
18 You should have received a copy of the GNU General Public License
|
|
19 along with GNU Emacs; see the file COPYING. If not, write to
|
|
20 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
21 Boston, MA 02110-1301, USA. */
|
|
22
|
|
23
|
5626
|
24 #ifndef LWLIB_H
|
|
25 #define LWLIB_H
|
|
26
|
|
27 #include <X11/Intrinsic.h>
|
|
28
|
|
29 /*
|
|
30 ** Widget values depend on the Widget type:
|
49600
|
31 **
|
5626
|
32 ** widget: (name value key enabled data contents/selected)
|
|
33 **
|
|
34 ** label: ("name" "string" NULL NULL NULL NULL)
|
|
35 ** button: ("name" "string" "key" T/F data <default-button-p>)
|
49600
|
36 ** button w/menu:
|
5626
|
37 ** ("name" "string" "key" T/F data (label|button|button w/menu...))
|
|
38 ** menubar: ("name" NULL NULL T/F data (button w/menu))
|
|
39 ** selectable thing:
|
|
40 ** ("name" "string" "key" T/F data T/F)
|
|
41 ** checkbox: selectable thing
|
|
42 ** radio: ("name" NULL NULL T/F data (selectable thing...))
|
|
43 ** strings: ("name" NULL NULL T/F data (selectable thing...))
|
|
44 ** text: ("name" "string" <ign> T/F data)
|
8784
|
45 ** main: ("name")
|
5626
|
46 */
|
|
47
|
|
48 typedef unsigned long LWLIB_ID;
|
|
49
|
|
50 typedef enum _change_type
|
|
51 {
|
|
52 NO_CHANGE = 0,
|
|
53 INVISIBLE_CHANGE = 1,
|
|
54 VISIBLE_CHANGE = 2,
|
|
55 STRUCTURAL_CHANGE = 3
|
|
56 } change_type;
|
|
57
|
25035
|
58 enum button_type
|
|
59 {
|
|
60 BUTTON_TYPE_NONE,
|
|
61 BUTTON_TYPE_TOGGLE,
|
|
62 BUTTON_TYPE_RADIO
|
|
63 };
|
|
64
|
|
65 /* Menu separator types. */
|
|
66
|
|
67 enum menu_separator
|
|
68 {
|
|
69 /* These values are Motif compatible. */
|
|
70 SEPARATOR_NO_LINE,
|
|
71 SEPARATOR_SINGLE_LINE,
|
|
72 SEPARATOR_DOUBLE_LINE,
|
|
73 SEPARATOR_SINGLE_DASHED_LINE,
|
|
74 SEPARATOR_DOUBLE_DASHED_LINE,
|
|
75 SEPARATOR_SHADOW_ETCHED_IN,
|
|
76 SEPARATOR_SHADOW_ETCHED_OUT,
|
|
77 SEPARATOR_SHADOW_ETCHED_IN_DASH,
|
|
78 SEPARATOR_SHADOW_ETCHED_OUT_DASH,
|
|
79
|
41766
|
80 /* The following are supported by Lucid menus. */
|
25035
|
81 SEPARATOR_SHADOW_DOUBLE_ETCHED_IN,
|
|
82 SEPARATOR_SHADOW_DOUBLE_ETCHED_OUT,
|
|
83 SEPARATOR_SHADOW_DOUBLE_ETCHED_IN_DASH,
|
|
84 SEPARATOR_SHADOW_DOUBLE_ETCHED_OUT_DASH
|
|
85 };
|
|
86
|
5626
|
87 typedef struct _widget_value
|
|
88 {
|
|
89 /* name of widget */
|
56845
|
90 Lisp_Object lname;
|
5626
|
91 char* name;
|
|
92 /* value (meaning depend on widget type) */
|
|
93 char* value;
|
49600
|
94 /* keyboard equivalent. no implications for XtTranslations */
|
56845
|
95 Lisp_Object lkey;
|
5626
|
96 char* key;
|
41766
|
97 /* Help string or nil if none.
|
|
98 GC finds this string through the frame's menu_bar_vector
|
|
99 or through menu_items. */
|
|
100 Lisp_Object help;
|
5626
|
101 /* true if enabled */
|
|
102 Boolean enabled;
|
|
103 /* true if selected */
|
|
104 Boolean selected;
|
|
105 /* true if was edited (maintained by get_value) */
|
|
106 Boolean edited;
|
25035
|
107 /* The type of a button. */
|
|
108 enum button_type button_type;
|
5626
|
109 /* true if has changed (maintained by lw library) */
|
|
110 change_type change;
|
14878
|
111 /* true if this widget itself has changed,
|
|
112 but not counting the other widgets found in the `next' field. */
|
|
113 change_type this_one_change;
|
5626
|
114 /* Contents of the sub-widgets, also selected slot for checkbox */
|
|
115 struct _widget_value* contents;
|
|
116 /* data passed to callback */
|
|
117 XtPointer call_data;
|
|
118 /* next one in the list */
|
|
119 struct _widget_value* next;
|
|
120 /* slot for the toolkit dependent part. Always initialize to NULL. */
|
|
121 void* toolkit_data;
|
|
122 /* tell us if we should free the toolkit data slot when freeing the
|
|
123 widget_value itself. */
|
|
124 Boolean free_toolkit_data;
|
|
125
|
|
126 /* we resource the widget_value structures; this points to the next
|
|
127 one on the free list if this one has been deallocated.
|
|
128 */
|
|
129 struct _widget_value *free_list;
|
|
130 } widget_value;
|
|
131
|
|
132
|
29466
|
133 typedef void (*lw_callback) __P ((Widget w, LWLIB_ID id, void* data));
|
5626
|
134
|
29466
|
135 void lw_register_widget __P ((char* type, char* name, LWLIB_ID id,
|
|
136 widget_value* val, lw_callback pre_activate_cb,
|
|
137 lw_callback selection_cb,
|
|
138 lw_callback post_activate_cb,
|
|
139 lw_callback highlight_cb));
|
|
140 Widget lw_get_widget __P ((LWLIB_ID id, Widget parent, Boolean pop_up_p));
|
|
141 Widget lw_make_widget __P ((LWLIB_ID id, Widget parent, Boolean pop_up_p));
|
|
142 Widget lw_create_widget __P ((char* type, char* name, LWLIB_ID id,
|
|
143 widget_value* val, Widget parent, Boolean pop_up_p,
|
|
144 lw_callback pre_activate_cb,
|
|
145 lw_callback selection_cb,
|
|
146 lw_callback post_activate_cb,
|
|
147 lw_callback highlight_cb));
|
|
148 LWLIB_ID lw_get_widget_id __P ((Widget w));
|
|
149 int lw_modify_all_widgets __P ((LWLIB_ID id, widget_value* val, Boolean deep_p));
|
|
150 void lw_destroy_widget __P ((Widget w));
|
|
151 void lw_destroy_all_widgets __P ((LWLIB_ID id));
|
|
152 void lw_destroy_everything __P ((void));
|
|
153 void lw_destroy_all_pop_ups __P ((void));
|
|
154 Widget lw_raise_all_pop_up_widgets __P ((void));
|
|
155 widget_value* lw_get_all_values __P ((LWLIB_ID id));
|
|
156 Boolean lw_get_some_values __P ((LWLIB_ID id, widget_value* val));
|
|
157 void lw_pop_up_all_widgets __P ((LWLIB_ID id));
|
|
158 void lw_pop_down_all_widgets __P ((LWLIB_ID id));
|
5626
|
159 widget_value *malloc_widget_value ();
|
29466
|
160 void free_widget_value __P ((widget_value *));
|
|
161 void lw_popup_menu __P ((Widget, XEvent *));
|
5626
|
162
|
|
163 /* Toolkit independent way of focusing on a Widget at the Xt level. */
|
29466
|
164 void lw_set_keyboard_focus __P ((Widget parent, Widget w));
|
5626
|
165
|
|
166 /* Silly Energize hack to invert the "sheet" button */
|
29466
|
167 void lw_show_busy __P ((Widget w, Boolean busy));
|
8784
|
168
|
|
169 /* Silly hack to assist with Lucid/Athena geometry management. */
|
29466
|
170 void lw_refigure_widget __P ((Widget w, Boolean doit));
|
8784
|
171
|
|
172 /* Toolkit independent way of determining if an event occurred on a
|
|
173 menubar. */
|
29466
|
174 Boolean lw_window_is_in_menubar __P ((Window win, Widget menubar_widget));
|
8784
|
175
|
|
176 /* Manage resizing: TRUE permits resizing widget w; FALSE disallows it. */
|
29466
|
177 void lw_allow_resizing __P ((Widget w, Boolean flag));
|
5626
|
178
|
9064
|
179 /* Set up the main window. */
|
29466
|
180 void lw_set_main_areas __P ((Widget parent,
|
9064
|
181 Widget menubar,
|
29466
|
182 Widget work_area));
|
9064
|
183
|
25035
|
184 /* Value is non-zero if LABEL is a menu separator. If it is, *TYPE is
|
|
185 set to an appropriate enumerator of type enum menu_separator.
|
|
186 MOTIF_P non-zero means map separator types not supported by Motif
|
|
187 to similar ones that are supported. */
|
|
188
|
29466
|
189 int lw_separator_p __P ((char *label, enum menu_separator *type,
|
|
190 int motif_p));
|
|
191
|
|
192 void lwlib_bcopy __P ((char*, char*, int));
|
25035
|
193
|
5626
|
194 #endif /* LWLIB_H */
|
52401
|
195
|
|
196 /* arch-tag: 44d818d5-7eb2-4d87-acd7-b992bb0d5d20
|
|
197 (do not change this comment) */
|