home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Fred Fish Collection 1.5
/
ffcollection-1-5-1992-11.iso
/
ff_disks
/
500-599
/
ff502.lzh
/
CELLS
/
CELLSSource.lzh
/
cGadget.c
< prev
next >
Wrap
C/C++ Source or Header
|
1991-04-20
|
6KB
|
220 lines
/*
* CELLS An Implementation of the WireWorld cellular automata
* as described in Scientific American, Jan 1990.
*
* Copyright 1990 by Davide P. Cervone.
* You may use this code, provided this copyright notice is kept intact.
* See the CELLS.HELP file for complete information on distribution conditions.
*/
/*
* File: cGadget.c Data structures for main control panel gadgets.
*/
#include "cGadget.h"
/*
* Data for button outlines and frames
*/
static SHORT ButtonBox[] = VBOX(BUTW,BUTH);
static SHORT ColorBox[] = RECT(CBOXW+2,CBOXH+2);
static SHORT ColorFrame[]= FBOX(CFRAMEW,CFRAMEH);
static SHORT Frame2Box[] = FBOX(BUTW+6,2*BUTH+6);
static SHORT Frame5Box[] = FBOX(BUTW+6,5*BUTH+6);
static SHORT PanelBox[] = FBOX(PANELW,PANELH);
static SHORT SlideHBox[] = HBOX(BOARDW-2*SLIDEWH,SLIDEWH);
static SHORT SlideVBox[] = VBOX(SLIDEWH,BOARDH-2*SLIDEWH);
/*
* Arrow and zoom gadget images
*/
extern USHORT UpArrowData[];
extern USHORT DownArrowData[];
extern USHORT LeftArrowData[];
extern USHORT RightArrowData[];
extern USHORT ZoomData[];
extern USHORT ShrinkData[];
/*
* The borders for all gadgets and frames
*/
struct Border cBorder[] =
{
#define NEXTBORDER(n) &cBorder[n+2]
#define BORDERNAME cBorder
OUTBRDR(BRDR_PANEL, PANELX,PANELY, PanelBox),
INBRDR (BRDR_FRAME1, CFRAMEX,CFRAMEY, ColorFrame),
INBRDR (BRDR_FRAME2, FRAMEX,FRAMEY, Frame2Box),
INBRDR (BRDR_FRAME3, FRAMEX,FRAMEY+2*BUTH+8, Frame2Box),
INBRDR (BRDR_FRAME4, FRAMEX,FRAMEY+4*BUTH+16, Frame5Box),
INBRDR (BRDR_FRAME5, FRAMEX,FRAMEY+9*BUTH+24, Frame2Box),
OUTBRDR(BRDR_SLIDEH, SLIDEWH,BOARDH, SlideHBox),
OUTBRDR(BRDR_SLIDEV, BOARDW,SLIDEWH, SlideVBox),
#undef NEXTBORDER
#define NEXTBORDER(n) &cBorder[n+1]
BRDR (BRDR_BLANKC, BOXPEN, CBOXX-1,CBOXY-1, ColorBox),
BRDR (BRDR_WIREC, HIGHPEN, CBOXX+CBOXW,CBOXY-1, ColorBox),
BRDR (BRDR_TAILC, BOXPEN, CBOXX+2*CBOXW+2,CBOXY-1, ColorBox),
#undef NEXTBORDER
#define NEXTBORDER(n) NULL
BRDR (BRDR_HEADC, BOXPEN, CBOXX+3*CBOXW+3,CBOXY-1, ColorBox),
OUTBRDR(BRDR_BUTTON, 0,0, ButtonBox),
};
/*
* The image structures for all arrows, sliders and color boxes
*/
struct Image cImage[] =
{
IMAGE(PANELX,PANELY,PANELW,PANELH,FOREGROUND),
IMAGE(0,0, SLIDEWH,SLIDEWH-4, FOREGROUND),
IMAGE(0,0, SLIDEWH-4,SLIDEWH, FOREGROUND),
ARROWIMAGE(UpArrowData),
ARROWIMAGE(DownArrowData),
ARROWIMAGE(LeftArrowData),
ARROWIMAGE(RightArrowData),
ARROWIMAGE(ZoomData),
ARROWIMAGE(ShrinkData),
IMAGE(0,0, CBOXW,CBOXH, SHADOW),
IMAGE(0,0, CBOXW,CBOXH, WIRE),
IMAGE(0,0, CBOXW,CBOXH, TAIL),
IMAGE(0,0, CBOXW,CBOXH, HEAD),
};
/*
* The texts for all buttons, and their shifted counterparts
*/
struct IntuiText cIText[] =
{
ITEXT("Start", 6,2),
ITEXT("Reset", 6,2),
ITEXT(" Save ", 3,2),
ITEXT("Load", 9,2),
ITEXT("Select", 3,2),
ITEXT("Move", 9,2),
ITEXT("Clear", 6,2),
ITEXT("Part", 9,2),
ITEXT(" Undo ", 3,2),
ITEXT(" Help ", 3,2),
ITEXT("Quit", 9,2),
ITEXT(" Step ", 3,2),
ITEXT(" Wipe ", 3,2),
ITEXT("Rename", 3,2),
ITEXT(" New ", 6,2),
ITEXT("Select", 3,2),
ITEXT("Copy", 9,2),
ITEXT(" Clip ", 3,2),
ITEXT("Part", 9,2),
ITEXT("Center", 3,2),
ITEXT("About", 6,2),
ITEXT("Quit", 9,2),
ITEXT(" Stop ", 3,2),
};
/*
* The slider info structures
*/
struct PropInfo cSlider[] =
{
{AUTOKNOB|FREEHORIZ|PROPBORDERLESS,0,0,0xFFFF,0xFFFF, 0,0,0,0,0,0},
{AUTOKNOB|FREEVERT|PROPBORDERLESS,0,0,0xFFFF,0xFFFF, 0,0,0,0,0,0},
};
/*
* Defines to make the gadgets easy to create
*/
#define BUTTON(n,frame,flags)\
{\
NEXTGADGET(n), BUTX,BUTY+8*frame+n*BUTH,BUTW,BUTH, GADGHCOMP, RELVERIFY,\
BOOLGADGET, (APTR)&cBorder[BRDR_BUTTON],NULL,\
&cIText[n], flags|IS_BUTTON,NULL, n,NULL\
}
#define COLOR(n,f)\
{\
NEXTGADGET(n), CBOXX+f+(n-ID_BLANKC)*(CBOXW+1),CBOXY,CBOXW,CBOXH,\
GADGHNONE|GADGIMAGE, GADGIMMEDIATE, BOOLGADGET,\
(APTR)&cImage[n-ID_BLANKC+IM_BLANKC],NULL,NULL,NULL,NULL, n,NULL\
}
#define ARROW(n,x,y)\
{\
NEXTGADGET(n), x,y,SLIDEWH,SLIDEWH, GADGHCOMP|GADGIMAGE,\
GADGIMMEDIATE|RELVERIFY,BOOLGADGET, (APTR)&cImage[n-ID_UARROW+IM_UARROW],\
NULL, NULL, NULL,NULL, n,NULL\
}
#define ZOOM(n,x,y)\
{\
NEXTGADGET(n), x,y,SLIDEWH,SLIDEWH, GADGHCOMP|GADGIMAGE,\
RELVERIFY,BOOLGADGET, (APTR)&cImage[n-ID_ZOOM+IM_ZOOM],\
NULL, NULL, NULL,NULL, n,NULL\
}
#define SLIDER(n,x,y,w,h)\
{\
NEXTGADGET(n), x+2,y+2,w-4,h-4, GADGHCOMP|GADGIMAGE,\
GADGIMMEDIATE| RELVERIFY, PROPGADGET, (APTR)&cImage[n-ID_SLIDEH+IM_SLIDEH],\
NULL, NULL, NULL, (APTR)&cSlider[n-ID_SLIDEH], n,NULL\
}
#define SPECIAL(n,f,render)\
{\
NEXTGADGET(n), 0,0,0,0, GADGHNONE|(f), 0, BOOLGADGET,\
(APTR)render,NULL, NULL, NULL,NULL, n,NULL\
}
/*
* The control panel gadgets themselves
*/
struct Gadget cGadget[] =
{
#define NEXTGADGET(n) &cGadget[n+1]
BUTTON(ID_START, 0, 0),
BUTTON(ID_RESET, 0, 0),
BUTTON(ID_SAVE, 1, 0),
BUTTON(ID_LOAD, 1, 0),
BUTTON(ID_SELECT, 2, BUTTON_NOSHIFT),
BUTTON(ID_MOVE, 2, 0),
BUTTON(ID_CLEAR, 2, 0),
BUTTON(ID_PART, 2, BUTTON_NOSHIFT),
BUTTON(ID_UNDO, 2, 0),
BUTTON(ID_HELP, 3, BUTTON_RUNSHIFT),
BUTTON(ID_QUIT, 3, BUTTON_NOSHIFT),
COLOR(ID_BLANKC,0),
COLOR(ID_WIREC,0),
COLOR(ID_TAILC,1),
COLOR(ID_HEADC,1),
SLIDER(ID_SLIDEH, SLIDEWH,BOARDH,BOARDW-2*SLIDEWH,SLIDEWH),
SLIDER(ID_SLIDEV, BOARDW,SLIDEWH,SLIDEWH,BOARDH-2*SLIDEWH),
ARROW(ID_UARROW, BOARDW,0),
ARROW(ID_DARROW, BOARDW,BOARDH-SLIDEWH),
ARROW(ID_LARROW, 0,BOARDH),
ARROW(ID_RARROW, BOARDW-SLIDEWH,BOARDH),
ZOOM(ID_ZOOM, BOARDW,BOARDH),
SPECIAL(ID_BRDRGADG, NULL, &cBorder[BRDR_PANEL]),
#undef NEXTGADGET
#define NEXTGADGET(n) NULL
SPECIAL(ID_IMGADG, GADGIMAGE, &cImage[IM_PANEL])
};