/* ******************************************************************** */
/* C code generated by:							*/
/* Visual Arts Version 2.1						*/
/* Copyright 1994-95 Danny Y. Wong  All rights reserved			*/
/* Calgary, Alberta (CANADA)                        			*/
/* Partial of the code is copyright by Jaba Development			*/
/* ******************************************************************** */

#include <VisualArts.h>
#include <clib/VisualArts_protos.h>

#define ID_ObjID6                         			0

#define CustomNumGads						1

#include "CustomImage_func.c" 

#include "CustomImage_images.c" 

int ObjID6Obj(struct VAobject VAObject);

int SetupScreen(void);
void CloseDownScreen(void);
int OpenCustomWindow(char windtitle[]);
void CloseCustomWindow(void);
int CustomHandler(void);
int CustomMainHandler(void);
void DrawCustomObjs(void);
int main(int argc, char *argv[]);

struct Screen			*PubScr = NULL;
struct DrawInfo			*ScrDrawInfo = NULL;
APTR				 VisualInfo = NULL;
struct Screen			*Scr = NULL;
struct Window			*CustomWnd = NULL;
struct Gadget			*CustomGList = NULL;
struct Gadget			*CustomGadgets[CustomNumGads];
struct IntuiMessage		 CustomMsg;
UWORD				 CustomLeft = 122;
UWORD				 CustomTop = 17;
UWORD				 CustomWidth = 332;
UWORD				 CustomHeight = 156;
struct TextAttr topaz8 = { (STRPTR)"topaz.font", 8, 0x00, 0x01 };
struct TextAttr topaz800 = { (STRPTR)"topaz.font", 8, 0x00, 0x00 };

WORD CustomGadTypes[] = {
	BUTTON_KIND,
};

struct NewGadget CustomNGads[] = {
	115, 126, 87, 13, (UBYTE *)"Button",&topaz800, ID_ObjID6, PLACETEXT_IN, NULL, (APTR)ObjID6Obj,
};

ULONG CustomNTags[] = {
	TAG_DONE,
};

int SetupScreen(void)
{
  struct ViewPort *viewport;

  PubScr = LockPubScreen("Workbench");
  if (PubScr != NULL)
  {
	ScrDrawInfo = GetScreenDrawInfo(PubScr);
	if (!(Scr = OpenScreenTags(NULL,
		SA_Left,	0,
		SA_Top, 	0,
		SA_Width,	640,
		SA_Height,	200,
		SA_Depth,	4,
		SA_Font,	&topaz800,
		SA_Type,	CUSTOMSCREEN,
		SA_DisplayID,	102400,
		SA_AutoScroll,	TRUE,
		SA_Overscan,	2,
		SA_Pens,	(ULONG)(ScrDrawInfo->dri_Pens),
		SA_Title,	"Visual Arts V2.2 Copyright 1994-95 Danny Y. Wong  All Rights Reserved.", 
		TAG_DONE)))
	    return(1L);
  }
  else
    return(1L);

  if (!(VisualInfo =  GetVisualInfo(Scr, TAG_DONE)))
	return(2L);
  viewport = (struct ViewPort *)&Scr->ViewPort;
  LoadRGB4(viewport, (UWORD *)&CustomColorMap, 32);
  return(0L);
}

void CloseDownScreen(void)
{
  if (ScrDrawInfo)
	FreeScreenDrawInfo(PubScr, ScrDrawInfo);
  if (VisualInfo)
	FreeVisualInfo(VisualInfo);
  if (Scr)
	CloseScreen(Scr);
  if (PubScr)
	UnlockPubScreen(NULL, PubScr);
}

