home *** CD-ROM | disk | FTP | other *** search
/ BCI NET 2 / BCI NET 2.iso / archives / programming / source / term43-source.lha / Extras / Source / term-Source.lha / HotkeyPanel.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-02-07  |  7.8 KB  |  347 lines

  1. /*
  2. **    HotkeyPanel.c
  3. **
  4. **    Editing panel for hotkey configuration
  5. **
  6. **    Copyright © 1990-1995 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. */
  9.  
  10. #include "termGlobal.h"
  11.  
  12. enum    {    GAD_TERMTOFRONT=1,GAD_BUFFERTOFRONT,GAD_SKIPDIAL,GAD_ABORTAREXX,
  13.         GAD_PRIORITY,GAD_HOTKEYS,GAD_USE,GAD_LOAD,GAD_SAVE,GAD_CANCEL
  14.     };
  15.  
  16. STATIC BOOLEAN __regargs
  17. GoodCode(STRPTR Code)
  18. {
  19.     IX Expression;
  20.  
  21.     return((BOOLEAN)(ParseIX(Code,&Expression) == 0));
  22. }
  23.  
  24. BYTE __regargs
  25. HotkeyPanel(struct Hotkeys *Hotkeys)
  26. {
  27.     struct LayoutHandle    *Handle;
  28.     struct Hotkeys         PrivateHotkeys;
  29.     ULONG             OldCRC;
  30.  
  31.     OldCRC = DoCRC(Hotkeys,sizeof(struct Hotkeys));
  32.  
  33.     CopyMem(Hotkeys,&PrivateHotkeys,sizeof(struct Hotkeys));
  34.  
  35.     if(Handle = LT_CreateHandleTags(Window -> WScreen,
  36.         LH_LocaleHook,    &LocaleHook,
  37.         LH_ExitFlush,    FALSE,
  38.     TAG_DONE))
  39.     {
  40.         struct Window *PanelWindow;
  41.  
  42.         LT_New(Handle,
  43.             LA_Type,    VERTICAL_KIND,
  44.         TAG_DONE);
  45.         {
  46.             LT_New(Handle,
  47.                 LA_Type,    VERTICAL_KIND,
  48.                 LA_LabelID,    MSG_V36_0083,
  49.             TAG_DONE);
  50.             {
  51.                 LT_New(Handle,
  52.                     LA_Type,    STRING_KIND,
  53.                     LA_LabelID,    MSG_HOTKEYPANEL_TERM_SCREEN_TO_FRONT_GAD,
  54.                     LA_STRPTR,    Hotkeys -> termScreenToFront,
  55.                     LA_Chars,    30,
  56.                     GTST_MaxChars,    255,
  57.                     LA_ID,        GAD_TERMTOFRONT,
  58.                 TAG_DONE);
  59.  
  60.                 LT_New(Handle,
  61.                     LA_Type,    STRING_KIND,
  62.                     LA_LabelID,    MSG_HOTKEYPANEL_BUFFER_SCREEN_TO_FRONT_GAD,
  63.                     LA_STRPTR,    Hotkeys -> BufferScreenToFront,
  64.                     GTST_MaxChars,    255,
  65.                     LA_ID,        GAD_BUFFERTOFRONT,
  66.                 TAG_DONE);
  67.  
  68.                 LT_New(Handle,
  69.                     LA_Type,    STRING_KIND,
  70.                     LA_LabelID,    MSG_HOTKEYPANEL_SKIP_DIAL_ENTRY_GAD,
  71.                     LA_STRPTR,    Hotkeys -> SkipDialEntry,
  72.                     GTST_MaxChars,    255,
  73.                     LA_ID,        GAD_SKIPDIAL,
  74.                 TAG_DONE);
  75.  
  76.                 LT_New(Handle,
  77.                     LA_Type,    STRING_KIND,
  78.                     LA_LabelID,    MSG_HOTKEYPANEL_ABORT_AREXX_GAD,
  79.                     LA_STRPTR,    Hotkeys -> AbortARexx,
  80.                     GTST_MaxChars,    255,
  81.                     LA_ID,        GAD_ABORTAREXX,
  82.                 TAG_DONE);
  83.  
  84.                 LT_EndGroup(Handle);
  85.             }
  86.  
  87.             LT_New(Handle,
  88.                 LA_Type,        VERTICAL_KIND,
  89.                 LA_LabelID,        MSG_V36_0084,
  90.             TAG_DONE);
  91.             {
  92.                 LT_New(Handle,
  93.                     LA_Type,        SliderType,
  94.                     LA_LabelID,        MSG_HOTKEYPANEL_COMMODITY_PRIORITY_GAD,
  95.                     LA_BYTE,        &Hotkeys -> CommodityPriority,
  96.                     GTSL_Min,        -128,
  97.                     GTSL_Max,        127,
  98.                     GTSL_LevelFormat,    "%4ld",
  99.                     LA_Chars,        16,
  100.                     LA_ID,            GAD_PRIORITY,
  101.                 TAG_DONE);
  102.  
  103.                 LT_New(Handle,
  104.                     LA_Type,    CHECKBOX_KIND,
  105.                     LA_LabelID,    MSG_HOTKEYPANEL_HOTKEYS_ENABLED_GAD,
  106.                     LA_BYTE,    &Hotkeys -> HotkeysEnabled,
  107.                     LA_ID,        GAD_HOTKEYS,
  108.                 TAG_DONE);
  109.  
  110.                 LT_EndGroup(Handle);
  111.             }
  112.  
  113.             LT_New(Handle,
  114.                 LA_Type,VERTICAL_KIND,
  115.             TAG_DONE);
  116.             {
  117.                 LT_New(Handle,
  118.                     LA_Type,    XBAR_KIND,
  119.                     LAXB_FullSize,    TRUE,
  120.                 TAG_DONE);
  121.  
  122.                 LT_EndGroup(Handle);
  123.             }
  124.  
  125.             LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  126.                 LAGR_SameSize,    TRUE,
  127.                 LAGR_Spread,    TRUE,
  128.             TAG_DONE);
  129.             {
  130.                 LT_New(Handle,
  131.                     LA_Type,    BUTTON_KIND,
  132.                     LA_LabelID,    MSG_GLOBAL_USE_GAD,
  133.                     LA_ID,        GAD_USE,
  134.                     LABT_ReturnKey,    TRUE,
  135.                     LABT_ExtraFat,    TRUE,
  136.                 TAG_DONE);
  137.  
  138.                 LT_New(Handle,
  139.                     LA_Type,    BUTTON_KIND,
  140.                     LA_LabelID,    MSG_GLOBAL_LOAD_GAD,
  141.                     LA_ID,        GAD_LOAD,
  142.                     LABT_ExtraFat,    TRUE,
  143.                 TAG_DONE);
  144.  
  145.                 LT_New(Handle,
  146.                     LA_Type,    BUTTON_KIND,
  147.                     LA_LabelID,    MSG_GLOBAL_SAVE_GAD,
  148.                     LA_ID,        GAD_SAVE,
  149.                     LABT_ExtraFat,    TRUE,
  150.                 TAG_DONE);
  151.  
  152.                 LT_New(Handle,
  153.                     LA_Type,    BUTTON_KIND,
  154.                     LA_LabelID,    MSG_GLOBAL_CANCEL_GAD,
  155.                     LA_ID,        GAD_CANCEL,
  156.                     LABT_EscKey,    TRUE,
  157.                     LABT_ExtraFat,    TRUE,
  158.                 TAG_DONE);
  159.  
  160.                 LT_EndGroup(Handle);
  161.             }
  162.  
  163.             LT_EndGroup(Handle);
  164.         }
  165.  
  166.         if(PanelWindow = LT_Layout(Handle,LocaleString(MSG_HOTKEYPANEL_HOTKEY_PREFERENCES_TXT),NULL,0,0,IDCMP_CLOSEWINDOW,0,
  167.             LAWN_HelpHook,        &GuideHook,
  168.             LAWN_Parent,        Window,
  169.             WA_DepthGadget,        TRUE,
  170.             WA_CloseGadget,        TRUE,
  171.             WA_DragBar,        TRUE,
  172.             WA_RMBTrap,        TRUE,
  173.             WA_Activate,        TRUE,
  174.         TAG_DONE))
  175.         {
  176.             struct IntuiMessage    *Message;
  177.             BOOLEAN             Done = FALSE;
  178.             ULONG             MsgClass,
  179.                          MsgQualifier;
  180.             UWORD             MsgCode;
  181.             struct Gadget        *MsgGadget;
  182.  
  183.             struct FileRequester    *FileRequest;
  184.             UBYTE             DummyBuffer[MAX_FILENAME_LENGTH],
  185.                         *DummyChar;
  186.  
  187.             STRPTR             String;
  188.  
  189.             GuideContext(CONTEXT_HOTKEYS);
  190.  
  191.             PushWindow(PanelWindow);
  192.  
  193.             do
  194.             {
  195.                 if(Wait(PORTMASK(PanelWindow -> UserPort) | SIG_BREAK) & SIG_BREAK)
  196.                 {
  197.                     CopyMem(&PrivateHotkeys,Hotkeys,sizeof(struct Hotkeys));
  198.  
  199.                     break;
  200.                 }
  201.  
  202.                 while(Message = (struct IntuiMessage *)GT_GetIMsg(PanelWindow -> UserPort))
  203.                 {
  204.                     MsgClass    = Message -> Class;
  205.                     MsgQualifier    = Message -> Qualifier;
  206.                     MsgCode        = Message -> Code;
  207.                     MsgGadget    = (struct Gadget *)Message -> IAddress;
  208.  
  209.                     GT_ReplyIMsg(Message);
  210.  
  211.                     LT_HandleInput(Handle,MsgQualifier,&MsgClass,&MsgCode,&MsgGadget);
  212.  
  213.                     if(MsgClass == IDCMP_CLOSEWINDOW)
  214.                     {
  215.                         CopyMem(&PrivateHotkeys,Hotkeys,sizeof(struct Hotkeys));
  216.  
  217.                         Done = TRUE;
  218.                     }
  219.  
  220.                     if(MsgClass == IDCMP_GADGETUP)
  221.                     {
  222.                         switch(MsgGadget -> GadgetID)
  223.                         {
  224.                             case GAD_TERMTOFRONT:
  225.                             case GAD_BUFFERTOFRONT:
  226.                             case GAD_SKIPDIAL:
  227.                             case GAD_ABORTAREXX:
  228.  
  229.                                 String = LT_GetString(Handle,MsgGadget -> GadgetID);
  230.  
  231.                                 if(!GoodCode(String))
  232.                                 {
  233.                                     DisplayBeep(PanelWindow -> WScreen);
  234.  
  235.                                     LT_Activate(Handle,MsgGadget -> GadgetID);
  236.                                 }
  237.  
  238.                                 break;
  239.  
  240.                             case GAD_USE:
  241.  
  242.                                 LT_UpdateStrings(Handle);
  243.  
  244.                                 Done = TRUE;
  245.                                 break;
  246.  
  247.                             case GAD_CANCEL:
  248.  
  249.                                 CopyMem(&PrivateHotkeys,Hotkeys,sizeof(struct Hotkeys));
  250.  
  251.                                 Done = TRUE;
  252.                                 break;
  253.  
  254.                             case GAD_LOAD:
  255.  
  256.                                 SplitFileName(LastKeys,&DummyChar,DummyBuffer);
  257.  
  258.                                 LT_LockWindow(PanelWindow);
  259.  
  260.                                 if(FileRequest = GetFile(PanelWindow,LocaleString(MSG_HOTKEYPANEL_LOAD_HOTKEYS_TXT),DummyBuffer,FilePart(LastKeys),DummyBuffer,"#?.prefs",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_LOAD_TXT),TRUE))
  261.                                 {
  262.                                     if(!LoadHotkeys(DummyBuffer,Hotkeys))
  263.                                         ShowError(PanelWindow,ERR_LOAD_ERROR,IoErr(),DummyBuffer);
  264.                                     else
  265.                                     {
  266.                                         strcpy(LastKeys,DummyBuffer);
  267.  
  268.                                         LT_SetAttributes(Handle,GAD_TERMTOFRONT,
  269.                                             GTST_String,Hotkeys -> termScreenToFront,
  270.                                         TAG_DONE);
  271.  
  272.                                         LT_SetAttributes(Handle,GAD_BUFFERTOFRONT,
  273.                                             GTST_String,Hotkeys -> BufferScreenToFront,
  274.                                         TAG_DONE);
  275.  
  276.                                         LT_SetAttributes(Handle,GAD_SKIPDIAL,
  277.                                             GTST_String,Hotkeys -> SkipDialEntry,
  278.                                         TAG_DONE);
  279.  
  280.                                         LT_SetAttributes(Handle,GAD_ABORTAREXX,
  281.                                             GTST_String,Hotkeys -> AbortARexx,
  282.                                         TAG_DONE);
  283.  
  284.                                         LT_SetAttributes(Handle,GAD_PRIORITY,
  285.                                             GTSL_Level,Hotkeys -> CommodityPriority,
  286.                                         TAG_DONE);
  287.  
  288.                                         LT_SetAttributes(Handle,GAD_HOTKEYS,
  289.                                             GTCB_Checked,Hotkeys -> HotkeysEnabled,
  290.                                         TAG_DONE);
  291.  
  292.                                         OldCRC = DoCRC(Hotkeys,sizeof(struct Hotkeys));
  293.  
  294.                                         HotkeysChanged = FALSE;
  295.                                     }
  296.  
  297.                                     FreeAslRequest(FileRequest);
  298.                                 }
  299.  
  300.                                 LT_UnlockWindow(PanelWindow);
  301.  
  302.                                 break;
  303.  
  304.                             case GAD_SAVE:
  305.  
  306.                                 LT_UpdateStrings(Handle);
  307.  
  308.                                 SplitFileName(LastKeys,&DummyChar,DummyBuffer);
  309.  
  310.                                 LT_LockWindow(PanelWindow);
  311.  
  312.                                 if(FileRequest = GetFile(PanelWindow,LocaleString(MSG_HOTKEYPANEL_SAVE_HOTKEYS_TXT),DummyBuffer,FilePart(LastKeys),DummyBuffer,"#?.prefs",TRUE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SAVE_TXT),TRUE))
  313.                                 {
  314.                                     if(!WriteIFFData(DummyBuffer,Hotkeys,sizeof(struct Hotkeys),ID_HOTK))
  315.                                         ShowError(PanelWindow,ERR_SAVE_ERROR,IoErr(),DummyBuffer);
  316.                                     else
  317.                                     {
  318.                                         strcpy(LastKeys,DummyBuffer);
  319.  
  320.                                         OldCRC = DoCRC(Hotkeys,sizeof(struct Hotkeys));
  321.  
  322.                                         HotkeysChanged = FALSE;
  323.                                     }
  324.  
  325.                                     FreeAslRequest(FileRequest);
  326.                                 }
  327.  
  328.                                 LT_UnlockWindow(PanelWindow);
  329.  
  330.                                 break;
  331.                         }
  332.                     }
  333.                 }
  334.             }
  335.             while(!Done);
  336.  
  337.             PopWindow();
  338.         }
  339.  
  340.         LT_DeleteHandle(Handle);
  341.     }
  342.  
  343.     HotkeysChanged |= (OldCRC != DoCRC(Hotkeys,sizeof(struct Hotkeys)));
  344.  
  345.     return((BYTE)memcmp(&PrivateHotkeys,Hotkeys,sizeof(struct Hotkeys)));
  346. }
  347.