/*
 *  CELLS       An Implementation of the WireWorld cellular automata
 *              as described in Scientific American, Jan 1990.
 *
 *              Copyright 1990 by Davide P. Cervone.
 *  You may use this code, provided this copyright notice is kept intact.
 *  See the CELLS.HELP file for complete information on distribution conditions.
 */

/*
 *  File:  cReqHelp.c       Data structures for the Help and About requesters.
 */


#include "Cells.h"
#include "cRequest.h"
#include "cHelp.h"
#include "cReqHelp.h"
#include "cBoxes.h"

extern USHORT DaveData[];

static short HLPPanelBox[]  = FBOX(HLP_PANELW,HLP_PANELH);
static short HLPFrameBox[]  = FBOX(HLP_FRAMEW,HLP_FRAMEH);
static short HLPListBox[]   = FBOX(HLP_LISTW,HLP_LISTH);
static short HLPNameBox[]   = FBOX(HLP_NAMEW,HLP_NAMEH);
static short HLPSlideBox[]  = VBOX(HLP_SLIDEW,HLP_SLIDEH);
static short HLPButtonBox[] = HBOX(HLP_BUTTONW,HLP_BUTTONH);

static struct Border HLPBorder[] =
{
      #define NEXTBORDER(n)     &HLPBorder[n+2]
      #define BORDERNAME        HLPBorder
   OUTBRDR(HLPB_PANEL, 0,0, HLPPanelBox),
   INBRDR (HLPB_FRAME, HLP_FRAMEX,HLP_FRAMEY, HLPFrameBox),
   INBRDR (HLPB_LIST,  HLP_LISTX,HLP_LISTY,   HLPListBox),
   INBRDR (HLPB_NAME,  HLP_NAMEX,HLP_NAMEY,   HLPNameBox),
      #undef  NEXTBORDER
      #define NEXTBORDER(n)     NULL
   OUTBRDR(HLPB_SLIDE, HLP_SLIDEX,HLP_SLIDEY, HLPSlideBox),
   OUTBRDR(HLPB_BUTTON, 0,0, HLPButtonBox)
      #undef NEXTBORDER
      #undef BORDERNAME
};

static struct Image HLPImage[] =
{
   IMAGE(-1,-1,HLP_NAMEW-2,HLP_NAMEH-2,BACKGROUND),
   IMAGE(0,0,HLP_TITLEW,HLP_TITLEH,FOREGROUND),
   IMAGE(0,0,0,0, FOREGROUND),
   IMAGE(1,1,HLP_LISTW-2,LNAMEH,FOREGROUND),
   IMAGE(1,1,HLP_LISTW-2,LNAMEH,TEXTSELECT),
   IMAGE(HLP_SLIDEX+1,HLP_SLIDEY+1,HLP_SLIDEW-2,HLP_SLIDEH-2,BACKGROUND)
};

static char Topics[7] = "Topics";

static struct IntuiText HLPText[] =
{
   ITEXT("Done",    11,2),
   ITEXT("Help",    11,2),
   ITEXT("Parent",   5,2),
   ITEXT(&Topics[0], 5,2),
   ITEXT("More",    11,2),
   CTEXT(NULL,      30,1, TITLEPEN),
   ITEXT("                                   ", 3,1),
   ITEXT("                                   ", 3,11),
   ITEXT("                                   ", 3,21),
   ITEXT("                                   ", 3,31),
   ITEXT("                                   ", 3,41),
   ITEXT("                                   ", 3,51),
   ITEXT("                                   ", 3,61),
   ITEXT("                                   ", 3,71),
   ITEXT("                                   ", 3,81),
   ITEXT("                                   ", 3,91),
   ITEXT("                                   ", 3,101),
   ITEXT("                                   ", 3,111),
};

char HlpNameBuf[MAXBUFFER];
extern char UndoBuffer[];

static struct StringInfo HlpNameInfo =
   {&HlpNameBuf[0], &UndoBuffer[0], 0,MAXBUFFER, 0, 0,0,0, 0,0, NULL, 0, NULL};

struct PropInfo HlpSlider =
   {AUTOKNOB|FREEVERT|PROPBORDERLESS,0,0,0xFFFF,0xFFFF, 0,0,0,0,0,0};

extern struct ListInfo HlpListInfo;


