/*********************************************/
/*                                           */
/*       Designer (C) Ian OConnor 1994       */
/*                                           */
/*      Designer Produced C include file     */
/*                                           */
/*********************************************/

#include <exec/types.h>
#include <exec/memory.h>
#include <dos/dosextens.h>
#include <intuition/screens.h>
#include <intuition/intuition.h>
#include <intuition/gadgetclass.h>
#include <libraries/gadtools.h>
#include <diskfont/diskfont.h>
#include <utility/utility.h>
#include <graphics/gfxbase.h>
#include <workbench/workbench.h>
#include <graphics/scale.h>
#include <clib/exec_protos.h>
#include <clib/wb_protos.h>
#include <clib/intuition_protos.h>
#include <clib/gadtools_protos.h>
#include <clib/graphics_protos.h>
#include <clib/utility_protos.h>
#include <string.h>
#include <clib/diskfont_protos.h>

#include "XPR_Gui.h"


ULONG BevelTags[] =
  {
  (GTBB_Recessed), TRUE,
  (GT_VisualInfo), 0,
  (TAG_DONE)
  };

struct Window *XPRWin = NULL;
APTR XPRWinVisualInfo;
APTR XPRWinDrawInfo;
struct Gadget *XPRWinGList;
struct Gadget *XPRWinGadgets[12];
UBYTE XPRWinFirstRun = 0;

ULONG XPRWinGadgetTags[] =
  {
  (GTNM_Border), TRUE,
  (TAG_END),
  (GTNM_Border), TRUE,
  (TAG_END),
  (GTNM_Border), TRUE,
  (TAG_END),
  (GTTX_Text), (ULONG)"<unknown>",
  (GTTX_Border), TRUE,
  (TAG_END),
  (GTTX_Text), (ULONG)"xprzmodem.library",
  (GTTX_Border), TRUE,
  (TAG_END),
  (GTNM_Border), TRUE,
  (TAG_END),
  (GTNM_Border), TRUE,
  (TAG_END),
  (GTNM_Border), TRUE,
  (TAG_END),
  (GTTX_Text), (ULONG)"<none>",
  (GTTX_Border), TRUE,
  (TAG_END),
  (GTTX_Text), (ULONG)"<none>",
  (GTTX_Border), TRUE,
  (TAG_END),
  (GTNM_Border), TRUE,
  (TAG_END),
  (GTNM_Border), TRUE,
  (TAG_END),
  };

UWORD XPRWinGadgetTypes[] =
  {
  NUMBER_KIND,
  NUMBER_KIND,
  NUMBER_KIND,
  TEXT_KIND,
  TEXT_KIND,
  NUMBER_KIND,
  NUMBER_KIND,
  NUMBER_KIND,
  TEXT_KIND,
  TEXT_KIND,
  NUMBER_KIND,
  NUMBER_KIND,
  };

struct NewGadget XPRWinNewGadgets[] =
  {
  103, 50, 72, 12, (UBYTE *)"Transferred", &HBBS8066, XPRWin_Transferred, 1, NULL,  (APTR)&XPRWinGadgetTags[0],
  103, 63, 72, 12, (UBYTE *)"Remaining", &HBBS8066, XPRWin_Remaining, 1, NULL,  (APTR)&XPRWinGadgetTags[3],
  103, 37, 72, 12, (UBYTE *)"Size", &HBBS8066, XPRWin_Size, 1, NULL,  (APTR)&XPRWinGadgetTags[6],
  72, 17, 268, 12, (UBYTE *)"File", &HBBS8066, XPRWin_File, 1, NULL,  (APTR)&XPRWinGadgetTags[9],
  72, 4, 268, 12, (UBYTE *)"Library", &HBBS8066, XPRWin_Library, 1, NULL,  (APTR)&XPRWinGadgetTags[14],
  268, 37, 72, 12, (UBYTE *)"CPS", &HBBS8066, XPRWin_CPS, 1, NULL,  (APTR)&XPRWinGadgetTags[19],
  268, 50, 72, 12, (UBYTE *)"Blocks", &HBBS8066, XPRWin_Blocks, 1, NULL,  (APTR)&XPRWinGadgetTags[22],
  268, 63, 72, 12, (UBYTE *)"Block Size", &HBBS8066, XPRWin_BlockSize, 1, NULL,  (APTR)&XPRWinGadgetTags[25],
  72, 97, 268, 12, (UBYTE *)"Message", &HBBS8066, XPRWin_Message, 1, NULL,  (APTR)&XPRWinGadgetTags[28],
  72, 111, 268, 12, (UBYTE *)"Error", &HBBS8066, XPRWin_Error, 1, NULL,  (APTR)&XPRWinGadgetTags[33],
  103, 76, 72, 12, (UBYTE *)"Percent", &HBBS8066, XPRWin_Percent, 1, NULL,  (APTR)&XPRWinGadgetTags[38],
  268, 76, 72, 12, (UBYTE *)"Errors", &HBBS8066, XPRWin_Errors, 1, NULL,  (APTR)&XPRWinGadgetTags[41],
  };
