/*************************************************************************

              M E N U   T E X T   A N D   S T R U C T U R E S

*************************************************************************/



#include <exec/types.h>
#include <intuition/intuition.h>

extern struct TextAttr Font;

/*************************************************************************

    T E X T    S T R U C T U R E S    F O R    T H E    M E N U
    
*************************************************************************/


struct IntuiText DrawText =
  {
  4, 1, JAM2, 1, 1, &Font, (UBYTE *)"Draw", NULL
  };

struct IntuiText InfoText =
  {
  4, 1, JAM2, 1, 1, &Font, (UBYTE *)"Info", NULL
  };

struct IntuiText QuitText =
  {
  4, 1, JAM2, 1, 1, &Font, (UBYTE *)"Quit", NULL
  };

struct IntuiText ParamText =
  {
   4, 1, JAM2, 1, 1, &Font, (UBYTE *)"Parameters", NULL
  };

struct IntuiText AssignColors =
  {
   4, 1, JAM2, 1, 1, &Font, (UBYTE *)"Assign", NULL
  };

struct IntuiText ModifyColors =
  {
   4, 1, JAM2, 1, 1, &Font, (UBYTE *)"Modify", NULL
  };

struct IntuiText DefaultColors =
  {
   4, 1, JAM2, 1, 1, &Font, (UBYTE *)"Default", NULL
  };

struct IntuiText AssignFractValues =
  {
   4, 1, JAM2, 1, 1, &Font, (UBYTE *)"Assign Mandelbrot", NULL
  };

struct IntuiText AssignJuliaValues =
  {
   4, 1, JAM2, 1, 1, &Font, (UBYTE *)"Assign Julia", NULL   
  };

struct IntuiText MapText =
  {
   4, 1, JAM2, 1, 1, &Font, (UBYTE *)"Map", NULL
  };
  
struct IntuiText ILBMText =
  {
   4, 1, JAM2, 1, 1, &Font, (UBYTE *)"ILBM", NULL
  };

struct IntuiText SaveText =
  {
   4, 1, JAM2, 1, 1, &Font, (UBYTE *)"Save", NULL
  };

struct IntuiText LoadText =
  {
   4, 1, JAM2, 1, 1, &Font, (UBYTE *)"Load", NULL
  };
  
struct IntuiText DeleteText =
  {
   4, 1, JAM2, 1, 1, &Font, (UBYTE *)"Delete", NULL
  };      
  
struct IntuiText MandText =
  {
   4, 1, JAM2, 1, 1, &Font, (UBYTE *)"Mandelbrot", NULL
  };
     
struct IntuiText JuliaText =
  {
   4, 1, JAM2, 1, 1, &Font, (UBYTE *)"Julia", NULL
  };
         
struct IntuiText ZoneIText =
  {
   4, 1, JAM2, 1, 1, &Font, (UBYTE *)"Zones 1-100", NULL
  };
      
struct IntuiText ZoneIIText =
  {
   4, 1, JAM2, 1, 1, &Font, (UBYTE *)"Zones 101-200", NULL
  };
     
struct IntuiText QuitProgText =
  {
   4, 1, JAM2, 1, 1, &Font, (UBYTE *)"Program", NULL
  };
     
struct IntuiText QuitCurrentText =
  {
   4, 1, JAM2, 1, 1, &Font, (UBYTE *)"Current Job", NULL
  };      

struct IntuiText IterationText[10] =
  {
     { 4, 1, JAM2, CHECKWIDTH, 1, &Font, (UBYTE *)"     25", NULL },
     { 4, 1, JAM2, CHECKWIDTH, 1, &Font, (UBYTE *)"     50", NULL },
     { 4, 1, JAM2, CHECKWIDTH, 1, &Font, (UBYTE *)"     75", NULL },
     { 4, 1, JAM2, CHECKWIDTH, 1, &Font, (UBYTE *)"    100", NULL },
     { 4, 1, JAM2, CHECKWIDTH, 1, &Font, (UBYTE *)"    125", NULL },
     { 4, 1, JAM2, CHECKWIDTH, 1, &Font, (UBYTE *)"    175", NULL },
     { 4, 1, JAM2, CHECKWIDTH, 1, &Font, (UBYTE *)"    225", NULL },
     { 4, 1, JAM2, CHECKWIDTH, 1, &Font, (UBYTE *)"    275", NULL },
     { 4, 1, JAM2, CHECKWIDTH, 1, &Font, (UBYTE *)"    325", NULL },
     { 4, 1, JAM2, CHECKWIDTH, 1, &Font, (UBYTE *)"    375", NULL },
  };    
    
