/***************************** Imagdcl.c ************************************
*
*  Image editor declarations for the Gadget Editor.
*
*  This module by
*  Ray R. Larson
*
*  This module contains the global definitions for the gadgets and  
*  menus used by the Image_Ed routines. The main routine Image_Ed
*  can be found in Image.c and support routines in Imagfunc.c
*  
****************************************************************************/
 
/*  The usual header files   */
#include <intuition/intuition.h>
#include <libraries/dosextens.h>
#include <graphics/gfxbase.h>
#include <graphics/gfx.h>
#include <graphics/display.h>
#include <exec/memory.h>
#include <workbench/workbench.h>
#include <workbench/startup.h>
#include <devices/narrator.h>
#include <devices/audio.h>
#include <libraries/translator.h>

/*------------------- work rasters and bitmaps -----------*/
struct RastPort smallraster;
struct BitMap smallbitmap;


/*------------------- color table definitions ------------------*/

UWORD defaultCT[32], CTable[32];
struct ColorMap *cmap;

/**************************************************************************
* Definitions and declarations for all them gadgets                        
***************************************************************************/
/* image editor window dimensions */
#define WINDWIDTH  640
#define WINDHEIGHT 200

/* size of the image editing area */
#define FRAMETOP    11
#define FRAMELEFT    3
#define FRAMEBOT   173
#define FRAMERIGHT 401
#define FRAMEHEIGHT  FRAMEBOT-FRAMETOP
#define FRAMEWIDTH   FRAMERIGHT-FRAMELEFT

/* size of small image display area */
#define SMALLTOP 50
#define SMALLLEFT 450
#define SMALLBOT 105
#define SMALLRIGHT 610
#define SMALLHEIGHT (SMALLBOT-SMALLTOP)
#define SMALLWIDTH  (SMALLRIGHT-SMALLLEFT)

/* gadget numbers */
#define PALETTEG   1
#define MAGMINUSG  2
#define MAGPLUSG   3
#define UPDOWNG    4
#define LEFTRIGHTG 5
#define BIGEDG     6
#define RESETG     7 /* no longer used - put in menu */
#define BLUECTLG   8
#define GREENCTLG  9
#define REDCTLG    10
#define TOOLOFFSET 11

/* menu items  - menu declarations follow the gadgets */
#define PROJMEN 0
#define EDITMEN 1
#define OPTMEN  2
#define TOOLMEN 3
#define RETURNM 0
#define CANCELM 1
#define CLREDWIN 0
#define CLREDALL 1
#define RESETIMAG 2
#define RESETCOLOR 3
#define SHOWSMALL 0
#define HIDESMALL 1
#define FREEHTOOL 0
#define LINETOOL 1
#define BOXTOOL 2
#define CIRCLETOOL 3
#define FILLTOOL 4

/* Text for the proportional gadgets */
struct IntuiText red_label = {2,1,JAM2,-7,2,NULL,(UBYTE *)"R",NULL};
struct IntuiText green_label = {2,1,JAM2,-7,2,NULL,(UBYTE *)"G",NULL};
struct IntuiText blue_label = {2,1,JAM2,-7,2,NULL,(UBYTE *)"B",NULL};

/* text for the button gadgets */
struct IntuiText magplustxt = {2,1,JAM2,9,3,NULL,
                            (UBYTE *)" + MAGNIFY + ",NULL};
struct IntuiText magmintxt  = {2,1,JAM2,9,3,NULL,
                            (UBYTE *)" - MAGNIFY - ",NULL};
struct IntuiText brushtxt = {1,0,COMPLEMENT,485,138,NULL,
                            (UBYTE *)"BRUSH COLOR",NULL};


SHORT brushpairs[]=
                { -1,-1,  161,-1, 161,15, -1,15, -1,-1};

struct Border boxborder =
     {450,135,1,0,JAM1,5,&brushpairs[0],NULL};

SHORT smallimpairs[]=
                { -1,-1,  162,-1, 162,57, -1,57, -1,-1};

struct Border smallimborder =
      {450,50,1,0,JAM1,5,&smallimpairs[0],NULL};


