Mercurial > hg > xemacs-beta
annotate lwlib/lwlib.h @ 4975:c5cb3cb79110
Automatic merge
| author | Ben Wing <ben@xemacs.org> |
|---|---|
| date | Fri, 05 Feb 2010 04:27:45 -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_ */ |