#define BUTTON(n,f)\
{\
   &HLPGadget[n+1], HLP_BUTTONX+HLP_BUTTONW*(n-HLP_DONE),HLP_BUTTONY,\
   HLP_BUTTONW,HLP_BUTTONH, GADGHCOMP, (f)+RELVERIFY, BOOLGADGET| REQGADGET,\
   (APTR)&HLPBorder[HLPB_BUTTON],NULL, &HLPText[n-HLP_DONE+HLPT_DONE], 0,\
   NULL, n, NULL\
}

#define LIST(n,x,y)\
{\
   &HLPGadget[n+1], x,y, HLP_LISTW,HLP_LISTH, GADGHNONE|GADGIMAGE,\
   GADGIMMEDIATE, BOOLGADGET| REQGADGET, (APTR)&HLPImage[HLPI_BLANK],\
   NULL, &HLPText[HLPT_LIST0], 0, NULL, n, (APTR)&HlpListInfo\
}

#define NAME(n)\
{\
   &HLPGadget[n+1], HLP_NAMEX+2,HLP_NAMEY+2,HLP_NAMEW-4,HLP_NAMEH-4,\
   GADGHCOMP|GADGIMAGE, GADGIMMEDIATE|RELVERIFY, STRGADGET|REQGADGET,\
   (APTR)&HLPImage[HLPI_NAME], NULL, NULL, 0, (APTR)&HlpNameInfo, n,\
   (APTR)&HlpListInfo\
}

#define TITLE(n)\
{\
   &HLPGadget[n+1], HLP_TITLEX,HLP_TITLEY,0,0, GADGHNONE|GADGIMAGE, 0,\
   BOOLGADGET|REQGADGET, (APTR)&HLPImage[HLPI_TITLE],\
   NULL, &HLPText[HLPT_TITLE], 0, NULL, n, NULL\
}

#define ARROW(n,x,y,im)\
{\
   &HLPGadget[n+1], x,y,SLIDEWH,SLIDEWH, GADGHCOMP|GADGIMAGE,\
   GADGIMMEDIATE|RELVERIFY, BOOLGADGET|REQGADGET, (APTR)&cImage[im],\
   NULL, NULL, NULL,NULL, n, (APTR)&HlpListInfo\
}

#define SLIDER(n,x,y,w,h)\
{\
   &HLPGadget[n+1], x+2,y+2,w-4,h-4, GADGHCOMP|GADGIMAGE,\
   GADGIMMEDIATE|RELVERIFY, PROPGADGET|REQGADGET, (APTR)&HLPImage[HLPI_SLIDE],\
   NULL, NULL, NULL, (APTR)&HlpSlider, n, (APTR)&HlpListInfo\
}

#define ENDLIST\
   {NULL, 0,0,0,0, GADGHNONE|GADGIMAGE, 0, BOOLGADGET|REQGADGET,\
   (APTR)&HLPImage[HLPI_BACK],NULL, NULL, NULL,NULL, HLP_IMGADG, NULL}


static struct Gadget HLPGadget[] =
{
   BUTTON(HLP_DONE,0),
   BUTTON(HLP_HELP,(TOGGLESELECT|GADGIMMEDIATE)-RELVERIFY),
   BUTTON(HLP_PARENT,0),
   BUTTON(HLP_TOPICS,0),
   BUTTON(HLP_MORE,0),
   LIST  (HLP_LIST,HLP_LISTX,HLP_LISTY),
   NAME  (HLP_NAME),
   SLIDER(HLP_SLIDE,HLP_SLIDEX,HLP_SLIDEY,HLP_SLIDEW,HLP_SLIDEH),
   ARROW (HLP_UARROW,HLP_UARROWX,HLP_UARROWY,HLPI_UARROW),
   ARROW (HLP_DARROW,HLP_DARROWX,HLP_DARROWY,HLPI_DARROW),
   TITLE (HLP_TITLE),
   ENDLIST
};

struct ExtRequest HLPRequest =
{
   {NULL, 0,0, HLP_PANELW,HLP_PANELH, 0,0, &HLPGadget[0],
   &HLPBorder[HLPB_PANEL], NULL, 0, FOREGROUND, NULL, NULL, NULL},
   NULL,NULL,NULL, &HLPGadget[HLP_NAME],
};

struct ListInfo HlpListInfo =
{
   &HLPRequest, &HLPGadget[HLP_LIST], &HLPGadget[HLP_NAME],
   &HLPGadget[HLP_SLIDE], NULL, NULL, NULL, &HLPText[HLPT_LIST0],
   &HLPImage[HLPI_BLANK], 12,35, 0,0, 0, 0, 0
};



