Mercurial > emacs
annotate lwlib/lwlib.h @ 95457:415f68458e61
Implement face-remapping-alist feature
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-1195
author | Miles Bader <miles@gnu.org> |
---|---|
date | Sun, 01 Jun 2008 05:04:24 +0000 |
parents | a1c6fb73c033 |
children | 606f2d163a64 3c31d7653adf |
rev | line source |
---|---|
76178
9f78501bf1f3
Add Lucid and FSF copyrights and GPL text.
Glenn Morris <rgm@gnu.org>
parents:
56845
diff
changeset
|
1 /* |
9f78501bf1f3
Add Lucid and FSF copyrights and GPL text.
Glenn Morris <rgm@gnu.org>
parents:
56845
diff
changeset
|
2 Copyright (C) 1992, 1993 Lucid, Inc. |
9f78501bf1f3
Add Lucid and FSF copyrights and GPL text.
Glenn Morris <rgm@gnu.org>
parents:
56845
diff
changeset
|
3 Copyright (C) 1994, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, |
79747 | 4 2007, 2008 Free Software Foundation, Inc. |
76178
9f78501bf1f3
Add Lucid and FSF copyrights and GPL text.
Glenn Morris <rgm@gnu.org>
parents:
56845
diff
changeset
|
5 |
9f78501bf1f3
Add Lucid and FSF copyrights and GPL text.
Glenn Morris <rgm@gnu.org>
parents:
56845
diff
changeset
|
6 This file is part of the Lucid Widget Library. |
9f78501bf1f3
Add Lucid and FSF copyrights and GPL text.
Glenn Morris <rgm@gnu.org>
parents:
56845
diff
changeset
|
7 |
9f78501bf1f3
Add Lucid and FSF copyrights and GPL text.
Glenn Morris <rgm@gnu.org>
parents:
56845
diff
changeset
|
8 The Lucid Widget Library is free software; you can redistribute it and/or |
9f78501bf1f3
Add Lucid and FSF copyrights and GPL text.
Glenn Morris <rgm@gnu.org>
parents:
56845
diff
changeset
|
9 modify it under the terms of the GNU General Public License as published by |
9f78501bf1f3
Add Lucid and FSF copyrights and GPL text.
Glenn Morris <rgm@gnu.org>
parents:
56845
diff
changeset
|
10 the Free Software Foundation; either version 1, or (at your option) |
9f78501bf1f3
Add Lucid and FSF copyrights and GPL text.
Glenn Morris <rgm@gnu.org>
parents:
56845
diff
changeset
|
11 any later version. |
9f78501bf1f3
Add Lucid and FSF copyrights and GPL text.
Glenn Morris <rgm@gnu.org>
parents:
56845
diff
changeset
|
12 |
9f78501bf1f3
Add Lucid and FSF copyrights and GPL text.
Glenn Morris <rgm@gnu.org>
parents:
56845
diff
changeset
|
13 The Lucid Widget Library is distributed in the hope that it will be useful, |
9f78501bf1f3
Add Lucid and FSF copyrights and GPL text.
Glenn Morris <rgm@gnu.org>
parents:
56845
diff
changeset
|
14 but WITHOUT ANY WARRANTY; without even the implied warranty of |
9f78501bf1f3
Add Lucid and FSF copyrights and GPL text.
Glenn Morris <rgm@gnu.org>
parents:
56845
diff
changeset
|
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
9f78501bf1f3
Add Lucid and FSF copyrights and GPL text.
Glenn Morris <rgm@gnu.org>
parents:
56845
diff
changeset
|
16 GNU General Public License for more details. |
9f78501bf1f3
Add Lucid and FSF copyrights and GPL text.
Glenn Morris <rgm@gnu.org>
parents:
56845
diff
changeset
|
17 |
9f78501bf1f3
Add Lucid and FSF copyrights and GPL text.
Glenn Morris <rgm@gnu.org>
parents:
56845
diff
changeset
|
18 You should have received a copy of the GNU General Public License |
9f78501bf1f3
Add Lucid and FSF copyrights and GPL text.
Glenn Morris <rgm@gnu.org>
parents:
56845
diff
changeset
|
19 along with GNU Emacs; see the file COPYING. If not, write to |
9f78501bf1f3
Add Lucid and FSF copyrights and GPL text.
Glenn Morris <rgm@gnu.org>
parents:
56845
diff
changeset
|
20 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
9f78501bf1f3
Add Lucid and FSF copyrights and GPL text.
Glenn Morris <rgm@gnu.org>
parents:
56845
diff
changeset
|
21 Boston, MA 02110-1301, USA. */ |
9f78501bf1f3
Add Lucid and FSF copyrights and GPL text.
Glenn Morris <rgm@gnu.org>
parents:
56845
diff
changeset
|
22 |
9f78501bf1f3
Add Lucid and FSF copyrights and GPL text.
Glenn Morris <rgm@gnu.org>
parents:
56845
diff
changeset
|
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
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
41766
diff
changeset
|
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
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
41766
diff
changeset
|
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
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
58 enum button_type |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
59 { |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
60 BUTTON_TYPE_NONE, |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
61 BUTTON_TYPE_TOGGLE, |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
62 BUTTON_TYPE_RADIO |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
63 }; |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
64 |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
65 /* Menu separator types. */ |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
66 |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
67 enum menu_separator |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
68 { |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
69 /* These values are Motif compatible. */ |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
70 SEPARATOR_NO_LINE, |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
71 SEPARATOR_SINGLE_LINE, |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
72 SEPARATOR_DOUBLE_LINE, |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
73 SEPARATOR_SINGLE_DASHED_LINE, |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
74 SEPARATOR_DOUBLE_DASHED_LINE, |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
75 SEPARATOR_SHADOW_ETCHED_IN, |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
76 SEPARATOR_SHADOW_ETCHED_OUT, |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
77 SEPARATOR_SHADOW_ETCHED_IN_DASH, |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
78 SEPARATOR_SHADOW_ETCHED_OUT_DASH, |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
79 |
41766
32d440813da1
(_widget_value): `help' has type Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents:
29466
diff
changeset
|
80 /* The following are supported by Lucid menus. */ |
25035
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
81 SEPARATOR_SHADOW_DOUBLE_ETCHED_IN, |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
82 SEPARATOR_SHADOW_DOUBLE_ETCHED_OUT, |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
83 SEPARATOR_SHADOW_DOUBLE_ETCHED_IN_DASH, |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
84 SEPARATOR_SHADOW_DOUBLE_ETCHED_OUT_DASH |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
85 }; |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
86 |
5626 | 87 typedef struct _widget_value |
88 { | |
89 /* name of widget */ | |
56845
8a28788cef84
* lwlib.h (_widget_value): Added lname and lkey.
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
90 Lisp_Object lname; |
5626 | 91 char* name; |
92 /* value (meaning depend on widget type) */ | |
93 char* value; | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
41766
diff
changeset
|
94 /* keyboard equivalent. no implications for XtTranslations */ |
56845
8a28788cef84
* lwlib.h (_widget_value): Added lname and lkey.
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
95 Lisp_Object lkey; |
5626 | 96 char* key; |
41766
32d440813da1
(_widget_value): `help' has type Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents:
29466
diff
changeset
|
97 /* Help string or nil if none. |
32d440813da1
(_widget_value): `help' has type Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents:
29466
diff
changeset
|
98 GC finds this string through the frame's menu_bar_vector |
32d440813da1
(_widget_value): `help' has type Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents:
29466
diff
changeset
|
99 or through menu_items. */ |
32d440813da1
(_widget_value): `help' has type Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents:
29466
diff
changeset
|
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
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
107 /* The type of a button. */ |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
108 enum button_type button_type; |
5626 | 109 /* true if has changed (maintained by lw library) */ |
110 change_type change; | |
14878
487b03096cc5
(struct widget_value): New field this_one_change.
Richard M. Stallman <rms@gnu.org>
parents:
14018
diff
changeset
|
111 /* true if this widget itself has changed, |
487b03096cc5
(struct widget_value): New field this_one_change.
Richard M. Stallman <rms@gnu.org>
parents:
14018
diff
changeset
|
112 but not counting the other widgets found in the `next' field. */ |
487b03096cc5
(struct widget_value): New field this_one_change.
Richard M. Stallman <rms@gnu.org>
parents:
14018
diff
changeset
|
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
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
184 /* Value is non-zero if LABEL is a menu separator. If it is, *TYPE is |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
185 set to an appropriate enumerator of type enum menu_separator. |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
186 MOTIF_P non-zero means map separator types not supported by Motif |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
187 to similar ones that are supported. */ |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
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
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
193 |
5626 | 194 #endif /* LWLIB_H */ |
52401 | 195 |
196 /* arch-tag: 44d818d5-7eb2-4d87-acd7-b992bb0d5d20 | |
197 (do not change this comment) */ |