struct IntuiText ProgrmDscrptText =
  {
   4, 1, JAM2, 1, 1, &Font, (UBYTE *)"Program Description", NULL
  };

struct IntuiText FractValuesText =
  {
   4, 1, JAM2, 1, 1, &Font, (UBYTE *)"Fractal Values", NULL
  };
    
struct IntuiText MapInfoText =
  {
   4, 1, JAM2, 1, 1, &Font, (UBYTE *)"Map", NULL
  };
    
struct IntuiText IterationsInfoText =
  {
   4, 1, JAM2, 1, 1, &Font, (UBYTE *)"Iterations", NULL
  };

struct IntuiText DrawingAreaInfoText =
  {
   4, 1, JAM2, 1, 1, &Font, (UBYTE *)"Drawing Area", NULL
  };

struct IntuiText DrawInfoText =
  {
   4, 1, JAM2, 1, 1, &Font, (UBYTE *)"Draw", NULL
  };

struct IntuiText ColorZonesInfoText =
  {
   4, 1, JAM2, 1, 1, &Font, (UBYTE *)"Color Zones", NULL
  };

struct IntuiText ModifyColorsInfoText =
  {
   4, 1, JAM2, 1, 1, &Font, (UBYTE *)"Modify Colors", NULL
  };

struct IntuiText DefaultColorsInfoText =
  {
   4, 1, JAM2, 1, 1, &Font, (UBYTE *)"Default Colors", NULL
  };
    
struct IntuiText LoadSaveInfoText =
  {
   4, 1, JAM2, 1, 1, &Font, (UBYTE *)"Load & Save", NULL
  };

struct IntuiText AboutInfoText =
  {
   4, 1, JAM2, 1, 1, &Font, (UBYTE *)"About", NULL
  };

      
/**************************************************************************

  M E N U I T E M   S T R U C T U R E S   F O R   T H E   M E N U
  
**************************************************************************/



struct MenuItem Assign_Julia_Values =
  {
   NULL,
   1, 14,
   140, 10,
   ITEMTEXT | ITEMENABLED | HIGHCOMP,
   0,
   (APTR)&AssignJuliaValues,
   NULL,
   0,
   NULL,
   0
  };
  
struct MenuItem Assign_Fract_Values =
  {
   &Assign_Julia_Values,
   1, 2,
   140, 10,
   ITEMTEXT | ITEMENABLED | HIGHCOMP,
   0,
   (APTR)&AssignFractValues,
   NULL,
   0,
   NULL,
   0
  };

struct MenuItem Modify_Colors =
  {
    NULL,   
    2, 26,
    90, 10,
    ITEMTEXT | ITEMENABLED | HIGHCOMP,
    0,
    (APTR)&ModifyColors,
    NULL,
    0,
    NULL,
    0,
  };  

struct MenuItem Zone_II =
  {
   NULL,
   90, 14,
   130, 10,
   ITEMTEXT | ITEMENABLED | HIGHCOMP,
   0,
   (APTR)&ZoneIIText,
   NULL,
   0,
   NULL,
   0
  };

struct MenuItem Zone_I =
  {
   &Zone_II,
   90, 2,
   130, 10,
   ITEMTEXT | ITEMENABLED | HIGHCOMP,
   0,
   (APTR)&ZoneIText,
   NULL,
   0,
   NULL,
   0
  };

struct MenuItem Assign_Colors =
  {
   &Modify_Colors,
   2, 14,
   90, 10,
   ITEMTEXT | ITEMENABLED | HIGHCOMP,
   0,
   (APTR)&AssignColors,
   NULL,
   0,
   &Zone_I,
   0
  };

struct MenuItem Default_Colors =
  {
    &Assign_Colors,
    2, 2,
    90, 10,
    ITEMTEXT | ITEMENABLED | HIGHCOMP,
    0,
    (APTR)&DefaultColors,
    NULL,
    0,
    NULL,
    0
  };
  
  
