      /********************************************************/
      /*                   Widget-Builder               (0)   */
      /* This program was written by Brian R. Gardner, 1988.  */
      /* It was created as a visual, easy to use, technique   */
      /* for rapid proto-typing of user interfaces. It allows */
      /* its user to design the layout of an X-window based   */
      /* user interface, complete with sub-windows, buttons,  */
      /* labels, and other "widgets". This program will also  */
      /* serve as a programmer's aid by writing out to a file */
      /* the source code required to re-generate the created  */
      /* visual user interface. The code generated is usually */
      /* substantial, reflecting immense savings in the time  */
      /* neccessary to program using X-windows.               */
      /*    Note that this program is only a simple test      */
      /* version. It was the author's first introduction to   */
      /* the Athena environment, as well as X-windows and the */
      /*  X-Toolkit. It was written in 2 weeks.               */
      /*    This was written under the roof of Project Athena */
      /* at Massachusetts Institute of Technology, by         */
      /* Brian Gardner (DEC), and hence reasonably available. */
      /* Read that as "FREE"         :-)                      */
      /* with the usual friendly restrictions.                */
      /********************************************************/

     /************************************************************/
     /* Copyright 1988, Massachusetts Institute of Technology.   */
     /* See X(1) for a full statement of rights and permissions. */
     /************************************************************/
#ifndef _wb_h_
#define _wb_h_

#include <stdio.h>
#include <X11/Xlib.h>
#include <X11/Intrinsic.h>  /* include all the intrinsic headers */
                            /* includes XToolkit definitions     */
#include <X11/Xatom.h>
#include <X11/Xutil.h>
#include <X11/cursorfont.h> /* allows cursor change when window is entered */
#include <X11/VPaned.h>     /* include vPaned widget class header files */
#include <X11/Box.h>        /* include box widget class header files */
#include <X11/Dialog.h>     /* include dialog widget class header files */
#include <X11/Composite.h>  /* include composite widget class header files */
#include <X11/Scroll.h>  /* include scrollbar widget class header files */
#include <X11/Command.h>    /* include command widget class header files */
#include <X11/Text.h>       /* include text widget class header files */
#include <X11/Form.h>       /* not only includes the Form widget defs */
                            /* but also the constraint defs           */
#include <X11/Label.h>      /* header if I want to use a Label widget later */
#include <X11/StringDefs.h> /* string definitions for things like "XtNwidth" */

#include <X11/Xresource.h>
#include <X11/Shell.h>
#include <X11/AsciiText.h>  /* for asciiStringWidgetClass widgets */

#define MAX_DOCUMENTATION_LINE_LENGTH 90
#define WBFONTWIDTH 8
#define WBFONTHEIGHT 10 


/* Useful global variables */
/* ----------------------- */

extern Position  start_rootx, start_rooty;
extern int resz_border_width, resz_width, resz_height, resz_code;

/* Resize code (reszcode) flags which corner/side of widget is being changed */
#define UP_LEFT     7
#define UP_CENTER   8
#define UP_RIGHT    9
#define MID_LEFT    4
#define MID_CENTER  5
#define MID_RIGHT   6
#define LOW_LEFT    1
#define LOW_CENTER  2
#define LOW_RIGHT   3

#define TYPSIZE 100   /* Length of WBMarkedWidgetType[]   */
#define OPTSIZE 250   /* Length of WBMarkedWidgetOption[] */

/* struct widgetusage widgetsUsed; */ /* flags what types of widgets in use */
extern Widget WBMarkedShell;                /* most recent popup edit shell */
extern Widget WBMarkedWidget;               /* widget marked for editing    */
extern char WBMarkedWidgetType[TYPSIZE];    /* marked widget's type         */
extern char WBMarkedWidgetOption[OPTSIZE];  /* resource to change on widget */

extern Widget userArea;
extern Widget documentation_line_widget; /* used to display useful msgs */
extern char documentation_string[MAX_DOCUMENTATION_LINE_LENGTH + 10];

extern Widget filename_widget[10];  /* dialog widget to get filename to */
                                   /* save C code                      */
extern int filename_not_done;     /* used by dialogbox to get filename */

extern Display *the_display;                     /* the display for this run */
extern XEvent the_event;                         /* used for XSendEvent()    */
extern Cursor the_cursor;                        /* Cursor used to point     */
extern Cursor the_other_cursor;                  /* Cursor used to point     */
extern XFontStruct *timesRoman12, *timesBold12;  /* font structures needed   */
extern XFontStruct *timesRoman14, *timesBold14;  /* font structures needed   */
extern XFontStruct *fixedFont;

extern Arg arg_list[30];

extern XtActionsRec action_list[];
extern int num_actions;

extern Arg widget_builder_label_arg_list[];
extern Arg userArea_arg_list[];
extern Arg minsize_userArea_arg_list[];
extern Arg widget_builder_doc_arg_list[];

extern int actions_added;

/* Basic Function Options */
/*----------------------- */

#define WBAddCommandButton   "Add Command Button        "
#define WBAddLabel           "Add Label                 "
#define WBAddAsciiText       "Add Ascii Text String     "
#define WBAddVideo           "Add Video                 "
#define WBAddBlankLine       "Add a Blank Line          "
#define WBAddFormWidget      "Add a Form Widget         "
#define WBAddKeyedMailField  "Add Keyed Mail Field      "
#define WBAddBlankMailField  "Add Blank Mail Field      "
#define WBResizeWorkingArea  "Resize Working Area       "
#define WBSaveAsCCode        "Save as C code into a file"
#define WBSaveAsCCodeOp      "Save as C code (Optimized)"
#define WBWriteFile          "Save in Mailer Format File"
#define WBReadFile           "Read in Mailer Format File"
#define WBQuit               "          Quit            "

extern String widget_builder_options[];

/*  WBSaveAsCCode and WBSaveAsCCodeOp options are added to above in main() */

/* Widget Options */
/* -------------- */
#define WBDestroyButtonWidget     "  Destroy Button Widget     "
#define WBDestroyLabelWidget      "  Destroy Label Widget      "
#define WBDestroyVideoWidget      "  Destroy AsciiText Widget  "
#define WBDestroyAsciiTextWidget  "  Destroy Video Widget      "
#define WBDestroyBlankLineWidget  "  Destroy Blank Line Widget "

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

#ifdef __STDC__

extern Widget make_edit_menu(Widget, Widget, char **, char *);
extern void make_saveCcode_button(Widget, char *, int);
extern Widget make_saveCcode_buttons(Widget);
extern Widget make_mailer_buttons(Widget);
extern void edit_wb(Widget, XEvent *);
extern void GotFilename(Widget, XEvent *, String *, Cardinal);
extern void WBPopup(Widget, XEvent *, String *, Cardinal);
extern void WBPopdown(Widget, XEvent *, String *, Cardinal);
extern void MyDebug(Widget, XEvent *, String *, Cardinal);
extern void MarkWidget(Widget, XEvent *, String *, Cardinal);
extern void EditWidget(Widget, XEvent *, String *, Cardinal);
extern Widget WBcreate_wb(Widget);

#else

extern Widget make_edit_menu();
extern void make_saveCcode_button();
extern Widget make_saveCcode_buttons();
extern Widget make_mailer_buttons();
extern void edit_wb();
extern void GotFilename();
extern void WBPopup();
extern void WBPopdown();
extern void MyDebug();
extern void MarkWidget();
extern void EditWidget();
extern Widget WBcreate_wb();

#endif          /* end of  #ifdef _STDC_  */

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