/*
 * MandelVroom 2.0
 *
 * (c) Copyright 1987,1989  Kevin L. Clague, San Jose, CA
 *
 * All rights reserved.
 *
 * Permission is hereby granted to distribute this program's source
 * executable, and documentation for non-comercial purposes, so long as the
 * copyright notices are not removed from the sources, executable or
 * documentation.  This program may not be distributed for a profit without
 * the express written consent of the author Kevin L. Clague.
 *
 * This program is not in the public domain.
 *
 * Fred Fish is expressly granted permission to distribute this program's
 * source and executable as part of the "Fred Fish freely redistributable
 * Amiga software library."
 *
 * Permission is expressly granted for this program and it's source to be
 * distributed as part of the Amicus Amiga software disks, and the
 * First Amiga User Group's Hot Mix disks.
 *
 * contents: this file decodes gadget or menu types to determine what help
 * file should be displayed in the help window.
 */

#include "mandp.h"

static char *HelpFile;

ScrollHelpCmd(Msg)
  struct IntuiMessage *Msg;
{
  struct Window *window;
  struct Gadget *gadget;

  window = Msg->IDCMPWindow;
  gadget = (struct Gadget *) Msg->IAddress;

  switch (Msg->Class) {

    case GADGETDOWN:
         ModifyIDCMP(window, window->IDCMPFlags | MOUSEMOVE);
         State = SCROLLHELPSTATE;
         break;

    case MOUSEMOVE:
         Page_File(HELPSCROLL);
         break;

    case GADGETUP:
         if (gadget->GadgetID == HELPSCROLL) {
           ModifyIDCMP(window, window->IDCMPFlags & ~MOUSEMOVE);
         }
         Page_File(HELPSCROLL);
         break;
  }
}

HelpMenuCmd( Msg )
  struct IntuiMessage *Msg;
{
  register USHORT code;

  code = Msg->Code;

  HelpFile = NULL;

  if (code == MENUNULL)
    return;

  switch ( MENUNUM( code ) ) {

    case PROJECTMENU:
         HelpProjectMenu(code);
         break;

    case DISPLAYMENU:
         HelpDisplayMenu(code);
         break;

    case CALCULATEMENU:
         HelpCalculateMenu(code);
         break;

    case SPECIALMENU:
         HelpSpecialMenu(code);
         break;
  }

  if (HelpFile == NULL)
    DispErrMsg("No Help for that object",0);
  else
    ShowHelp("Mandelbrot:Help/",HelpFile);

}

/*
 * Decide what to do for Project menu's Items
 */
HelpProjectMenu(code)
  USHORT code;
{
  switch (ITEMNUM(code)) {

    case NEWITEM:

         switch( SUBNUM(code) ) {
           case 0:
                HelpFile = "NewMand";
                break;

           case 1:
                HelpFile = "NewJulia";
                break;
         }
         break;

    case HELPITEM:
         HelpFile = "Help";
         break;

    case CURITEM:
         HelpFile = "Current";
         break;

    case CLOSEPROJ:
         HelpFile = "CloseProj";
         break;

    case SAVEPROJ:
    case LOADITEM:
         HelpFile = "Load.Save";
         break;

    case SAVEILBM:
         HelpFile = "SaveILBM";
         break;

    case CANCELITEM:
         HelpFile = "CancelCmd";
         break;

    case QUITITEM:
         HelpFile = "Quit";
         break;
    }
} /* HelpProjectMenu */

/*
 * Decide what to do for Edit menu's Items
 */
HelpDisplayMenu(code)
  USHORT code;
{
  switch (ITEMNUM(code)) {

    case COLORITEM:
         HelpFile = "ColorPalette";
         break;

    case CYCLEITEM:
         HelpFile = "CycleControl";
         break;

    case CONTOURITEM:
         HelpFile = "ContourGen";
         break;

    case AUTOCNTRITEM:
         HelpFile = "AutoContour";
         break;

    case HISTOGRAMITEM:
         HelpFile = "Histogram";
         break;

    case DEPTHITEM:
         InitDepthSubs();
         HelpFile = "NumColors";
         break;

    case VIEWMODEITEM:
         InitViewModesSubs();
         HelpFile = "ScreenType";
         break;

    case SCREENITEM:
         InitSizeSubs();
         HelpFile = "ScreenSize";
         break;

    case BORDERITEM:
         InitBorderSubs();
         HelpFile = "Border";
         break;
    }
} /* HelpDisplayMenu */

/*
 * Decide what to do for Special Menu's Items
 */
HelpCalculateMenu(code)
  USHORT code;
{
  switch (ITEMNUM(code)) {

    case ZOOMITEM:

         switch(SUBNUM(code)) {
           case ZOOMIN:
                HelpFile = "ZoomIn";
                break;
           case ZOOMOUT:
                HelpFile = "ZoomOut";
                break;
           case ZOOMOFF:
                HelpFile = "ZoomClose";
                break;
           case ZOOMJULIA:
                HelpFile = "ZoomJulia";
                break;
         }
         break;

    case SCROLLITEM:
         HelpFile = "Pan";
         break;

    case LENSITEM:
         InitLensSubs();
         HelpFile = "Lens";
         break;

    case GENERATEITEM:
         HelpFile = "Generate";
         break;

    case GENERATORITEM:   /* generator type */
         InitGenSubs();
         HelpFile = "Generator";
         break;

    case STATSITEM:
         HelpFile = "Statistics";
         break;

    case COUNTITEM:
         HelpFile = "MaxIteration";
         break;
  }
} /* HelpCalcualteMenu */

