home *** CD-ROM | disk | FTP | other *** search
/ Amiga Elysian Archive / AmigaElysianArchive.iso / comm / term23_2.lha / Source_Code / termSource / HotkeyPanel.c < prev    next >
C/C++ Source or Header  |  1992-08-18  |  11KB  |  381 lines

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