/*
 *  Source machine generated by GadToolsBox V2.0b
 *  which is (c) Copyright 1991-1993 Jaba Development
 *
 *  GUI Designed by : (ray-1 of A((eSS
 */

#include <exec/types.h>
#include <intuition/intuition.h>
#include <intuition/classes.h>
#include <intuition/classusr.h>
#include <intuition/imageclass.h>
#include <intuition/gadgetclass.h>
#include <libraries/gadtools.h>
#include <graphics/displayinfo.h>
#include <graphics/gfxbase.h>
#include <clib/exec_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 "Screen.h"

static struct Screen         *Scr = NULL;
static APTR                   VisualInfo = NULL;
static struct Window         *VectorWnd = NULL;
static struct Gadget         *VectorGList = NULL;
static struct Menu           *VectorMenus = NULL;
static struct Gadget         *VectorGadgets[21];
static UWORD                  VectorLeft = 0;
static UWORD                  VectorTop = 0;
static UWORD                  VectorWidth = 648;
static UWORD                  VectorHeight = 244;
static UBYTE                 *VectorWdt = NULL;

static UBYTE *EDITMODE0Labels[] = {
   (UBYTE *)"Edit Mode",
   (UBYTE *)"Play Mode",
   NULL };

static struct TextAttr XEN9 = {
   ( STRPTR )"XEN.font", 9, 0x00, 0x00 };

static struct NewMenu VectorNewMenu[] = {
   NM_TITLE, (STRPTR)"Main", NULL, 0, NULL, NULL,
   NM_ITEM, (STRPTR)"New Project", NULL, 0, 0L, NULL,
   NM_ITEM, (STRPTR)"Cancel Current", NULL, 0, 0L, NULL,
   NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
   NM_ITEM, (STRPTR)"Preferences", NULL, 0, 0L, NULL,
   NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
   NM_ITEM, (STRPTR)"About", NULL, 0, 0L, NULL,
   NM_ITEM, (STRPTR)"Quit", NULL, 0, 0L, NULL,
   NM_TITLE, (STRPTR)"File I/O", NULL, 0, NULL, NULL,
   NM_ITEM, (STRPTR)"Load Vectors", NULL, 0, NULL, NULL,
   NM_SUB, (STRPTR)"B.T. Anim Format", NULL, 0, 0L, NULL,
   NM_SUB, (STRPTR)"B.T. Single Format", NULL, 0, 0L, NULL,
   NM_SUB, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
   NM_SUB, (STRPTR)"Cobra Single Format", NULL, 0, 0L, NULL,
   NM_SUB, (STRPTR)"LZH Compressed Format", NULL, 0, 0L, NULL,
   NM_ITEM, (STRPTR)"Save Vectors", NULL, 0, NULL, NULL,
   NM_SUB, (STRPTR)"B.T. Anim Format", NULL, 0, 0L, NULL,
   NM_SUB, (STRPTR)"B.T. Single Format", NULL, 0, 0L, NULL,
   NM_SUB, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
   NM_SUB, (STRPTR)"Cobra Single Format", NULL, 0, 0L, NULL,
   NM_SUB, (STRPTR)"LZH Compressed Format", NULL, 0, 0L, NULL,
   NM_ITEM, (STRPTR)"Import Bitmap", NULL, 0, 0L, NULL,
   NM_ITEM, (STRPTR)"Export BitMap", NULL, 0, 0L, NULL,
   NM_TITLE, (STRPTR)"Special", NULL, 0, NULL, NULL,
   NM_ITEM, (STRPTR)"Auto Trace Bitmap", NULL, 0, 0L, NULL,
   NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
   NM_ITEM, (STRPTR)"Reduce Points", NULL, 0, 0L, NULL,
   NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
   NM_ITEM, (STRPTR)"Information", NULL, 0, 0L, NULL,
   NM_TITLE, (STRPTR)"Current Mode", NULL, 0, NULL, NULL,
   NM_ITEM, (STRPTR)"Add Mode", NULL, CHECKIT, 6L, NULL,
   NM_ITEM, (STRPTR)"Move Mode", NULL, CHECKIT, 0L, NULL,
   NM_ITEM, (STRPTR)"Delete Mode", NULL, CHECKIT, 0L, NULL,
   NM_END, NULL, NULL, 0, 0L, NULL };

static UWORD VectorGTypes[] = {
   BUTTON_KIND,
   SLIDER_KIND,
   BUTTON_KIND,
   NUMBER_KIND,
   BUTTON_KIND,
   BUTTON_KIND,
   MX_KIND,
   SLIDER_KIND,
   NUMBER_KIND,
   NUMBER_KIND,
   BUTTON_KIND,
   BUTTON_KIND,
   BUTTON_KIND,
   BUTTON_KIND,
   BUTTON_KIND,
   BUTTON_KIND,
   BUTTON_KIND,
   BUTTON_KIND,
   BUTTON_KIND,
   BUTTON_KIND,
   TEXT_KIND
};

