Mercurial > hg > xemacs-beta
comparison lwlib/lwlib.h @ 428:3ecd8885ac67 r21-2-22
Import from CVS: tag r21-2-22
author | cvs |
---|---|
date | Mon, 13 Aug 2007 11:28:15 +0200 |
parents | |
children | 9d177e8d4150 |
comparison
equal
deleted
inserted
replaced
427:0a0253eac470 | 428:3ecd8885ac67 |
---|---|
1 #ifndef LWLIB_H | |
2 #define LWLIB_H | |
3 | |
4 #undef CONST | |
5 | |
6 #include <X11/Intrinsic.h> | |
7 | |
8 /* To eliminate use of `const' in the lwlib sources, define CONST_IS_LOSING. */ | |
9 #ifdef CONST_IS_LOSING | |
10 # define CONST | |
11 #else | |
12 # define CONST const | |
13 #endif | |
14 | |
15 #if defined (LWLIB_MENUBARS_LUCID) || defined (LWLIB_MENUBARS_MOTIF) || defined (LWLIB_MENUBARS_ATHENA) | |
16 #define NEED_MENUBARS | |
17 #endif | |
18 #if defined (LWLIB_SCROLLBARS_LUCID) || defined (LWLIB_SCROLLBARS_MOTIF) || defined (LWLIB_SCROLLBARS_ATHENA) | |
19 #define NEED_SCROLLBARS | |
20 #endif | |
21 #if defined (LWLIB_DIALOGS_LUCID) || defined (LWLIB_DIALOGS_MOTIF) || defined (LWLIB_DIALOGS_ATHENA) | |
22 #define NEED_DIALOGS | |
23 #endif | |
24 | |
25 /* | |
26 ** Widget values depend on the Widget type: | |
27 ** | |
28 ** widget: (name value key enabled data contents/selected) | |
29 ** | |
30 ** label: ("name" "string" NULL NULL NULL NULL) | |
31 ** BUTTON: ("name" "string" "key" T/F data <default-button-p>) | |
32 ** CASCADE (button w/menu): | |
33 ** ("name" "string" "key" T/F data (label|button|button w/menu...)) | |
34 ** INCREMENTAL (button w/menu construction callback): | |
35 ** ("name" "string" NULL T/F <opaque pointer>) | |
36 ** menubar: ("name" NULL NULL T/F data (button w/menu)) | |
37 ** scrollbar:("name" NULL NULL T/F NULL NULL) | |
38 ** selectable thing: | |
39 ** ("name" "string" "key" T/F data T/F) | |
40 ** checkbox: selectable thing | |
41 ** radio: ("name" NULL NULL T/F data (selectable thing...)) | |
42 ** strings: ("name" NULL NULL T/F data (selectable thing...)) | |
43 ** TEXT: ("name" "string" <ign> T/F data) | |
44 ** | |
45 ** Note that the above is EXTREMELY bogus. The "type" of the various entities | |
46 ** that a widget_value structure can represent is implicit in the contents of | |
47 ** half a dozen slots, instead of there simply being a type field. This | |
48 ** should all be rethunk. I've added a type field, but for now it's only used | |
49 ** by the new xlwmenu code. | |
50 */ | |
51 | |
52 typedef unsigned long LWLIB_ID; | |
53 | |
54 typedef enum _change_type | |
55 { | |
56 NO_CHANGE = 0, | |
57 INVISIBLE_CHANGE = 1, | |
58 VISIBLE_CHANGE = 2, | |
59 STRUCTURAL_CHANGE = 3 | |
60 } change_type; | |
61 | |
62 typedef enum _widget_value_type | |
63 { | |
64 UNSPECIFIED_TYPE = 0, | |
65 BUTTON_TYPE = 1, | |
66 TOGGLE_TYPE = 2, | |
67 RADIO_TYPE = 3, | |
68 TEXT_TYPE = 4, | |
69 SEPARATOR_TYPE = 5, | |
70 CASCADE_TYPE = 6, | |
71 PUSHRIGHT_TYPE = 7, | |
72 INCREMENTAL_TYPE = 8 | |
73 } widget_value_type; | |
74 | |
75 typedef enum _scroll_action | |
76 { | |
77 SCROLLBAR_LINE_UP = 0, | |
78 SCROLLBAR_LINE_DOWN = 1, | |
79 SCROLLBAR_PAGE_UP = 2, | |
80 SCROLLBAR_PAGE_DOWN = 3, | |
81 SCROLLBAR_DRAG = 4, | |
82 SCROLLBAR_CHANGE = 5, | |
83 SCROLLBAR_TOP = 6, | |
84 SCROLLBAR_BOTTOM = 7 | |
85 } scroll_action; | |
86 | |
87 typedef struct _scroll_event | |
88 { | |
89 scroll_action action; | |
90 int slider_value; | |
91 Time time; | |
92 } scroll_event; | |
93 | |
94 typedef struct _scrollbar_values | |
95 { | |
96 int line_increment; | |
97 int page_increment; | |
98 | |
99 int minimum; | |
100 int maximum; | |
101 | |
102 int slider_size; | |
103 int slider_position; | |
104 | |
105 int scrollbar_width, scrollbar_height; | |
106 int scrollbar_x, scrollbar_y; | |
107 } scrollbar_values; | |
108 | |
109 typedef struct _widget_value | |
110 { | |
111 /* This slot is only partially utilized right now. */ | |
112 widget_value_type type; | |
113 | |
114 /* name of widget */ | |
115 char* name; | |
116 /* value (meaning BOGUSLY depend on widget type) */ | |
117 char* value; | |
118 /* keyboard equivalent. no implications for XtTranslations */ | |
119 char* key; | |
120 /* accelerator key. For XEmacs, this should be a Lisp_Object holding a | |
121 char or symbol suitable for passing to event_matches_key_specifier_p. | |
122 Outside of emacs, this can be anything: an X KeySym is a good idea. | |
123 lwlib provides support functions for keyboard traversal of menus. Actual | |
124 implementation of those accelerators is up to the application. | |
125 */ | |
126 XtPointer accel; | |
127 /* true if enabled */ | |
128 Boolean enabled; | |
129 /* true if selected */ | |
130 Boolean selected; | |
131 /* true if was edited (maintained by get_value) */ | |
132 Boolean edited; | |
133 /* true if has changed (maintained by lw library) */ | |
134 change_type change; | |
135 /* Contents of the sub-widgets, also selected slot for checkbox */ | |
136 struct _widget_value* contents; | |
137 /* data passed to callback */ | |
138 XtPointer call_data; | |
139 /* next one in the list */ | |
140 struct _widget_value* next; | |
141 /* slot for the toolkit dependent part. Always initialize to NULL. */ | |
142 void* toolkit_data; | |
143 /* tell us if we should free the toolkit data slot when freeing the | |
144 widget_value itself. */ | |
145 Boolean free_toolkit_data; | |
146 | |
147 /* data defining a scrollbar; only valid if type == "scrollbar" */ | |
148 scrollbar_values *scrollbar_data; | |
149 | |
150 /* we resource the widget_value structures; this points to the next | |
151 one on the free list if this one has been deallocated. */ | |
152 struct _widget_value *free_list; | |
153 | |
154 /* some things are only possible at creation time. args are applied | |
155 to widgets at creation time. */ | |
156 ArgList args; | |
157 int nargs; | |
158 Boolean free_args; | |
159 } widget_value; | |
160 | |
161 | |
162 typedef void (*lw_callback) (Widget w, LWLIB_ID id, XtPointer data); | |
163 | |
164 /* menu stuff */ | |
165 /* maybe this should go into a generic lwmenu.h */ | |
166 | |
167 extern int lw_menu_active; | |
168 | |
169 #if defined (LWLIB_MENUBARS_LUCID) | |
170 #include "xlwmenu.h" | |
171 #define lw_set_menu xlw_set_menu | |
172 #define lw_push_menu xlw_push_menu | |
173 #define lw_pop_menu xlw_pop_menu | |
174 #define lw_set_item xlw_set_item | |
175 #define lw_map_menu xlw_map_menu | |
176 #define lw_display_menu xlw_display_menu | |
177 #define lw_kill_menus xlw_kill_menus | |
178 #define lw_get_entries xlw_get_entries | |
179 #define lw_menu_level xlw_menu_level | |
180 #else /* LWLIB_MENUBARS_LUCID */ | |
181 /* do this for the other toolkits too */ | |
182 #endif /* LWLIB_MENUBARS_LUCID */ | |
183 | |
184 #if defined (LWLIB_TABS_LUCID) | |
185 #include "xlwtabs.h" | |
186 #endif | |
187 | |
188 void lw_register_widget (CONST char* type, CONST char* name, LWLIB_ID id, | |
189 widget_value* val, lw_callback pre_activate_cb, | |
190 lw_callback selection_cb, | |
191 lw_callback post_activate_cb); | |
192 Widget lw_get_widget (LWLIB_ID id, Widget parent, Boolean pop_up_p); | |
193 Widget lw_make_widget (LWLIB_ID id, Widget parent, Boolean pop_up_p); | |
194 Widget lw_create_widget (CONST char* type, CONST char* name, LWLIB_ID id, | |
195 widget_value* val, Widget parent, Boolean pop_up_p, | |
196 lw_callback pre_activate_cb, | |
197 lw_callback selection_cb, | |
198 lw_callback post_activate_cb); | |
199 LWLIB_ID lw_get_widget_id (Widget w); | |
200 int lw_map_widget_values (LWLIB_ID id, int (*mapfunc) (widget_value *value, | |
201 void *closure), | |
202 void *closure); | |
203 void lw_modify_all_widgets (LWLIB_ID id, widget_value* val, Boolean deep_p); | |
204 void lw_destroy_widget (Widget w); | |
205 void lw_destroy_all_widgets (LWLIB_ID id); | |
206 void lw_destroy_everything (void); | |
207 void lw_destroy_all_pop_ups (void); | |
208 Widget lw_raise_all_pop_up_widgets (void); | |
209 widget_value* lw_get_all_values (LWLIB_ID id); | |
210 Boolean lw_get_some_values (LWLIB_ID id, widget_value* val); | |
211 void lw_pop_up_all_widgets (LWLIB_ID id); | |
212 void lw_pop_down_all_widgets (LWLIB_ID id); | |
213 void lw_add_value_args_to_args (widget_value* wv, ArgList addto, int* offset); | |
214 | |
215 widget_value *malloc_widget_value (void); | |
216 void free_widget_value (widget_value *); | |
217 void free_widget_value_tree (widget_value *wv); | |
218 widget_value *replace_widget_value_tree (widget_value*, widget_value*); | |
219 | |
220 void lw_popup_menu (Widget, XEvent *); | |
221 | |
222 /* Toolkit independent way of focusing on a Widget at the Xt level. */ | |
223 void lw_set_keyboard_focus (Widget parent, Widget w); | |
224 | |
225 /* Silly Energize hack to invert the "sheet" button */ | |
226 void lw_show_busy (Widget w, Boolean busy); | |
227 | |
228 #endif /* LWLIB_H */ |