/* Images for the color proportional gadgets - filled in later  */
struct Image r_shape, g_shape, b_shape;

/* Proportional info for the color prop gadgets */
struct PropInfo r_prop, g_prop, b_prop;

/* The color prop gadgets themselves */
      
struct Gadget blue_control =
   { NULL,       /* next in the line   */
     450, 185,         /* Left and Top Edges */
     160, 11,           /* Width, Height      */
     GADGHCOMP,        /* Flags (complement) */
     GADGIMMEDIATE |
     RELVERIFY,        /* activation         */
     PROPGADGET,       /* GadgetType         */
     (APTR)&b_shape,   /* GadgetRender image */
     NULL,             /* no SelectRender    */
     &blue_label,      /* GadgetText         */
     NULL,             /* no MutualExclude   */
     (APTR)&b_prop,    /* SpecialInfo        */
     BLUECTLG,         /* GadgetID           */
     NULL,             /* No UserData        */
    };

struct Gadget green_control =
   { &blue_control,    /* next in the line   */
     450, 170,         /* Left and Top Edges */
     160, 11,           /* Width, Height      */
     GADGHCOMP,        /* Flags (complement) */
     GADGIMMEDIATE |
     RELVERIFY,        /* activation         */
     PROPGADGET,       /* GadgetType         */
     (APTR)&g_shape,   /* GadgetRender image */
     NULL,             /* no SelectRender    */
     &green_label,     /* GadgetText         */
     NULL,             /* no MutualExclude   */
     (APTR)&g_prop,    /* SpecialInfo        */
     GREENCTLG,     /* GadgetID           */
     NULL,             /* No UserData        */
    };

struct Gadget red_control =
   { &green_control,    /* next in the line   */
     450, 155,         /* Left and Top Edges */
     160, 11,           /* Width, Height      */
     GADGHCOMP,        /* Flags (complement) */
     GADGIMMEDIATE |
     RELVERIFY,        /* activation         */
     PROPGADGET,       /* GadgetType         */
     (APTR)&r_shape,   /* GadgetRender image */
     NULL,             /* no SelectRender    */
     &red_label,       /* GadgetText         */
     NULL,             /* no MutualExclude   */
     (APTR)&r_prop,    /* SpecialInfo        */
     REDCTLG,          /* GadgetID           */
     NULL,             /* No UserData        */
    };


struct Image UpDown_Shape;
struct PropInfo UpDownProp ;

struct Gadget UpDownGadg  = {
 &red_control, 402, 10, 23, 164,
  GADGHCOMP,
  RELVERIFY | GADGIMMEDIATE,
  PROPGADGET,
  (APTR)&UpDown_Shape,
  NULL ,
  NULL,/* intuitext */
  0x0,
  (APTR)&UpDownProp, 
  UPDOWNG,
  NULL
};

struct Image L_R_Shape;
struct PropInfo L_R_Prop ;

struct Gadget L_R_Gadg  = {
  &UpDownGadg, 2, 174, 401, 10,
  GADGHCOMP,
  RELVERIFY | GADGIMMEDIATE,
  PROPGADGET,
  (APTR)&L_R_Shape,
  NULL,
  NULL,/* intuitext */
  0x0,
  (APTR)&L_R_Prop,
  LEFTRIGHTG,
  NULL
};


SHORT edgadPairs_1[] = {
  0,     0,   
  160,     0,   
  160,     20,   
  0,     20,   
  0,     0    
};
struct Border edgadBord_1 = {
  -1,  -1,
  1,  3,  JAM2,
  5,
  (SHORT *)&edgadPairs_1,
  NULL
};

struct Gadget paletteGadg = {
  &L_R_Gadg, 450, 110, 160, 20,
  GADGHNONE,
  RELVERIFY | GADGIMMEDIATE,
  BOOLGADGET,
  (APTR)&edgadBord_1, 
  NULL,
  NULL,/* intuitext */
  0x0,
  NULL,
  PALETTEG,
  NULL
};


