#ifndef _wbnode_h_
#define _wbnode_h_


/* The following should be moved to "wbnodeP.h" */
struct _widgetNode {
  int  mmm_id;      /* the widget's ID when being written to a mail file    */
  int  parent_mmm_id; /* ID of widget's parent when read from a mail file   */
  char *id_name;    /* used internally by WB as a guaranteed unique name    */
  char *varName;    /* name of variable widget is assigned to in saved code */
  char *name;       /* unique name of widget for X, often gensym'ed         */
  char *type;       /* type of widget (e.g.: "button", "label", etc.)       */
  Widget widget;    /* pointer to the actual widget                         */
  Widget parent;    /* pointer to the widget's parent widget                */
  char *callback;   /* name of callback function for widget (written later) */
  char *font;       /* name of the font for the label of this widget        */
  char *string;     /* use for holding ptr to Ascii Text widget's XtNstring */
  struct menu_state *edit_states;  /* ptr to state for this nodes edit menu */
  XFontStruct *font_struct;        /* ptr to font info structure            */
  VOID_FUNCPTR prstr_func;         /* ptr to func to print widget properties*/
  struct _widgetNode *parent_node; /* ptr to parent widget's node in list   */
  struct _widgetNode *first_child; /* ptr to widget's first child in list   */
  struct _widgetNode *last_child;  /* ptr to widget's last child in list    */
  struct _widgetNode *popup;       /* ptr to widget's popup child node      */
  struct _widgetNode *next; /* ptr to next widget node in linked list       */
 } ;


#include "wb_include.h"


typedef struct _widgetNode WidgetNode;

struct widgetusage {
  int button;
  int label;
  int video;
  int blankLine;
  int keyedMailField;
  int blankMailField;
  int vPaned;
  int box;
  int dialog;
  int composite;
  int scrollBar;
  int text;
  int form;
  int shell;
  int asciiText;
  int popup;
 };

/* #include "wbnodeP.h" */

extern struct widgetusage widgetsUsed;

/* Head and tail pointers to linked list of created Widgets */
extern WidgetNode *HeadWidgetList;



/****************************************************************/

#ifdef __STDC__

extern void WN_set_mmm_id(WidgetNode *, int);
extern int WN_get_mmm_id(WidgetNode *);
extern void WN_set_parent_mmm_id(WidgetNode *, int);
extern int WN_get_parent_mmm_id(WidgetNode *);
extern void WN_set_id_name(WidgetNode *, char *);
extern char *WN_get_id_name(WidgetNode *);
extern void WN_edit_states_create(WidgetNode *);
extern struct menu_state *WN_get_edit_states(WidgetNode *);
extern void WN_set_varName(WidgetNode *, char *);
extern char *WN_get_varname(WidgetNode *);
extern void WN_set_name(WidgetNode *, char *);
extern char *WN_get_name(WidgetNode *);
extern void WN_set_type(WidgetNode *, char *);
extern char *WN_get_type(WidgetNode *);
extern void WN_set_callback(WidgetNode *, char *);
extern char *WN_get_callback(WidgetNode *);
extern void WN_set_font(WidgetNode *, char *);
extern char *WN_get_font(WidgetNode *);
extern Widget WN_get_widget(WidgetNode *);
extern void WN_set_string(WidgetNode *, char *);
extern char *WN_get_string(WidgetNode *);
extern void WN_set_label(WidgetNode *, char *);
extern char *WN_get_label(WidgetNode *);

extern WidgetNode *add_widget_node(Widget, Widget, char *, VOID_FUNCPTR);
extern WidgetNode *find_widgets_node(Widget, WidgetNode *);
extern WidgetNode *get_widgetnode_by_mmm_id(int, WidgetNode *);
extern void WNdestroy_all(int);
extern void WNdestroy_tree(WidgetNode *, int);
extern void WNdestroy(WidgetNode *, int);
extern void traverse_widgets_nodes(WidgetNode *, VOID_FUNCPTR, VOIDP);

#else

extern void WN_set_mmm_id();
extern int WN_get_mmm_id();
extern void WN_set_parent_mmm_id();
extern int WN_get_parent_mmm_id();
extern void WN_set_id_name();
extern char *WN_get_id_name();
extern void WN_edit_states_create();
extern struct menu_state *WN_get_edit_states();
extern void WN_set_varName();
extern char *WN_get_varname();
extern void WN_set_name();
extern char *WN_get_name();
extern void WN_set_type();
extern char *WN_get_type();
extern void WN_set_callback();
extern char *WN_get_callback();
extern void WN_set_font();
extern char *WN_get_font();
extern Widget WN_get_widget();
extern void WN_set_string();
extern char *WN_get_string();
extern void WN_set_label();
extern char *WN_get_label();

extern void WN_set_mmm_id();
extern WidgetNode *add_widget_node();
extern WidgetNode *find_widgets_node();
extern WidgetNode *get_widgetnode_by_mmm_id();
extern void WNdestroy_all();
extern void WNdestroy_tree();
extern void WNdestroy();
extern void traverse_widgets_nodes();

#endif          /* end of  #ifdef _STDC_  */

/***************************************************************************/
#endif       /* end of ifndef _wbnode_h_  :: DO NOT WRITE BELOW THIS LINE. */
