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