// $VER: ChangeGUI.c 1.3 (05.02.96)

#include <exec/types.h>
#include <pragma/gadtools_lib.h>
#include <pragma/exec_lib.h>
#include <pragma/intuition_lib.h>
#include <intuition/gadgetclass.h>
#include "Change.h"
#include "ChangeGUI.h"

struct Gadget	*ChangeGadg[17];
struct TextAttr topaz8 = {"topaz.font", TOPAZ_EIGHTY};

UWORD ChangeGTypes[] = {
  GENERIC_KIND,
  GENERIC_KIND,
  CHECKBOX_KIND,
  CHECKBOX_KIND,
  CHECKBOX_KIND,
  CHECKBOX_KIND,
  CHECKBOX_KIND,
  CHECKBOX_KIND,
  CHECKBOX_KIND,
  CHECKBOX_KIND,
  TEXT_KIND,
  BUTTON_KIND,
  STRING_KIND,
  STRING_KIND,
  STRING_KIND,
  STRING_KIND,
  STRING_KIND
};

struct NewGadget ChangeNGad[] = {
  314,  15,  20, 14, 0, 0, GD_Load_File_GetFile, 0, 0, 0,
  314,  34,  20, 14, 0, 0, GD_Save_File_GetFile, 0, 0, 0,
   20,  58,  26, 11, (UBYTE *) "FOUND",		 0, GD_FOUND_CheckBox,	   PLACETEXT_RIGHT, 0, 0,
   20,  70,  26, 11, (UBYTE *) "HEX",		 0, GD_HEX_CheckBox,       PLACETEXT_RIGHT, 0, 0,
   20,  82,  26, 11, (UBYTE *) "LENGTH",	 0, GD_LENGTH_CheckBox,    PLACETEXT_RIGHT, 0, 0,
   20,  94,  26, 11, (UBYTE *) "NOCHANGE",	 0, GD_NOCHANGE_CheckBox,  PLACETEXT_RIGHT, 0, 0,
   20, 106,  26, 11, (UBYTE *) "NOSIZE",	 0, GD_NOSIZE_CheckBox,    PLACETEXT_RIGHT, 0, 0,
   20, 118,  26, 11, (UBYTE *) "OVERWRITE",	 0, GD_OVERWRITE_CheckBox, PLACETEXT_RIGHT, 0, 0,
   20, 130,  26, 11, (UBYTE *) "PATH",		 0, GD_PATH_CheckBox,      PLACETEXT_RIGHT, 0, 0,
   20, 142,  26, 11, (UBYTE *) "POSITION",	 0, GD_POSITION_CheckBox,  PLACETEXT_RIGHT, 0, 0,
  166, 139, 276, 14, (UBYTE *) "Error", 	 0, GD_Error_Text,	   PLACETEXT_ABOVE, 0, 0,
  137,  58,  69, 15, (UBYTE *) "START", 	 0, GD_START_Button,	   PLACETEXT_IN,    0, 0,
  346,  34,  96, 14, 0, 0, GD_Position_String, 0, 0, 0,
  101,  15, 212, 14, (UBYTE *) "Load-File",	 0, GD_Load_File_String,   PLACETEXT_LEFT,  0, 0,
  101,  34, 212, 14, (UBYTE *) "Save-File",	 0, GD_Save_File_String,   PLACETEXT_LEFT,  0, 0,
  166,  83, 276, 14, (UBYTE *) "Search-String",  0, GD_Search_String,	   PLACETEXT_ABOVE, 0, 0,
  166, 111, 276, 14, (UBYTE *) "Replace-String", 0, GD_Replace_String,	   PLACETEXT_ABOVE, 0, 0
};

ULONG ChangeGTags[] = {
  TAG_DONE,
  TAG_DONE,
  TAG_DONE,
  TAG_DONE,
  TAG_DONE,
  TAG_DONE,
  TAG_DONE,
  TAG_DONE,
  TAG_DONE,
  TAG_DONE,
  GTTX_Border, TRUE, TAG_DONE,
  TAG_DONE,
  GA_TabCycle, FALSE, GTST_String, (ULONG) "0", GTST_MaxChars, 10, STRINGA_Justification, GACT_STRINGCENTER, GA_Disabled, TRUE, TAG_DONE,
  GTST_String, (ULONG) "RAM:A", GTST_MaxChars, 100, STRINGA_Justification, GACT_STRINGCENTER, TAG_DONE,
  GTST_String, (ULONG) "RAM:B", GTST_MaxChars, 100, STRINGA_Justification, GACT_STRINGCENTER, TAG_DONE,
  GTST_MaxChars, 255, STRINGA_Justification, GACT_STRINGCENTER, TAG_DONE,
  GTST_MaxChars, 255, STRINGA_Justification, GACT_STRINGCENTER, TAG_DONE
};

int OpenChangeWindow(void)
{
  struct NewGadget ng;
  struct Gadget *g;
  UWORD lc, tc;
  UWORD	offy = Scr->WBorTop + Scr->RastPort.TxHeight + 1;

  if(!(g = CreateContext(&ChangeGList)))
    return 1;

  for(lc = tc = 0; lc < Change_CNT; lc++)
  {
    CopyMem(&ChangeNGad[lc], &ng, sizeof(struct NewGadget));
    ng.ng_VisualInfo = VisualInfo;
    ng.ng_TextAttr   = &topaz8;
    ng.ng_LeftEdge  += Scr->WBorLeft;
    ng.ng_TopEdge   += offy;
    ChangeGadg[lc] = g = CreateGadgetA(ChangeGTypes[lc], g, &ng,
    (struct TagItem *) &ChangeGTags[tc]);

    if(ChangeGTypes[lc] == GENERIC_KIND)
    {
      g->Flags		|= GFLG_GADGIMAGE | GFLG_GADGHIMAGE;
      g->Activation     |= GACT_RELVERIFY;
      g->GadgetRender	= (APTR)getImage;
      g->SelectRender   = (APTR)getImage;
    }
    if(lc == GD_Search_String || lc == GD_Replace_String)
      g->Activation	|= GACT_IMMEDIATE;

    while(ChangeGTags[tc])
      tc += 2;
    ++tc;
    if(!g)
      return 2;
  }

  if(!(ChangeWnd = OpenWindowTags(0,
	WA_Left,	55,
	WA_Top,		53,
	WA_Width,	475,
	WA_Height,	166 + offy,
	WA_IDCMP,	IDCMP_GADGETUP|IDCMP_GADGETDOWN|IDCMP_CLOSEWINDOW,
	WA_Flags,	WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|
			WFLG_SMART_REFRESH,
	WA_Gadgets,	ChangeGList,
	WA_PubScreen,	Scr,
	WA_Title,	version,
	WA_ScreenTitle,	version,
	WA_AutoAdjust,	TRUE,
        WA_Activate,	TRUE,
	TAG_DONE )))
    return 4;

  GT_RefreshWindow(ChangeWnd, 0);
  return 0;
}