static struct NewGadget VectorNGad[] = {
   820, 229, 166, 15, (UBYTE *)"STOP", NULL, GD_STOP, PLACETEXT_IN, NULL, NULL,
   168, 216, 323, 11, NULL, NULL, GD_SLIDER, 0, NULL, NULL,
   504, 209, 62, 12, (UBYTE *)"CUSTOM 3", NULL, GD_CUSTOM_3, PLACETEXT_IN, NULL, NULL,
   119, 214, 42, 12, NULL, NULL, GD_FRAME, 0, NULL, NULL,
   7, 214, 52, 26, (UBYTE *)"<-", NULL, GD_BACK, PLACETEXT_IN, NULL, NULL,
   60, 214, 52, 26, (UBYTE *)"->", NULL, GD_FORWARD, PLACETEXT_IN, NULL, NULL,
   935, 8, 17, 9, NULL, NULL, GD_EDITMODE, PLACETEXT_LEFT, NULL, NULL,
   167, 229, 323, 11, NULL, NULL, GD_Gadget70, 0, NULL, NULL,
   120, 228, 40, 12, NULL, NULL, GD_POINT, 0, NULL, NULL,
   516, 84, 106, 12, (UBYTE *)"Number Of Points", NULL, GD_TOTAL_POINTS, PLACETEXT_ABOVE, NULL, NULL,
   500, 3, 65, 17, (UBYTE *)"EDIT", NULL, GD_EDIT, PLACETEXT_IN, NULL, NULL,
   566, 3, 69, 17, (UBYTE *)"PLAY", NULL, GD_PLAY, PLACETEXT_IN, NULL, NULL,
   500, 20, 64, 22, (UBYTE *)"ADD", NULL, GD_ADD, PLACETEXT_IN, NULL, NULL,
   565, 20, 71, 22, (UBYTE *)"MOVE", NULL, GD_MOVE, PLACETEXT_IN, NULL, NULL,
   500, 43, 136, 15, (UBYTE *)"DELETE", NULL, GD_DELETE, PLACETEXT_IN, NULL, NULL,
   574, 209, 62, 12, (UBYTE *)"CUSTOM 4", NULL, GD_CUSTOM_4, PLACETEXT_IN, NULL, NULL,
   504, 224, 62, 12, (UBYTE *)"CUSTOM 5", NULL, GD_CUSTOM_5, PLACETEXT_IN, NULL, NULL,
   574, 224, 62, 12, (UBYTE *)"CUSTOM 6", NULL, GD_CUSTOM_6, PLACETEXT_IN, NULL, NULL,
   504, 195, 62, 12, (UBYTE *)"CUSTOM 1", NULL, GD_CUSTOM_1, PLACETEXT_IN, NULL, NULL,
   574, 195, 62, 12, (UBYTE *)"CUSTOM 2", NULL, GD_CUSTOM_2, PLACETEXT_IN, NULL, NULL,
   510, 176, 121, 12, (UBYTE *)"STATUS", NULL, GD_STATUS, PLACETEXT_ABOVE, NULL, NULL
};

static ULONG VectorGTags[] = {
   (TAG_DONE),
   (GTSL_Max), 100, (PGA_Freedom), LORIENT_HORIZ, (GA_Immediate), TRUE, (GA_RelVerify), TRUE, (TAG_DONE),
   (TAG_DONE),
   (GTNM_Border), TRUE, (TAG_DONE),
   (TAG_DONE),
   (TAG_DONE),
   (GTMX_Labels), (ULONG)&EDITMODE0Labels[ 0 ], (TAG_DONE),
   (GTSL_Max), 100, (PGA_Freedom), LORIENT_HORIZ, (GA_Immediate), TRUE, (GA_RelVerify), TRUE, (TAG_DONE),
   (GTNM_Border), TRUE, (TAG_DONE),
   (GTNM_Border), TRUE, (TAG_DONE),
   (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)
};

static struct ColorSpec ScreenColors[] = {
    0, 0x0A, 0x0A, 0x0A,
    1, 0x00, 0x00, 0x00,
    2, 0x0F, 0x0F, 0x0F,
    3, 0x06, 0x08, 0x0B,
    4, 0x09, 0x09, 0x09,
    5, 0x0B, 0x0B, 0x0B,
    6, 0x0B, 0x0A, 0x09,
    7, 0x0F, 0x0B, 0x0A,
   ~0, 0x00, 0x00, 0x00 };

