/*
 *  Source generated with GadToolsBox V1.3
 *  which is (c) Copyright 1991,92 Jaba Development
 */

#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 <string.h>

#define GD_QUEUE                               0
#define GD_CURRENT                             1
#define GD_ADD                                 2
#define GD_REMOVE                              3
#define GD_DOWN                                4
#define GD_BOTTOM                              5
#define GD_STOP                                6
#define GD_TOP                                 7
#define GD_CONT                                8
#define GD_HIDE                                9
#define GD_QUIT                                10
#define GD_UP                                  11
#define GD_ABORT                               12
#define GD_FF                                  13
#define GD_MINS                                14
#define GD_SECS                                15
#define GD_DONE                                16

#define FULL 65536
#define FRAC 8192

struct Screen        *Scr = NULL;
APTR                  VisualInfo = NULL;
struct Window        *SpoolWnd = NULL;
struct Gadget        *SpoolGList = NULL;
struct Menu          *SpoolMenus = NULL;
UWORD                 SpoolZoom[4];
struct Gadget        *SpoolGadgets[17];
UWORD                 SpoolLeft = 69;
UWORD                 SpoolTop = 32;
UWORD                 SpoolWidth = 472;
UWORD                 SpoolHeight = 106;
UBYTE                *SpoolWdt = NULL;
struct TextAttr      *Font;
UWORD                 FontX, FontY;
UWORD                 OffX, OffY;
struct TextAttr       Topaz80 = {
    (STRPTR)"topaz.font", TOPAZ_EIGHTY, FS_NORMAL, FPF_ROMFONT };

struct NewMenu SpoolNewMenu[] = {
    NM_TITLE, (UBYTE *)"Project", NULL, 0, 0, NULL,
    NM_ITEM, (UBYTE *)"About...", (UBYTE *)"?", 0, 0, NULL,
    NM_ITEM, (UBYTE *)NM_BARLABEL, NULL, 0, NULL, NULL,
    NM_ITEM, (UBYTE *)"Add...", (UBYTE *)"A", 0, 0, NULL,
    NM_ITEM, (UBYTE *)"Remove...", (UBYTE *)"R", 0, 0, NULL,
    NM_ITEM, (UBYTE *)NM_BARLABEL, NULL, 0, NULL, NULL,
    NM_ITEM, (UBYTE *)"Hide", (UBYTE *)"H", 0, 0, NULL,
    NM_ITEM, (UBYTE *)NM_BARLABEL, NULL, 0, NULL, NULL,
    NM_ITEM, (UBYTE *)"Quit", (UBYTE *)"Q", 0, 0, NULL,
    NM_TITLE, (UBYTE *)"Control", NULL, 0, 0, NULL,
    NM_ITEM, (UBYTE *)"Up", (UBYTE *)"U", 0, 0, NULL,
    NM_ITEM, (UBYTE *)"Down", (UBYTE *)"D", 0, 0, NULL,
    NM_ITEM, (UBYTE *)"Top", (UBYTE *)"T", 0, 0, NULL,
    NM_ITEM, (UBYTE *)"Bottom", (UBYTE *)"B", 0, 0, NULL,
    NM_ITEM, (UBYTE *)NM_BARLABEL, NULL, 0, NULL, NULL,
    NM_ITEM, (UBYTE *)"Stop", (UBYTE *)"S", 0, 0, NULL,
    NM_ITEM, (UBYTE *)"Continue", (UBYTE *)"C", 0, 0, NULL,
    NM_ITEM, (UBYTE *)NM_BARLABEL, NULL, 0, NULL, NULL,
    NM_ITEM, (UBYTE *)"Abort", (UBYTE *)"O", 0, 0, NULL,
    NM_END, NULL, NULL, 0, NULL, NULL };

static void ComputeFont( UWORD width, UWORD height )
{
    Font  = Scr->Font;
    FontY = Font->ta_YSize;
    FontX = TextLength( &Scr->RastPort, "m", 1L );

    OffY = FontY + Scr->WBorTop + 1;
    OffX = Scr->WBorLeft;

    if ( width && height ) {
        if (( FontX * ( width * FRAC ) / FULL + OffX + Scr->WBorRight ) > Scr->Width )
            goto UseTopaz;
        if (( FontY * ( height * FRAC ) / FULL + OffY + Scr->WBorBottom ) > Scr->Height )
            goto UseTopaz;
    }
    return;

UseTopaz:
    Font = &Topaz80;
    FontX = FontY = 8;
}

