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
|
35 enum button_type
|
|
36 {
|
|
37 BUTTON_TYPE_NONE,
|
|
38 BUTTON_TYPE_TOGGLE,
|
|
39 BUTTON_TYPE_RADIO
|
|
40 };
|
|
41
|
|
42 /* Menu separator types. */
|
|
43
|
|
44 enum menu_separator
|
|
45 {
|
|
46 /* These values are Motif compatible. */
|
|
47 SEPARATOR_NO_LINE,
|
|
48 SEPARATOR_SINGLE_LINE,
|
|
49 SEPARATOR_DOUBLE_LINE,
|
|
50 SEPARATOR_SINGLE_DASHED_LINE,
|
|
51 SEPARATOR_DOUBLE_DASHED_LINE,
|
|
52 SEPARATOR_SHADOW_ETCHED_IN,
|
|
53 SEPARATOR_SHADOW_ETCHED_OUT,
|
|
54 SEPARATOR_SHADOW_ETCHED_IN_DASH,
|
|
55 SEPARATOR_SHADOW_ETCHED_OUT_DASH,
|
|
56
|
|
57 /* The following are supported by XEmacs' Lucid menus. */
|
|
58 SEPARATOR_SHADOW_DOUBLE_ETCHED_IN,
|
|
59 SEPARATOR_SHADOW_DOUBLE_ETCHED_OUT,
|
|
60 SEPARATOR_SHADOW_DOUBLE_ETCHED_IN_DASH,
|
|
61 SEPARATOR_SHADOW_DOUBLE_ETCHED_OUT_DASH
|
|
62 };
|
|
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
|
72 /* Help string or null if none. */
|
|
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
|
80 /* The type of a button. */
|
|
81 enum button_type button_type;
|
5626
|
82 /* true if has changed (maintained by lw library) */
|
|
83 change_type change;
|
14878
|
84 /* true if this widget itself has changed,
|
|
85 but not counting the other widgets found in the `next' field. */
|
|
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
|
157 /* Value is non-zero if LABEL is a menu separator. If it is, *TYPE is
|
|
158 set to an appropriate enumerator of type enum menu_separator.
|
|
159 MOTIF_P non-zero means map separator types not supported by Motif
|
|
160 to similar ones that are supported. */
|
|
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
|
166
|
5626
|
167 #endif /* LWLIB_H */
|