#ifndef D1_ARGS_H
#define D1_ARGS_H
#include "res.h"
#include "rl.h"
#include "widgets.h"
#include "ed.h"

/* #include "/mit/lens/src/jbs/AlAssoc.h" */

/****************************************************
 *
 *          DISPLAY 1 ARGS
 *
 *       The Basic Rule Editor
 *
 *  Preix Code:  d1  for data
 *               D1  for code
 *
 ****************************************************/

#define D1_DEF_WIDTH  520
#define D1_DEF_HEIGHT 510

#define FIELD_HEIGHT 23
#define MENU_WIDTH  20
#define MENU_HEIGHT 21
#define STRING_WIDTH 250
#define STRING_HEIGHT 21
#define KEY_WIDTH   120
#define KEY_HEIGHT  21
#define FIELD_WIDTH KEY_WIDTH+STRING_WIDTH+2*MENU_WIDTH+12 /* has to be even */

#define ZERO_WIDTH 0  /* set this to 1 for debugging so you can see where */
		      /* all the invisible widgets are */

/* These two parameters depend on the size of the button bitmap in teh
   file button.bm  which is included in the xstuff.c  this is not realy
	good    */
#define MENU_BUTTON_W 18
#define MENU_BUTTON_H 18
#define MENU_BUTTON_D 1

/* these are the names of the bottom title bar buttons */
#define BTBB_QUIT "Exit"
#define BTBB_SAVE "Save"
#define BTBB_ADD_A_FIELD "Add A Field"
#define BTBB_ADD_A_BOX "Add A Box"
#define BTBB_ADD_AN_ACTION "Add An Action"
#define BTBB_ADD_A_MSG_TYPE "Add A Message Type"

static Arg d1_ShellArgs[]= {
  { XtNallowShellResize, (XtArgVal) TRUE },
  { XtNminWidth, (XtArgVal) KEY_WIDTH+2*MENU_WIDTH+40 },
  { XtNminHeight, (XtArgVal) 50 },
  { NULL, NULL },
};

static Arg d1_OuterArgs[]={
  { XtNheight, (XtArgVal) D1_DEF_HEIGHT },
  { XtNwidth, (XtArgVal) D1_DEF_WIDTH },
  { XtNresizable, (XtArgVal) TRUE },
  { XtNtraversalOn, (XtArgVal) FALSE },
  { XtNdefaultDistance, (XtArgVal) 0 },
  { NULL, (XtArgVal) NULL },
};

/*   { XtNtraversalOn, (XtArgVal) TRUE },  */

static Arg d1_TopTBArgs[]={
  { XtNwidth, (XtArgVal) FIELD_WIDTH },
  { XtNheight, (XtArgVal) FIELD_HEIGHT },
  { XtNstring, (XtArgVal) "Rule Editor" },
  { XtNresizable, (XtArgVal) TRUE },
  { XtNtop, (XtArgVal) XtChainTop },
  { XtNbottom, (XtArgVal) XtChainTop },
  { XtNleft, (XtArgVal) XtChainLeft },
  { XtNright, (XtArgVal) XtChainRight },
  { XtNborderWidth, (XtArgVal) 0 },
  { XtNhorizDistance, (XtArgVal) 3 }, 
  { XtNvertDistance, (XtArgVal) 3 },
  { NULL, NULL },
};

static Arg d1_AreaLabelArgs[]={
  { XtNwidth, (XtArgVal) 70 },
  { XtNheight, (XtArgVal) 20 },
  { XtNjustify, (XtArgVal) XtJustifyLeft },
  { XtNborderWidth, (XtArgVal) 0 },
  { XtNresizable, (XtArgVal) FALSE },
  { XtNtop, (XtArgVal) XtChainTop },
  { XtNbottom, (XtArgVal) XtChainTop },
  { XtNleft, (XtArgVal) XtChainLeft },
  { XtNright, (XtArgVal) XtChainLeft },
  { XtNhorizDistance, (XtArgVal) 3 },
  { XtNvertDistance, (XtArgVal) 3 },
  { NULL, NULL },
};

static Arg d1_DoingArgs[]={
  { XtNwidth, (XtArgVal) 0 },
  { XtNheight, (XtArgVal) FIELD_HEIGHT },
  { XtNjustify, (XtArgVal) XtJustifyCenter },
  { XtNborderWidth, (XtArgVal) 0 },
  { NULL, NULL },
};