static short ABTPanelBox[]  = FBOX(ABT_PANELW,ABT_PANELH);
static short ABTFrameBox[]  = FBOX(ABT_FRAMEW,ABT_FRAMEH);
static short ABTButtonBox[] = FBOX(ABT_BUTTONW,ABT_BUTTONH);

static struct Border ABTBorder[] =
{
      #define NEXTBORDER(n)     &ABTBorder[n+2]
      #define BORDERNAME        ABTBorder
   OUTBRDR(ABTB_PANEL, 0,0, ABTPanelBox),
      #undef  NEXTBORDER
      #define NEXTBORDER(n)     NULL
   INBRDR (ABTB_FRAME, ABT_FRAMEX,ABT_FRAMEY, ABTFrameBox),
   OUTBRDR(ABTB_BUTTON, 0,0, ABTButtonBox)
};

static struct Image DaveImage =
   {0,0, ABT_DAVEW,ABT_DAVEH,2, &DaveData[0], 3,0, NULL};

static char AbtTitle[32];
static char Free[25];

static struct IntuiText ABTText[] =
{
   ATEXT(ABTT_TITLE,    &AbtTitle[0], ABT_TITLEX,ABT_TITLEY, TITLEPEN),
   ALINE(ABTT_COPYRT,   "Copyright (c) 1990"),
   ALINE(ABTT_NAME,     "Davide P. Cervone"),
   ALINE(ABTT_ADDR,     "50 Armstrong Avenue"),
   ALINE(ABTT_CITY,     "Providence, RI 02903"),
   ALAST(ABTT_FREE,     &Free[0], ABT_FREEX,ABT_FREEY, FREEPEN),
   ALAST(ABTT_OK,       "OK", 7,3, TEXTPEN),
};


static struct Gadget ABTGadget[] =
{
   {&ABTGadget[1], ABT_BUTTONX,ABT_BUTTONY, ABT_BUTTONW,ABT_BUTTONH,
      GADGHCOMP, RELVERIFY, BOOLGADGET|REQGADGET, (APTR)&ABTBorder[ABTB_BUTTON],
      NULL, &ABTText[ABTT_OK], 0, NULL, ABT_OK, NULL},
   {NULL, ABT_DAVEX, ABT_DAVEY, 0,0, GADGHNONE|GADGIMAGE, 0,
      BOOLGADGET|REQGADGET, (APTR)&DaveImage, NULL,NULL, NULL,NULL,
      ABT_DAVE, NULL}
};

struct ExtRequest ABTRequest =
{
   {NULL, 0,0, ABT_PANELW,ABT_PANELH, 0,0, &ABTGadget[0],
    &ABTBorder[ABTB_PANEL], &ABTText[ABTT_TITLE], 0, FOREGROUND,
    NULL,NULL,NULL}, NULL,NULL,NULL, NULL,
};


/*
 *  The main default HELP topic
 */

#define HFIRST(i,s)   {NULL,&HelpLine[i+1],s,0,HLP_STATIC}
#define HLINE(i,s)    {&HelpLine[i-1],&HelpLine[i+1],s,0,HLP_STATIC}
#define HLAST(i,s)    {&HelpLine[i-1],NULL,s,0,HLP_STATIC}

static HELPLINE HelpLine[] =
{
   HFIRST(0,"Control Help with the buttons:"),
   HLINE(1,""),
   HLINE(2,"MORE    for the next page of text"),
   HLINE(3,"TOPICS  for a list of sub-topics"),
   HLINE(4,"PARENT  to go to the previous"),
   HLINE(5,"          help topic level"),
   HLINE(6,"HELP    to get this message"),
   HLINE(7,"DONE    when you are all finished"),
   HLINE(8,""),
   HLINE(9,"The slider scrolls the text."),
   HLINE(10,""),
   HLINE(11,"           [Press MORE]"),
   HLINE(12,"Double-Click on a topic to select"),
   HLINE(13,"it, or type one in at the bottom"),
   HLINE(14,"(prefix matching is performed)."),
   HLINE(15,""),
   HLINE(16,"Topics are in a hierarchy with"),
   HLINE(17,"sub-topics nested to any depth."),
   HLINE(18,""),
   HLINE(19,"Use PARENT to go up a level, and"),
   HLINE(20,"TOPICS to go down a level.  SHIFT"),
   HLINE(21,"PARENT takes you to the top level."),
   HLINE(22,""),
   HLAST(23," [Press HELP when ready to go on]"),
};

HELPITEM DefaultHelp =
{
   NULL,NULL, NULL,0, HLP_STATIC|HLP_LOADED, NULL, 0, NULL, &HelpLine[23],
   "How to use HELP:", 0
};