int OpenCustomWindow(char windtitle[80])
{
  struct NewGadget	NewGad;
  struct Gadget   	*Gad;
  register UWORD i, j;
  UWORD offsetx = Scr->WBorLeft;
  UWORD offsety = Scr->WBorTop + Scr->Font->ta_YSize + 1;

  if (!(Gad = CreateContext(&CustomGList)))
  	return(1L);

  for (i=0, j=0; i < CustomNumGads; i++)
  {
    CopyMem((char *)&CustomNGads[i], (char *)&NewGad, (long)sizeof(struct NewGadget));

    NewGad.ng_VisualInfo = VisualInfo;
    NewGad.ng_LeftEdge += offsetx;
    NewGad.ng_TopEdge  += offsety;

    CustomGadgets[i] = Gad = CreateGadgetA((ULONG)CustomGadTypes[i], Gad, &NewGad,
	(struct TagItem *)&CustomNTags[j]);
    while (CustomNTags[j])
        j +=2;
    j++;
    if (!Gad)
       return(2L);
  }
  if (!(CustomWnd = OpenWindowTags(NULL,
  	WA_Left,	CustomLeft,
  	WA_Top, 	CustomTop,
  	WA_Width,	CustomWidth,
  	WA_Height,	CustomHeight + kWindowOffSetY,
  	WA_NewLookMenus, TRUE,
  	WA_IDCMP,	IDCMP_CLOSEWINDOW |  IDCMP_NEWSIZE | IDCMP_GADGETUP ,
  	WA_Flags,	WFLG_CLOSEGADGET | WFLG_DEPTHGADGET  |  WFLG_SMART_REFRESH | 
			 WFLG_ACTIVATE |  WFLG_DRAGBAR ,
  	WA_Gadgets,	CustomGList,
  	WA_Title,	windtitle,
  	WA_ScreenTitle,	"Visual Arts V2.2 Copyright 1994-95 Danny Y. Wong  All Rights Reserved.",
  	WA_CustomScreen,	Scr,
  	WA_MinWidth,	160,
  	WA_MinHeight,	50,
  	WA_MaxWidth,	640,
  	WA_MaxHeight,	200,
  	TAG_DONE)))
  	    return(3L);

  DrawImage(CustomWnd->RPort, &ninja900_brushImage, 8, 13 + kWindowOffSetY);
  DrawImage(CustomWnd->RPort, &robotImage, 170, 15 + kWindowOffSetY);
  DrawImage(CustomWnd->RPort, &porsche_brushImage, 10, 93 + kWindowOffSetY);
  GT_RefreshWindow(CustomWnd, NULL);
  RefreshGadgets(CustomGadgets[0], CustomWnd, NULL);
  return(0L);
}

void CloseCustomWindow(void)
{
  if (CustomWnd)
	CloseWindow(CustomWnd);
  if (CustomGList)
	FreeGadgets(CustomGList);
}

int CustomHandler(void)
{
  struct IntuiMessage	*msg;
  struct VAobject	VAObject;
  int running	= 1;
  int (*func)(struct VAobject VAObject);
  ULONG class;
  UWORD code;

  while (msg=GT_GetIMsg(CustomWnd->UserPort))
  {
    CopyMem((char *)msg, (char *)&CustomMsg, (long)sizeof(struct IntuiMessage));
    class = msg->Class;
    code  = msg->Code;

    VAObject.va_Window = (struct Window *)CustomWnd;
    VAObject.va_Gadget = (struct Gadget *)msg->IAddress;
    VAObject.va_IntuiMsg = (struct IntuiMessage *)msg;
    VAObject.va_Flags = 0;
    VAObject.va_UserData = 0;

    GT_ReplyIMsg(msg);
    switch(class)
    {

	  case IDCMP_NEWSIZE:
	   break;

	  case IDCMP_CLOSEWINDOW:
	     return(0);
	     break;

	  case IDCMP_GADGETUP:
	    func = (void *)((struct Gadget *)CustomMsg.IAddress)->UserData;
	    if (func != NULL)
	      running =  func(VAObject);
	    break;

    }
  }
  return(running);
}

int CustomMainHandler(void)
{
  int running = 1;
  ULONG windsig, signals;

  windsig = 1L << CustomWnd->UserPort->mp_SigBit;

  while (running == 1)
  {
    signals = Wait( windsig );
    if (signals & windsig)
    {
	  running = CustomHandler();
    }
  }
  return(running);
}

int main(int argc, char *argv[])
{
  int rc;

  if (!(SetupScreen()))
  {
	if (!(OpenCustomWindow("Custom Image Demo")))
	{
	  rc = CustomMainHandler();
	  CloseCustomWindow();
	}
	CloseDownScreen();
  }
  return(0L);
}