static Arg d1_BotTBArgs[]={
  { XtNwidth, (XtArgVal) FIELD_WIDTH },
  { XtNheight, (XtArgVal) FIELD_HEIGHT },
  { XtNresizable, (XtArgVal) TRUE },
  { XtNtop, (XtArgVal) XtChainBottom },
  { XtNbottom, (XtArgVal) XtChainBottom },
  { XtNleft, (XtArgVal) XtChainLeft },
  { XtNright, (XtArgVal) XtChainRight },
  { XtNhorizDistance, (XtArgVal) 3 },
  { XtNvertDistance, (XtArgVal) 3 },
  { NULL, NULL },
};

static Arg d1_AbortArgs[]={
  { XtNheight, (XtArgVal) 20 },
  { XtNjustify, (XtArgVal) XtJustifyCenter },
  { XtNlabel, (XtArgVal) BTBB_QUIT },
  { XtNregion, (XtArgVal) XwALIGN_RIGHT },
  { XtNposition, (XtArgVal) 0 },
  { XtNprecedence, (XtArgVal) 0 },
  { XtNhighlightThickness, (XtArgVal) 2 },
  { NULL, NULL },
};

static Arg d1_DoneArgs[]={
  { XtNheight, (XtArgVal) 20 },
  { XtNjustify, (XtArgVal) XtJustifyCenter },
  { XtNlabel, (XtArgVal) BTBB_SAVE },
  { XtNregion, (XtArgVal) XwALIGN_LEFT },
  { XtNposition, (XtArgVal) 0 },
  { XtNprecedence, (XtArgVal) 1 },
  { XtNhighlightThickness, (XtArgVal) 2 },
  { NULL, NULL },
};

static Arg d1_AddMTArgs[]={
  { XtNheight, (XtArgVal) 20 },
  { XtNjustify, (XtArgVal) XtJustifyCenter },
  { XtNlabel, (XtArgVal) BTBB_ADD_A_MSG_TYPE },
  { XtNregion, (XtArgVal) XwALIGN_CENTER },
  { XtNposition, (XtArgVal) 2 },
  { XtNprecedence, (XtArgVal) 1 },
  { XtNhighlightThickness, (XtArgVal) 2 },
  { NULL, NULL },
};

static Arg d1_AddActionArgs[]={
  { XtNheight, (XtArgVal) 20 },
  { XtNjustify, (XtArgVal) XtJustifyCenter },
  { XtNlabel, (XtArgVal) BTBB_ADD_AN_ACTION },
  { XtNregion, (XtArgVal) XwALIGN_CENTER },
  { XtNposition, (XtArgVal) 4 },
  { XtNprecedence, (XtArgVal) 1 },
  { XtNhighlightThickness, (XtArgVal) 2 },
  { NULL, NULL },
};

static Arg d1_AddFieldArgs[]={
  { XtNheight, (XtArgVal) 20 },
  { XtNjustify, (XtArgVal) XtJustifyCenter },
  { XtNlabel, (XtArgVal) BTBB_ADD_A_FIELD },
  { XtNregion, (XtArgVal) XwALIGN_CENTER },
  { XtNposition, (XtArgVal) 1 },
  { XtNprecedence, (XtArgVal) 3 },
  { XtNhighlightThickness, (XtArgVal) 2 },
  { NULL, NULL },
};

static Arg d1_AddBoxArgs[]={
  { XtNheight, (XtArgVal) 20 },
  { XtNjustify, (XtArgVal) XtJustifyCenter },
  { XtNlabel, (XtArgVal) BTBB_ADD_A_BOX },
  { XtNregion, (XtArgVal) XwALIGN_CENTER },
  { XtNposition, (XtArgVal) 3 },
  { XtNprecedence, (XtArgVal) 4 },
  { XtNhighlightThickness, (XtArgVal) 2 },
  { NULL, NULL },
};