SHORT edgadPairs_2[] = {
  0,     0,   
  126,     0,   
  126,     14,   
  0,     14,   
  0,     0    
};
struct Border edgadBord_2 = {
  -1,  -1,
  1,  3,  JAM2,
  5,
  (SHORT *)&edgadPairs_2,
  NULL
};

struct Gadget MagniMinus = {
 &paletteGadg, 465, 32, 126, 14,
 GADGHCOMP,
  RELVERIFY | GADGIMMEDIATE,
  BOOLGADGET,
  (APTR)&edgadBord_2, 
  NULL,
  &magmintxt,/* intuitext */
  0,
  NULL,  
  MAGMINUSG,
  NULL
};

SHORT edgadPairs_3[] = {
  0,     0,   
  126,     0,   
  126,     14,   
  0,     14,   
  0,     0    
};
struct Border edgadBord_3 = {
  -1,  -1,
  1,  3,  JAM2,
  5,
  (SHORT *)&edgadPairs_3,
  NULL
};

struct Gadget MagniPlus = {
 &MagniMinus, 465, 12, 126, 14,
 GADGHCOMP,
  RELVERIFY | GADGIMMEDIATE,
  BOOLGADGET,
  (APTR)&edgadBord_3, NULL,
  &magplustxt, /* intuitext */
  0,
  NULL,
  MAGPLUSG, 
  NULL
 };
 


/* Image structures for tool selection gadgets - defined in imagimag.c */
extern struct Image freehand_image, linetool_image, boxtool_image,
		    circtool_image, recttool_image;
SHORT toolpairs[]=
                {  0,0,   49, 0, 49,24, 0,24,   0,1, 
		  -1,-1,  50,-1, 50,25, -1,25, -1,0,
 		  -2,-2,  51,-2, 51,26, -2,26, -2,-1};

struct Border toolgadbord =
     {0,0,1,0,COMPLEMENT,15,&toolpairs[0],NULL};

struct Gadget freehandGadg = {
  &MagniPlus, 450, 53, 50, 25,
  GADGHNONE | GADGIMAGE,
  RELVERIFY | GADGIMMEDIATE,
  BOOLGADGET,
  (APTR)&freehand_image, 
  NULL,
  NULL,/* intuitext */
  0x0000001E,
  NULL,
  TOOLOFFSET+FREEHTOOL,
  NULL
};

struct Gadget linetoolGadg = {
  &freehandGadg, 505, 53, 50, 25,
  GADGHNONE | GADGIMAGE,
  RELVERIFY | GADGIMMEDIATE,
  BOOLGADGET,
  (APTR)&linetool_image, 
  NULL,
  NULL,/* intuitext */
  0x0000002E,
  NULL,
  TOOLOFFSET+LINETOOL,
  NULL
};

struct Gadget boxtoolGadg = {
  &linetoolGadg, 560, 53, 50, 25,
  GADGHNONE | GADGIMAGE,
  RELVERIFY | GADGIMMEDIATE,
  BOOLGADGET,
  (APTR)&boxtool_image, 
  NULL,
  NULL,/* intuitext */
  0x00000036,
  NULL,
  TOOLOFFSET+BOXTOOL,
  NULL
};

struct Gadget circtoolGadg = {
  &boxtoolGadg, 478, 81, 50, 25,
  GADGHNONE | GADGIMAGE,
  RELVERIFY | GADGIMMEDIATE,
  BOOLGADGET,
  (APTR)&circtool_image, 
  NULL,
  NULL,/* intuitext */
  0x0000003A,
  NULL,
  TOOLOFFSET+CIRCLETOOL,
  NULL
};

struct Gadget recttoolGadg = {
  &circtoolGadg, 532, 81, 50, 25,
  GADGHNONE | GADGIMAGE,
  RELVERIFY | GADGIMMEDIATE,
  BOOLGADGET,
  (APTR)&recttool_image, 
  NULL,
  NULL,/* intuitext */
  0x0000003C,
  NULL,
  TOOLOFFSET+FILLTOOL,
  NULL
};


SHORT edgadPairs_4[] = {
  0,     0,   
  400,     0,   
  400,     163,   
  0,     163,   
  0,     0    
};
struct Border edgadBord_4 = {
  -1,  -1,
  1,  3,  JAM2,
  5,
  (SHORT *)&edgadPairs_4,
  NULL
};