struct MenuItem Iterations[10] =
  {
     {
       &Iterations[1],
       10, 20,
       (60 + CHECKWIDTH), 10,
       CHECKIT | CHECKED | ITEMTEXT | ITEMENABLED | HIGHCOMP,
       0x03FE,
       (APTR)&IterationText[0],
       NULL,
       0,
       NULL,
       0
     },  
     
     {
       &Iterations[2],
       10, 32,
       (60 + CHECKWIDTH), 10,
       CHECKIT | ITEMTEXT | ITEMENABLED | HIGHCOMP,
       0x03FD,
       (APTR)&IterationText[1],
       NULL,
       0,
       NULL,
       0
     },
     
     {
       &Iterations[3],
       10, 44,
       (60 + CHECKWIDTH), 10,
       CHECKIT | ITEMTEXT | ITEMENABLED | HIGHCOMP,
       0x03FB,
       (APTR)&IterationText[2],
       NULL,
       0,
       NULL,
       0  
     },
     
     {
       &Iterations[4],
       10, 56,
       (60 + CHECKWIDTH), 10,
       CHECKIT | ITEMTEXT | ITEMENABLED | HIGHCOMP,
       0x03F7,
       (APTR)&IterationText[3],
       NULL,
       0,
       NULL,
       0  
     },
     
     {
       &Iterations[5],
       10, 68,
       (60 + CHECKWIDTH), 10,
       CHECKIT | ITEMTEXT | ITEMENABLED | HIGHCOMP,
       0x03EF,
       (APTR)&IterationText[4],
       NULL,
       0,
       NULL,
       0  
     },  
       
     {
       &Iterations[6],
       10, 80,
       (60 + CHECKWIDTH), 10,
       CHECKIT | ITEMTEXT | ITEMENABLED | HIGHCOMP,
       0x03DF,
       (APTR)&IterationText[5],
       NULL,
       0,
       NULL,
       0  
     },
     
     {
      &Iterations[7],
       10, 92,
       (60 + CHECKWIDTH), 10,
       CHECKIT | ITEMTEXT | ITEMENABLED | HIGHCOMP,
       0x03BF,
       (APTR)&IterationText[6],
       NULL,
       0,
       NULL,
       0  
     },
     
     {
       &Iterations[8],
       10, 104,
       (60 + CHECKWIDTH), 10,
       CHECKIT | ITEMTEXT | ITEMENABLED | HIGHCOMP,
       0x037F,
       (APTR)&IterationText[7],
       NULL,
       0,
       NULL,
       0  
     },
     
     {
       &Iterations[9],
       10, 116,
       (60 + CHECKWIDTH), 10,
       CHECKIT | ITEMTEXT | ITEMENABLED | HIGHCOMP,
       0x02FF,
       (APTR)&IterationText[8],
       NULL,
       0,
       NULL,
       0  
     },
     
     {
       NULL,
       10, 128,
       (60 + CHECKWIDTH), 10,
       CHECKIT | ITEMTEXT | ITEMENABLED | HIGHCOMP,
       0x01FF,
       (APTR)&IterationText[9],
       NULL,
       0,
       NULL,
       0 
     },
     
  };     
       
struct MenuItem Parameters =
  {
    NULL,
    2, 2,
    120, 10,
    ITEMTEXT | ITEMENABLED | HIGHCOMP,
    0,
    (APTR)&ParamText,
    NULL,
    0,
    NULL,
    0
  };

struct MenuItem QuitProg =
  {
    NULL,
    120, 14,
    120, 10,
    ITEMTEXT | ITEMENABLED | HIGHCOMP,
    0,
    (APTR)&QuitProgText,
    NULL,
    0,
    NULL,
    0
  };

struct MenuItem QuitCurrent =
  {
    &QuitProg,
    120, 2,
    120, 10,
    ITEMTEXT | ITEMENABLED | HIGHCOMP,
    0,
    (APTR)&QuitCurrentText,
    NULL,
    0,
    NULL,
    0
  };


struct MenuItem Quit =
  {
    NULL,
    1, 74,
    120, 10,
    ITEMTEXT | ITEMENABLED | HIGHCOMP,
    0,
    (APTR)&QuitText,
    NULL,
    0,
    &QuitCurrent,
    0
  };