/*==================== Predicate Args */
static Arg d1_IfArgs[]={         /* formWidgetClass */
  { XtNheight, (XtArgVal) FIELD_HEIGHT },
  { XtNwidth, (XtArgVal) FIELD_WIDTH },
  { XtNvertDistance, (XtArgVal) 2 },
  { XtNhorizDistance, (XtArgVal) 3 },
  { XtNdefaultDistance, (XtArgVal) 2 },
  { XtNborderWidth, (XtArgVal) ZERO_WIDTH },
  { XtNtraversalOn, (XtArgVal) FALSE },
  { XtNresizable, (XtArgVal) TRUE },
  { XtNtop, (XtArgVal) XtChainTop },
  { XtNbottom, (XtArgVal) XtChainTop },
  { XtNleft, (XtArgVal) XtChainLeft },
  { XtNright, (XtArgVal) XtChainRight },
  { NULL, NULL },
};

static Arg d1_If_containerArgs[]={  /* formWidgetClass, son of form */
  { XtNheight, (XtArgVal) FIELD_HEIGHT },
  { XtNwidth, (XtArgVal) FIELD_WIDTH },
  { XtNmappedWhenManaged, (XtArgVal) TRUE },
  { XtNvertDistance, (XtArgVal) 2 },
  { XtNhorizDistance, (XtArgVal) 0 },
  { XtNborderWidth, (XtArgVal)  ZERO_WIDTH },
  { XtNdefaultDistance, (XtArgVal) 2 },
  { XtNresizable, (XtArgVal) TRUE },
  { XtNtop, (XtArgVal) XtChainTop },
  { XtNbottom, (XtArgVal) XtChainTop },
  { XtNleft, (XtArgVal) XtChainLeft },
  { XtNright, (XtArgVal) XtChainRight },
  { NULL, NULL },
};

static Arg d1_If_container2Args[]={  /* formWidgetClass, son of form */
  { XtNheight, (XtArgVal) KEY_HEIGHT },
  { XtNwidth, (XtArgVal) KEY_WIDTH+MENU_WIDTH+2 },
  { XtNmappedWhenManaged, (XtArgVal) TRUE },
  { XtNvertDistance, (XtArgVal) 0 },
  { XtNhorizDistance, (XtArgVal) 0 },
  { XtNborderWidth, (XtArgVal)  ZERO_WIDTH },
  { XtNdefaultDistance, (XtArgVal) 2 },
  { XtNresizable, (XtArgVal) TRUE },
  { XtNtop, (XtArgVal) XtChainTop },
  { XtNbottom, (XtArgVal) XtChainTop },
  { XtNleft, (XtArgVal) XtChainLeft },
  { XtNright, (XtArgVal) XtChainLeft },
  { NULL, NULL },
};

static Arg d1_IfBoxArgs[]={
  { XtNvertDistance, (XtArgVal) 0 },
  { XtNhorizDistance, (XtArgVal) 2 },
  { XtNwidth, (XtArgVal) D1_DEF_WIDTH },
  { NULL, NULL },
};

static Arg d1_PredKeyArgs[]={   /* labelWidgetClass, child of form */
  { XtNwidth, (XtArgVal) KEY_WIDTH },
  { XtNheight, (XtArgVal) KEY_HEIGHT },
  { XtNvertDistance, (XtArgVal) 0 },
  { XtNhorizDistance, (XtArgVal) 2 },
  { XtNborderWidth, (XtArgVal) ZERO_WIDTH },
  { XtNjustify, (XtArgVal) XtJustifyRight },
  { XtNresizable, (XtArgVal) FALSE },    /* the key is not resizable, this */
					 /* should be changed when I make 2 */
					 /* columns for the If part of the */
					 /* rule editor */
  { XtNtop, (XtArgVal) XtChainTop },
  { XtNbottom, (XtArgVal) XtChainBottom },
  { XtNleft, (XtArgVal) XtChainLeft },
  { XtNright, (XtArgVal) XtChainLeft },
  { NULL, NULL },
};

static Arg d1_PredKeyEditArgs[]={  /* asciiStringWidgetClass, child of form */
  { XtNwidth, (XtArgVal) KEY_WIDTH },
  { XtNheight, (XtArgVal) KEY_HEIGHT },
  { XtNvertDistance, (XtArgVal) 0 },
  { XtNhorizDistance, (XtArgVal) 2 },
  { XtNborderWidth, (XtArgVal) 1 },
  { XtNeditType, (XtArgVal) XttextEdit}, 
  { XtNlength, VALUE_LENGTH},
  { XtNtextOptions, resizeHeight | editable  },
  { XtNresizable, (XtArgVal) FALSE }, 
    /* the key is not resizable, this */
					 /* should be changed when I make 2 */
					 /* columns for the If part of the */
					 /* rule editor */
  { XtNtop, (XtArgVal) XtChainTop },
  { XtNbottom, (XtArgVal) XtChainBottom },
  { XtNleft, (XtArgVal) XtChainLeft },
  { XtNright, (XtArgVal) XtChainLeft },
  { NULL, NULL },
};