struct Gadget Big_Ed_Gadg = {
  &recttoolGadg, FRAMELEFT, FRAMETOP, 399, 163,
  GADGHNONE,
  RELVERIFY | GADGIMMEDIATE,
  BOOLGADGET,
  (APTR)&edgadBord_4,
  NULL,
  NULL,
  0x0,
  0x0, 
  BIGEDG,
  NULL
};

struct NewWindow gwind =
   { 0,0,     /* Left and Top edges                    */
     WINDWIDTH,   /* Width and Height                      */
     WINDHEIGHT,
     0,1,       /* DetailPen and BlockPen colors         */
     
         /* IDCMPFlags for the window -  */
     MOUSEMOVE | GADGETUP | GADGETDOWN | MENUPICK | CLOSEWINDOW, 
                      
               /* Flags for the window                   */
     ACTIVATE | REPORTMOUSE | WINDOWCLOSE,

     &Big_Ed_Gadg,  /* First gadget in list              */
     NULL,     /* Checkmark - use the default check      */
     (UBYTE *)"Image Editor Window",/* Title             */
     NULL,     /* Screen - set if this is a custom one.  */
     NULL,     /* No Custom bitmap here either           */
     0,   /* MinWidth, MinHeight, MaxW & MaxH       */
     0,   /*  no window sizing so these should be ignored */
     640,
     200,
     WBENCHSCREEN, /* May  be tweaked to custom later    */
     };

/************************************************************************
 *   Menu Definitions for the Image editor portion of the Gadget Editor. 
 *   Designed by Ray Larson and...                                        
 *             Created with Menu Creator   
 *                        by               
 *                   David Pehrson              
 *                                              
 *         Copyright (C) 1986  David Pehrson    
 *                 Mantis Development           
 *                                              
 *   ... Which is a very useful Freeware tool, that nicely complements
 *   the gadget editor.
 *                                              
 *********************************************************************/

char stTopaz[] = "topaz.font";

struct TextAttr taPlain =
{
	(STRPTR)stTopaz, 8, FS_NORMAL, FPF_ROMFONT
};


struct IntuiText im_ItemText[] =
{
	{ 0, 1, JAM1, 0, 1, &taPlain, (UBYTE *)"Return Image", NULL },
	{ 0, 1, JAM1, 0, 1, &taPlain, (UBYTE *)"Cancel Edit", NULL },
	{ 0, 1, JAM1, 0, 1, &taPlain, (UBYTE *)"Clear Edit Area", NULL },
	{ 0, 1, JAM1, 0, 1, &taPlain, (UBYTE *)"Clear Whole Image", NULL },
	{ 0, 1, JAM1, 0, 1, &taPlain, (UBYTE *)"Reset Input Image", NULL },
	{ 0, 1, JAM1, 0, 1, &taPlain, (UBYTE *)"Reset Colors", NULL },
	{ 0, 1, JAM1, 0, 1, &taPlain, (UBYTE *)"   Show Small Image", NULL },
	{ 0, 1, JAM1, 0, 1, &taPlain, (UBYTE *)"   Hide Small Image", NULL },
	{ 0, 1, JAM1, 0, 1, &taPlain, (UBYTE *)"   Freehand Draw", NULL },
	{ 0, 1, JAM1, 0, 1, &taPlain, (UBYTE *)"   Line Draw", NULL },
	{ 0, 1, JAM1, 0, 1, &taPlain, (UBYTE *)"   Box Draw", NULL },
	{ 0, 1, JAM1, 0, 1, &taPlain, (UBYTE *)"   Circle Draw", NULL },
	{ 0, 1, JAM1, 0, 1, &taPlain, (UBYTE *)"   Filled Box", NULL },
	{ 0, 1, JAM1, 0, 1, &taPlain, (UBYTE *)"   Flood Fill", NULL },
};

