update.
[chise/xemacs-chise.git.1] / lwlib / lwlib-internal.h
1 #ifndef INCLUDED_lwlib_internal_h_
2 #define INCLUDED_lwlib_internal_h_
3
4 #include "lwlib.h"
5
6 #ifdef USE_ASSERTIONS
7 /* Highly dubious kludge */
8 /*   (thanks, Jamie, I feel better now -- ben) */
9 void assert_failed (const char *, int, const char *);
10 # define abort() (assert_failed (__FILE__, __LINE__, "abort()"))
11 # define assert(x) ((x) ? (void) 0 : assert_failed (__FILE__, __LINE__, #x))
12 #else
13 # ifdef DEBUG_XEMACS
14 #  define assert(x) ((x) ? (void) 0 : (void) abort ())
15 # else
16 #  define assert(x)
17 # endif
18 #endif
19
20 /* This represents a single widget within a widget tree.  All the
21    widgets in a widget tree are chained through the `next' field.
22    `info' is a back pointer to the widget tree. */
23
24 typedef struct _widget_instance
25 {
26   Widget                widget;
27   Widget                parent;
28   Boolean               pop_up_p;
29   struct _widget_info*          info;
30   struct _widget_instance*      next;
31 } widget_instance;
32
33 /* This represents a single widget tree, such as a single menubar.
34    The global variable `all_widget_info' lists all widget trees,
35    chained through the `next' field of this structure. */
36
37 typedef struct _widget_info
38 {
39   char*                 type;
40   char*                 name;
41   LWLIB_ID              id;
42   widget_value*         val;
43   Boolean               busy;
44   lw_callback           pre_activate_cb;
45   lw_callback           selection_cb;
46   lw_callback           post_activate_cb;
47   struct _widget_instance*      instances;
48   struct _widget_info*          next;
49 } widget_info;
50
51 typedef Widget
52 (*widget_creation_function) (widget_instance* instance);
53
54 typedef struct _widget_creation_entry
55 {
56   const char*                   type;
57   widget_creation_function      function;
58 } widget_creation_entry;
59
60 /* update all other instances of a widget.  Can be used in a callback when
61    a widget has been used by the user */
62 void
63 lw_internal_update_other_instances (Widget widget, XtPointer closure,
64                                     XtPointer call_data);
65
66 /* get the widget_value for a widget in a given instance */
67 widget_value*
68 lw_get_widget_value_for_widget (widget_instance* instance, Widget w);
69
70 widget_info *lw_get_widget_info (LWLIB_ID id);
71
72 #endif /* INCLUDED_lwlib_internal_h_ */