static String PredValTranslations =
  "<Leave>:rl_Monitor_field()";

static Arg d1_PredValueArgs[]={           /* asciiW, child of form */
  { XtNwidth, (XtArgVal) STRING_WIDTH },
  { XtNheight, (XtArgVal) STRING_HEIGHT },
  { XtNvertDistance, (XtArgVal) 0 },
  { XtNhorizDistance, (XtArgVal) 2 },
  { XtNborderWidth, (XtArgVal) 1 },
  { XtNeditType, (XtArgVal) XttextEdit},  
  { XtNtextOptions, resizeWidth | editable | resizeHeight},
  { XtNresizable, (XtArgVal) TRUE }, 
  { XtNtop, (XtArgVal) XtChainTop },
  { XtNbottom, (XtArgVal) XtChainBottom },
  { XtNleft, (XtArgVal) XtChainLeft },
  { XtNright, (XtArgVal) XtChainRight },
  { NULL, NULL },
};

/*==================== Association Args */
static Arg d1_AssocArgs[]={
  { XtNwidth, (XtArgVal) FIELD_WIDTH },
  { XtNmappedWhenManaged, (XtArgVal) TRUE },
  { XtNvertDistance, (XtArgVal) 2 },
  { XtNhorizDistance, (XtArgVal) 2 },
  { XtNborderWidth, (XtArgVal)  1 },
  { XtNdefaultDistance, (XtArgVal) 2 },
  { XtNresizable, (XtArgVal) TRUE },
  { XtNtop, (XtArgVal) XtChainTop },
  { XtNbottom, (XtArgVal) XtChainTop },
  { XtNleft, (XtArgVal) XtChainLeft },
  { XtNright, (XtArgVal) XtChainRight },
  { NULL, NULL },
};
static Arg d1_AssocLabelArgs[]={
  { XtNjustify, (XtArgVal) XtJustifyLeft },
  { XtNwidth, (XtArgVal) FIELD_WIDTH },
  { XtNmappedWhenManaged, (XtArgVal) TRUE },
  { XtNborderWidth, (XtArgVal)  0 },
  { XtNresizable, (XtArgVal) TRUE },
  { XtNtop, (XtArgVal) XtChainTop },
  { XtNbottom, (XtArgVal) XtChainTop },
  { XtNleft, (XtArgVal) XtChainLeft },
  { XtNright, (XtArgVal) XtChainRight },
  { NULL, NULL },
};

/*==================== Action Args */
static Arg d1_ThenColumn1Args[]={
  { XtNheight, (XtArgVal) FIELD_HEIGHT },
  { XtNwidth, (XtArgVal) FIELD_WIDTH },
  { XtNdefaultDistance, (XtArgVal) 2 },
  { XtNvertDistance, (XtArgVal) 2 },
  { XtNhorizDistance, (XtArgVal) 3 },
  { XtNborderWidth, (XtArgVal) ZERO_WIDTH },
  { XtNresizable, (XtArgVal) TRUE }, 
  { XtNtop, (XtArgVal) XtChainTop },
  { XtNbottom, (XtArgVal) XtChainTop },
  { XtNleft, (XtArgVal) XtChainLeft },
  { XtNright, (XtArgVal) XtChainRight },
  { NULL, NULL },
};

static Arg d1_ThenC1Args[]={
  { XtNheight, (XtArgVal) FIELD_HEIGHT },
  { XtNwidth, (XtArgVal) FIELD_WIDTH },
  { XtNvertDistance, (XtArgVal) 2 },
  { XtNhorizDistance, (XtArgVal) 0 },
  { XtNdefaultDistance, (XtArgVal) 2 },
  { XtNborderWidth, (XtArgVal)  ZERO_WIDTH },
  { XtNtraversalOn, (XtArgVal) FALSE },
  { XtNmappedWhenManaged, (XtArgVal) TRUE },
  { XtNresizable, (XtArgVal) TRUE }, 
  { XtNtop, (XtArgVal) XtChainTop },
  { XtNbottom, (XtArgVal) XtChainTop },
  { XtNleft, (XtArgVal) XtChainLeft },
  { XtNright, (XtArgVal) XtChainRight },
  { NULL, NULL },
};