/*
 * Decide what to do for Special Menu's Items
 */
HelpSpecialMenu(code)
  USHORT code;
{
  switch (ITEMNUM(code)) {

    case PRESETITEM:
         HelpFile = "Presets";
         break;

    case ORBITITEM:
         HelpFile = "Orbit";
         break;

    case ORBITMATHITEM:
         HelpFile = "MathOrbit";
         break;

    case MAXORBITEM:
         HelpFile = "MaxOrbit";
         break;
  }
} /* HelpCalculateMenu */

/*
 * Perform functions for Gadget down messages
 */
HelpGadgetCmd(Msg)
  struct IntuiMessage *Msg;
{
  struct Gadget *gadget;

  gadget = (struct Gadget *) Msg->IAddress;

  HelpFile = NULL;

  switch (gadget->GadgetID >> WINDTYPEBITS & WINDMASK) {

  case PALTYPE:
       HelpPalGadget(gadget);
       break;

  case CONTYPE:
       HelpContGadget(gadget);
       break;

  case PICTTYPE:
       HelpPictGadget(gadget);
       break;

  case CYCTYPE:
       HelpCycGadget(gadget);
       break;

  case ORBTTYPE:
       HelpFile = "Orbit";
       break;
  }

  if (HelpFile != NULL)
    ShowHelp("Mandelbrot:Help/",HelpFile);
  else
    DispErrMsg("No Help for that object",0);
}

/*
 * Interpret the gadgets and do the right thing
 */
HelpPalGadget(gadget)
  register struct Gadget *gadget;
{
  switch (gadget->GadgetID >> TYPEBITS & TYPEMASK) {

  case PALPENS:
       HelpFile = "PalPens";
       break;

  case PALCNTLS:
       HelpPalCntl(gadget);
       break;

  case PALPOTS:
       HelpFile = "PalPots";
       break;
  }
} /* HelpPalGadget */

/*
 * We got a color palette command gadget
 */
HelpPalCntl(gadget)
  register struct Gadget *gadget;
{
  switch (gadget->GadgetID) {

  case PALCOPY:
       HelpFile = "PalCopy";
       break;

  case PALRANGE:
       HelpFile = "PalRange";
       break;

  case PALEXCG:
       HelpFile = "PalExchg";
       break;
  }
} /* HelpPalCntl */

HelpPictGadget(gadget)
  register struct Gadget *gadget;
{
  switch (gadget->GadgetID) {

    case PICTCUR:
         HelpFile = "PictCur";
         break;

    case PICTGEN:
         HelpFile = "Generate";
         break;

    case PICTIN:
         HelpFile = "ZoomIn";
         break;

    case PICTOUT:
         HelpFile = "ZoomOut";
         break;

    case PICTJULIA:
         HelpFile = "ZoomJulia";
         break;
  }
}

/*
 * Figure out what to do for this contour gadget
 */
HelpContGadget(gadget)
  struct Gadget *gadget;
{
  switch (gadget->GadgetID >> TYPEBITS & TYPEMASK) {

    case CONTCNTLS:
         switch (gadget->GadgetID) {
           case CONTRECOL:
                HelpFile = "Paint";
                break;

           case CONTSET:
                HelpFile = "ContSet";
                break;

           case CONTSMTH:
                HelpFile = "ContSmooth";
                break;

           case CONTCUT:
                HelpFile = "ContCut";
                break;

           case CONTCOPY:
                HelpFile = "ContCopy";
                break;

           case CONTPASTE:
                HelpFile = "ContPaste";
                break;

           case CONTLAST:
                HelpFile = "ContLast";
                break;

           case CONTCEIL:
                HelpFile = "ContCeil";
                break;
         }
         break;

    case CONTSELS:
         HelpFile = "ContPens";
         break;

    case CONTPOTS:
         HelpFile = "ContPots";
         break;
  }
}

/*
 * Figure out what to do for this color cycle gadget
 */
HelpCycGadget(gadget)
  struct Gadget *gadget;
{
  switch (gadget->GadgetID >> TYPEBITS & TYPEMASK) {

    case CYCCNTLS:
         switch (gadget->GadgetID) {
           case CYCRANGE:
                HelpFile = "CycRange";
                break;

           case CYCDIR:
                HelpFile = "CycDir";
                break;

           case CYCSPEED:
                HelpFile = "CycSpeed";
                break;

           case CYCON:
                HelpFile = "CycOn";
                break;
         }
         break;

    case CYCRNUMS:
         HelpFile = "CycRNums";
         break;
  }
}



