home *** CD-ROM | disk | FTP | other *** search
/ Amiga Elysian Archive / AmigaElysianArchive.iso / comm / term33so.lha / HotkeyPanel.c < prev    next >
C/C++ Source or Header  |  1993-04-30  |  11KB  |  398 lines

  1. /*
  2. **    HotkeyPanel.c
  3. **
  4. **    Editing panel for hotkey configuration
  5. **
  6. **    Copyright © 1990-1993 by Olaf `Olsen' Barthel & MXM
  7. **        All Rights Reserved
  8. */
  9.  
  10. #include "termGlobal.h"
  11.  
  12. enum    {    GAD_TERMTOFRONT,GAD_BUFFERTOFRONT,GAD_SKIP,GAD_ABORT_AREXX,GAD_PRIORITY,
  13.         GAD_SOMEHOTKEYS,GAD_USE,GAD_LOAD,GAD_SAVE,GAD_CANCEL };
  14.  
  15. STATIC struct Gadget *
  16. CreateAllGadgets(struct Hotkeys *Hotkeys,struct Gadget **GadgetArray,struct Gadget **GadgetList)
  17. {
  18.     struct Gadget        *Gadget;
  19.     struct NewGadget     NewGadget;
  20.     LONG             Counter = 0;
  21.  
  22.     SZ_SizeSetup(Window -> WScreen,&UserFont,TRUE);
  23.  
  24.     memset(&NewGadget,0,sizeof(struct NewGadget));
  25.  
  26.     if(Gadget = CreateContext(GadgetList))
  27.     {
  28.         SZ_AddLeftOffset(SZ_LeftOffsetDelta(MSG_HOTKEYPANEL_TERM_SCREEN_TO_FRONT_GAD,MSG_HOTKEYPANEL_HOTKEYS_ENABLED_GAD));
  29.  
  30.         SZ_ResetMaxWidth();
  31.  
  32.         if(SZ_Width(STRING_KIND,NULL,30,NULL) > 140)
  33.             SZ_SetWidth(SZ_Width(STRING_KIND,NULL,30,NULL));
  34.         else
  35.             SZ_SetWidth(140);
  36.  
  37.         NewGadget . ng_GadgetText    = LocaleString(MSG_HOTKEYPANEL_TERM_SCREEN_TO_FRONT_GAD);
  38.         NewGadget . ng_GadgetID        = Counter;
  39.  
  40.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  41.             SZ_Adjust,    TRUE,
  42.             SZ_AutoWidth,    TRUE,
  43.  
  44.             GTST_MaxChars,    255,
  45.             GTST_String,    Hotkeys -> termScreenToFront,
  46.             GA_Immediate,    TRUE,
  47.         TAG_DONE);
  48.  
  49.         NewGadget . ng_GadgetText    = LocaleString(MSG_HOTKEYPANEL_BUFFER_SCREEN_TO_FRONT_GAD);
  50.         NewGadget . ng_GadgetID        = Counter;
  51.  
  52.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  53.             SZ_Adjust,    TRUE,
  54.             SZ_AutoWidth,    TRUE,
  55.  
  56.             GTST_MaxChars,    255,
  57.             GTST_String,    Hotkeys -> BufferScreenToFront,
  58.             GA_Immediate,    TRUE,
  59.         TAG_DONE);
  60.  
  61.         NewGadget . ng_GadgetText    = LocaleString(MSG_HOTKEYPANEL_SKIP_DIAL_ENTRY_GAD);
  62.         NewGadget . ng_GadgetID        = Counter;
  63.  
  64.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  65.             SZ_Adjust,    TRUE,
  66.             SZ_AutoWidth,    TRUE,
  67.             SZ_AlignExtra,    TRUE,
  68.  
  69.             GTST_MaxChars,    255,
  70.             GTST_String,    Hotkeys -> SkipDialEntry,
  71.             GA_Immediate,    TRUE,
  72.         TAG_DONE);
  73.  
  74.         NewGadget . ng_GadgetText    = LocaleString(MSG_HOTKEYPANEL_ABORT_AREXX_GAD);
  75.         NewGadget . ng_GadgetID        = Counter;
  76.  
  77.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  78.             SZ_Adjust,    TRUE,
  79.             SZ_AutoWidth,    TRUE,
  80.             SZ_AlignExtra,    TRUE,
  81.  
  82.             GTST_MaxChars,    255,
  83.             GTST_String,    Hotkeys -> AbortARexx,
  84.             GA_Immediate,    TRUE,
  85.         TAG_DONE);
  86.  
  87.         SZ_SetWidth(140);
  88.  
  89.         NewGadget . ng_GadgetText    = LocaleString(MSG_HOTKEYPANEL_COMMODITY_PRIORITY_GAD);
  90.         NewGadget . ng_GadgetID        = Counter;
  91.  
  92.         GadgetArray[Counter++] = Gadget = CreateGadget(SLIDER_KIND,Gadget,&NewGadget,
  93.             SZ_Adjust,        TRUE,
  94.             SZ_AutoWidth,        TRUE,
  95.             SZ_AlignExtra,        TRUE,
  96.  
  97.             GTSL_Min,        -128,
  98.             GTSL_Max,        127,
  99.             GTSL_Level,        Hotkeys -> CommodityPriority,
  100.             GTSL_LevelFormat,    "%4ld",
  101.             GTSL_MaxLevelLen,    4,
  102.         TAG_DONE);
  103.  
  104.         NewGadget . ng_GadgetText    = LocaleString(MSG_HOTKEYPANEL_HOTKEYS_ENABLED_GAD);
  105.         NewGadget . ng_GadgetID        = Counter;
  106.  
  107.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  108.             SZ_Adjust,    TRUE,
  109.             SZ_AutoWidth,    TRUE,
  110.  
  111.             GTCB_Checked,    Hotkeys -> HotkeysEnabled,
  112.         TAG_DONE);
  113.  
  114.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_GLOBAL_USE_GAD),0,NULL);
  115.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_GLOBAL_LOAD_GAD),0,NULL);
  116.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_GLOBAL_SAVE_GAD),0,NULL);
  117.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_GLOBAL_CANCEL_GAD),0,NULL);
  118.  
  119.         SZ_SetWidth(SZ_ResetMaxWidth());
  120.  
  121.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_USE_GAD);
  122.         NewGadget . ng_GadgetID        = Counter;
  123.         NewGadget . ng_Flags        = 0;
  124.  
  125.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  126.             SZ_Adjust,    TRUE,
  127.             SZ_AutoWidth,    TRUE,
  128.             SZ_AlignExtra,    TRUE,
  129.             SZ_AlignBottom,    TRUE,
  130.             SZ_GroupCount,    4,
  131.         TAG_DONE);
  132.  
  133.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_LOAD_GAD);
  134.         NewGadget . ng_GadgetID        = Counter;
  135.  
  136.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  137.             SZ_Adjust,    TRUE,
  138.             SZ_AutoWidth,    TRUE,
  139.             SZ_GroupNext,    TRUE,
  140.         TAG_DONE);
  141.  
  142.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_SAVE_GAD);
  143.         NewGadget . ng_GadgetID        = Counter;
  144.  
  145.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  146.             SZ_Adjust,    TRUE,
  147.             SZ_AutoWidth,    TRUE,
  148.             SZ_GroupNext,    TRUE,
  149.         TAG_DONE);
  150.  
  151.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_CANCEL_GAD);
  152.         NewGadget . ng_GadgetID        = Counter;
  153.  
  154.         GadgetArray[Counter] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  155.             SZ_Adjust,    TRUE,
  156.             SZ_AutoWidth,    TRUE,
  157.             SZ_GroupNext,    TRUE,
  158.         TAG_DONE);
  159.     }
  160.  
  161.     return(Gadget);
  162. }
  163.  
  164. BYTE
  165. HotkeyPanel(struct Hotkeys *Hotkeys)
  166. {
  167.     struct Hotkeys         PrivateHotkeys;
  168.     struct Window        *PanelWindow;
  169.     struct Gadget        *GadgetList = NULL;
  170.     struct Gadget        *GadgetArray[GAD_CANCEL + 1];
  171.  
  172.     struct FileRequester    *FileRequest;
  173.     UBYTE             DummyBuffer[MAX_FILENAME_LENGTH],
  174.                 *DummyChar;
  175.  
  176.     ULONG             OldCRC;
  177.  
  178.     OldCRC = DoCRC(Hotkeys,sizeof(struct Hotkeys));
  179.  
  180.     CopyMem(Hotkeys,&PrivateHotkeys,sizeof(struct Hotkeys));
  181.  
  182.     if(CreateAllGadgets(Hotkeys,GadgetArray,&GadgetList))
  183.     {
  184.         if(PanelWindow = OpenWindowTags(NULL,
  185.             WA_Left,    GetScreenLeft(Window) + (GetScreenWidth(Window) - SZ_GetWindowWidth()) / 2,
  186.             WA_Top,        GetScreenTop(Window) + (GetScreenHeight(Window) - SZ_GetWindowHeight())    / 2,
  187.             WA_Width,    SZ_GetWindowWidth(),
  188.             WA_Height,    SZ_GetWindowHeight(),
  189.  
  190.             WA_Activate,    TRUE,
  191.             WA_DragBar,    TRUE,
  192.             WA_DepthGadget,    TRUE,
  193.             WA_RMBTrap,    TRUE,
  194.             WA_DepthGadget,    TRUE,
  195.             WA_CloseGadget,    TRUE,
  196.             WA_CustomScreen,Window -> WScreen,
  197.  
  198.             WA_IDCMP,    IDCMP_GADGETDOWN | IDCMP_ACTIVEWINDOW | IDCMP_CLOSEWINDOW | IDCMP_RAWKEY | IDCMP_VANILLAKEY | STRINGIDCMP | SLIDERIDCMP | CHECKBOXIDCMP | BUTTONIDCMP,
  199.  
  200.             WA_Title,    LocaleString(MSG_HOTKEYPANEL_HOTKEY_PREFERENCES_TXT),
  201.         TAG_DONE))
  202.         {
  203.             struct IntuiMessage    *Massage;
  204.             ULONG             IClass,Code;
  205.             struct Gadget        *Gadget;
  206.             BYTE             Terminated = FALSE;
  207.  
  208.             GuideContext(CONTEXT_HOTKEYS);
  209.  
  210.             PushWindow(PanelWindow);
  211.  
  212.             AddGList(PanelWindow,GadgetList,(UWORD)-1,(UWORD)-1,NULL);
  213.             RefreshGList(GadgetList,PanelWindow,NULL,(UWORD)-1);
  214.             GT_RefreshWindow(PanelWindow,NULL);
  215.  
  216.             ActiveGadget = NULL;
  217.  
  218.             ClrSignal(SIG_BREAK);
  219.  
  220.             while(!Terminated)
  221.             {
  222.                 if(Wait(PORTMASK(PanelWindow -> UserPort) | SIG_BREAK) & SIG_BREAK)
  223.                 {
  224.                     CopyMem(&PrivateHotkeys,Hotkeys,sizeof(struct Hotkeys));
  225.  
  226.                     break;
  227.                 }
  228.  
  229.                 while(!Terminated && (Massage = (struct IntuiMessage *)GT_GetIMsg(PanelWindow -> UserPort)))
  230.                 {
  231.                     IClass    = Massage -> Class;
  232.                     Code    = Massage -> Code;
  233.                     Gadget    = (struct Gadget *)Massage -> IAddress;
  234.  
  235.                     GT_ReplyIMsg(Massage);
  236.  
  237.                     KeySelect(GadgetArray,GAD_CANCEL,Code,PanelWindow,&Gadget,&IClass,&Code);
  238.  
  239.                     if(IClass == IDCMP_GADGETDOWN)
  240.                     {
  241.                         if((Gadget -> GadgetType & GTYP_GTYPEMASK) == GTYP_STRGADGET)
  242.                             ActiveGadget = Gadget;
  243.                     }
  244.  
  245.                     if(IClass == IDCMP_ACTIVEWINDOW && ActiveGadget)
  246.                         ActivateGadget(ActiveGadget,PanelWindow,NULL);
  247.  
  248.                     if(IClass == IDCMP_CLOSEWINDOW)
  249.                     {
  250.                         CopyMem(&PrivateHotkeys,Hotkeys,sizeof(struct Hotkeys));
  251.  
  252.                         Terminated = TRUE;
  253.                     }
  254.  
  255.                     if(IClass == IDCMP_MOUSEMOVE)
  256.                         Hotkeys -> CommodityPriority = (WORD)Code;
  257.  
  258.                     if(IClass == IDCMP_GADGETUP)
  259.                     {
  260.                         switch(Gadget -> GadgetID)
  261.                         {
  262.                             case GAD_TERMTOFRONT:
  263.  
  264.                                 strcpy(Hotkeys -> termScreenToFront,SZ_GetString(Gadget));
  265.                                 break;
  266.  
  267.                             case GAD_BUFFERTOFRONT:
  268.  
  269.                                 strcpy(Hotkeys -> BufferScreenToFront,SZ_GetString(Gadget));
  270.                                 break;
  271.  
  272.                             case GAD_SKIP:
  273.  
  274.                                 strcpy(Hotkeys -> SkipDialEntry,SZ_GetString(Gadget));
  275.                                 break;
  276.  
  277.                             case GAD_ABORT_AREXX:
  278.  
  279.                                 strcpy(Hotkeys -> AbortARexx,SZ_GetString(Gadget));
  280.                                 break;
  281.  
  282.                             case GAD_LOAD:
  283.  
  284.                                 strcpy(DummyBuffer,LastKeys);
  285.  
  286.                                 DummyChar = PathPart(DummyBuffer);
  287.  
  288.                                 *DummyChar = 0;
  289.  
  290.                                 BlockWindow(PanelWindow);
  291.  
  292.                                 if(FileRequest = GetFile(LocaleString(MSG_HOTKEYPANEL_LOAD_HOTKEYS_TXT),DummyBuffer,FilePart(LastKeys),DummyBuffer,"#?.prefs",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_LOAD_TXT),TRUE))
  293.                                 {
  294.                                     if(!LoadHotkeys(DummyBuffer,Hotkeys))
  295.                                         MyEasyRequest(Window,LocaleString(MSG_HOTKEYPANEL_COULD_NOT_LOAD_HOTKEYS_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT),DummyBuffer);
  296.                                     else
  297.                                     {
  298.                                         strcpy(LastKeys,DummyBuffer);
  299.  
  300.                                         GT_SetGadgetAttrs(GadgetArray[GAD_TERMTOFRONT],PanelWindow,NULL,
  301.                                             GTST_String,Hotkeys -> termScreenToFront,
  302.                                         TAG_DONE);
  303.  
  304.                                         GT_SetGadgetAttrs(GadgetArray[GAD_BUFFERTOFRONT],PanelWindow,NULL,
  305.                                             GTST_String,Hotkeys -> BufferScreenToFront,
  306.                                         TAG_DONE);
  307.  
  308.                                         GT_SetGadgetAttrs(GadgetArray[GAD_SKIP],PanelWindow,NULL,
  309.                                             GTST_String,Hotkeys -> SkipDialEntry,
  310.                                         TAG_DONE);
  311.  
  312.                                         GT_SetGadgetAttrs(GadgetArray[GAD_ABORT_AREXX],PanelWindow,NULL,
  313.                                             GTST_String,Hotkeys -> AbortARexx,
  314.                                         TAG_DONE);
  315.  
  316.                                         GT_SetGadgetAttrs(GadgetArray[GAD_PRIORITY],PanelWindow,NULL,
  317.                                             GTSL_Level,Hotkeys -> CommodityPriority,
  318.                                         TAG_DONE);
  319.  
  320.                                         GT_SetGadgetAttrs(GadgetArray[GAD_PRIORITY],PanelWindow,NULL,
  321.                                             GTCB_Checked,Hotkeys -> HotkeysEnabled,
  322.                                         TAG_DONE);
  323.  
  324.                                         OldCRC = DoCRC(Hotkeys,sizeof(struct Hotkeys));
  325.  
  326.                                         HotkeysChanged = FALSE;
  327.                                     }
  328.                                 }
  329.  
  330.                                 ReleaseWindow(PanelWindow);
  331.  
  332.                                 break;
  333.  
  334.                             case GAD_SAVE:
  335.  
  336.                                 strcpy(DummyBuffer,LastKeys);
  337.  
  338.                                 DummyChar = PathPart(DummyBuffer);
  339.  
  340.                                 *DummyChar = 0;
  341.  
  342.                                 BlockWindow(PanelWindow);
  343.  
  344.                                 Hotkeys -> HotkeysEnabled = SZ_GetChecked(GadgetArray[GAD_SOMEHOTKEYS]);
  345.  
  346.                                 if(FileRequest = GetFile(LocaleString(MSG_HOTKEYPANEL_SAVE_HOTKEYS_TXT),DummyBuffer,FilePart(LastKeys),DummyBuffer,"#?.prefs",TRUE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SAVE_TXT),TRUE))
  347.                                 {
  348.                                     if(!WriteIFFData(DummyBuffer,Hotkeys,sizeof(struct Hotkeys),ID_HOTK))
  349.                                         MyEasyRequest(Window,LocaleString(MSG_HOTKEYPANEL_COULD_NOT_SAVE_HOTKEYS_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT),DummyBuffer);
  350.                                     else
  351.                                     {
  352.                                         strcpy(LastKeys,DummyBuffer);
  353.  
  354.                                         OldCRC = DoCRC(Hotkeys,sizeof(struct Hotkeys));
  355.  
  356.                                         HotkeysChanged = FALSE;
  357.                                     }
  358.                                 }
  359.  
  360.                                 ReleaseWindow(PanelWindow);
  361.  
  362.                                 break;
  363.  
  364.                             case GAD_USE:
  365.  
  366.                                 Terminated = TRUE;
  367.  
  368.                                 Hotkeys -> HotkeysEnabled = SZ_GetChecked(GadgetArray[GAD_SOMEHOTKEYS]);
  369.  
  370.                                 break;
  371.  
  372.                             case GAD_CANCEL:
  373.  
  374.                                 Terminated = TRUE;
  375.  
  376.                                 CopyMem(&PrivateHotkeys,Hotkeys,sizeof(struct Hotkeys));
  377.  
  378.                                 break;
  379.                         }
  380.                     }
  381.                 }
  382.             }
  383.  
  384.             RemoveGList(PanelWindow,GadgetList,(UWORD)-1);
  385.  
  386.             PopWindow();
  387.  
  388.             CloseWindow(PanelWindow);
  389.         }
  390.     }
  391.  
  392.     FreeGadgets(GadgetList);
  393.  
  394.     HotkeysChanged |= (OldCRC != DoCRC(Hotkeys,sizeof(struct Hotkeys)));
  395.  
  396.     return((BYTE)memcmp(&PrivateHotkeys,Hotkeys,sizeof(struct Hotkeys)));
  397. }
  398.