static Arg d1_ThenKey1Args[]={
  { XtNheight, (XtArgVal) KEY_HEIGHT },
  { XtNwidth, (XtArgVal) KEY_WIDTH  },
  { XtNborderWidth, (XtArgVal)  ZERO_WIDTH },
  { XtNvertDistance, (XtArgVal) 0 },
  { XtNhorizDistance, (XtArgVal) 2 },
  { XtNjustify, (XtArgVal) XtJustifyRight },
  { XtNresizable, (XtArgVal) FALSE }, 
  { XtNtop, (XtArgVal) XtChainTop },
  { XtNbottom, (XtArgVal) XtChainTop },
  { XtNleft, (XtArgVal) XtChainLeft },
  { XtNright, (XtArgVal) XtChainLeft },
  { NULL, NULL },
};

static Arg d1_ThenValueArgs[]={
  { XtNwidth, (XtArgVal) STRING_WIDTH },
  { XtNheight, (XtArgVal) STRING_HEIGHT },
  { XtNborderWidth, (XtArgVal) 1 },
  { XtNeditType, (XtArgVal) XttextEdit },  
  { XtNvertDistance, (XtArgVal) 0 },
  { XtNhorizDistance, (XtArgVal) 2 },
  { XtNtextOptions, resizeHeight | resizeWidth | editable},
  { XtNresizable, (XtArgVal) TRUE }, 
  { XtNtop, (XtArgVal) XtChainTop },
  { XtNbottom, (XtArgVal) XtChainBottom },
  { XtNleft, (XtArgVal) XtChainLeft },
  { XtNright, (XtArgVal) XtChainRight },
  { NULL, NULL },
};

/* ================= Other args ==========*/
static Arg d1_MenuBoxArgs[]={
  { XtNheight, (XtArgVal) MENU_BUTTON_H },
  { XtNwidth, (XtArgVal) MENU_BUTTON_W },
  { XtNvertDistance, (XtArgVal) 2 },
  { XtNhorizDistance, (XtArgVal) 2 },
  { XtNhSpace, (XtArgVal) 0 },
  { XtNvSpace, (XtArgVal) 0 },
  { XtNborderWidth, (XtArgVal) ZERO_WIDTH },
  { XtNresizable, (XtArgVal) FALSE }, 
  { XtNtop, (XtArgVal) XtChainTop },
  { XtNbottom, (XtArgVal) XtChainBottom },
  { XtNleft, (XtArgVal) XtChainLeft },
  { XtNright, (XtArgVal) XtChainLeft },
  { NULL, NULL, },
};

static Arg d1_MenuRasterArgs[]={
  { XtNhighlightThickness, (XtArgVal) 0 },
  { XtNhighlightStyle, (XtArgVal) XwSHADOW_BORDER },
  { XtNborderWidth, (XtArgVal) 0 },
  { XtNwidth, (XtArgVal) MENU_BUTTON_W },
  { XtNheight, (XtArgVal) MENU_BUTTON_H },
  { XtNlabel, (XtArgVal) "" },
  { XtNinternalHeight, (XtArgVal) 0 },
  { XtNinternalWidth, (XtArgVal) 0 },
  { NULL, NULL },
};

static Arg d1_BlackLineArgs[]={   /* labelWidgetClass, child of form */
  { XtNheight, (XtArgVal) 2 }, 
  { XtNvertDistance, (XtArgVal) 0 },
  { XtNhorizDistance, (XtArgVal) 0 },
  { XtNborderWidth, (XtArgVal) 0 },
  { XtNjustify, (XtArgVal) XtJustifyRight },
  { XtNlabel, (XtArgVal) "" },
  { XtNinternalHeight, (XtArgVal) 0 },
  { XtNinternalWidth, (XtArgVal) 0 },
  { XtNresizable, (XtArgVal) TRUE },
  { XtNtop, (XtArgVal) XtChainTop },
  { XtNbottom, (XtArgVal) XtChainTop },
  { XtNleft, (XtArgVal) XtChainLeft },
  { XtNright, (XtArgVal) XtChainRight },
  { NULL, NULL },
};

#endif