long SetupScreen( void )
{
    if ( NOT( Scr = LockPubScreen( NULL )))
        return( 1L );

    ComputeFont( NULL, NULL );

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

    return( NULL );
}

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

    if ( Scr        ) {
        UnlockPubScreen( NULL, Scr );
        Scr = NULL;
    }
}

long OpenSpoolWindow( void )
{
    struct NewGadget     ng;
    struct Gadget       *g;
    UWORD               wleft = SpoolLeft, wtop = SpoolTop, ww, wh;

    ComputeFont( SpoolWidth, SpoolHeight );

    ww = ( FontX * ( SpoolWidth * FRAC )) /  FULL;
    wh = ( FontY * ( SpoolHeight * FRAC )) / FULL;

    if (( wleft + ww + OffX + Scr->WBorRight ) > Scr->Width ) wleft = Scr->Width - ww;
    if (( wtop + wh + OffY + Scr->WBorBottom ) > Scr->Height ) wtop = Scr->Height - wh;

    if ( NOT( g = CreateContext( &SpoolGList )))
        return( 1L );

    ng.ng_LeftEdge        =    OffX + (( FontX * ( 7 * FRAC )) / FULL );
    ng.ng_TopEdge         =    OffY + (( FontY * ( 4 * FRAC )) / FULL );
    ng.ng_Width           =    ( FontX * ( 178 * FRAC )) / FULL;
    ng.ng_Height          =    ( FontY * ( 64 * FRAC )) / FULL;
    ng.ng_GadgetText      =    NULL;
    ng.ng_TextAttr        =    Font;
    ng.ng_GadgetID        =    GD_QUEUE;
    ng.ng_Flags           =    0;
    ng.ng_VisualInfo      =    VisualInfo;

    g = CreateGadget( LISTVIEW_KIND, g, &ng, GTLV_Labels, NULL, GTLV_ShowSelected, NULL, TAG_DONE );

    SpoolGadgets[ 0 ] = g;

    ng.ng_LeftEdge        =    OffX + (( FontX * ( 286 * FRAC )) / FULL );
    ng.ng_Height          =    ( FontY * ( 13 * FRAC )) / FULL;
    ng.ng_GadgetText      =    (UBYTE *)"Printing :";
    ng.ng_GadgetID        =    GD_CURRENT;
    ng.ng_Flags           =    PLACETEXT_LEFT;

    g = CreateGadget( TEXT_KIND, g, &ng, GTTX_Border, TRUE, TAG_DONE );

    SpoolGadgets[ 1 ] = g;

    ng.ng_LeftEdge        =    OffX + (( FontX * ( 7 * FRAC )) / FULL );
    ng.ng_TopEdge         =    OffY + (( FontY * ( 71 * FRAC )) / FULL );
    ng.ng_Width           =    ( FontX * ( 85 * FRAC )) / FULL;
    ng.ng_Height          =    ( FontY * ( 14 * FRAC )) / FULL;
    ng.ng_GadgetText      =    (UBYTE *)"Add...";
    ng.ng_GadgetID        =    GD_ADD;
    ng.ng_Flags           =    PLACETEXT_IN;

    g = CreateGadget( BUTTON_KIND, g, &ng, TAG_DONE );

    SpoolGadgets[ 2 ] = g;

    ng.ng_LeftEdge        =    OffX + (( FontX * ( 100 * FRAC )) / FULL );
    ng.ng_GadgetText      =    (UBYTE *)"Remove...";
    ng.ng_GadgetID        =    GD_REMOVE;
    ng.ng_Flags           =    0;

    g = CreateGadget( BUTTON_KIND, g, &ng, TAG_DONE );

    SpoolGadgets[ 3 ] = g;

    ng.ng_LeftEdge        =    OffX + (( FontX * ( 286 * FRAC )) / FULL );
    ng.ng_GadgetText      =    (UBYTE *)"Down";
    ng.ng_GadgetID        =    GD_DOWN;

    g = CreateGadget( BUTTON_KIND, g, &ng, TAG_DONE );

    SpoolGadgets[ 4 ] = g;

    ng.ng_LeftEdge        =    OffX + (( FontX * ( 7 * FRAC )) / FULL );
    ng.ng_TopEdge         =    OffY + (( FontY * ( 89 * FRAC )) / FULL );
    ng.ng_GadgetText      =    (UBYTE *)"Bottom";
    ng.ng_GadgetID        =    GD_BOTTOM;

    g = CreateGadget( BUTTON_KIND, g, &ng, TAG_DONE );

    SpoolGadgets[ 5 ] = g;

    ng.ng_LeftEdge        =    OffX + (( FontX * ( 100 * FRAC )) / FULL );
    ng.ng_GadgetText      =    (UBYTE *)"Stop";
    ng.ng_GadgetID        =    GD_STOP;

    g = CreateGadget( BUTTON_KIND, g, &ng, TAG_DONE );

    SpoolGadgets[ 6 ] = g;

    ng.ng_LeftEdge        =    OffX + (( FontX * ( 379 * FRAC )) / FULL );
    ng.ng_TopEdge         =    OffY + (( FontY * ( 71 * FRAC )) / FULL );
    ng.ng_GadgetText      =    (UBYTE *)"Top";
    ng.ng_GadgetID        =    GD_TOP;

    g = CreateGadget( BUTTON_KIND, g, &ng, TAG_DONE );

    SpoolGadgets[ 7 ] = g;

    ng.ng_LeftEdge        =    OffX + (( FontX * ( 193 * FRAC )) / FULL );
    ng.ng_TopEdge         =    OffY + (( FontY * ( 89 * FRAC )) / FULL );
    ng.ng_GadgetText      =    (UBYTE *)"Continue";
    ng.ng_GadgetID        =    GD_CONT;

    g = CreateGadget( BUTTON_KIND, g, &ng, TAG_DONE );

    SpoolGadgets[ 8 ] = g;

    ng.ng_LeftEdge        =    OffX + (( FontX * ( 286 * FRAC )) / FULL );
    ng.ng_GadgetText      =    (UBYTE *)"Hide";
    ng.ng_GadgetID        =    GD_HIDE;

    g = CreateGadget( BUTTON_KIND, g, &ng, TAG_DONE );

    SpoolGadgets[ 9 ] = g;

    ng.ng_LeftEdge        =    OffX + (( FontX * ( 379 * FRAC )) / FULL );
    ng.ng_GadgetText      =    (UBYTE *)"Quit";
    ng.ng_GadgetID        =    GD_QUIT;

    g = CreateGadget( BUTTON_KIND, g, &ng, TAG_DONE );

    SpoolGadgets[ 10 ] = g;

    ng.ng_LeftEdge        =    OffX + (( FontX * ( 193 * FRAC )) / FULL );
    ng.ng_TopEdge         =    OffY + (( FontY * ( 71 * FRAC )) / FULL );
    ng.ng_GadgetText      =    (UBYTE *)"Up";
    ng.ng_GadgetID        =    GD_UP;

    g = CreateGadget( BUTTON_KIND, g, &ng, TAG_DONE );

    SpoolGadgets[ 11 ] = g;

    ng.ng_LeftEdge        =    OffX + (( FontX * ( 379 * FRAC )) / FULL );
    ng.ng_TopEdge         =    OffY + (( FontY * ( 20 * FRAC )) / FULL );
    ng.ng_GadgetText      =    (UBYTE *)"Abort";
    ng.ng_GadgetID        =    GD_ABORT;

    g = CreateGadget( BUTTON_KIND, g, &ng, TAG_DONE );

    SpoolGadgets[ 12 ] = g;

    ng.ng_LeftEdge        =    OffX + (( FontX * ( 286 * FRAC )) / FULL );
    ng.ng_TopEdge         =    OffY + (( FontY * ( 21 * FRAC )) / FULL );
    ng.ng_GadgetText      =    (UBYTE *)"Insert FF :";
    ng.ng_GadgetID        =    GD_FF;

    g = CreateGadget( CHECKBOX_KIND, g, &ng, TAG_DONE );

    SpoolGadgets[ 13 ] = g;

    ng.ng_TopEdge         =    OffY + (( FontY * ( 37 * FRAC )) / FULL );
    ng.ng_Width           =    ( FontX * ( 178 * FRAC )) / FULL;
    ng.ng_Height          =    ( FontY * ( 14 * FRAC )) / FULL;
    ng.ng_GadgetText      =    (UBYTE *)"Minutes :";
    ng.ng_GadgetID        =    GD_MINS;
    ng.ng_Flags           =    PLACETEXT_LEFT;

    g = CreateGadget( INTEGER_KIND, g, &ng, GTIN_Number, 0, GTIN_MaxChars, 3, TAG_DONE );

    SpoolGadgets[ 14 ] = g;

    ng.ng_TopEdge         =    OffY + (( FontY * ( 54 * FRAC )) / FULL );
    ng.ng_GadgetText      =    (UBYTE *)"Seconds :";
    ng.ng_GadgetID        =    GD_SECS;
    ng.ng_Flags           =    0;

    g = CreateGadget( INTEGER_KIND, g, &ng, GTIN_Number, 0, GTIN_MaxChars, 10, TAG_DONE );

    SpoolGadgets[ 15 ] = g;

    ng.ng_LeftEdge        =    OffX + (( FontX * ( 338 * FRAC )) / FULL );
    ng.ng_TopEdge         =    OffY + (( FontY * ( 20 * FRAC )) / FULL );
    ng.ng_Width           =    ( FontX * ( 33 * FRAC )) / FULL;
    ng.ng_GadgetText      =    (UBYTE *)"%";
    ng.ng_GadgetID        =    GD_DONE;
    ng.ng_Flags           =    PLACETEXT_LEFT;

    g = CreateGadget( NUMBER_KIND, g, &ng, GTNM_Border, TRUE, TAG_DONE );

    SpoolGadgets[ 16 ] = g;

    if ( NOT g )
        return( 2L );

    if ( NOT( SpoolMenus = CreateMenus( SpoolNewMenu, GTMN_FrontPen, NULL, TAG_DONE )))
        return( 3L );

    LayoutMenus( SpoolMenus, VisualInfo, TAG_DONE );
    if ( SpoolWdt )
        SpoolZoom[2] = TextLength( &Scr->RastPort, SpoolWdt, strlen( SpoolWdt )) + 80;
    else
        SpoolZoom[2]  = 80L;
        SpoolZoom[0] = SpoolZoom[1] = 0;
        SpoolZoom[3] = Scr->WBorTop + Scr->RastPort.TxHeight + 1;

    if ( NOT( SpoolWnd = OpenWindowTags( NULL,
                    WA_Left,          wleft,
                    WA_Top,           wtop,
                    WA_Width,         ( FontX * ( SpoolWidth * FRAC )) / FULL + OffX + Scr->WBorRight,
                    WA_Height,        ( FontY * ( SpoolHeight * FRAC )) / FULL + OffY + Scr->WBorBottom,
                    WA_IDCMP,         LISTVIEWIDCMP|TEXTIDCMP|BUTTONIDCMP|CHECKBOXIDCMP|INTEGERIDCMP|NUMBERIDCMP|IDCMP_MOUSEBUTTONS|IDCMP_MOUSEMOVE|IDCMP_MENUPICK|IDCMP_CLOSEWINDOW|
                                      
                                      IDCMP_INTUITICKS|
                                      IDCMP_CHANGEWINDOW|IDCMP_REFRESHWINDOW,
                    WA_Flags,         WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|WFLG_SMART_REFRESH|WFLG_ACTIVATE,
                    WA_Gadgets,       SpoolGList,
                    WA_Title,         SpoolWdt,
                    WA_ScreenTitle,   "JbSpool, © Copyright 1992 Jaba Development",
                    WA_PubScreen,     Scr,
                    WA_Zoom,          SpoolZoom,
                    TAG_DONE )))
        return( 4L );

    SpoolZoom[0] = SpoolWnd->LeftEdge;
    SpoolZoom[1] = SpoolWnd->TopEdge;
    SpoolZoom[2] = SpoolWnd->Width;
    SpoolZoom[3] = SpoolWnd->Height;

    SetMenuStrip( SpoolWnd, SpoolMenus );
    GT_RefreshWindow( SpoolWnd, NULL );

    return( NULL );
}

void CloseSpoolWindow( void )
{
    if ( SpoolMenus      ) {
        ClearMenuStrip( SpoolWnd );
        FreeMenus( SpoolMenus );
        SpoolMenus = NULL;    }

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

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

