Mercurial > emacs
annotate lwlib/lwlib.h @ 31170:84ec8b66d634
(redisplay_internal): If considering all windows on all
frames, update the display for each frame as soon as possible,
instead of first building all desired matrices for all frames, and
then updating them all.
(try_cursor_movement): Handle case that last_cursor.vpos is -1.
author | Gerd Moellmann <gerd@gnu.org> |
---|---|
date | Fri, 25 Aug 2000 13:21:21 +0000 |
parents | 6ed38ee607e9 |
children | 32d440813da1 |
rev | line source |
---|---|
5626 | 1 #ifndef LWLIB_H |
2 #define LWLIB_H | |
3 | |
4 #include <X11/Intrinsic.h> | |
5 | |
6 /* | |
7 ** Widget values depend on the Widget type: | |
8 ** | |
9 ** widget: (name value key enabled data contents/selected) | |
10 ** | |
11 ** label: ("name" "string" NULL NULL NULL NULL) | |
12 ** button: ("name" "string" "key" T/F data <default-button-p>) | |
13 ** button w/menu: | |
14 ** ("name" "string" "key" T/F data (label|button|button w/menu...)) | |
15 ** menubar: ("name" NULL NULL T/F data (button w/menu)) | |
16 ** selectable thing: | |
17 ** ("name" "string" "key" T/F data T/F) | |
18 ** checkbox: selectable thing | |
19 ** radio: ("name" NULL NULL T/F data (selectable thing...)) | |
20 ** strings: ("name" NULL NULL T/F data (selectable thing...)) | |
21 ** text: ("name" "string" <ign> T/F data) | |
8784 | 22 ** main: ("name") |
5626 | 23 */ |
24 | |
25 typedef unsigned long LWLIB_ID; | |
26 | |
27 typedef enum _change_type | |
28 { | |
29 NO_CHANGE = 0, | |
30 INVISIBLE_CHANGE = 1, | |
31 VISIBLE_CHANGE = 2, | |
32 STRUCTURAL_CHANGE = 3 | |
33 } change_type; | |
34 | |
25035
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
35 enum button_type |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
36 { |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
37 BUTTON_TYPE_NONE, |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
38 BUTTON_TYPE_TOGGLE, |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
39 BUTTON_TYPE_RADIO |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
40 }; |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
41 |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
42 /* Menu separator types. */ |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
43 |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
44 enum menu_separator |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
45 { |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
46 /* These values are Motif compatible. */ |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
47 SEPARATOR_NO_LINE, |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
48 SEPARATOR_SINGLE_LINE, |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
49 SEPARATOR_DOUBLE_LINE, |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
50 SEPARATOR_SINGLE_DASHED_LINE, |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
51 SEPARATOR_DOUBLE_DASHED_LINE, |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
52 SEPARATOR_SHADOW_ETCHED_IN, |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
53 SEPARATOR_SHADOW_ETCHED_OUT, |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
54 SEPARATOR_SHADOW_ETCHED_IN_DASH, |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
55 SEPARATOR_SHADOW_ETCHED_OUT_DASH, |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
56 |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
57 /* The following are supported by XEmacs' Lucid menus. */ |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
58 SEPARATOR_SHADOW_DOUBLE_ETCHED_IN, |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
59 SEPARATOR_SHADOW_DOUBLE_ETCHED_OUT, |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
60 SEPARATOR_SHADOW_DOUBLE_ETCHED_IN_DASH, |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
61 SEPARATOR_SHADOW_DOUBLE_ETCHED_OUT_DASH |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
62 }; |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
63 |
5626 | 64 typedef struct _widget_value |
65 { | |
66 /* name of widget */ | |
67 char* name; | |
68 /* value (meaning depend on widget type) */ | |
69 char* value; | |
70 /* keyboard equivalent. no implications for XtTranslations */ | |
71 char* key; | |
27337
d895d4e8a6f0
(_widget_value): Add help string.
Gerd Moellmann <gerd@gnu.org>
parents:
25035
diff
changeset
|
72 /* Help string or null if none. */ |
d895d4e8a6f0
(_widget_value): Add help string.
Gerd Moellmann <gerd@gnu.org>
parents:
25035
diff
changeset
|
73 char *help; |
5626 | 74 /* true if enabled */ |
75 Boolean enabled; | |
76 /* true if selected */ | |
77 Boolean selected; | |
78 /* true if was edited (maintained by get_value) */ | |
79 Boolean edited; | |
25035
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
80 /* The type of a button. */ |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
81 enum button_type button_type; |
5626 | 82 /* true if has changed (maintained by lw library) */ |
83 change_type change; | |
14878
487b03096cc5
(struct widget_value): New field this_one_change.
Richard M. Stallman <rms@gnu.org>
parents:
14018
diff
changeset
|
84 /* 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
|
85 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
|
86 change_type this_one_change; |
5626 | 87 /* Contents of the sub-widgets, also selected slot for checkbox */ |
88 struct _widget_value* contents; | |
89 /* data passed to callback */ | |
90 XtPointer call_data; | |
91 /* next one in the list */ | |
92 struct _widget_value* next; | |
93 /* slot for the toolkit dependent part. Always initialize to NULL. */ | |
94 void* toolkit_data; | |
95 /* tell us if we should free the toolkit data slot when freeing the | |
96 widget_value itself. */ | |
97 Boolean free_toolkit_data; | |
98 | |
99 /* we resource the widget_value structures; this points to the next | |
100 one on the free list if this one has been deallocated. | |
101 */ | |
102 struct _widget_value *free_list; | |
103 } widget_value; | |
104 | |
105 | |
29466 | 106 typedef void (*lw_callback) __P ((Widget w, LWLIB_ID id, void* data)); |
5626 | 107 |
29466 | 108 void lw_register_widget __P ((char* type, char* name, LWLIB_ID id, |
109 widget_value* val, lw_callback pre_activate_cb, | |
110 lw_callback selection_cb, | |
111 lw_callback post_activate_cb, | |
112 lw_callback highlight_cb)); | |
113 Widget lw_get_widget __P ((LWLIB_ID id, Widget parent, Boolean pop_up_p)); | |
114 Widget lw_make_widget __P ((LWLIB_ID id, Widget parent, Boolean pop_up_p)); | |
115 Widget lw_create_widget __P ((char* type, char* name, LWLIB_ID id, | |
116 widget_value* val, Widget parent, Boolean pop_up_p, | |
117 lw_callback pre_activate_cb, | |
118 lw_callback selection_cb, | |
119 lw_callback post_activate_cb, | |
120 lw_callback highlight_cb)); | |
121 LWLIB_ID lw_get_widget_id __P ((Widget w)); | |
122 int lw_modify_all_widgets __P ((LWLIB_ID id, widget_value* val, Boolean deep_p)); | |
123 void lw_destroy_widget __P ((Widget w)); | |
124 void lw_destroy_all_widgets __P ((LWLIB_ID id)); | |
125 void lw_destroy_everything __P ((void)); | |
126 void lw_destroy_all_pop_ups __P ((void)); | |
127 Widget lw_raise_all_pop_up_widgets __P ((void)); | |
128 widget_value* lw_get_all_values __P ((LWLIB_ID id)); | |
129 Boolean lw_get_some_values __P ((LWLIB_ID id, widget_value* val)); | |
130 void lw_pop_up_all_widgets __P ((LWLIB_ID id)); | |
131 void lw_pop_down_all_widgets __P ((LWLIB_ID id)); | |
5626 | 132 widget_value *malloc_widget_value (); |
29466 | 133 void free_widget_value __P ((widget_value *)); |
134 void lw_popup_menu __P ((Widget, XEvent *)); | |
5626 | 135 |
136 /* Toolkit independent way of focusing on a Widget at the Xt level. */ | |
29466 | 137 void lw_set_keyboard_focus __P ((Widget parent, Widget w)); |
5626 | 138 |
139 /* Silly Energize hack to invert the "sheet" button */ | |
29466 | 140 void lw_show_busy __P ((Widget w, Boolean busy)); |
8784 | 141 |
142 /* Silly hack to assist with Lucid/Athena geometry management. */ | |
29466 | 143 void lw_refigure_widget __P ((Widget w, Boolean doit)); |
8784 | 144 |
145 /* Toolkit independent way of determining if an event occurred on a | |
146 menubar. */ | |
29466 | 147 Boolean lw_window_is_in_menubar __P ((Window win, Widget menubar_widget)); |
8784 | 148 |
149 /* Manage resizing: TRUE permits resizing widget w; FALSE disallows it. */ | |
29466 | 150 void lw_allow_resizing __P ((Widget w, Boolean flag)); |
5626 | 151 |
9064 | 152 /* Set up the main window. */ |
29466 | 153 void lw_set_main_areas __P ((Widget parent, |
9064 | 154 Widget menubar, |
29466 | 155 Widget work_area)); |
9064 | 156 |
25035
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
157 /* 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
|
158 set to an appropriate enumerator of type enum menu_separator. |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
159 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
|
160 to similar ones that are supported. */ |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
161 |
29466 | 162 int lw_separator_p __P ((char *label, enum menu_separator *type, |
163 int motif_p)); | |
164 | |
165 void lwlib_bcopy __P ((char*, char*, int)); | |
25035
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
166 |
5626 | 167 #endif /* LWLIB_H */ |