struct MenuItem im_Items[] =
{
	{
		&im_Items[1], 0, 0, 139, 10, ITEMENABLED | ITEMTEXT | COMMSEQ | HIGHCOMP,
		0, (APTR)&im_ItemText[0], NULL, 'R', NULL, NULL 
	},
	{
		NULL, 0, 10, 139, 10, ITEMENABLED | ITEMTEXT | COMMSEQ | HIGHCOMP,
		0, (APTR)&im_ItemText[1], NULL, 'Q', NULL, NULL 
	},
	{
		&im_Items[3], 0, 0, 179, 10, ITEMENABLED | ITEMTEXT | COMMSEQ | HIGHCOMP,
		0, (APTR)&im_ItemText[2], NULL, 'K', NULL, NULL 
	},
	{
		&im_Items[4], 0, 10, 179, 10, ITEMENABLED | ITEMTEXT | COMMSEQ | HIGHCOMP,
		0, (APTR)&im_ItemText[3], NULL, 'Z', NULL, NULL 
	},
	{
		&im_Items[5], 0, 20, 179, 10, ITEMENABLED | ITEMTEXT | COMMSEQ | HIGHCOMP,
		0, (APTR)&im_ItemText[4], NULL, 'I', NULL, NULL 
	},
	{
		NULL, 0, 30, 179, 10, ITEMENABLED | ITEMTEXT | COMMSEQ | HIGHCOMP,
		0, (APTR)&im_ItemText[5], NULL, 'C', NULL, NULL 
	},
	{
		&im_Items[7], 0, 0, 195, 10, ITEMENABLED | ITEMTEXT | COMMSEQ | CHECKIT | HIGHCOMP,
		2, (APTR)&im_ItemText[6], NULL, 'S', NULL, NULL 
	},
	{
		NULL, 0, 10, 195, 10, ITEMENABLED | ITEMTEXT | COMMSEQ | 
                    CHECKIT | HIGHCOMP | CHECKED,
		1, (APTR)&im_ItemText[7], NULL, 'H', NULL, NULL 
	},
	{
		&im_Items[9], 0, 0, 171, 10, ITEMENABLED | ITEMTEXT | 
		COMMSEQ | CHECKIT | HIGHCOMP | CHECKED,
		62, (APTR)&im_ItemText[8], NULL, 'F', NULL, NULL 
	},
	{
		&im_Items[10], 0, 10, 171, 10, ITEMENABLED | ITEMTEXT | COMMSEQ | CHECKIT | HIGHCOMP,
		61, (APTR)&im_ItemText[9], NULL, 'L', NULL, NULL 
	},
	{
		&im_Items[11], 0, 20, 171, 10, ITEMENABLED | ITEMTEXT | COMMSEQ | CHECKIT | HIGHCOMP,
		59, (APTR)&im_ItemText[10], NULL, 'B', NULL, NULL 
	},
	{
		&im_Items[12], 0, 30, 171, 10, ITEMENABLED | ITEMTEXT | COMMSEQ | CHECKIT | HIGHCOMP,
		55, (APTR)&im_ItemText[11], NULL, 'O', NULL, NULL 
	},
	{    
		&im_Items[13], 0, 40, 171, 10,  ITEMENABLED | ITEMTEXT | COMMSEQ | CHECKIT | HIGHCOMP,
		47, (APTR)&im_ItemText[12], NULL, 'P', NULL, NULL 
	},
	{    
		NULL, 0, 50, 171, 10,  ITEMENABLED | ITEMTEXT | COMMSEQ | CHECKIT | HIGHCOMP,
		31, (APTR)&im_ItemText[13], NULL, 'X', NULL, NULL 
	},
};

struct Menu im_Titles[] =
{
	{ &im_Titles[1], 3, 0, 78, 10, MENUENABLED, (BYTE *)" Project", &im_Items[0] },
	{ &im_Titles[2], 80, 0, 54, 10, MENUENABLED, (BYTE *)" Edit", &im_Items[2] },
	{ &im_Titles[3], 133, 0, 78, 10, MENUENABLED, (BYTE *)" Options", &im_Items[6] },
	{ NULL, 210, 0, 62, 0, MENUENABLED, (BYTE *)" Tools", &im_Items[8] },
};


