home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / alib / d5xx / d502 / cells.lha / CELLS / CELLSSource.lzh / cGadget.c < prev    next >
C/C++ Source or Header  |  1991-04-20  |  6KB  |  220 lines

  1. /*
  2.  *  CELLS       An Implementation of the WireWorld cellular automata
  3.  *              as described in Scientific American, Jan 1990.
  4.  *
  5.  *              Copyright 1990 by Davide P. Cervone.
  6.  *  You may use this code, provided this copyright notice is kept intact.
  7.  *  See the CELLS.HELP file for complete information on distribution conditions.
  8.  */
  9.  
  10. /*
  11.  *  File:  cGadget.c            Data structures for main control panel gadgets.
  12.  */
  13.  
  14.  
  15. #include "cGadget.h"
  16.  
  17. /*
  18.  *  Data for button outlines and frames
  19.  */
  20.  
  21. static SHORT ButtonBox[] = VBOX(BUTW,BUTH);
  22. static SHORT ColorBox[]  = RECT(CBOXW+2,CBOXH+2);
  23. static SHORT ColorFrame[]= FBOX(CFRAMEW,CFRAMEH);
  24. static SHORT Frame2Box[] = FBOX(BUTW+6,2*BUTH+6);
  25. static SHORT Frame5Box[] = FBOX(BUTW+6,5*BUTH+6);
  26. static SHORT PanelBox[]  = FBOX(PANELW,PANELH);
  27. static SHORT SlideHBox[] = HBOX(BOARDW-2*SLIDEWH,SLIDEWH);
  28. static SHORT SlideVBox[] = VBOX(SLIDEWH,BOARDH-2*SLIDEWH);
  29.  
  30.  
  31. /*
  32.  *  Arrow and zoom gadget images
  33.  */
  34.  
  35. extern USHORT UpArrowData[];
  36. extern USHORT DownArrowData[];
  37. extern USHORT LeftArrowData[];
  38. extern USHORT RightArrowData[];
  39. extern USHORT ZoomData[];
  40. extern USHORT ShrinkData[];
  41.  
  42.  
  43. /*
  44.  *  The borders for all gadgets and frames
  45.  */
  46.  
  47. struct Border cBorder[] =
  48. {
  49.       #define NEXTBORDER(n)     &cBorder[n+2]
  50.       #define BORDERNAME        cBorder
  51.    OUTBRDR(BRDR_PANEL,  PANELX,PANELY, PanelBox),
  52.    INBRDR (BRDR_FRAME1, CFRAMEX,CFRAMEY, ColorFrame),
  53.    INBRDR (BRDR_FRAME2, FRAMEX,FRAMEY, Frame2Box),
  54.    INBRDR (BRDR_FRAME3, FRAMEX,FRAMEY+2*BUTH+8, Frame2Box),
  55.    INBRDR (BRDR_FRAME4, FRAMEX,FRAMEY+4*BUTH+16, Frame5Box),
  56.    INBRDR (BRDR_FRAME5, FRAMEX,FRAMEY+9*BUTH+24, Frame2Box),
  57.    OUTBRDR(BRDR_SLIDEH, SLIDEWH,BOARDH, SlideHBox),
  58.    OUTBRDR(BRDR_SLIDEV, BOARDW,SLIDEWH, SlideVBox),
  59.       #undef  NEXTBORDER
  60.       #define NEXTBORDER(n)     &cBorder[n+1]
  61.    BRDR   (BRDR_BLANKC, BOXPEN, CBOXX-1,CBOXY-1, ColorBox),
  62.    BRDR   (BRDR_WIREC,  HIGHPEN, CBOXX+CBOXW,CBOXY-1, ColorBox),
  63.    BRDR   (BRDR_TAILC,  BOXPEN, CBOXX+2*CBOXW+2,CBOXY-1, ColorBox),
  64.       #undef  NEXTBORDER
  65.       #define NEXTBORDER(n)     NULL
  66.    BRDR   (BRDR_HEADC,  BOXPEN, CBOXX+3*CBOXW+3,CBOXY-1, ColorBox),
  67.    OUTBRDR(BRDR_BUTTON, 0,0, ButtonBox),
  68. };
  69.  
  70. /*
  71.  *  The image structures for all arrows, sliders and color boxes
  72.  */
  73.  
  74. struct Image cImage[] =
  75. {
  76.    IMAGE(PANELX,PANELY,PANELW,PANELH,FOREGROUND),
  77.    IMAGE(0,0, SLIDEWH,SLIDEWH-4, FOREGROUND),
  78.    IMAGE(0,0, SLIDEWH-4,SLIDEWH, FOREGROUND),
  79.    ARROWIMAGE(UpArrowData),
  80.    ARROWIMAGE(DownArrowData),
  81.    ARROWIMAGE(LeftArrowData),
  82.    ARROWIMAGE(RightArrowData),
  83.    ARROWIMAGE(ZoomData),
  84.    ARROWIMAGE(ShrinkData),
  85.    IMAGE(0,0, CBOXW,CBOXH, SHADOW),
  86.    IMAGE(0,0, CBOXW,CBOXH, WIRE),
  87.    IMAGE(0,0, CBOXW,CBOXH, TAIL),
  88.    IMAGE(0,0, CBOXW,CBOXH, HEAD),
  89. };
  90.  
  91.  
  92. /*
  93.  *  The texts for all buttons, and their shifted counterparts
  94.  */
  95.  
  96. struct IntuiText cIText[] =
  97. {
  98.    ITEXT("Start",  6,2),
  99.    ITEXT("Reset",  6,2),
  100.    ITEXT(" Save ", 3,2),
  101.    ITEXT("Load",   9,2),
  102.    ITEXT("Select", 3,2),
  103.    ITEXT("Move",   9,2),
  104.    ITEXT("Clear",  6,2),
  105.    ITEXT("Part",   9,2),
  106.    ITEXT(" Undo ", 3,2),
  107.    ITEXT(" Help ", 3,2),
  108.    ITEXT("Quit",   9,2),
  109.    
  110.    ITEXT(" Step ", 3,2),
  111.    ITEXT(" Wipe ", 3,2),
  112.    ITEXT("Rename", 3,2),
  113.    ITEXT(" New ",  6,2),
  114.    ITEXT("Select", 3,2),
  115.    ITEXT("Copy",   9,2),
  116.    ITEXT(" Clip ", 3,2),
  117.    ITEXT("Part",   9,2),
  118.    ITEXT("Center", 3,2),
  119.    ITEXT("About",  6,2),
  120.    ITEXT("Quit",   9,2),
  121.  
  122.    ITEXT(" Stop ", 3,2),
  123. };
  124.  
  125.  
  126. /*
  127.  *  The slider info structures
  128.  */
  129.  
  130. struct PropInfo cSlider[] =
  131. {
  132.    {AUTOKNOB|FREEHORIZ|PROPBORDERLESS,0,0,0xFFFF,0xFFFF, 0,0,0,0,0,0},
  133.    {AUTOKNOB|FREEVERT|PROPBORDERLESS,0,0,0xFFFF,0xFFFF, 0,0,0,0,0,0},
  134. };
  135.  
  136.  
  137. /*
  138.  *  Defines to make the gadgets easy to create
  139.  */
  140.  
  141. #define BUTTON(n,frame,flags)\
  142. {\
  143.    NEXTGADGET(n), BUTX,BUTY+8*frame+n*BUTH,BUTW,BUTH, GADGHCOMP, RELVERIFY,\
  144.    BOOLGADGET, (APTR)&cBorder[BRDR_BUTTON],NULL,\
  145.    &cIText[n], flags|IS_BUTTON,NULL, n,NULL\
  146. }
  147.  
  148. #define COLOR(n,f)\
  149. {\
  150.    NEXTGADGET(n), CBOXX+f+(n-ID_BLANKC)*(CBOXW+1),CBOXY,CBOXW,CBOXH,\
  151.    GADGHNONE|GADGIMAGE, GADGIMMEDIATE, BOOLGADGET,\
  152.    (APTR)&cImage[n-ID_BLANKC+IM_BLANKC],NULL,NULL,NULL,NULL, n,NULL\
  153. }
  154.  
  155. #define ARROW(n,x,y)\
  156. {\
  157.    NEXTGADGET(n), x,y,SLIDEWH,SLIDEWH, GADGHCOMP|GADGIMAGE,\
  158.    GADGIMMEDIATE|RELVERIFY,BOOLGADGET, (APTR)&cImage[n-ID_UARROW+IM_UARROW],\
  159.    NULL, NULL, NULL,NULL, n,NULL\
  160. }
  161.  
  162. #define ZOOM(n,x,y)\
  163. {\
  164.    NEXTGADGET(n), x,y,SLIDEWH,SLIDEWH, GADGHCOMP|GADGIMAGE,\
  165.    RELVERIFY,BOOLGADGET, (APTR)&cImage[n-ID_ZOOM+IM_ZOOM],\
  166.    NULL, NULL, NULL,NULL, n,NULL\
  167. }
  168.  
  169. #define SLIDER(n,x,y,w,h)\
  170. {\
  171.    NEXTGADGET(n), x+2,y+2,w-4,h-4, GADGHCOMP|GADGIMAGE,\
  172.    GADGIMMEDIATE| RELVERIFY, PROPGADGET, (APTR)&cImage[n-ID_SLIDEH+IM_SLIDEH],\
  173.    NULL, NULL, NULL, (APTR)&cSlider[n-ID_SLIDEH], n,NULL\
  174. }
  175.  
  176. #define SPECIAL(n,f,render)\
  177. {\
  178.    NEXTGADGET(n), 0,0,0,0, GADGHNONE|(f), 0, BOOLGADGET,\
  179.    (APTR)render,NULL, NULL, NULL,NULL, n,NULL\
  180. }
  181.  
  182.  
  183. /*
  184.  *  The control panel gadgets themselves
  185.  */
  186.  
  187. struct Gadget cGadget[] =
  188. {
  189.       #define NEXTGADGET(n)     &cGadget[n+1]
  190.    BUTTON(ID_START,  0, 0),
  191.    BUTTON(ID_RESET,  0, 0),
  192.    BUTTON(ID_SAVE,   1, 0),
  193.    BUTTON(ID_LOAD,   1, 0),
  194.    BUTTON(ID_SELECT, 2, BUTTON_NOSHIFT),
  195.    BUTTON(ID_MOVE,   2, 0),
  196.    BUTTON(ID_CLEAR,  2, 0),
  197.    BUTTON(ID_PART,   2, BUTTON_NOSHIFT),
  198.    BUTTON(ID_UNDO,   2, 0),
  199.    BUTTON(ID_HELP,   3, BUTTON_RUNSHIFT),
  200.    BUTTON(ID_QUIT,   3, BUTTON_NOSHIFT),
  201.    
  202.    COLOR(ID_BLANKC,0),
  203.    COLOR(ID_WIREC,0),
  204.    COLOR(ID_TAILC,1),
  205.    COLOR(ID_HEADC,1),
  206.  
  207.    SLIDER(ID_SLIDEH, SLIDEWH,BOARDH,BOARDW-2*SLIDEWH,SLIDEWH),
  208.    SLIDER(ID_SLIDEV, BOARDW,SLIDEWH,SLIDEWH,BOARDH-2*SLIDEWH),
  209.    ARROW(ID_UARROW, BOARDW,0),
  210.    ARROW(ID_DARROW, BOARDW,BOARDH-SLIDEWH),
  211.    ARROW(ID_LARROW, 0,BOARDH),
  212.    ARROW(ID_RARROW, BOARDW-SLIDEWH,BOARDH),
  213.    ZOOM(ID_ZOOM, BOARDW,BOARDH),
  214.    
  215.    SPECIAL(ID_BRDRGADG, NULL, &cBorder[BRDR_PANEL]),
  216.       #undef NEXTGADGET
  217.       #define NEXTGADGET(n)     NULL
  218.    SPECIAL(ID_IMGADG, GADGIMAGE, &cImage[IM_PANEL])
  219. };
  220.