home *** CD-ROM | disk | FTP | other *** search
/ Otherware / Otherware_1_SB_Development.iso / amiga / utility / misc / yak.lha / Yak / src / help.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-09-18  |  4.0 KB  |  219 lines

  1. /*
  2.  * help.c
  3.  * 
  4.  * Opens help/settings window and handles events.
  5.  * For yak.
  6.  * 
  7.  * Martin W. Scott, 12-Sep-92.
  8.  */
  9. #include <exec/types.h>
  10. #include <libraries/commodities.h>
  11. #include <intuition/intuition.h>
  12. #include <libraries/gadtools.h>
  13. #include <proto/exec.h>
  14. #include <proto/intuition.h>
  15. #include <proto/gadtools.h>
  16. #include <proto/graphics.h>
  17. #include <proto/commodities.h>
  18. #include <string.h>
  19.  
  20. #include "yak.h"
  21. #include "popup.h"
  22.  
  23. LONG wndsigflag;
  24. static UWORD    n;        /* currently shown hotkey */
  25.  
  26. /* initialise created gadgets */
  27. static void
  28. InitGadget(UWORD num, LONG tagtype, LONG tagvalue)
  29. {
  30.     GT_SetGadgetAttrs(HelpGadgets[num], HelpWnd, NULL, tagtype, tagvalue, TAG_DONE);
  31. }
  32.  
  33. /* show our help window */
  34. BOOL
  35. ShowWindow()
  36. {
  37.     static char    title[80];
  38.  
  39.     WBenchToFront();
  40.     if (HelpWnd)        /* already open... */
  41.     {
  42.         WindowToFront(HelpWnd);
  43.         return TRUE;
  44.     }
  45.  
  46.     if (SetupScreen())    /* try to get lock on WB */
  47.         return FALSE;
  48.  
  49.     strcpy(title, "Yak 1.0: HotKey=");
  50.     strcat(title, hk[HK_POPKEY].key);
  51.     HelpWdt = title;
  52.  
  53.     if (!OpenHelpWindow())    /* like the name says... */
  54.     {
  55.         UWORD    i;
  56.  
  57.         for (i = 0; i < NUM_TOGGLES; i++)
  58.             InitGadget(toggledata[i].gadid,
  59.                    GTCB_Checked,
  60.                    toggles[i]); 
  61.  
  62.         InitGadget(GDX_hkListView, GTLV_Selected, n);
  63.         InitGadget(GDX_KeyStr, GTST_String, (LONG)hk[n].key);
  64.         InitGadget(GDX_Volume, GTSL_Level, click_volume);
  65.         InitGadget(GDX_DateFmt, GTMX_Active, datefmt);
  66.         InitGadget(GDX_PopCLIStr, GTST_String, (LONG)PopCommand);
  67.         InitGadget(GDX_ScrTONum, GTIN_Number, blanksecs);
  68.  
  69.         n = 0;
  70.         wndsigflag = 1 << HelpWnd->UserPort->mp_SigBit;
  71.         return TRUE;
  72.     }
  73.     CloseDownScreen();
  74.     return FALSE;
  75. }
  76.  
  77. /* hide our help window */
  78. void
  79. HideWindow()
  80. {
  81.     if (HelpWnd)
  82.     {
  83.         CloseHelpWindow();
  84.         CloseDownScreen();
  85.         wndsigflag = NULL;
  86.         HelpWnd = NULL;
  87.     }
  88. }
  89.  
  90. /* handle window events */
  91. LONG
  92. HandleIDCMP()
  93. {
  94.     struct IntuiMessage *msg;
  95.     struct Gadget   *gadget;
  96.     ULONG           class;
  97.     UWORD        code;
  98.  
  99.     while (msg = GT_GetIMsg(HelpWnd->UserPort))
  100.     {
  101.         class = msg->Class;
  102.         code = msg->Code;
  103.         gadget = (struct Gadget *)msg->IAddress;
  104.         GT_ReplyIMsg(msg);
  105.  
  106.  
  107.         if (class == CLOSEWINDOW)
  108.         {
  109.             HideWindow();
  110.             return HELP_OKAY;
  111.         }
  112.  
  113.         if (class == GADGETUP || class == GADGETDOWN)
  114.         {
  115.             switch (gadget->GadgetID)
  116.             {
  117.             case GD_KeyStr:
  118.             {    /* set new hotkey-string */
  119.                 char *newstr;
  120.  
  121.                 newstr = ((struct StringInfo *)gadget->SpecialInfo)->Buffer;
  122.                 if (!AddHotKey(newstr, n))
  123.                 {
  124.                     DisplayBeep(Scr);
  125.                     InitGadget(GDX_KeyStr, GTST_String, (LONG)hk[n].key);
  126.                 }
  127.             }
  128.             break;
  129.  
  130.             case GD_hkListView:
  131.                 n = code;
  132.                 InitGadget(GDX_KeyStr, GTST_String, (LONG)hk[n].key);
  133.                 break;
  134.  
  135.             case GD_Volume:
  136.                 click_volume = code;
  137.                 break;
  138.  
  139.             case GD_DateFmt:
  140.                 datefmt = code;
  141.                 break;
  142.  
  143.             case GD_TimeCheck:    /* toggle */
  144.                 instime ^= TRUE;
  145.                 break;
  146.  
  147.             case GD_DateCheck:    /* toggle */
  148.                 insdate ^= TRUE;
  149.                 break;
  150.  
  151.             case GD_DayCheck:    /* toggle */
  152.                 insday ^= TRUE;
  153.                 break;
  154.  
  155.             case GD_Hide:
  156.                 HideWindow();
  157.                 return HELP_OKAY;
  158.                 break;
  159.  
  160.             case GD_PopCLIStr:
  161.                 strcpy(PopCommand,
  162.                     ((struct StringInfo *)gadget->SpecialInfo)->Buffer
  163.                 );
  164.                 break;
  165.  
  166.             case GD_Quit:
  167.                 HideWindow();
  168.                 return HELP_QUIT;
  169.                 break;
  170.  
  171.             case GD_AutoCheck:    /* toggle */
  172.                 autopoint ^= TRUE;
  173.                 break;
  174.  
  175.             case GD_KeyActCheck:    /* toggle */
  176.                 keyactivate ^= TRUE;
  177.                 break;
  178.  
  179.             case GD_CTFCheck:    /* toggle */
  180.                 clicktofront ^= TRUE;
  181.                 break;
  182.  
  183.             case GD_CTBCheck:    /* toggle */
  184.                 clicktoback ^= TRUE;
  185.                 break;
  186.  
  187.             case GD_ScrCycleCheck:    /* toggle */
  188.                 screencycle ^= TRUE;
  189.                 break;
  190.  
  191.             case GD_MBlankCheck:    /* toggle */
  192.                 mouseblank ^= TRUE;
  193.                 mblankcount = mblanktimeout;
  194.                 break;
  195.  
  196.             case GD_ScrTONum:
  197.                 blanksecs = ((struct StringInfo *)gadget->SpecialInfo)->LongInt;
  198.                 blankcount = blanktimeout = blanksecs*10;
  199.                 break;
  200.  
  201.             } /* switch */
  202.         }
  203.         else if (class == REFRESHWINDOW)
  204.         {
  205.             GT_BeginRefresh(HelpWnd);
  206.             HelpRender();
  207.             GT_EndRefresh(HelpWnd, TRUE);
  208.         }
  209.         else if (class == IDCMP_CHANGEWINDOW)
  210.         {
  211.             HelpLeft = HelpWnd->LeftEdge;
  212.             HelpTop = HelpWnd->TopEdge;
  213.         }
  214.  
  215.     } /* while */
  216.  
  217.     return HELP_OKAY;
  218. }
  219.