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

  1. /*
  2. **    $Id: MacroPanel.c,v 1.7 92/08/15 20:12:51 olsen Sta Locker: olsen $
  3. **    $Revision: 1.7 $
  4. **    $Date: 92/08/15 20:12:51 $
  5. **
  6. **    Editing panel for key macro 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_F1,GAD_F2,GAD_F3,GAD_F4,GAD_F5,GAD_F6,GAD_F7,GAD_F8,GAD_F9,
  15.         GAD_F10,GAD_QUALIFIER,GAD_USE,GAD_LOAD,GAD_SAVE,GAD_CANCEL };
  16.  
  17. STATIC STRPTR ModifierString[5] =
  18. {
  19.     NULL,
  20.     NULL,
  21.     NULL,
  22.     NULL,
  23.     NULL
  24. };
  25.  
  26. STATIC struct Gadget *
  27. CreateAllGadgets(struct Gadget **GadgetArray,struct Gadget **GadgetList,APTR VisualInfo,UWORD TopEdge)
  28. {
  29.     struct Gadget        *Gadget;
  30.     struct NewGadget     NewGadget;
  31.     UWORD             Counter = 0;
  32.  
  33.     LocalizeString(ModifierString,MSG_MACROPANEL_NONE_TXT,MSG_MACROPANEL_CONTROL_TXT);
  34.  
  35.     SZ_SizeSetup(Screen,&UserFont,TRUE);
  36.  
  37.     memset(&NewGadget,0,sizeof(struct NewGadget));
  38.  
  39.     if(Gadget = CreateContext(GadgetList))
  40.     {
  41.         SZ_AddLeftOffset(SZ_TextWidth("F10") + INTERWIDTH);
  42.  
  43.         SZ_SetWidth(SZ_Width(STRING_KIND,NULL,60,NULL));
  44.  
  45.         NewGadget . ng_GadgetText    = "F 1";
  46.         NewGadget . ng_TextAttr        = &UserFont;
  47.         NewGadget . ng_VisualInfo    = VisualInfo;
  48.         NewGadget . ng_GadgetID        = Counter;
  49.  
  50.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  51.             SZ_Adjust,    TRUE,
  52.             SZ_AutoWidth,    TRUE,
  53.  
  54.             GTST_MaxChars,    255,
  55.             GTST_EditHook,    &CommandHook,
  56.             GA_Immediate,    TRUE,
  57.         TAG_DONE);
  58.  
  59.         NewGadget . ng_GadgetText    = "F 2";
  60.         NewGadget . ng_GadgetID        = Counter;
  61.  
  62.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  63.             SZ_Adjust,    TRUE,
  64.             SZ_AutoWidth,    TRUE,
  65.  
  66.             GTST_MaxChars,    255,
  67.             GTST_EditHook,    &CommandHook,
  68.             GA_Immediate,    TRUE,
  69.         TAG_DONE);
  70.  
  71.         NewGadget . ng_GadgetText    = "F 3";
  72.         NewGadget . ng_GadgetID        = Counter;
  73.  
  74.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  75.             SZ_Adjust,    TRUE,
  76.             SZ_AutoWidth,    TRUE,
  77.  
  78.             GTST_MaxChars,    255,
  79.             GTST_EditHook,    &CommandHook,
  80.             GA_Immediate,    TRUE,
  81.         TAG_DONE);
  82.  
  83.         NewGadget . ng_GadgetText    = "F 4";
  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.             GTST_MaxChars,    255,
  91.             GTST_EditHook,    &CommandHook,
  92.             GA_Immediate,    TRUE,
  93.         TAG_DONE);
  94.  
  95.         NewGadget . ng_GadgetText    = "F 5";
  96.         NewGadget . ng_GadgetID        = Counter;
  97.  
  98.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  99.             SZ_Adjust,    TRUE,
  100.             SZ_AutoWidth,    TRUE,
  101.  
  102.             GTST_MaxChars,    255,
  103.             GTST_EditHook,    &CommandHook,
  104.             GA_Immediate,    TRUE,
  105.         TAG_DONE);
  106.  
  107.         NewGadget . ng_GadgetText    = "F 6";
  108.         NewGadget . ng_GadgetID        = Counter;
  109.  
  110.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  111.             SZ_Adjust,    TRUE,
  112.             SZ_AutoWidth,    TRUE,
  113.  
  114.             GTST_MaxChars,    255,
  115.             GTST_EditHook,    &CommandHook,
  116.             GA_Immediate,    TRUE,
  117.         TAG_DONE);
  118.  
  119.         NewGadget . ng_GadgetText    = "F 7";
  120.         NewGadget . ng_GadgetID        = Counter;
  121.  
  122.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  123.             SZ_Adjust,    TRUE,
  124.             SZ_AutoWidth,    TRUE,
  125.  
  126.             GTST_MaxChars,    255,
  127.             GTST_EditHook,    &CommandHook,
  128.             GA_Immediate,    TRUE,
  129.         TAG_DONE);
  130.  
  131.         NewGadget . ng_GadgetText    = "F 8";
  132.         NewGadget . ng_GadgetID        = Counter;
  133.  
  134.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  135.             SZ_Adjust,    TRUE,
  136.             SZ_AutoWidth,    TRUE,
  137.  
  138.             GTST_MaxChars,    255,
  139.             GTST_EditHook,    &CommandHook,
  140.             GA_Immediate,    TRUE,
  141.         TAG_DONE);
  142.  
  143.         NewGadget . ng_GadgetText    = "F 9";
  144.         NewGadget . ng_GadgetID        = Counter;
  145.  
  146.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  147.             SZ_Adjust,    TRUE,
  148.             SZ_AutoWidth,    TRUE,
  149.  
  150.             GTST_MaxChars,    255,
  151.             GTST_EditHook,    &CommandHook,
  152.             GA_Immediate,    TRUE,
  153.         TAG_DONE);
  154.  
  155.         NewGadget . ng_GadgetText    = "F10";
  156.         NewGadget . ng_GadgetID        = Counter;
  157.  
  158.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  159.             SZ_Adjust,    TRUE,
  160.             SZ_AutoWidth,    TRUE,
  161.  
  162.             GTST_MaxChars,    255,
  163.             GTST_EditHook,    &CommandHook,
  164.             GA_Immediate,    TRUE,
  165.         TAG_DONE);
  166.  
  167.         NewGadget . ng_GadgetText    = LocaleString(MSG_MACROPANEL_KEY_MODIFIER_GAD);
  168.         NewGadget . ng_GadgetID        = Counter;
  169.  
  170.         GadgetArray[Counter++] = Gadget = CreateGadget(CYCLE_KIND,Gadget,&NewGadget,
  171.             SZ_Adjust,    TRUE,
  172.             SZ_AlignCentre,    TRUE,
  173.  
  174.             GT_Underscore,    '_',
  175.             GTCY_Labels,    ModifierString,
  176.             GTCY_Active,    0,
  177.         TAG_DONE);
  178.  
  179.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_GLOBAL_USE_GAD),0,NULL);
  180.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_GLOBAL_CANCEL_GAD),0,NULL);
  181.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_GLOBAL_LOAD_GAD),0,NULL);
  182.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_GLOBAL_CANCEL_GAD),0,NULL);
  183.  
  184.         SZ_SetWidth(SZ_ResetMaxWidth());
  185.  
  186.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_USE_GAD);
  187.         NewGadget . ng_GadgetID        = Counter;
  188.         NewGadget . ng_Flags        = 0;
  189.  
  190.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  191.             SZ_Adjust,    TRUE,
  192.             SZ_AutoWidth,    TRUE,
  193.             SZ_AlignExtra,    TRUE,
  194.             SZ_AlignBottom,    TRUE,
  195.             SZ_GroupCount,    4,
  196.  
  197.             GT_Underscore,    '_',
  198.         TAG_DONE);
  199.  
  200.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_LOAD_GAD);
  201.         NewGadget . ng_GadgetID        = Counter;
  202.  
  203.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  204.             SZ_Adjust,    TRUE,
  205.             SZ_AutoWidth,    TRUE,
  206.             SZ_GroupNext,    TRUE,
  207.  
  208.             GT_Underscore,    '_',
  209.         TAG_DONE);
  210.  
  211.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_SAVE_GAD);
  212.         NewGadget . ng_GadgetID        = Counter;
  213.  
  214.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  215.             SZ_Adjust,    TRUE,
  216.             SZ_AutoWidth,    TRUE,
  217.             SZ_GroupNext,    TRUE,
  218.  
  219.             GT_Underscore,    '_',
  220.         TAG_DONE);
  221.  
  222.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_CANCEL_GAD);
  223.         NewGadget . ng_GadgetID        = Counter;
  224.  
  225.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  226.             SZ_Adjust,    TRUE,
  227.             SZ_AutoWidth,    TRUE,
  228.             SZ_GroupNext,    TRUE,
  229.  
  230.             GT_Underscore,    '_',
  231.         TAG_DONE);
  232.     }
  233.  
  234.     return(Gadget);
  235. }
  236.  
  237. VOID
  238. MacroPanel(struct MacroKeys *MacroKeys)
  239. {
  240.     struct Window        *PanelWindow;
  241.     struct Gadget        *GadgetList = NULL;
  242.     struct Gadget        *GadgetArray[GAD_CANCEL + 1];
  243.     LONG             i;
  244.  
  245.     struct MacroKeys    *Keys;
  246.  
  247.     if(Keys = (struct MacroKeys *)AllocVec(sizeof(struct MacroKeys),MEMF_ANY|MEMF_CLEAR))
  248.     {
  249.         CopyMem(MacroKeys,Keys,sizeof(struct MacroKeys));
  250.  
  251.         if(CreateAllGadgets(&GadgetArray[0],&GadgetList,VisualInfo,Screen -> WBorTop + Screen -> Font -> ta_YSize + 1))
  252.         {
  253.             if(PanelWindow = OpenWindowTags(NULL,
  254.                 WA_Left,    (Screen -> Width    - SZ_GetWindowWidth())    / 2,
  255.                 WA_Top,        (Screen -> Height    - SZ_GetWindowHeight())    / 2,
  256.                 WA_Width,    SZ_GetWindowWidth(),
  257.                 WA_Height,    SZ_GetWindowHeight(),
  258.  
  259.                 WA_Activate,    TRUE,
  260.                 WA_DragBar,    TRUE,
  261.                 WA_DepthGadget,    TRUE,
  262.                 WA_CloseGadget,    TRUE,
  263.                 WA_RMBTrap,    TRUE,
  264.                 WA_DepthGadget,    TRUE,
  265.                 WA_CustomScreen,Screen,
  266.  
  267.                 WA_IDCMP,    IDCMP_GADGETDOWN | IDCMP_CLOSEWINDOW | IDCMP_VANILLAKEY | IDCMP_ACTIVEWINDOW | BUTTONIDCMP | CYCLEIDCMP | STRINGIDCMP,
  268.  
  269.                 WA_Title,    LocaleString(MSG_MACROPANEL_MACRO_PREFERENCES_TXT),
  270.             TAG_DONE))
  271.             {
  272.                 struct IntuiMessage    *Massage;
  273.                 ULONG             Class,Code;
  274.                 struct Gadget        *Gadget;
  275.                 BYTE             Terminated = FALSE;
  276.  
  277.                 UBYTE             DummyBuffer[256],*DummyChar;
  278.  
  279.                 struct FileRequest    *FileRequest;
  280.  
  281.                 LONG             Modifier = 0;
  282.  
  283.                 PushWindow(PanelWindow);
  284.  
  285.                 AddGList(PanelWindow,GadgetList,(UWORD)-1,(UWORD)-1,NULL);
  286.                 RefreshGList(GadgetList,PanelWindow,NULL,(UWORD)-1);
  287.                 GT_RefreshWindow(PanelWindow,NULL);
  288.  
  289.                 if(XEmulatorBase && Config . Emulation == EMULATION_EXTERNAL)
  290.                 {
  291.                     ULONG KeyMask = XEmulatorGetFreeMacroKeys(XEM_IO,Modifier);
  292.  
  293.                     for(i = 0 ; i < 10 ; i++)
  294.                     {
  295.                         GT_SetGadgetAttrs(GadgetArray[GAD_F1 + i],PanelWindow,NULL,
  296.                             GTST_String,    Keys -> Keys[Modifier][i],
  297.                             GA_Disabled,    !(KeyMask & (1 << i)),
  298.                         TAG_DONE);
  299.                     }
  300.                 }
  301.                 else
  302.                 {
  303.                     for(i = 0 ; i < 10 ; i++)
  304.                     {
  305.                         GT_SetGadgetAttrs(GadgetArray[GAD_F1 + i],PanelWindow,NULL,
  306.                             GTST_String,Keys -> Keys[Modifier][i],
  307.                         TAG_DONE);
  308.                     }
  309.                 }
  310.  
  311.                 ActiveGadget = NULL;
  312.  
  313.                 while(!Terminated)
  314.                 {
  315.                     WaitPort(PanelWindow -> UserPort);
  316.  
  317.                     while(!Terminated && (Massage = (struct IntuiMessage *)GT_GetIMsg(PanelWindow -> UserPort)))
  318.                     {
  319.                         Class    = Massage -> Class;
  320.                         Code    = Massage -> Code;
  321.                         Gadget    = (struct Gadget *)Massage -> IAddress;
  322.  
  323.                         GT_ReplyIMsg(Massage);
  324.  
  325.                         if(Class == IDCMP_ACTIVEWINDOW && ActiveGadget)
  326.                             ActivateGadget(ActiveGadget,PanelWindow,NULL);
  327.  
  328.                         if(Class == IDCMP_VANILLAKEY)
  329.                             KeySelect(GadgetArray,GAD_CANCEL,Code,PanelWindow,&Gadget,&Class,&Code);
  330.  
  331.                         if(Class == IDCMP_GADGETDOWN)
  332.                         {
  333.                             if((Gadget -> GadgetType & GTYP_GTYPEMASK) == GTYP_STRGADGET)
  334.                                 ActiveGadget = Gadget;
  335.                         }
  336.  
  337.                         if(Class == IDCMP_CLOSEWINDOW)
  338.                             Terminated = TRUE;
  339.  
  340. GadCheck:                    if(Class == IDCMP_GADGETUP)
  341.                         {
  342.                             switch(Gadget -> GadgetID)
  343.                             {
  344.                                 case GAD_QUALIFIER:    for(i = 0 ; i < 10 ; i++)
  345.                                                 strcpy(Keys -> Keys[Modifier][i],GT_STRING(GadgetArray[i]));
  346.  
  347.                                             Modifier = Code;
  348.  
  349.                                             if(XEmulatorBase && Config . Emulation == EMULATION_EXTERNAL)
  350.                                             {
  351.                                                 ULONG KeyMask = XEmulatorGetFreeMacroKeys(XEM_IO,Modifier);
  352.  
  353.                                                 ActiveGadget = NULL;
  354.  
  355.                                                 for(i = 0 ; i < 10 ; i++)
  356.                                                 {
  357.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_F1 + i],PanelWindow,NULL,
  358.                                                         GTST_String,    Keys -> Keys[Modifier][i],
  359.                                                         GA_Disabled,    !(KeyMask & (1 << i)),
  360.                                                     TAG_DONE);
  361.  
  362.                                                     if((KeyMask & (1 << i)) && !ActiveGadget)
  363.                                                         ActiveGadget = GadgetArray[GAD_F1 + i];
  364.                                                 }
  365.  
  366.                                                 if(ActiveGadget)
  367.                                                     ActivateGadget(ActiveGadget,PanelWindow,NULL);
  368.                                             }
  369.                                             else
  370.                                             {
  371.                                                 for(i = 0 ; i < 10 ; i++)
  372.                                                 {
  373.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_F1 + i],PanelWindow,NULL,
  374.                                                         GTST_String,Keys -> Keys[Modifier][i],
  375.                                                     TAG_DONE);
  376.                                                 }
  377.                                             }
  378.  
  379.                                             break;
  380.  
  381.                                 case GAD_USE:        Terminated = TRUE;
  382.  
  383.                                             for(i = 0 ; i < 10 ; i++)
  384.                                                 strcpy(Keys -> Keys[Modifier][i],GT_STRING(GadgetArray[i]));
  385.  
  386.                                             CopyMem(Keys,MacroKeys,sizeof(struct MacroKeys));
  387.  
  388.                                             break;
  389.  
  390.                                 case GAD_LOAD:        strcpy(DummyBuffer,LastMacros);
  391.  
  392.                                             DummyChar = PathPart(DummyBuffer);
  393.  
  394.                                             *DummyChar = 0;
  395.  
  396.                                             BlockWindow(PanelWindow);
  397.  
  398.                                             if(FileRequest = GetFile(LocaleString(MSG_MACROPANEL_LOAD_MACRO_KEYS_TXT),DummyBuffer,FilePart(LastMacros),DummyBuffer,"#?.prefs",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_LOAD_TXT)))
  399.                                             {
  400.                                                 if(!LoadMacros(DummyBuffer,Keys))
  401.                                                     MyEasyRequest(Window,LocaleString(MSG_MACROPANEL_COULD_NOT_LOAD_MACRO_KEYS_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT),DummyBuffer);
  402.                                                 else
  403.                                                 {
  404.                                                     strcpy(Config . MacroFile,DummyBuffer);
  405.  
  406.                                                     strcpy(LastMacros,DummyBuffer);
  407.  
  408.                                                     for(i = 0 ; i < 10 ; i++)
  409.                                                     {
  410.                                                         GT_SetGadgetAttrs(GadgetArray[GAD_F1 + i],PanelWindow,NULL,
  411.                                                             GTST_String,Keys -> Keys[Modifier][i],
  412.                                                         TAG_DONE);
  413.                                                     }
  414.                                                 }
  415.                                             }
  416.  
  417.                                             ReleaseWindow(PanelWindow);
  418.  
  419.                                             break;
  420.  
  421.                                 case GAD_SAVE:        strcpy(DummyBuffer,LastMacros);
  422.  
  423.                                             DummyChar = PathPart(DummyBuffer);
  424.  
  425.                                             *DummyChar = 0;
  426.  
  427.                                             BlockWindow(PanelWindow);
  428.  
  429.                                             for(i = 0 ; i < 10 ; i++)
  430.                                                 strcpy(Keys -> Keys[Modifier][i],GT_STRING(GadgetArray[i]));
  431.  
  432.                                             if(FileRequest = GetFile(LocaleString(MSG_MACROPANEL_SAVE_MACRO_KEYS_TXT),DummyBuffer,FilePart(LastMacros),DummyBuffer,"#?.prefs",TRUE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SAVE_TXT)))
  433.                                             {
  434.                                                 if(!WriteIFFData(DummyBuffer,Keys,sizeof(struct MacroKeys),'KEYS'))
  435.                                                     MyEasyRequest(Window,LocaleString(MSG_MACROPANEL_COULD_NOT_SAVE_MACRO_KEYS_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT),DummyBuffer);
  436.                                                 else
  437.                                                     strcpy(LastMacros,DummyBuffer);
  438.                                             }
  439.  
  440.                                             ReleaseWindow(PanelWindow);
  441.  
  442.                                             break;
  443.  
  444.                                 case GAD_CANCEL:    Terminated = TRUE;
  445.  
  446.                                             CopyMem(Keys,MacroKeys,sizeof(struct MacroKeys));
  447.  
  448.                                             break;
  449.  
  450.                                 default:        break;
  451.                             }
  452.                         }
  453.                     }
  454.                 }
  455.  
  456.                 RemoveGList(PanelWindow,GadgetList,(UWORD)-1);
  457.  
  458.                 PopWindow();
  459.  
  460.                 CloseWindow(PanelWindow);
  461.             }
  462.         }
  463.  
  464.         FreeGadgets(GadgetList);
  465.  
  466.         FreeVec(Keys);
  467.     }
  468. }
  469.