UWORD XPRWinZoomInfo[4] = { 111, 30, 400, 10 };

struct TextAttr HBBS8066 = { (STRPTR)"HBBS.font", 8, 0, 66 };

void RendWindowXPRWin( struct Window *Win, void *vi )
{
UWORD offx = Win->BorderLeft;
UWORD offy = Win->BorderTop;
if (Win != NULL)
  {
  BevelTags[3] = (ULONG)vi;
  DrawBevelBoxA( Win->RPort, 2+offx,1+offy,343,32, (struct TagItem *)(&BevelTags[2]));
  DrawBevelBoxA( Win->RPort, 2+offx,35+offy,343,58, (struct TagItem *)(&BevelTags[2]));
  DrawBevelBoxA( Win->RPort, 2+offx,95+offy,343,30, (struct TagItem *)(&BevelTags[2]));
  }
}

int OpenWindowXPRWin(struct Screen *Scr)  // *!* Changed
{

UWORD offx, offy;
UWORD loop;
struct NewGadget newgad;
struct Gadget *Gad;
struct Gadget *Gad2;
APTR Cla;
if (XPRWinFirstRun == 0)
  {
  XPRWinFirstRun = 1;
  }
if (Scr) // *!* Changed
  {
  offx = Scr->WBorLeft;
  offy = Scr->WBorTop + Scr->Font->ta_YSize+1;
  if (NULL != ( XPRWinVisualInfo = GetVisualInfoA( Scr, NULL)))
    {
    if (NULL != ( XPRWinDrawInfo = GetScreenDrawInfo( Scr)))
      {
      XPRWinGList = NULL;
      Gad = CreateContext( &XPRWinGList);
      for ( loop=0 ; loop<12 ; loop++ )
        if (XPRWinGadgetTypes[loop] != 198)
          {
          CopyMem((char * )&XPRWinNewGadgets[loop], ( char * )&newgad, (long)sizeof( struct NewGadget ));
          newgad.ng_VisualInfo = XPRWinVisualInfo;
          newgad.ng_LeftEdge += offx;
          newgad.ng_TopEdge += offy;
          XPRWinGadgets[ loop ] = NULL;
          XPRWinGadgets[ newgad.ng_GadgetID - XPRWinFirstID ] = Gad = CreateGadgetA( XPRWinGadgetTypes[loop], Gad, &newgad, newgad.ng_UserData );
          }
      for ( loop=0 ; loop<12 ; loop++ )
        if (XPRWinGadgetTypes[loop] == 198)
          {
          XPRWinGadgets[ loop ] = NULL;
          Cla = NULL;
          if (Gad)
            XPRWinGadgets[ loop ] = Gad2 = (struct Gadget *) NewObjectA( (struct IClass *)Cla, XPRWinNewGadgets[ loop ].ng_GadgetText, XPRWinNewGadgets[ loop ].ng_UserData );
          }
      if (Gad != NULL)
        {
        if (NULL != (XPRWin = OpenWindowTags( NULL, (WA_Left), 154,
                (WA_Top), 73,
                (WA_Width), 351+offx,
                (WA_Height), 128+offy,
                (WA_Title), "XPR Transfer Status",
                (WA_MinWidth), 150,
                (WA_MinHeight), 25,
                (WA_MaxWidth), 1200,
                (WA_MaxHeight), 1200,
                (WA_DragBar), TRUE,
                (WA_DepthGadget), TRUE,
                (WA_CloseGadget), TRUE,
                (WA_SmartRefresh), TRUE,
                (WA_AutoAdjust), TRUE,
                (WA_Gadgets), XPRWinGList,
                (WA_Zoom), XPRWinZoomInfo,
                (WA_PubScreen) , (LONG)Scr,
                (WA_IDCMP),512,
                (TAG_END))))
          {
          RendWindowXPRWin(XPRWin, XPRWinVisualInfo );
          GT_RefreshWindow( XPRWin, NULL);
          RefreshGList( XPRWinGList, XPRWin, NULL, ~0);
          return( 0L );
          }
        }
      FreeGadgets( XPRWinGList);
      FreeScreenDrawInfo( Scr, XPRWinDrawInfo );
      }
    FreeVisualInfo( XPRWinVisualInfo );
    }
  }
return( 1L );
}

void CloseWindowXPRWin( void )
{
if (XPRWin != NULL)
  {
  FreeScreenDrawInfo( XPRWin->WScreen, XPRWinDrawInfo );
  XPRWinDrawInfo = NULL;
  CloseWindow( XPRWin);
  XPRWin = NULL;
  FreeVisualInfo( XPRWinVisualInfo);
  FreeGadgets( XPRWinGList);
  }
}

int OpenDiskFonts( void )
{
  int OKSoFar = 0;
if (NULL == OpenDiskFont( &HBBS8066 ) )
  OKSoFar = 1;
return ( OKSoFar );
}

