home *** CD-ROM | disk | FTP | other *** search
/ The CDPD Public Domain Collection for CDTV 3 / CDPDIII.bin / pd / commodities / yak / source / help.c < prev    next >
C/C++ Source or Header  |  1993-04-22  |  7KB  |  334 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 <dos/dosextens.h>
  11. #include <libraries/commodities.h>
  12. #include <intuition/intuition.h>
  13. #include <libraries/gadtools.h>
  14. #include <proto/exec.h>
  15. #include <proto/dos.h>
  16. #include <proto/intuition.h>
  17. #include <proto/gadtools.h>
  18. #include <proto/graphics.h>
  19. #include <proto/commodities.h>
  20. #include <string.h>
  21.  
  22. #include "yak.h"
  23. #include "popup.h"
  24. #include "version.h"
  25.  
  26. #ifndef GTMN_NewLookMenus
  27. #define GTMN_NewLookMenus GT_TagBase+67
  28. #endif
  29.  
  30. #ifndef WA_NewLookMenus
  31. #define WA_NewLookMenus WA_Dummy+0x30
  32. #endif
  33.  
  34. #include "popup.c"    /* NB!!! compile with NO MULTI-INCLUDES */
  35.  
  36. /* static protos */
  37. static void __regargs InitGadget(UWORD num, LONG tagtype, LONG tagvalue);
  38. static void InitGadgets(void);
  39. static void __regargs NewPattern(UWORD gdx, UWORD n, struct Gadget *gad);
  40.  
  41. static UWORD    n;        /* currently shown hotkey */
  42.  
  43. /* menu numbers */
  44. #define LOAD 0
  45. #define SAVE 1
  46. #define HIDE 2
  47. #define QUIT 3
  48.  
  49. /* initialise individual gadget */
  50. static void __regargs
  51. InitGadget(UWORD num, LONG tagtype, LONG tagvalue)
  52. {
  53.     GT_SetGadgetAttrs(HelpGadgets[num], HelpWnd, NULL, tagtype, tagvalue, TAG_DONE);
  54. }
  55.  
  56. /* initialise all gadgets */
  57. static void
  58. InitGadgets()
  59. {
  60.     UWORD    i;
  61.  
  62.     for (i = 0; i < NUM_TOGGLES; i++)
  63.         if (toggles[i].gadid != -1)
  64.             InitGadget(toggles[i].gadid,
  65.                    GTCB_Checked,
  66.                    toggles[i].pos); 
  67.  
  68.     InitGadget(GDX_MBMethod, GTCY_Active, mouseblank);
  69.     InitGadget(GDX_hkListView, GTLV_Selected, n);
  70.     InitGadget(GDX_KeyStr, GTST_String, (LONG)hk[n].key);
  71.     InitGadget(GDX_PopCLIStr, GTST_String, (LONG)PopCommand);
  72.     InitGadget(GDX_ScrTONum, GTIN_Number, blanksecs);
  73.     InitGadget(GDX_MouseTONum, GTIN_Number, mblanksecs);
  74.     InitGadget(GDX_ClickVol, GTIN_Number, click_volume);
  75.     InitGadget(GDX_DateFmt, GTST_String, (LONG)DateFormat);
  76.     InitGadget(GDX_AutoPat, GTST_String, (LONG)patterns[YP_AUTOSCR_PAT].patstr);
  77.     InitGadget(GDX_ClickPat, GTST_String, (LONG)patterns[YP_CLICKSCR_PAT].patstr);
  78.     InitGadget(GDX_PopPat, GTST_String, (LONG)patterns[YP_POPWIN_PAT].patstr);
  79.     InitGadget(GDX_ClickWinPat, GTST_String, (LONG)patterns[YP_CLICKWIN_PAT].patstr);
  80. }
  81.  
  82.  
  83. /* show our help window */
  84. BOOL
  85. ShowWindow()
  86. {
  87.     static char    title[80];
  88.  
  89.     WBenchToFront();
  90.     if (HelpWnd)        /* already open... */
  91.     {
  92.         WindowToFront(HelpWnd);
  93.         return TRUE;
  94.     }
  95.  
  96.     if (SetupScreen())    /* try to get lock on WB */
  97.         return FALSE;
  98.  
  99.     strcpy(title, VERSION_NAME ": HotKey=<");
  100.     strcat(title, hk[HK_POPKEY].key);
  101.     strcat(title, ">");
  102.     HelpWdt = title;
  103.  
  104.     if (!OpenHelpWindow())    /* like the name says... */
  105.     {
  106.         InitGadgets();
  107.         wndsigflag = 1 << HelpWnd->UserPort->mp_SigBit;
  108.         return TRUE;
  109.     }
  110.     CloseDownScreen();
  111.     return FALSE;
  112. }
  113.  
  114. /* hide our help window */
  115. void
  116. HideWindow()
  117. {
  118.     if (HelpWnd)
  119.     {
  120.         CloseHelpWindow();
  121.         CloseDownScreen();
  122.         wndsigflag = NULL;
  123.         HelpWnd = NULL;
  124.     }
  125. }
  126.  
  127.  
  128. /* handle pattern string-gadget */
  129. static void __regargs
  130. NewPattern(UWORD gdx, UWORD n, struct Gadget *gad)
  131. {
  132.     char *newpatstr;
  133.  
  134.     newpatstr = GetString(gad);
  135.     if (!InitPattern(newpatstr, n))
  136.     {
  137.         DisplayBeep(Scr);
  138.         InitGadget(gdx, GTST_String, (LONG)patterns[n].patstr);
  139.     }
  140. }
  141.  
  142. /* handle window events */
  143. LONG
  144. HandleIDCMP()
  145. {
  146.     struct IntuiMessage *msg;
  147.     struct Gadget   *gadget;
  148.     ULONG           class;
  149.     UWORD        code;
  150.     LONG        num;
  151.  
  152.     while (msg = GT_GetIMsg(HelpWnd->UserPort))
  153.     {
  154.         class = msg->Class;
  155.         code = msg->Code;
  156.         gadget = (struct Gadget *)msg->IAddress;
  157.         GT_ReplyIMsg(msg);
  158.  
  159.         switch (class)
  160.         {
  161.         case CLOSEWINDOW:
  162.             HideWindow();
  163.             return HELP_OKAY;
  164.  
  165.         case GADGETUP:
  166.         case GADGETDOWN:
  167.             switch (gadget->GadgetID)
  168.             {
  169.             case GD_KeyStr:
  170.             {    /* set new hotkey-string */
  171.                 char *newstr;
  172.  
  173.                 newstr = GetString(gadget);
  174.                 if (!AddHotKey(newstr, n))
  175.                 {
  176.                     DisplayBeep(Scr);
  177.                     InitGadget(GDX_KeyStr, GTST_String, (LONG)hk[n].key);
  178.                 }
  179.             }
  180.             break;
  181.  
  182.             case GD_hkListView:
  183.                 n = code;
  184.                 InitGadget(GDX_KeyStr, GTST_String, (LONG)hk[n].key);
  185.                 break;
  186.  
  187.             case GD_PopCLIStr:
  188.                 strcpy(PopCommand, GetString(gadget));
  189.                 break;
  190.  
  191.             case GD_DateFmt:
  192.                 strcpy(DateFormat, GetString(gadget));
  193.                 break;
  194.  
  195.             case GD_AutoPat:
  196.                 NewPattern(GDX_AutoPat, YP_AUTOSCR_PAT, gadget);
  197.                 break;
  198.  
  199.             case GD_ClickPat:
  200.                 NewPattern(GDX_ClickPat, YP_CLICKSCR_PAT, gadget);
  201.                 break;
  202.  
  203.             case GD_PopPat:
  204.                 NewPattern(GDX_PopPat, YP_POPWIN_PAT, gadget);
  205.                 break;
  206.  
  207.             case GD_ClickWinPat:
  208.                 NewPattern(GDX_ClickWinPat, YP_CLICKWIN_PAT, gadget);
  209.                 break;
  210.  
  211.             case GD_Hide:
  212.                 HideWindow();
  213.                 return HELP_OKAY;
  214.  
  215.             case GD_Quit:
  216.                 HideWindow();
  217.                 return HELP_QUIT;
  218.  
  219.             case GD_AutoCheck:    /* toggle */
  220.                 autopoint ^= TRUE;
  221.                 break;
  222.  
  223.             case GD_AutoPopCheck:    /* toggle */
  224.                 autopop ^= TRUE;
  225.                 break;
  226.  
  227.             case GD_KeyActCheck:    /* toggle */
  228.                 keyactivate ^= TRUE;
  229.                 break;
  230.  
  231.             case GD_CTFCheck:    /* toggle */
  232.                 clicktofront ^= TRUE;
  233.                 break;
  234.  
  235.             case GD_CTBCheck:    /* toggle */
  236.                 clicktoback ^= TRUE;
  237.                 break;
  238.  
  239.             case GD_ScrCycleCheck:    /* toggle */
  240.                 screencycle ^= TRUE;
  241.                 break;
  242.  
  243.             case GD_WildStarCheck:    /* toggle */
  244.                 wildstar ^= TRUE;
  245.                 if (wildstar) WILDSTARON; else WILDSTAROFF;
  246.                 break;
  247.  
  248.             case GD_ScrActCheck:    /* toggle */
  249.                 scractivate ^= TRUE;
  250.                 break;
  251.  
  252.             case GD_RMBActCheck:    /* toggle */
  253.                 rmbactivate ^= TRUE;
  254.                 break;
  255.  
  256.             case GD_ScrTONum:
  257.                 num = GetNumber(gadget);
  258.                 if (num >= 0) {
  259.                     blanksecs = num;
  260.                     blankcount = blanktimeout = blanksecs*10;
  261.                 } else {
  262.                     InitGadget(GDX_ScrTONum, GTIN_Number, blanksecs);
  263.                     DisplayBeep(HelpWnd->WScreen);
  264.                 }
  265.                 break;
  266.  
  267.             case GD_MouseTONum:
  268.                 num = GetNumber(gadget);
  269.                 if (num >= 0) {
  270.                     mblanksecs = num;
  271.                     mblankcount = mblanktimeout = mblanksecs*10;
  272.                 } else {
  273.                     InitGadget(GDX_MouseTONum, GTIN_Number, mblanksecs);
  274.                     DisplayBeep(HelpWnd->WScreen);
  275.                 }
  276.                 break;
  277.  
  278.             case GD_ClickVol:
  279.                 num = GetNumber(gadget);
  280.                 if (num >= 0 && num <= 64) {
  281.                     click_volume = num;
  282.                 } else {
  283.                     InitGadget(GDX_ClickVol, GTIN_Number, click_volume);
  284.                     DisplayBeep(HelpWnd->WScreen);
  285.                 }
  286.                 break;
  287.  
  288.             case GD_MBMethod:
  289.                 mouseblank = code;
  290.                 mblankcount = mblanktimeout;
  291.                 break;
  292.  
  293.             } /* switch (gadget->GadgetID) */
  294.             break;
  295.  
  296.         case REFRESHWINDOW:
  297.             GT_BeginRefresh(HelpWnd);
  298. /*            HelpRender();*/
  299.             GT_EndRefresh(HelpWnd, TRUE);
  300.             break;
  301.  
  302.         case IDCMP_MENUPICK:
  303.             while (code != MENUNULL) 
  304.             {
  305.                 struct MenuItem *item = ItemAddress(HelpMenus, code);
  306.  
  307.                 switch (ITEMNUM(code))
  308.                 {
  309.                 case LOAD:
  310.                     LoadSettings(CONFIG_FILE);
  311.                     InitGadgets();
  312.                     break;
  313.                 case SAVE:
  314.                     SaveSettings(CONFIG_FILE);
  315.                     break;
  316.                 case HIDE:
  317.                     HideWindow();
  318.                     return HELP_OKAY;
  319.                 case QUIT:
  320.                     HideWindow();
  321.                     return HELP_QUIT;
  322.                 }
  323.                 code = item->NextSelect;
  324.  
  325.             } /* while more menuchoices */
  326.             break;
  327.  
  328.         } /* switch (class) */
  329.  
  330.     } /* while more messages */
  331.  
  332.     return HELP_OKAY;
  333. }
  334.