#include <exec/types.h>
#include <intuition/intuition.h>
#include <intuition/gadgetclass.h>
#include <libraries/gadtools.h>
#include <graphics/displayinfo.h>
#include <clib/exec_protos.h>
#include <clib/intuition_protos.h>
#include <clib/gadtools_protos.h>

#define GD_Gadget0                             0
#define GD_Gadget1                             1
#define GD_Gadget2                             2
#define GD_Gadget3                             3
#define GD_Gadget4                             4
#define GD_Gadget5                             5
#define GD_Gadget6                             6
#define GD_Gadget7                             7
#define GD_Gadget8                             8
#define GD_Gadget9                             9
#define GD_Gadget10                            10
#define GD_Gadget11                            11
#define GD_GadgetSave                            50		/* Save */
#define GD_GadgetHide                            51		/* Hide */
#define GD_GadgetQuit                            52		/* Quit */
#define GD_GadgetCancel                          53		/* Cancel */

#define KEYNUMMER 12
extern char keys[KEYNUMMER][256];

int windowopen=FALSE;
char windowtitle[80]="WindowTool 1.0 : Hotkey = ";	/* 25 */

struct Window        *Wnd        = 0l;
struct Screen        *Scr        = 0l;
APTR                  VisualInfo = 0l;
struct Gadget        *GList      = 0l;
struct Gadget        *Gadgets[16];
struct Menu          *Menus      = 0l;
UWORD                 Zoom[4]    = { 0, 0, 200, 11 };

struct TextAttr topaz8 = {
    ( STRPTR )"topaz.font", 8, 0x00, 0x01 };

struct TagItem    WindowTags[] = {
    WA_Left,          -10,
    WA_Top,           -10,
    WA_Width,         610,
    WA_Height,        138,
    WA_IDCMP,         IDCMP_GADGETUP|IDCMP_MENUPICK|IDCMP_VANILLAKEY|IDCMP_CLOSEWINDOW|IDCMP_REFRESHWINDOW|IDCMP_CHANGEWINDOW,
    WA_Flags,         WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|WFLG_SMART_REFRESH|WFLG_ACTIVATE,
    WA_Gadgets,       0l,
    WA_Title,         (LONG)windowtitle,
    WA_MinWidth,      200,
    WA_MinHeight,     11,
    WA_MaxWidth,      611,
    WA_MaxHeight,     137,
    WA_Zoom,          (Tag)Zoom,
    TAG_DONE };

struct IntuiText  IText[] = {
    2, 0, JAM1,45, 17, &topaz8, (UBYTE *)"Hotkeys:", NULL };

struct NewMenu NewMenu[] = {
    NM_TITLE, "Project", 0l, 0, 0, 0l,
    NM_ITEM, "New", "N", 0, 0, 0l,
    NM_ITEM, "Open...", "O", 0, 0, 0l,
    NM_ITEM, "Open .Info", 0, 0, 0, 0l,
    NM_ITEM, NM_BARLABEL, 0l, 0, 0l, 0l,
    NM_ITEM, "Save", "S", 0, 0, 0l,
    NM_ITEM, "Save As...", "A", 0, 0, 0l,
    NM_ITEM, "Save As .info",0, 0, 0, 0l,
    NM_ITEM, NM_BARLABEL, 0l, 0, 0l, 0l,
    NM_ITEM, "About...", 0, 0, 0, 0l,
    NM_ITEM, NM_BARLABEL, 0l, 0, 0l, 0l,
    NM_ITEM, "Hide", "H", 0, 0, 0l,
    NM_ITEM, "Cancel", "C", 0, 0, 0l,
    NM_ITEM, NM_BARLABEL, 0l, 0, 0l, 0l,
    NM_ITEM, "Quit...", "Q", 0, 0, 0l,
    NM_END, 0l, 0l, 0, 0l, 0l };