struct MenuItem DeleteParms =
  {
    NULL,
    120, 14,
    120, 10,
    ITEMTEXT | ITEMENABLED | HIGHCOMP,
    0,
    (APTR)&ParamText,
    NULL,
    0,
    NULL,
    0
  };

struct MenuItem DeleteILBM =
  {
    &DeleteParms,
    120, 2,
    120, 10,
    ITEMTEXT | ITEMENABLED | HIGHCOMP,
    0,
    (APTR)&ILBMText,
    NULL,
    0,
    NULL,
    0
  };


struct MenuItem Delete =
  {
    &Quit,
    1, 62,
    120, 10,
    ITEMTEXT | ITEMENABLED | HIGHCOMP,
    0,
    (APTR)&DeleteText,
    NULL,
    0,
    &DeleteILBM,
    0
  };

struct MenuItem LoadParams =
  {
    NULL,
    120, 14,
    120, 10,
    ITEMTEXT | ITEMENABLED | HIGHCOMP,
    0,
    (APTR)&ParamText,
    NULL,
    0,
    NULL,
    0
  };

struct MenuItem LoadILBM =
  {
    &LoadParams,
    120, 2,
    120, 10,
    ITEMTEXT | ITEMENABLED | HIGHCOMP,
    0,
    (APTR)&ILBMText,
    NULL,
    0,
    NULL,
    0
  };

struct MenuItem Load =
  {
    &Delete,
    1, 50,
    120, 10,
    ITEMTEXT | ITEMENABLED | HIGHCOMP,
    0,
    (APTR)&LoadText,
    NULL,
    0,
    &LoadILBM,
    0
  };
  
struct MenuItem SaveParams =
  {
    NULL,
    120, 14,
    120, 10,
    ITEMTEXT | ITEMENABLED | HIGHCOMP,
    0,
    (APTR)&ParamText,
    NULL,
    0,
    NULL,
    0
  };

struct MenuItem SaveILBM =
  {
    &SaveParams,
    120, 2,
    120, 10,
    ITEMTEXT | ITEMENABLED | HIGHCOMP,
    0,
    (APTR)&ILBMText,
    NULL,
    0,
    NULL,
    0
  };
    
struct MenuItem Save =
  {
    &Load,
    1, 38,
    120, 10,
    ITEMTEXT | ITEMENABLED | HIGHCOMP,
    0,
    (APTR)&SaveText,
    NULL,
    0,
    &SaveILBM,
    0
  };

struct MenuItem JuliaDraw =
  {
    NULL,
    120, 14,
    120, 10,
    ITEMTEXT | ITEMENABLED | HIGHCOMP,
    0,
    (APTR)&JuliaText,
    NULL,
    0,
    NULL,
    0
  };


struct MenuItem MandDraw =
  {
    &JuliaDraw,
    120, 2,
    120, 10,
    ITEMTEXT | ITEMENABLED | HIGHCOMP,
    0,
    (APTR)&MandText,
    NULL,
    0,
    NULL,
    0
  };

struct MenuItem Draw =
  {
    &Save,
    1, 26,
    120, 10,
    ITEMTEXT | ITEMENABLED | HIGHCOMP,
    0,
    (APTR)&DrawText,
    NULL,
    0,
    &MandDraw,
    0
  };

struct MenuItem Map =
  {
    &Draw,
    1, 14,
    120, 10,
    ITEMTEXT | ITEMENABLED | HIGHCOMP,
    0,
    (APTR)&MapText,
    NULL,
    0,
    NULL,
    0
  };

struct MenuItem AboutInfo =
  {
    NULL,
    100, 122,
    160, 10,
    ITEMTEXT | ITEMENABLED | HIGHCOMP,
    0,
    (APTR)&AboutInfoText,
    NULL,
    0,
    NULL,
    0
  };


struct MenuItem LoadSaveInfo =
  {
    &AboutInfo,
    100, 110,
    160, 10,
    ITEMTEXT | ITEMENABLED | HIGHCOMP,
    0,
    (APTR)&LoadSaveInfoText,
    NULL,
    0,
    NULL,
    0
  };


