home *** CD-ROM | disk | FTP | other *** search
- /*
- * help.c
- *
- * Opens help/settings window and handles events.
- * For yak.
- *
- * Martin W. Scott, 12-Sep-92.
- */
- #include <exec/types.h>
- #include <libraries/commodities.h>
- #include <intuition/intuition.h>
- #include <libraries/gadtools.h>
- #include <proto/exec.h>
- #include <proto/intuition.h>
- #include <proto/gadtools.h>
- #include <proto/graphics.h>
- #include <proto/commodities.h>
- #include <string.h>
-
- #include "yak.h"
- #include "popup.h"
-
- LONG wndsigflag;
- static UWORD n; /* currently shown hotkey */
-
- /* initialise created gadgets */
- static void
- InitGadget(UWORD num, LONG tagtype, LONG tagvalue)
- {
- GT_SetGadgetAttrs(HelpGadgets[num], HelpWnd, NULL, tagtype, tagvalue, TAG_DONE);
- }
-
- /* show our help window */
- BOOL
- ShowWindow()
- {
- static char title[80];
-
- WBenchToFront();
- if (HelpWnd) /* already open... */
- {
- WindowToFront(HelpWnd);
- return TRUE;
- }
-
- if (SetupScreen()) /* try to get lock on WB */
- return FALSE;
-
- strcpy(title, "Yak 1.0: HotKey=");
- strcat(title, hk[HK_POPKEY].key);
- HelpWdt = title;
-
- if (!OpenHelpWindow()) /* like the name says... */
- {
- UWORD i;
-
- for (i = 0; i < NUM_TOGGLES; i++)
- InitGadget(toggledata[i].gadid,
- GTCB_Checked,
- toggles[i]);
-
- InitGadget(GDX_hkListView, GTLV_Selected, n);
- InitGadget(GDX_KeyStr, GTST_String, (LONG)hk[n].key);
- InitGadget(GDX_Volume, GTSL_Level, click_volume);
- InitGadget(GDX_DateFmt, GTMX_Active, datefmt);
- InitGadget(GDX_PopCLIStr, GTST_String, (LONG)PopCommand);
- InitGadget(GDX_ScrTONum, GTIN_Number, blanksecs);
-
- n = 0;
- wndsigflag = 1 << HelpWnd->UserPort->mp_SigBit;
- return TRUE;
- }
- CloseDownScreen();
- return FALSE;
- }
-
- /* hide our help window */
- void
- HideWindow()
- {
- if (HelpWnd)
- {
- CloseHelpWindow();
- CloseDownScreen();
- wndsigflag = NULL;
- HelpWnd = NULL;
- }
- }
-
- /* handle window events */
- LONG
- HandleIDCMP()
- {
- struct IntuiMessage *msg;
- struct Gadget *gadget;
- ULONG class;
- UWORD code;
-
- while (msg = GT_GetIMsg(HelpWnd->UserPort))
- {
- class = msg->Class;
- code = msg->Code;
- gadget = (struct Gadget *)msg->IAddress;
- GT_ReplyIMsg(msg);
-
-
- if (class == CLOSEWINDOW)
- {
- HideWindow();
- return HELP_OKAY;
- }
-
- if (class == GADGETUP || class == GADGETDOWN)
- {
- switch (gadget->GadgetID)
- {
- case GD_KeyStr:
- { /* set new hotkey-string */
- char *newstr;
-
- newstr = ((struct StringInfo *)gadget->SpecialInfo)->Buffer;
- if (!AddHotKey(newstr, n))
- {
- DisplayBeep(Scr);
- InitGadget(GDX_KeyStr, GTST_String, (LONG)hk[n].key);
- }
- }
- break;
-
- case GD_hkListView:
- n = code;
- InitGadget(GDX_KeyStr, GTST_String, (LONG)hk[n].key);
- break;
-
- case GD_Volume:
- click_volume = code;
- break;
-
- case GD_DateFmt:
- datefmt = code;
- break;
-
- case GD_TimeCheck: /* toggle */
- instime ^= TRUE;
- break;
-
- case GD_DateCheck: /* toggle */
- insdate ^= TRUE;
- break;
-
- case GD_DayCheck: /* toggle */
- insday ^= TRUE;
- break;
-
- case GD_Hide:
- HideWindow();
- return HELP_OKAY;
- break;
-
- case GD_PopCLIStr:
- strcpy(PopCommand,
- ((struct StringInfo *)gadget->SpecialInfo)->Buffer
- );
- break;
-
- case GD_Quit:
- HideWindow();
- return HELP_QUIT;
- break;
-
- case GD_AutoCheck: /* toggle */
- autopoint ^= TRUE;
- break;
-
- case GD_KeyActCheck: /* toggle */
- keyactivate ^= TRUE;
- break;
-
- case GD_CTFCheck: /* toggle */
- clicktofront ^= TRUE;
- break;
-
- case GD_CTBCheck: /* toggle */
- clicktoback ^= TRUE;
- break;
-
- case GD_ScrCycleCheck: /* toggle */
- screencycle ^= TRUE;
- break;
-
- case GD_MBlankCheck: /* toggle */
- mouseblank ^= TRUE;
- mblankcount = mblanktimeout;
- break;
-
- case GD_ScrTONum:
- blanksecs = ((struct StringInfo *)gadget->SpecialInfo)->LongInt;
- blankcount = blanktimeout = blanksecs*10;
- break;
-
- } /* switch */
- }
- else if (class == REFRESHWINDOW)
- {
- GT_BeginRefresh(HelpWnd);
- HelpRender();
- GT_EndRefresh(HelpWnd, TRUE);
- }
- else if (class == IDCMP_CHANGEWINDOW)
- {
- HelpLeft = HelpWnd->LeftEdge;
- HelpTop = HelpWnd->TopEdge;
- }
-
- } /* while */
-
- return HELP_OKAY;
- }
-