long InitStuff( void )
{
    struct NewGadget     ng;
    struct Gadget       *g;

	if(windowopen==TRUE)
	{
		WindowToFront(Wnd);
		ActivateWindow(Wnd);
		return(0);
	}

    if ( NOT( Scr = LockPubScreen( "Workbench" )))
        return( 1l );

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

    if ( NOT( g = CreateContext( &GList )))
        return( 3l );

    ng.ng_LeftEdge        =    110;
    ng.ng_TopEdge         =    29;
    ng.ng_Width           =    173;
    ng.ng_Height          =    13;
    ng.ng_GadgetText      =    "St_op";
    ng.ng_TextAttr        =    &topaz8;
    ng.ng_GadgetID        =    GD_Gadget0;
    ng.ng_Flags           =    PLACETEXT_LEFT;
    ng.ng_VisualInfo      =    VisualInfo;

    g = CreateGadget( STRING_KIND, g, &ng,GTST_String,keys[0], GTST_MaxChars, 256, GT_Underscore, '_', TAG_DONE );

    Gadgets[ 0 ] = g;

    ng.ng_TopEdge         =    44;
    ng.ng_GadgetText      =    "_Newshell";
    ng.ng_GadgetID        =    GD_Gadget1;

    g = CreateGadget( STRING_KIND, g, &ng,GTST_String,keys[1], GTST_MaxChars, 256, GT_Underscore, '_', TAG_DONE );

    Gadgets[ 1 ] = g;

    ng.ng_TopEdge         =    59;
    ng.ng_GadgetText      =    "Q_uit";
    ng.ng_GadgetID        =    GD_Gadget2;

    g = CreateGadget( STRING_KIND, g, &ng,GTST_String,keys[2], GTST_MaxChars, 256, GT_Underscore, '_', TAG_DONE );

    Gadgets[ 2 ] = g;

    ng.ng_TopEdge         =    74;
    ng.ng_GadgetText      =    "C_ycle";
    ng.ng_GadgetID        =    GD_Gadget3;

    g = CreateGadget( STRING_KIND, g, &ng,GTST_String,keys[3], GTST_MaxChars, 256, GT_Underscore, '_', TAG_DONE );

    Gadgets[ 3 ] = g;

    ng.ng_TopEdge         =    89;
    ng.ng_GadgetText      =    "Wo_rkbench";
    ng.ng_GadgetID        =    GD_Gadget4;

    g = CreateGadget( STRING_KIND, g, &ng,GTST_String,keys[4], GTST_MaxChars, 256, GT_Underscore, '_', TAG_DONE );

    Gadgets[ 4 ] = g;

    ng.ng_TopEdge        =    104;
    ng.ng_GadgetText      =    "C_loseWindow";
    ng.ng_GadgetID        =    GD_Gadget5;

    g = CreateGadget( STRING_KIND, g, &ng,GTST_String,keys[5], GTST_MaxChars, 256, GT_Underscore, '_', TAG_DONE );

    Gadgets[ 5 ] = g;

    ng.ng_LeftEdge        =    409;
    ng.ng_TopEdge         =    29;
    ng.ng_GadgetText      =    "_ActivateFront";
    ng.ng_GadgetID        =    GD_Gadget6;

    g = CreateGadget( STRING_KIND, g, &ng,GTST_String,keys[6], GTST_MaxChars, 256, GT_Underscore, '_', TAG_DONE );

    Gadgets[ 6 ] = g;

    ng.ng_TopEdge         =    44;
    ng.ng_GadgetText      =    "Make_Big";
    ng.ng_GadgetID        =    GD_Gadget7;

    g = CreateGadget( STRING_KIND, g, &ng, GTST_String,keys[7],GTST_MaxChars, 256, GT_Underscore, '_', TAG_DONE );

    Gadgets[ 7 ] = g;

    ng.ng_TopEdge         =    59;
    ng.ng_GadgetText      =    "MakeS_mall";
    ng.ng_GadgetID        =    GD_Gadget8;

    g = CreateGadget( STRING_KIND, g, &ng,GTST_String,keys[8], GTST_MaxChars, 256, GT_Underscore, '_', TAG_DONE );

    Gadgets[ 8 ] = g;

    ng.ng_TopEdge         =    74;
    ng.ng_GadgetText      =    "_Zip";
    ng.ng_GadgetID        =    GD_Gadget9;

    g = CreateGadget( STRING_KIND, g, &ng,GTST_String,keys[9], GTST_MaxChars, 256, GT_Underscore, '_', TAG_DONE );

    Gadgets[ 9 ] = g;

    ng.ng_TopEdge         =    89;
    ng.ng_GadgetText      =    "Sho_w";
    ng.ng_GadgetID        =    GD_Gadget10;

    g = CreateGadget( STRING_KIND, g, &ng,GTST_String,keys[10], GTST_MaxChars, 256, GT_Underscore, '_', TAG_DONE );

    Gadgets[ 10 ] = g;

    ng.ng_GadgetText      =    "Ac_tiveToFront";
    ng.ng_TopEdge         =    104;
    ng.ng_GadgetID        =    GD_Gadget11;

    g = CreateGadget( STRING_KIND, g, &ng,GTST_String,keys[11], GTST_MaxChars, 256, GT_Underscore, '_', TAG_DONE );

    Gadgets[ 11 ] = g;

    ng.ng_LeftEdge        =    110;
    ng.ng_TopEdge         =    120;
    ng.ng_Width           =    83;
    ng.ng_GadgetText      =    "_Save";
    ng.ng_GadgetID        =    GD_GadgetSave;
    ng.ng_Flags           =    PLACETEXT_IN;

    g = CreateGadget( BUTTON_KIND, g, &ng, GT_Underscore, '_', TAG_DONE );

    Gadgets[ 12 ] = g;

    ng.ng_LeftEdge        =    201;
    ng.ng_GadgetText      =    "_Hide";
    ng.ng_GadgetID        =    GD_GadgetHide;

    g = CreateGadget( BUTTON_KIND, g, &ng, GT_Underscore, '_', TAG_DONE );

    Gadgets[ 13 ] = g;

    ng.ng_LeftEdge        =    381;
    ng.ng_GadgetText      =    "_Quit";
    ng.ng_GadgetID        =    GD_GadgetQuit;

    g = CreateGadget( BUTTON_KIND, g, &ng, GT_Underscore, '_', TAG_DONE );

    Gadgets[ 14 ] = g;

    ng.ng_LeftEdge        =    292;
    ng.ng_GadgetText      =    "_Cancel";
    ng.ng_GadgetID        =    GD_GadgetCancel;

    g = CreateGadget( BUTTON_KIND, g, &ng, GT_Underscore, '_', TAG_DONE );

    Gadgets[ 15 ] = g;

    if ( NOT g )
        return( 4l );

    WindowTags[ 6 ].ti_Data = (LONG)GList;

    if ( NOT( Menus = CreateMenus( NewMenu, GTMN_FrontPen, 0l, TAG_DONE )))
        return( 6l );

    LayoutMenus( Menus, VisualInfo, GTMN_TextAttr, &topaz8, TAG_DONE );

	if(WindowTags[0].ti_Data==-10)	/* Bei -10 1.Aufruf und in die mitte */
	{																				/* setzen */
		WindowTags[0].ti_Data=(Scr->Width-WindowTags[2].ti_Data)/2;
		WindowTags[1].ti_Data=(Scr->Height-WindowTags[3].ti_Data)/2;
	}

	strcpy(&windowtitle[26],keys[10]);

    if ( NOT( Wnd = OpenWindowTagList( 0l, WindowTags )))
        return( 5l );

    SetMenuStrip( Wnd, Menus );
    GT_RefreshWindow( Wnd, 0l );

	PrintIText( Wnd->RPort, IText, 0l, 0l );

	windowopen=TRUE;

	return( 0l );
}

void CleanStuff( void )
{
	if(windowopen==FALSE)return;
	
    if ( Menus      ) {
        ClearMenuStrip( Wnd );
        FreeMenus( Menus );
    }

    if ( Wnd        )
		{
		    WindowTags[0].ti_Data = (LONG)Wnd->LeftEdge;
		    WindowTags[1].ti_Data = (LONG)Wnd->TopEdge;
	   	 WindowTags[2].ti_Data = (LONG)Wnd->Width;
		    WindowTags[3].ti_Data = (LONG)Wnd->Height;
        CloseWindow( Wnd );
		}

    if ( GList      )
        FreeGadgets( GList );

    if ( VisualInfo )
        FreeVisualInfo( VisualInfo );

    if ( Scr        )
        UnlockPubScreen( 0l, Scr );
	windowopen=FALSE;
}