static UWORD DriPens[] = {
   0,1,1,2,1,3,1,0,2,1,2,1,(unsigned short)~0 };

int SetupScreen( void )
{
   if ( ! ( Scr = OpenScreenTags( NULL, SA_Left,   0,
               SA_Top,     0,
               SA_Width,   648,
               SA_Height,  256,
               SA_Depth,   3,
               SA_Colors,  &ScreenColors[0],
               SA_Font, &XEN9,
               SA_Type, CUSTOMSCREEN,
               SA_DisplayID,  PAL_MONITOR_ID|HIRES_KEY,
               SA_AutoScroll, TRUE,
               SA_Overscan,   OSCAN_TEXT,
               SA_Pens, &DriPens[0],
               SA_Title,   "Cray-1's_Custom_Screen",
               TAG_DONE )))
      return( 1L );

   if ( ! ( VisualInfo = GetVisualInfo( Scr, TAG_DONE )))
      return( 2L );

   return( 0L );
}

void CloseDownScreen( void )
{
   if ( VisualInfo ) {
      FreeVisualInfo( VisualInfo );
      VisualInfo = NULL;
   }

   if ( Scr        ) {
      CloseScreen( Scr );
      Scr = NULL;
   }
}

void VectorRender( void )
{
   UWORD    offx, offy;

   offx = 0;
   offy = Scr->WBorTop + Scr->Font->ta_YSize + 1;


   DrawBevelBox( VectorWnd->RPort, offx + 494, offy + 0, 150, 61, GT_VisualInfo, VisualInfo, TAG_DONE );
   DrawBevelBox( VectorWnd->RPort, offx + 498, offy + 2, 142, 57, GT_VisualInfo, VisualInfo, GTBB_Recessed, TRUE, TAG_DONE );
   DrawBevelBox( VectorWnd->RPort, offx + 5, offy + 0, 488, 212, GT_VisualInfo, VisualInfo, TAG_DONE );
}

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

   if ( ! ( g = CreateContext( &VectorGList )))
      return( 1L );

   for( lc = 0, tc = 0; lc < Vector_CNT; lc++ ) {

      CopyMem((char * )&VectorNGad[ lc ], (char * )&ng, (long)sizeof( struct NewGadget ));

      ng.ng_VisualInfo = VisualInfo;
      ng.ng_TextAttr   = &XEN9;
      ng.ng_LeftEdge  += offx;
      ng.ng_TopEdge   += offy;

      VectorGadgets[ lc ] = g = CreateGadgetA((ULONG)VectorGTypes[ lc ], g, &ng, ( struct TagItem * )&VectorGTags[ tc ] );

      while( VectorGTags[ tc ] ) tc += 2;
      tc++;

      if ( NOT g )
         return( 2L );
   }

   if ( ! ( VectorMenus = CreateMenus( VectorNewMenu, GTMN_FrontPen, 0L, TAG_DONE )))
      return( 3L );

   LayoutMenus( VectorMenus, VisualInfo, GTMN_TextAttr, &XEN9, TAG_DONE );

   if ( ! ( VectorWnd = OpenWindowTags( NULL,
            WA_Left, VectorLeft,
            WA_Top,     VectorTop,
            WA_Width,   VectorWidth,
            WA_Height,  VectorHeight + offy,
            WA_IDCMP,   BUTTONIDCMP|SLIDERIDCMP|NUMBERIDCMP|MXIDCMP|TEXTIDCMP|IDCMP_MOUSEBUTTONS|IDCMP_MENUPICK|IDCMP_CLOSEWINDOW|IDCMP_RAWKEY|IDCMP_ACTIVEWINDOW|IDCMP_REFRESHWINDOW,
            WA_Flags,   WFLG_SMART_REFRESH|WFLG_BACKDROP|WFLG_REPORTMOUSE|WFLG_BORDERLESS|WFLG_ACTIVATE,
            WA_Gadgets, VectorGList,
            WA_CustomScreen,  Scr,
            TAG_DONE )))
   return( 4L );

   SetMenuStrip( VectorWnd, VectorMenus );
   GT_RefreshWindow( VectorWnd, NULL );

   VectorRender();

   return( 0L );
}

void CloseVectorWindow( void )
{
   if ( VectorMenus      ) {
      ClearMenuStrip( VectorWnd );
      FreeMenus( VectorMenus );
      VectorMenus = NULL;  }

   if ( VectorWnd        ) {
      CloseWindow( VectorWnd );
      VectorWnd = NULL;
   }

   if ( VectorGList      ) {
      FreeGadgets( VectorGList );
      VectorGList = NULL;
   }
}