struct MenuItem DefaultColorsInfo =
  {
    &LoadSaveInfo,
    100, 98,
    160, 10,
    ITEMTEXT | ITEMENABLED | HIGHCOMP,
    0,
    (APTR)&DefaultColorsInfoText,
    NULL,
    0,
    NULL,
    0
  };


struct MenuItem ModifyColorsInfo =
  {
    &DefaultColorsInfo,
    100, 86,
    160, 10,
    ITEMTEXT | ITEMENABLED | HIGHCOMP,
    0,
    (APTR)&ModifyColorsInfoText,
    NULL,
    0,
    NULL,
    0
  };


struct MenuItem ColorZonesInfo =
  {
    &ModifyColorsInfo,
    100, 74,
    160, 10,
    ITEMTEXT | ITEMENABLED | HIGHCOMP,
    0,
    (APTR)&ColorZonesInfoText,
    NULL,
    0,
    NULL,
    0
  };


struct MenuItem DrawInfo =
  {
    &ColorZonesInfo,
    100, 62,
    160, 10,
    ITEMTEXT | ITEMENABLED | HIGHCOMP,
    0,
    (APTR)&DrawInfoText,
    NULL,
    0,
    NULL,
    0
  };


struct MenuItem DrawingAreaInfo =
  {
    &DrawInfo,
    100, 50,
    160, 10,
    ITEMTEXT | ITEMENABLED | HIGHCOMP,
    0,
    (APTR)&DrawingAreaInfoText,
    NULL,
    0,
    NULL,
    0
  };


struct MenuItem IterationsInfo =
  {
    &DrawingAreaInfo,
    100, 38,
    160, 10,
    ITEMTEXT | ITEMENABLED | HIGHCOMP,
    0,
    (APTR)&IterationsInfoText,
    NULL,
    0,
    NULL,
    0
  };

struct MenuItem MapInfo =
  {
    &IterationsInfo,
    100, 26,
    160, 10,
    ITEMTEXT | ITEMENABLED | HIGHCOMP,
    0,
    (APTR)&MapInfoText,
    NULL,
    0,
    NULL,
    0
  };

struct MenuItem FractValues =
  {
    &MapInfo,
    100, 14,
    160, 10,
    ITEMTEXT | ITEMENABLED | HIGHCOMP,
    0,
    (APTR)&FractValuesText,
    NULL,
    0,
    NULL,
    0
  };

struct MenuItem ProgrmDscrpt =
  {
    &FractValues,
    100, 2,
    160, 10,
    ITEMTEXT | ITEMENABLED | HIGHCOMP,
    0,
    (APTR)&ProgrmDscrptText,
    NULL,
    0,
    NULL,
    0
  };

struct MenuItem Info =
  {
    &Map,
    1, 2,
    120, 10,
    ITEMTEXT | ITEMENABLED | HIGHCOMP,
    0,
    (APTR)&InfoText,
    NULL,
    0,
    &ProgrmDscrpt,
    0
  };


/**************************************************************************

          M E N U   S T R U C T U R E S   F O R   T H E   M E N U
     
**************************************************************************/


struct Menu Menu[5] =
  {
     { /* Menu[0] The Controls Menu */
       &Menu[1],
       10, 0,
       70, 10,
       MENUENABLED,
       (BYTE *) "Controls",
       &Info
     },

     { /* Menu[1] The Drawing Area Menu */
       &Menu[2],
       100, 0,
       120, 10,
       MENUENABLED,
       (BYTE *) "Drawing Area",
       &Parameters
     }, 

     { /* Menu[2] The Colors Menu */
       &Menu[3],
       230, 0,
       90, 10,
       MENUENABLED,
       (BYTE *) "Colors",
       &Default_Colors
     },
      
     { /* Menu[3] The Iterations Menu */
       &Menu[4],
       330, 0,
       (70 + CHECKWIDTH), 10,
       MENUENABLED,
       (BYTE *)"Iterations",
       &Iterations[0]
     },  
     
     { /* Menu[4] The Fractal Values Menu */
       NULL,
       440, 0,
       140, 10,
       MENUENABLED,
       (BYTE *)"Fractal Values",
       &Assign_Fract_Values
     },

  };

struct Menu *MAKMenu = &Menu[0];


