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

  1. /*
  2. **    FastMacroPanel.c
  3. **
  4. **    Editing panel for fast! macros
  5. **
  6. **    Copyright © 1990-1993 by Olaf `Olsen' Barthel & MXM
  7. **        All Rights Reserved
  8. */
  9.  
  10. #include "termGlobal.h"
  11.  
  12. enum    {    GAD_LIST,GAD_MACRO,GAD_CODE,
  13.         GAD_TOP,GAD_UP,GAD_DOWN,GAD_END,
  14.         GAD_NEW,GAD_REMOVE,GAD_LOAD,GAD_SAVE };
  15.  
  16. STATIC struct Gadget *
  17. CreateAllGadgets(struct Gadget **GadgetArray,struct Gadget **GadgetList)
  18. {
  19.     struct Gadget        *Gadget;
  20.     struct NewGadget     NewGadget;
  21.     UWORD             Counter = 0,i;
  22.  
  23.     SZ_SizeSetup(Window -> WScreen,&UserFont,TRUE);
  24.  
  25.     memset(&NewGadget,0,sizeof(struct NewGadget));
  26.  
  27.     if(Gadget = CreateContext(GadgetList))
  28.     {
  29.         WORD ButtonWidth,ListWidth,LeftOffset;
  30.  
  31.         LeftOffset = SZ_LeftOffsetDelta(MSG_FASTMACROPANEL_MACRO_LIST_GAD,MSG_FASTMACROPANEL_MACRO_TEXT_GAD);
  32.  
  33.         SZ_AddLeftOffset(LeftOffset);
  34.  
  35.         SZ_ResetMaxWidth();
  36.  
  37.         for(i = MSG_FASTMACROPANEL_TOP_GAD ; i <= MSG_FASTMACROPANEL_NEW_GAD ; i++)
  38.             SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(i),0,NULL);
  39.  
  40.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_GLOBAL_REMOVE_GAD),0,NULL);
  41.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_GLOBAL_LOAD_GAD),0,NULL);
  42.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_GLOBAL_SAVE_GAD),0,NULL);
  43.  
  44.         ButtonWidth = SZ_ResetMaxWidth();
  45.  
  46.         SZ_UpdateMaxWidth(STRING_KIND,NULL,30,NULL);
  47.         SZ_UpdateMaxWidth(LISTVIEW_KIND,NULL,20,NULL);
  48.  
  49.         ListWidth = SZ_ResetMaxWidth();
  50.  
  51.         if(ListWidth + LeftOffset < 4 * ButtonWidth + 3 * InterWidth)
  52.             ListWidth = 4 * ButtonWidth + 3 * InterWidth - LeftOffset;
  53.         else
  54.             ButtonWidth = (LeftOffset + ListWidth - 3 * InterWidth) / 4;
  55.  
  56.         SZ_SetWidth(ListWidth);
  57.  
  58.         NewGadget . ng_GadgetText    = LocaleString(MSG_FASTMACROPANEL_MACRO_LIST_GAD);
  59.         NewGadget . ng_GadgetID        = Counter;
  60.         NewGadget . ng_Flags        = PLACETEXT_LEFT;
  61.  
  62.         GadgetArray[Counter++] = Gadget = CreateGadget(LISTVIEW_KIND,Gadget,&NewGadget,
  63.             SZ_Adjust,        TRUE,
  64.             SZ_AutoWidth,        TRUE,
  65.             SZ_Lines,        10,
  66.             SZ_InterHeight,        0,
  67.  
  68.             GTLV_Labels,        &FastMacroList,
  69.         TAG_DONE);
  70.  
  71.         NewGadget . ng_GadgetText    = LocaleString(MSG_FASTMACROPANEL_MACRO_GAD);
  72.         NewGadget . ng_GadgetID        = Counter;
  73.         NewGadget . ng_Flags        = NULL;
  74.  
  75.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  76.             SZ_Adjust,    TRUE,
  77.             SZ_AutoWidth,    TRUE,
  78.  
  79.             GTST_MaxChars,    19,
  80.             GA_Disabled,    TRUE,
  81.             GA_Immediate,    TRUE,
  82.         TAG_DONE);
  83.  
  84.         NewGadget . ng_GadgetText    = LocaleString(MSG_FASTMACROPANEL_MACRO_TEXT_GAD);
  85.         NewGadget . ng_GadgetID        = Counter;
  86.  
  87.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  88.             SZ_Adjust,    TRUE,
  89.             SZ_AutoWidth,    TRUE,
  90.             SZ_AlignBottom,    TRUE,
  91.  
  92.             GTST_MaxChars,    255,
  93.             GA_Disabled,    TRUE,
  94.             GA_Immediate,    TRUE,
  95.         TAG_DONE);
  96.  
  97.         SZ_SetWidth(ButtonWidth);
  98.  
  99.         NewGadget . ng_GadgetText    = LocaleString(MSG_FASTMACROPANEL_TOP_GAD);
  100.         NewGadget . ng_GadgetID        = Counter;
  101.         NewGadget . ng_Flags        = 0;
  102.  
  103.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  104.             SZ_Adjust,    TRUE,
  105.             SZ_AutoWidth,    TRUE,
  106.             SZ_AlignExtra,    TRUE,
  107.             SZ_AlignLeft,    TRUE,
  108.             SZ_AlignBottom,    TRUE,
  109.             SZ_GroupCount,    4,
  110.  
  111.             GA_Disabled,    TRUE,
  112.         TAG_DONE);
  113.  
  114.         NewGadget . ng_GadgetText    = LocaleString(MSG_FASTMACROPANEL_UP_GAD);
  115.         NewGadget . ng_GadgetID        = Counter;
  116.  
  117.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  118.             SZ_Adjust,    TRUE,
  119.             SZ_AutoWidth,    TRUE,
  120.             SZ_GroupNext,    TRUE,
  121.  
  122.             GA_Disabled,    TRUE,
  123.         TAG_DONE);
  124.  
  125.         NewGadget . ng_GadgetText    = LocaleString(MSG_FASTMACROPANEL_DOWN_GAD);
  126.         NewGadget . ng_GadgetID        = Counter;
  127.  
  128.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  129.             SZ_Adjust,    TRUE,
  130.             SZ_AutoWidth,    TRUE,
  131.             SZ_GroupNext,    TRUE,
  132.  
  133.             GA_Disabled,    TRUE,
  134.         TAG_DONE);
  135.  
  136.         NewGadget . ng_GadgetText    = LocaleString(MSG_FASTMACROPANEL_END_GAD);
  137.         NewGadget . ng_GadgetID        = Counter;
  138.  
  139.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  140.             SZ_Adjust,    TRUE,
  141.             SZ_AutoWidth,    TRUE,
  142.             SZ_GroupNext,    TRUE,
  143.  
  144.             GA_Disabled,    TRUE,
  145.         TAG_DONE);
  146.  
  147.         NewGadget . ng_GadgetText    = LocaleString(MSG_FASTMACROPANEL_NEW_GAD);
  148.         NewGadget . ng_GadgetID        = Counter;
  149.  
  150.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  151.             SZ_Adjust,    TRUE,
  152.             SZ_AutoWidth,    TRUE,
  153.             SZ_AlignBottom,    TRUE,
  154.             SZ_GroupCount,    4,
  155.         TAG_DONE);
  156.  
  157.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_REMOVE_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.             GA_Disabled,    TRUE,
  165.         TAG_DONE);
  166.  
  167.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_LOAD_GAD);
  168.         NewGadget . ng_GadgetID        = Counter;
  169.  
  170.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  171.             SZ_Adjust,    TRUE,
  172.             SZ_AutoWidth,    TRUE,
  173.             SZ_GroupNext,    TRUE,
  174.         TAG_DONE);
  175.  
  176.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_SAVE_GAD);
  177.         NewGadget . ng_GadgetID        = Counter;
  178.  
  179.         GadgetArray[Counter] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  180.             SZ_Adjust,    TRUE,
  181.             SZ_AutoWidth,    TRUE,
  182.             SZ_GroupNext,    TRUE,
  183.             GA_Disabled,    TRUE,
  184.         TAG_DONE);
  185.     }
  186.  
  187.     return(Gadget);
  188. }
  189.  
  190. VOID
  191. FastMacroPanel()
  192. {
  193.     struct Window        *PanelWindow;
  194.     struct Gadget        *GadgetList = NULL;
  195.     struct Gadget        *GadgetArray[GAD_SAVE + 1];
  196.     UBYTE              DummyBuffer[MAX_FILENAME_LENGTH],
  197.                 *DummyChar;
  198.     struct FileRequester    *FileRequest;
  199.  
  200.     if(CreateAllGadgets(GadgetArray,&GadgetList))
  201.     {
  202.         if(PanelWindow = OpenWindowTags(NULL,
  203.             WA_Left,    GetScreenLeft(Window) + (GetScreenWidth(Window) - SZ_GetWindowWidth()) / 2,
  204.             WA_Top,        GetScreenTop(Window) + (GetScreenHeight(Window) - SZ_GetWindowHeight())    / 2,
  205.             WA_Width,    SZ_GetWindowWidth(),
  206.             WA_Height,    SZ_GetWindowHeight(),
  207.  
  208.             WA_Activate,        TRUE,
  209.             WA_DragBar,        TRUE,
  210.             WA_DepthGadget,        TRUE,
  211.             WA_RMBTrap,        TRUE,
  212.             WA_CloseGadget,        TRUE,
  213.             WA_CustomScreen,    Window -> WScreen,
  214.             WA_NoCareRefresh,    TRUE,
  215.  
  216.             WA_IDCMP,        IDCMP_CLOSEWINDOW | IDCMP_VANILLAKEY | IDCMP_RAWKEY | IDCMP_ACTIVEWINDOW | IDCMP_GADGETDOWN | LISTVIEWIDCMP | STRINGIDCMP | BUTTONIDCMP,
  217.  
  218.             WA_Title,        LocaleString(MSG_FASTMACROPANEL_FAST_MACRO_PREFERENCES_TXT),
  219.         TAG_DONE))
  220.         {
  221.             struct IntuiMessage    *Massage;
  222.             ULONG             IClass,Code;
  223.             struct Gadget        *Gadget;
  224.             BYTE             Terminated = FALSE;
  225.             struct MacroNode    *Node,*Selected = NULL;
  226.             ULONG             Offset = 0;
  227.  
  228.             GuideContext(CONTEXT_FASTMACROS);
  229.  
  230.             PushWindow(PanelWindow);
  231.  
  232.             AddGList(PanelWindow,GadgetList,(UWORD)-1,(UWORD)-1,NULL);
  233.             RefreshGList(GadgetList,PanelWindow,NULL,(UWORD)-1);
  234.             GT_RefreshWindow(PanelWindow,NULL);
  235.  
  236.             if(FastMacroList . lh_Head -> ln_Succ)
  237.             {
  238.                 GT_SetGadgetAttrs(GadgetArray[GAD_SAVE],PanelWindow,NULL,
  239.                     GA_Disabled,    FALSE,
  240.                 TAG_DONE);
  241.             }
  242.             else
  243.             {
  244.                 GT_SetGadgetAttrs(GadgetArray[GAD_SAVE],PanelWindow,NULL,
  245.                     GA_Disabled,    TRUE,
  246.                 TAG_DONE);
  247.             }
  248.  
  249.             ActiveGadget = NULL;
  250.  
  251.             ClrSignal(SIG_BREAK);
  252.  
  253.             while(!Terminated)
  254.             {
  255.                 if(Wait(PORTMASK(PanelWindow -> UserPort) | SIG_BREAK) & SIG_BREAK)
  256.                     break;
  257.  
  258.                 while(!Terminated && (Massage = (struct IntuiMessage *)GT_GetIMsg(PanelWindow -> UserPort)))
  259.                 {
  260.                     IClass    = Massage -> Class;
  261.                     Code    = Massage -> Code;
  262.                     Gadget    = (struct Gadget *)Massage -> IAddress;
  263.  
  264.                     GT_ReplyIMsg(Massage);
  265.  
  266.                     KeySelect(GadgetArray,GAD_SAVE,Code,PanelWindow,&Gadget,&IClass,&Code);
  267.  
  268.                     if(IClass == IDCMP_GADGETDOWN)
  269.                     {
  270.                         if((Gadget -> GadgetType & GTYP_GTYPEMASK) == GTYP_STRGADGET)
  271.                             ActiveGadget = Gadget;
  272.                     }
  273.  
  274.                     if(IClass == IDCMP_ACTIVEWINDOW && ActiveGadget)
  275.                         ActivateGadget(ActiveGadget,PanelWindow,NULL);
  276.  
  277.                     if(IClass == IDCMP_CLOSEWINDOW)
  278.                         Terminated = TRUE;
  279.  
  280.                     if(IClass == IDCMP_GADGETUP)
  281.                     {
  282.                         switch(Gadget -> GadgetID)
  283.                         {
  284.                             case GAD_TOP:
  285.  
  286.                                 GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  287.                                     GTLV_Labels,    ~0,
  288.                                 TAG_DONE);
  289.  
  290.                                 Remove((struct Node *)Selected);
  291.  
  292.                                 AddHead(&FastMacroList,(struct Node *)Selected);
  293.  
  294.                                 RefreshFastWindow(TRUE);
  295.  
  296.                                 Offset = 0;
  297.  
  298.                                 GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  299.                                     GTLV_Labels,    &FastMacroList,
  300.                                     GTLV_Selected,    Offset,
  301.                                     GTLV_Top,    Offset,
  302.                                 TAG_DONE);
  303.  
  304.                                 GT_SetGadgetAttrs(GadgetArray[GAD_TOP],PanelWindow,NULL,
  305.                                     GA_Disabled,    TRUE,
  306.                                 TAG_DONE);
  307.  
  308.                                 GT_SetGadgetAttrs(GadgetArray[GAD_UP],PanelWindow,NULL,
  309.                                     GA_Disabled,    TRUE,
  310.                                 TAG_DONE);
  311.  
  312.                                 if(Selected -> mn_Succ -> mn_Succ)
  313.                                 {
  314.                                     GT_SetGadgetAttrs(GadgetArray[GAD_DOWN],PanelWindow,NULL,
  315.                                         GA_Disabled,    FALSE,
  316.                                     TAG_DONE);
  317.  
  318.                                     GT_SetGadgetAttrs(GadgetArray[GAD_END],PanelWindow,NULL,
  319.                                         GA_Disabled,    FALSE,
  320.                                     TAG_DONE);
  321.                                 }
  322.                                 else
  323.                                 {
  324.                                     GT_SetGadgetAttrs(GadgetArray[GAD_DOWN],PanelWindow,NULL,
  325.                                         GA_Disabled,    TRUE,
  326.                                     TAG_DONE);
  327.  
  328.                                     GT_SetGadgetAttrs(GadgetArray[GAD_END],PanelWindow,NULL,
  329.                                         GA_Disabled,    TRUE,
  330.                                     TAG_DONE);
  331.                                 }
  332.  
  333.                                 FastMacrosChanged = TRUE;
  334.  
  335.                                 break;
  336.  
  337.                             case GAD_UP:
  338.  
  339.                                 GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  340.                                     GTLV_Labels,    ~0,
  341.                                 TAG_DONE);
  342.  
  343.                                 Node = Selected -> mn_Pred -> mn_Pred;
  344.  
  345.                                 Remove((struct Node *)Selected);
  346.  
  347.                                 Insert(&FastMacroList,(struct Node *)Selected,(struct Node *)Node);
  348.  
  349.                                 RefreshFastWindow(TRUE);
  350.  
  351.                                 Offset--;
  352.  
  353.                                 GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  354.                                     GTLV_Labels,    &FastMacroList,
  355.                                     GTLV_Selected,    Offset,
  356.                                     GTLV_Top,    Offset,
  357.                                 TAG_DONE);
  358.  
  359.                                 if(Selected -> mn_Pred -> mn_Pred)
  360.                                 {
  361.                                     GT_SetGadgetAttrs(GadgetArray[GAD_TOP],PanelWindow,NULL,
  362.                                         GA_Disabled,    FALSE,
  363.                                     TAG_DONE);
  364.  
  365.                                     GT_SetGadgetAttrs(GadgetArray[GAD_UP],PanelWindow,NULL,
  366.                                         GA_Disabled,    FALSE,
  367.                                     TAG_DONE);
  368.                                 }
  369.                                 else
  370.                                 {
  371.                                     GT_SetGadgetAttrs(GadgetArray[GAD_TOP],PanelWindow,NULL,
  372.                                         GA_Disabled,    TRUE,
  373.                                     TAG_DONE);
  374.  
  375.                                     GT_SetGadgetAttrs(GadgetArray[GAD_UP],PanelWindow,NULL,
  376.                                         GA_Disabled,    TRUE,
  377.                                     TAG_DONE);
  378.                                 }
  379.  
  380.                                 if(Selected -> mn_Succ -> mn_Succ)
  381.                                 {
  382.                                     GT_SetGadgetAttrs(GadgetArray[GAD_DOWN],PanelWindow,NULL,
  383.                                         GA_Disabled,    FALSE,
  384.                                     TAG_DONE);
  385.  
  386.                                     GT_SetGadgetAttrs(GadgetArray[GAD_END],PanelWindow,NULL,
  387.                                         GA_Disabled,    FALSE,
  388.                                     TAG_DONE);
  389.                                 }
  390.                                 else
  391.                                 {
  392.                                     GT_SetGadgetAttrs(GadgetArray[GAD_DOWN],PanelWindow,NULL,
  393.                                         GA_Disabled,    TRUE,
  394.                                     TAG_DONE);
  395.  
  396.                                     GT_SetGadgetAttrs(GadgetArray[GAD_END],PanelWindow,NULL,
  397.                                         GA_Disabled,    TRUE,
  398.                                     TAG_DONE);
  399.                                 }
  400.  
  401.                                 FastMacrosChanged = TRUE;
  402.  
  403.                                 break;
  404.  
  405.                             case GAD_DOWN:
  406.  
  407.                                 GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  408.                                     GTLV_Labels,    ~0,
  409.                                 TAG_DONE);
  410.  
  411.                                 Node = Selected -> mn_Succ;
  412.  
  413.                                 Remove((struct Node *)Selected);
  414.  
  415.                                 Insert(&FastMacroList,(struct Node *)Selected,(struct Node *)Node);
  416.  
  417.                                 RefreshFastWindow(TRUE);
  418.  
  419.                                 Offset++;
  420.  
  421.                                 GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  422.                                     GTLV_Labels,    &FastMacroList,
  423.                                     GTLV_Selected,    Offset,
  424.                                     GTLV_Top,    Offset,
  425.                                 TAG_DONE);
  426.  
  427.                                 if(Selected -> mn_Pred -> mn_Pred)
  428.                                 {
  429.                                     GT_SetGadgetAttrs(GadgetArray[GAD_TOP],PanelWindow,NULL,
  430.                                         GA_Disabled,    FALSE,
  431.                                     TAG_DONE);
  432.  
  433.                                     GT_SetGadgetAttrs(GadgetArray[GAD_UP],PanelWindow,NULL,
  434.                                         GA_Disabled,    FALSE,
  435.                                     TAG_DONE);
  436.                                 }
  437.                                 else
  438.                                 {
  439.                                     GT_SetGadgetAttrs(GadgetArray[GAD_TOP],PanelWindow,NULL,
  440.                                         GA_Disabled,    TRUE,
  441.                                     TAG_DONE);
  442.  
  443.                                     GT_SetGadgetAttrs(GadgetArray[GAD_UP],PanelWindow,NULL,
  444.                                         GA_Disabled,    TRUE,
  445.                                     TAG_DONE);
  446.                                 }
  447.  
  448.                                 if(Selected -> mn_Succ -> mn_Succ)
  449.                                 {
  450.                                     GT_SetGadgetAttrs(GadgetArray[GAD_DOWN],PanelWindow,NULL,
  451.                                         GA_Disabled,    FALSE,
  452.                                     TAG_DONE);
  453.  
  454.                                     GT_SetGadgetAttrs(GadgetArray[GAD_END],PanelWindow,NULL,
  455.                                         GA_Disabled,    FALSE,
  456.                                     TAG_DONE);
  457.                                 }
  458.                                 else
  459.                                 {
  460.                                     GT_SetGadgetAttrs(GadgetArray[GAD_DOWN],PanelWindow,NULL,
  461.                                         GA_Disabled,    TRUE,
  462.                                     TAG_DONE);
  463.  
  464.                                     GT_SetGadgetAttrs(GadgetArray[GAD_END],PanelWindow,NULL,
  465.                                         GA_Disabled,    TRUE,
  466.                                     TAG_DONE);
  467.                                 }
  468.  
  469.                                 FastMacrosChanged = TRUE;
  470.  
  471.                                 break;
  472.  
  473.                             case GAD_END:
  474.  
  475.                                 GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  476.                                     GTLV_Labels,    ~0,
  477.                                 TAG_DONE);
  478.  
  479.                                 Remove((struct Node *)Selected);
  480.  
  481.                                 AddTail(&FastMacroList,(struct Node *)Selected);
  482.  
  483.                                 RefreshFastWindow(TRUE);
  484.  
  485.                                 Offset = FastMacroCount - 1;
  486.  
  487.                                 GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  488.                                     GTLV_Labels,    &FastMacroList,
  489.                                     GTLV_Selected,    Offset,
  490.                                     GTLV_Top,    Offset,
  491.                                 TAG_DONE);
  492.  
  493.                                 GT_SetGadgetAttrs(GadgetArray[GAD_DOWN],PanelWindow,NULL,
  494.                                     GA_Disabled,    TRUE,
  495.                                 TAG_DONE);
  496.  
  497.                                 GT_SetGadgetAttrs(GadgetArray[GAD_END],PanelWindow,NULL,
  498.                                     GA_Disabled,    TRUE,
  499.                                 TAG_DONE);
  500.  
  501.                                 if(Selected -> mn_Pred -> mn_Pred)
  502.                                 {
  503.                                     GT_SetGadgetAttrs(GadgetArray[GAD_TOP],PanelWindow,NULL,
  504.                                         GA_Disabled,    FALSE,
  505.                                     TAG_DONE);
  506.  
  507.                                     GT_SetGadgetAttrs(GadgetArray[GAD_UP],PanelWindow,NULL,
  508.                                         GA_Disabled,    FALSE,
  509.                                     TAG_DONE);
  510.                                 }
  511.                                 else
  512.                                 {
  513.                                     GT_SetGadgetAttrs(GadgetArray[GAD_TOP],PanelWindow,NULL,
  514.                                         GA_Disabled,    TRUE,
  515.                                     TAG_DONE);
  516.  
  517.                                     GT_SetGadgetAttrs(GadgetArray[GAD_UP],PanelWindow,NULL,
  518.                                         GA_Disabled,    TRUE,
  519.                                     TAG_DONE);
  520.                                 }
  521.  
  522.                                 FastMacrosChanged = TRUE;
  523.  
  524.                                 break;
  525.  
  526.                             case GAD_NEW:
  527.  
  528.                                 if(Node = NewFastMacro(LocaleString(MSG_FASTMACROPANEL_UNNAMED_TXT),""))
  529.                                 {
  530.                                     GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  531.                                         GTLV_Labels,    ~0,
  532.                                     TAG_DONE);
  533.  
  534.                                     AddTail(&FastMacroList,(struct Node *)Node);
  535.  
  536.                                     RefreshFastWindow(TRUE);
  537.  
  538.                                     GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  539.                                         GTLV_Labels,    &FastMacroList,
  540.                                         GTLV_Selected,    FastMacroCount++,
  541.                                     TAG_DONE);
  542.  
  543.                                     GT_SetGadgetAttrs(GadgetArray[GAD_CODE],PanelWindow,NULL,
  544.                                         GTST_String,    "",
  545.                                         GA_Disabled,    FALSE,
  546.                                     TAG_DONE);
  547.  
  548.                                     GT_SetGadgetAttrs(GadgetArray[GAD_MACRO],PanelWindow,NULL,
  549.                                         GTST_String,    Node -> mn_Macro,
  550.                                         GA_Disabled,    FALSE,
  551.                                     TAG_DONE);
  552.  
  553.                                     GT_SetGadgetAttrs(GadgetArray[GAD_REMOVE],PanelWindow,NULL,
  554.                                         GA_Disabled,    FALSE,
  555.                                     TAG_DONE);
  556.  
  557.                                     GT_SetGadgetAttrs(GadgetArray[GAD_SAVE],PanelWindow,NULL,
  558.                                         GA_Disabled,    FALSE,
  559.                                     TAG_DONE);
  560.  
  561.                                     if(FastMacroCount > 1)
  562.                                     {
  563.                                         GT_SetGadgetAttrs(GadgetArray[GAD_TOP],PanelWindow,NULL,
  564.                                             GA_Disabled,    FALSE,
  565.                                         TAG_DONE);
  566.  
  567.                                         GT_SetGadgetAttrs(GadgetArray[GAD_UP],PanelWindow,NULL,
  568.                                             GA_Disabled,    FALSE,
  569.                                         TAG_DONE);
  570.                                     }
  571.                                     else
  572.                                     {
  573.                                         GT_SetGadgetAttrs(GadgetArray[GAD_TOP],PanelWindow,NULL,
  574.                                             GA_Disabled,    TRUE,
  575.                                         TAG_DONE);
  576.  
  577.                                         GT_SetGadgetAttrs(GadgetArray[GAD_UP],PanelWindow,NULL,
  578.                                             GA_Disabled,    TRUE,
  579.                                         TAG_DONE);
  580.                                     }
  581.  
  582.                                     GT_SetGadgetAttrs(GadgetArray[GAD_DOWN],PanelWindow,NULL,
  583.                                         GA_Disabled,    FALSE,
  584.                                     TAG_DONE);
  585.  
  586.                                     GT_SetGadgetAttrs(GadgetArray[GAD_END],PanelWindow,NULL,
  587.                                         GA_Disabled,    FALSE,
  588.                                     TAG_DONE);
  589.  
  590.                                     Selected = Node;
  591.  
  592.                                     Offset = Code;
  593.  
  594.                                     ActivateGadget(GadgetArray[GAD_MACRO],PanelWindow,NULL);
  595.  
  596.                                     ActiveGadget = GadgetArray[GAD_MACRO];
  597.  
  598.                                     FastMacrosChanged = TRUE;
  599.                                 }
  600.                                 else
  601.                                     DisplayBeep(Window -> WScreen);
  602.  
  603.                                 break;
  604.  
  605.                             case GAD_REMOVE:
  606.  
  607.                                 if(Selected)
  608.                                 {
  609.                                     GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  610.                                         GTLV_Labels,    ~0,
  611.                                     TAG_DONE);
  612.  
  613.                                     if(--FastMacroCount)
  614.                                     {
  615.                                         if(Selected -> mn_Succ -> mn_Succ)
  616.                                             Node = Selected -> mn_Succ;
  617.                                         else
  618.                                         {
  619.                                             Node = Selected -> mn_Pred;
  620.  
  621.                                             Offset = 0;
  622.                                         }
  623.                                     }
  624.  
  625.                                     RemFastMacro(Selected);
  626.  
  627.                                     RefreshFastWindow(TRUE);
  628.  
  629.                                     GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  630.                                         GTLV_Labels,    &FastMacroList,
  631.                                         GTLV_Selected,    Node -> mn_Succ ? GetFastMacroOffset(Node) : ~0,
  632.                                     TAG_DONE);
  633.  
  634.                                     if(FastMacroCount < 2)
  635.                                     {
  636.                                         GT_SetGadgetAttrs(GadgetArray[GAD_TOP],PanelWindow,NULL,
  637.                                             GA_Disabled,    TRUE,
  638.                                         TAG_DONE);
  639.  
  640.                                         GT_SetGadgetAttrs(GadgetArray[GAD_UP],PanelWindow,NULL,
  641.                                             GA_Disabled,    TRUE,
  642.                                         TAG_DONE);
  643.  
  644.                                         GT_SetGadgetAttrs(GadgetArray[GAD_DOWN],PanelWindow,NULL,
  645.                                             GA_Disabled,    TRUE,
  646.                                         TAG_DONE);
  647.  
  648.                                         GT_SetGadgetAttrs(GadgetArray[GAD_END],PanelWindow,NULL,
  649.                                             GA_Disabled,    TRUE,
  650.                                         TAG_DONE);
  651.                                     }
  652.                                     else
  653.                                     {
  654.                                         if(FastMacroCount)
  655.                                         {
  656.                                             if(!Node -> mn_Succ -> mn_Succ)
  657.                                             {
  658.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_DOWN],PanelWindow,NULL,
  659.                                                     GA_Disabled,    TRUE,
  660.                                                 TAG_DONE);
  661.  
  662.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_END],PanelWindow,NULL,
  663.                                                     GA_Disabled,    TRUE,
  664.                                                 TAG_DONE);
  665.                                             }
  666.                                         }
  667.                                     }
  668.  
  669.                                     if(!FastMacroCount)
  670.                                     {
  671.                                         Selected = NULL;
  672.  
  673.                                         GT_SetGadgetAttrs(GadgetArray[GAD_CODE],PanelWindow,NULL,
  674.                                             GTST_String,    "",
  675.                                             GA_Disabled,    TRUE,
  676.                                         TAG_DONE);
  677.  
  678.                                         GT_SetGadgetAttrs(GadgetArray[GAD_MACRO],PanelWindow,NULL,
  679.                                             GTST_String,    "",
  680.                                             GA_Disabled,    TRUE,
  681.                                         TAG_DONE);
  682.  
  683.                                         GT_SetGadgetAttrs(GadgetArray[GAD_REMOVE],PanelWindow,NULL,
  684.                                             GA_Disabled,    TRUE,
  685.                                         TAG_DONE);
  686.  
  687.                                         GT_SetGadgetAttrs(GadgetArray[GAD_SAVE],PanelWindow,NULL,
  688.                                             GA_Disabled,    TRUE,
  689.                                         TAG_DONE);
  690.  
  691.                                         ActiveGadget = NULL;
  692.                                     }
  693.                                     else
  694.                                     {
  695.                                         Selected = Node;
  696.  
  697.                                         GT_SetGadgetAttrs(GadgetArray[GAD_CODE],PanelWindow,NULL,
  698.                                             GTST_String,    Selected -> mn_Code,
  699.                                         TAG_DONE);
  700.  
  701.                                         GT_SetGadgetAttrs(GadgetArray[GAD_MACRO],PanelWindow,NULL,
  702.                                             GTST_String,    Selected -> mn_Macro,
  703.                                         TAG_DONE);
  704.                                     }
  705.  
  706.                                     FastMacrosChanged = TRUE;
  707.                                 }
  708.  
  709.                                 break;
  710.  
  711.                             case GAD_LIST:
  712.  
  713.                                 if(Selected = GetFastMacro(Code))
  714.                                 {
  715.                                     Offset = Code;
  716.  
  717.                                     GT_SetGadgetAttrs(GadgetArray[GAD_MACRO],PanelWindow,NULL,
  718.                                         GTST_String,    Selected -> mn_Macro,
  719.                                         GA_Disabled,    FALSE,
  720.                                     TAG_DONE);
  721.  
  722.                                     GT_SetGadgetAttrs(GadgetArray[GAD_CODE],PanelWindow,NULL,
  723.                                         GTST_String,    Selected -> mn_Code,
  724.                                         GA_Disabled,    FALSE,
  725.                                     TAG_DONE);
  726.  
  727.                                     GT_SetGadgetAttrs(GadgetArray[GAD_REMOVE],PanelWindow,NULL,
  728.                                         GA_Disabled,    FALSE,
  729.                                     TAG_DONE);
  730.  
  731.                                     if(Selected -> mn_Pred -> mn_Pred)
  732.                                     {
  733.                                         GT_SetGadgetAttrs(GadgetArray[GAD_TOP],PanelWindow,NULL,
  734.                                             GA_Disabled,    FALSE,
  735.                                         TAG_DONE);
  736.  
  737.                                         GT_SetGadgetAttrs(GadgetArray[GAD_UP],PanelWindow,NULL,
  738.                                             GA_Disabled,    FALSE,
  739.                                         TAG_DONE);
  740.                                     }
  741.                                     else
  742.                                     {
  743.                                         GT_SetGadgetAttrs(GadgetArray[GAD_TOP],PanelWindow,NULL,
  744.                                             GA_Disabled,    TRUE,
  745.                                         TAG_DONE);
  746.  
  747.                                         GT_SetGadgetAttrs(GadgetArray[GAD_UP],PanelWindow,NULL,
  748.                                             GA_Disabled,    TRUE,
  749.                                         TAG_DONE);
  750.                                     }
  751.  
  752.                                     if(Selected -> mn_Succ -> mn_Succ)
  753.                                     {
  754.                                         GT_SetGadgetAttrs(GadgetArray[GAD_DOWN],PanelWindow,NULL,
  755.                                             GA_Disabled,    FALSE,
  756.                                         TAG_DONE);
  757.  
  758.                                         GT_SetGadgetAttrs(GadgetArray[GAD_END],PanelWindow,NULL,
  759.                                             GA_Disabled,    FALSE,
  760.                                         TAG_DONE);
  761.                                     }
  762.                                     else
  763.                                     {
  764.                                         GT_SetGadgetAttrs(GadgetArray[GAD_DOWN],PanelWindow,NULL,
  765.                                             GA_Disabled,    TRUE,
  766.                                         TAG_DONE);
  767.  
  768.                                         GT_SetGadgetAttrs(GadgetArray[GAD_END],PanelWindow,NULL,
  769.                                             GA_Disabled,    TRUE,
  770.                                         TAG_DONE);
  771.                                     }
  772.                                 }
  773.  
  774.                                 break;
  775.  
  776.                             case GAD_MACRO:
  777.  
  778.                                 if(Selected)
  779.                                 {
  780.                                     GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  781.                                         GTLV_Labels,    ~0,
  782.                                     TAG_DONE);
  783.  
  784.                                     strcpy(Selected -> mn_Macro,SZ_GetString(Gadget));
  785.  
  786.                                     RefreshFastWindow(TRUE);
  787.  
  788.                                     GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  789.                                         GTLV_Labels,    &FastMacroList,
  790.                                         GTLV_Selected,    GetFastMacroOffset(Selected),
  791.                                     TAG_DONE);
  792.  
  793.                                     GT_SetGadgetAttrs(GadgetArray[GAD_CODE],PanelWindow,NULL,
  794.                                         GTST_String,    Selected -> mn_Code,
  795.                                     TAG_DONE);
  796.  
  797.                                     FastMacrosChanged = TRUE;
  798.  
  799.                                     ActivateGadget(ActiveGadget = GadgetArray[GAD_CODE],PanelWindow,NULL);
  800.                                 }
  801.  
  802.                                 break;
  803.  
  804.                             case GAD_CODE:
  805.  
  806.                                 if(Selected)
  807.                                 {
  808.                                     strcpy(Selected -> mn_Code,SZ_GetString(Gadget));
  809.  
  810.                                     FastMacrosChanged = TRUE;
  811.                                 }
  812.  
  813.                                 break;
  814.  
  815.                             case GAD_LOAD:
  816.  
  817.                                 strcpy(DummyBuffer,LastFastMacros);
  818.  
  819.                                 DummyChar = PathPart(DummyBuffer);
  820.  
  821.                                 *DummyChar = 0;
  822.  
  823.                                 BlockWindow(PanelWindow);
  824.  
  825.                                 if(FileRequest = GetFile(LocaleString(MSG_FASTMACROPANEL_LOAD_FAST_MACRO_SETTINGS_TXT),DummyBuffer,FilePart(LastFastMacros),DummyBuffer,"#?.prefs",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_LOAD_TXT),TRUE))
  826.                                 {
  827.                                     GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  828.                                         GTLV_Labels,    ~0,
  829.                                     TAG_DONE);
  830.  
  831.                                     Selected = NULL;
  832.  
  833.                                     if(!LoadFastMacros(DummyBuffer))
  834.                                         MyEasyRequest(Window,LocaleString(MSG_FASTMACROPANEL_COULD_NOT_LOAD_FAST_MACRO_SETTINGS_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT),DummyBuffer);
  835.                                     else
  836.                                     {
  837.                                         strcpy(Config -> FileConfig -> FastMacroFileName,DummyBuffer);
  838.  
  839.                                         strcpy(LastFastMacros,DummyBuffer);
  840.  
  841.                                         FastMacrosChanged = FALSE;
  842.                                     }
  843.  
  844.                                     GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  845.                                         GTLV_Labels,    &FastMacroList,
  846.                                     TAG_DONE);
  847.  
  848.                                     GT_SetGadgetAttrs(GadgetArray[GAD_CODE],PanelWindow,NULL,
  849.                                         GTST_String,    "",
  850.                                         GA_Disabled,    TRUE,
  851.                                     TAG_DONE);
  852.  
  853.                                     GT_SetGadgetAttrs(GadgetArray[GAD_MACRO],PanelWindow,NULL,
  854.                                         GTST_String,    "",
  855.                                         GA_Disabled,    TRUE,
  856.                                     TAG_DONE);
  857.  
  858.                                     GT_SetGadgetAttrs(GadgetArray[GAD_REMOVE],PanelWindow,NULL,
  859.                                         GA_Disabled,    TRUE,
  860.                                     TAG_DONE);
  861.  
  862.                                     GT_SetGadgetAttrs(GadgetArray[GAD_TOP],PanelWindow,NULL,
  863.                                         GA_Disabled,    TRUE,
  864.                                     TAG_DONE);
  865.  
  866.                                     GT_SetGadgetAttrs(GadgetArray[GAD_UP],PanelWindow,NULL,
  867.                                         GA_Disabled,    TRUE,
  868.                                     TAG_DONE);
  869.  
  870.                                     GT_SetGadgetAttrs(GadgetArray[GAD_DOWN],PanelWindow,NULL,
  871.                                         GA_Disabled,    TRUE,
  872.                                     TAG_DONE);
  873.  
  874.                                     GT_SetGadgetAttrs(GadgetArray[GAD_END],PanelWindow,NULL,
  875.                                         GA_Disabled,    TRUE,
  876.                                     TAG_DONE);
  877.  
  878.                                     ActiveGadget = NULL;
  879.  
  880.                                     RefreshFastWindow(TRUE);
  881.                                 }
  882.  
  883.                                 if(FastMacroList . lh_Head -> ln_Succ)
  884.                                 {
  885.                                     GT_SetGadgetAttrs(GadgetArray[GAD_SAVE],PanelWindow,NULL,
  886.                                         GA_Disabled,    FALSE,
  887.                                     TAG_DONE);
  888.                                 }
  889.                                 else
  890.                                 {
  891.                                     GT_SetGadgetAttrs(GadgetArray[GAD_SAVE],PanelWindow,NULL,
  892.                                         GA_Disabled,    TRUE,
  893.                                     TAG_DONE);
  894.                                 }
  895.  
  896.                                 ReleaseWindow(PanelWindow);
  897.  
  898.                                 break;
  899.  
  900.                             case GAD_SAVE:
  901.  
  902.                                 strcpy(DummyBuffer,LastFastMacros);
  903.  
  904.                                 DummyChar = PathPart(DummyBuffer);
  905.  
  906.                                 *DummyChar = 0;
  907.  
  908.                                 BlockWindow(PanelWindow);
  909.  
  910.                                 if(FileRequest = GetFile(LocaleString(MSG_FASTMACROPANEL_SAVE_FAST_MACRO_SETTINGS_TXT),DummyBuffer,FilePart(LastFastMacros),DummyBuffer,"#?.prefs",TRUE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SAVE_TXT),TRUE))
  911.                                 {
  912.                                     if(!SaveFastMacros(DummyBuffer))
  913.                                         MyEasyRequest(Window,LocaleString(MSG_FASTMACROPANEL_COULD_NOT_SAVE_FAST_MACRO_SETTINGS_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT),DummyBuffer);
  914.                                     else
  915.                                     {
  916.                                         strcpy(LastFastMacros,DummyBuffer);
  917.  
  918.                                         FastMacrosChanged = FALSE;
  919.                                     }
  920.                                 }
  921.  
  922.                                 ReleaseWindow(PanelWindow);
  923.  
  924.                                 break;
  925.                         }
  926.                     }
  927.                 }
  928.             }
  929.  
  930.             RemoveGList(PanelWindow,GadgetList,(UWORD)-1);
  931.  
  932.             PopWindow();
  933.  
  934.             CloseWindow(PanelWindow);
  935.         }
  936.     }
  937.  
  938.     FreeGadgets(GadgetList);
  939. }
  940.