home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / alib / d8xx / d832 / term.lha / Term / term-3.1-Source.lha / FastMacroPanel.c < prev    next >
C/C++ Source or Header  |  1993-02-18  |  27KB  |  1,036 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.             SetSignal(0,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.                                 if(FastWindow)
  291.                                 {
  292.                                     GT_SetGadgetAttrs(FastGadget,FastWindow,NULL,
  293.                                         GTLV_Labels,    ~0,
  294.                                     TAG_DONE);
  295.                                 }
  296.  
  297.                                 Remove((struct Node *)Selected);
  298.  
  299.                                 AddHead(&FastMacroList,(struct Node *)Selected);
  300.  
  301.                                 if(FastWindow)
  302.                                 {
  303.                                     GT_SetGadgetAttrs(FastGadget,FastWindow,NULL,
  304.                                         GTLV_Labels,    &FastMacroList,
  305.                                     TAG_DONE);
  306.                                 }
  307.  
  308.                                 Offset = 0;
  309.  
  310.                                 GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  311.                                     GTLV_Labels,    &FastMacroList,
  312.                                     GTLV_Selected,    Offset,
  313.                                     GTLV_Top,    Offset,
  314.                                 TAG_DONE);
  315.  
  316.                                 GT_SetGadgetAttrs(GadgetArray[GAD_TOP],PanelWindow,NULL,
  317.                                     GA_Disabled,    TRUE,
  318.                                 TAG_DONE);
  319.  
  320.                                 GT_SetGadgetAttrs(GadgetArray[GAD_UP],PanelWindow,NULL,
  321.                                     GA_Disabled,    TRUE,
  322.                                 TAG_DONE);
  323.  
  324.                                 if(Selected -> mn_Succ -> mn_Succ)
  325.                                 {
  326.                                     GT_SetGadgetAttrs(GadgetArray[GAD_DOWN],PanelWindow,NULL,
  327.                                         GA_Disabled,    FALSE,
  328.                                     TAG_DONE);
  329.  
  330.                                     GT_SetGadgetAttrs(GadgetArray[GAD_END],PanelWindow,NULL,
  331.                                         GA_Disabled,    FALSE,
  332.                                     TAG_DONE);
  333.                                 }
  334.                                 else
  335.                                 {
  336.                                     GT_SetGadgetAttrs(GadgetArray[GAD_DOWN],PanelWindow,NULL,
  337.                                         GA_Disabled,    TRUE,
  338.                                     TAG_DONE);
  339.  
  340.                                     GT_SetGadgetAttrs(GadgetArray[GAD_END],PanelWindow,NULL,
  341.                                         GA_Disabled,    TRUE,
  342.                                     TAG_DONE);
  343.                                 }
  344.  
  345.                                 FastMacrosChanged = TRUE;
  346.  
  347.                                 break;
  348.  
  349.                             case GAD_UP:
  350.  
  351.                                 GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  352.                                     GTLV_Labels,    ~0,
  353.                                 TAG_DONE);
  354.  
  355.                                 if(FastWindow)
  356.                                 {
  357.                                     GT_SetGadgetAttrs(FastGadget,FastWindow,NULL,
  358.                                         GTLV_Labels,    ~0,
  359.                                     TAG_DONE);
  360.                                 }
  361.  
  362.                                 Node = Selected -> mn_Pred -> mn_Pred;
  363.  
  364.                                 Remove((struct Node *)Selected);
  365.  
  366.                                 Insert(&FastMacroList,(struct Node *)Selected,(struct Node *)Node);
  367.  
  368.                                 if(FastWindow)
  369.                                 {
  370.                                     GT_SetGadgetAttrs(FastGadget,FastWindow,NULL,
  371.                                         GTLV_Labels,    &FastMacroList,
  372.                                     TAG_DONE);
  373.                                 }
  374.  
  375.                                 Offset--;
  376.  
  377.                                 GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  378.                                     GTLV_Labels,    &FastMacroList,
  379.                                     GTLV_Selected,    Offset,
  380.                                     GTLV_Top,    Offset,
  381.                                 TAG_DONE);
  382.  
  383.                                 if(Selected -> mn_Pred -> mn_Pred)
  384.                                 {
  385.                                     GT_SetGadgetAttrs(GadgetArray[GAD_TOP],PanelWindow,NULL,
  386.                                         GA_Disabled,    FALSE,
  387.                                     TAG_DONE);
  388.  
  389.                                     GT_SetGadgetAttrs(GadgetArray[GAD_UP],PanelWindow,NULL,
  390.                                         GA_Disabled,    FALSE,
  391.                                     TAG_DONE);
  392.                                 }
  393.                                 else
  394.                                 {
  395.                                     GT_SetGadgetAttrs(GadgetArray[GAD_TOP],PanelWindow,NULL,
  396.                                         GA_Disabled,    TRUE,
  397.                                     TAG_DONE);
  398.  
  399.                                     GT_SetGadgetAttrs(GadgetArray[GAD_UP],PanelWindow,NULL,
  400.                                         GA_Disabled,    TRUE,
  401.                                     TAG_DONE);
  402.                                 }
  403.  
  404.                                 if(Selected -> mn_Succ -> mn_Succ)
  405.                                 {
  406.                                     GT_SetGadgetAttrs(GadgetArray[GAD_DOWN],PanelWindow,NULL,
  407.                                         GA_Disabled,    FALSE,
  408.                                     TAG_DONE);
  409.  
  410.                                     GT_SetGadgetAttrs(GadgetArray[GAD_END],PanelWindow,NULL,
  411.                                         GA_Disabled,    FALSE,
  412.                                     TAG_DONE);
  413.                                 }
  414.                                 else
  415.                                 {
  416.                                     GT_SetGadgetAttrs(GadgetArray[GAD_DOWN],PanelWindow,NULL,
  417.                                         GA_Disabled,    TRUE,
  418.                                     TAG_DONE);
  419.  
  420.                                     GT_SetGadgetAttrs(GadgetArray[GAD_END],PanelWindow,NULL,
  421.                                         GA_Disabled,    TRUE,
  422.                                     TAG_DONE);
  423.                                 }
  424.  
  425.                                 FastMacrosChanged = TRUE;
  426.  
  427.                                 break;
  428.  
  429.                             case GAD_DOWN:
  430.  
  431.                                 GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  432.                                     GTLV_Labels,    ~0,
  433.                                 TAG_DONE);
  434.  
  435.                                 if(FastWindow)
  436.                                 {
  437.                                     GT_SetGadgetAttrs(FastGadget,FastWindow,NULL,
  438.                                         GTLV_Labels,    ~0,
  439.                                     TAG_DONE);
  440.                                 }
  441.  
  442.                                 Node = Selected -> mn_Succ;
  443.  
  444.                                 Remove((struct Node *)Selected);
  445.  
  446.                                 Insert(&FastMacroList,(struct Node *)Selected,(struct Node *)Node);
  447.  
  448.                                 if(FastWindow)
  449.                                 {
  450.                                     GT_SetGadgetAttrs(FastGadget,FastWindow,NULL,
  451.                                         GTLV_Labels,    &FastMacroList,
  452.                                     TAG_DONE);
  453.                                 }
  454.  
  455.                                 Offset++;
  456.  
  457.                                 GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  458.                                     GTLV_Labels,    &FastMacroList,
  459.                                     GTLV_Selected,    Offset,
  460.                                     GTLV_Top,    Offset,
  461.                                 TAG_DONE);
  462.  
  463.                                 if(Selected -> mn_Pred -> mn_Pred)
  464.                                 {
  465.                                     GT_SetGadgetAttrs(GadgetArray[GAD_TOP],PanelWindow,NULL,
  466.                                         GA_Disabled,    FALSE,
  467.                                     TAG_DONE);
  468.  
  469.                                     GT_SetGadgetAttrs(GadgetArray[GAD_UP],PanelWindow,NULL,
  470.                                         GA_Disabled,    FALSE,
  471.                                     TAG_DONE);
  472.                                 }
  473.                                 else
  474.                                 {
  475.                                     GT_SetGadgetAttrs(GadgetArray[GAD_TOP],PanelWindow,NULL,
  476.                                         GA_Disabled,    TRUE,
  477.                                     TAG_DONE);
  478.  
  479.                                     GT_SetGadgetAttrs(GadgetArray[GAD_UP],PanelWindow,NULL,
  480.                                         GA_Disabled,    TRUE,
  481.                                     TAG_DONE);
  482.                                 }
  483.  
  484.                                 if(Selected -> mn_Succ -> mn_Succ)
  485.                                 {
  486.                                     GT_SetGadgetAttrs(GadgetArray[GAD_DOWN],PanelWindow,NULL,
  487.                                         GA_Disabled,    FALSE,
  488.                                     TAG_DONE);
  489.  
  490.                                     GT_SetGadgetAttrs(GadgetArray[GAD_END],PanelWindow,NULL,
  491.                                         GA_Disabled,    FALSE,
  492.                                     TAG_DONE);
  493.                                 }
  494.                                 else
  495.                                 {
  496.                                     GT_SetGadgetAttrs(GadgetArray[GAD_DOWN],PanelWindow,NULL,
  497.                                         GA_Disabled,    TRUE,
  498.                                     TAG_DONE);
  499.  
  500.                                     GT_SetGadgetAttrs(GadgetArray[GAD_END],PanelWindow,NULL,
  501.                                         GA_Disabled,    TRUE,
  502.                                     TAG_DONE);
  503.                                 }
  504.  
  505.                                 FastMacrosChanged = TRUE;
  506.  
  507.                                 break;
  508.  
  509.                             case GAD_END:
  510.  
  511.                                 GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  512.                                     GTLV_Labels,    ~0,
  513.                                 TAG_DONE);
  514.  
  515.                                 if(FastWindow)
  516.                                 {
  517.                                     GT_SetGadgetAttrs(FastGadget,FastWindow,NULL,
  518.                                         GTLV_Labels,    ~0,
  519.                                     TAG_DONE);
  520.                                 }
  521.  
  522.                                 Remove((struct Node *)Selected);
  523.  
  524.                                 AddTail(&FastMacroList,(struct Node *)Selected);
  525.  
  526.                                 if(FastWindow)
  527.                                 {
  528.                                     GT_SetGadgetAttrs(FastGadget,FastWindow,NULL,
  529.                                         GTLV_Labels,    &FastMacroList,
  530.                                     TAG_DONE);
  531.                                 }
  532.  
  533.                                 Offset = FastMacroCount - 1;
  534.  
  535.                                 GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  536.                                     GTLV_Labels,    &FastMacroList,
  537.                                     GTLV_Selected,    Offset,
  538.                                     GTLV_Top,    Offset,
  539.                                 TAG_DONE);
  540.  
  541.                                 GT_SetGadgetAttrs(GadgetArray[GAD_DOWN],PanelWindow,NULL,
  542.                                     GA_Disabled,    TRUE,
  543.                                 TAG_DONE);
  544.  
  545.                                 GT_SetGadgetAttrs(GadgetArray[GAD_END],PanelWindow,NULL,
  546.                                     GA_Disabled,    TRUE,
  547.                                 TAG_DONE);
  548.  
  549.                                 if(Selected -> mn_Pred -> mn_Pred)
  550.                                 {
  551.                                     GT_SetGadgetAttrs(GadgetArray[GAD_TOP],PanelWindow,NULL,
  552.                                         GA_Disabled,    FALSE,
  553.                                     TAG_DONE);
  554.  
  555.                                     GT_SetGadgetAttrs(GadgetArray[GAD_UP],PanelWindow,NULL,
  556.                                         GA_Disabled,    FALSE,
  557.                                     TAG_DONE);
  558.                                 }
  559.                                 else
  560.                                 {
  561.                                     GT_SetGadgetAttrs(GadgetArray[GAD_TOP],PanelWindow,NULL,
  562.                                         GA_Disabled,    TRUE,
  563.                                     TAG_DONE);
  564.  
  565.                                     GT_SetGadgetAttrs(GadgetArray[GAD_UP],PanelWindow,NULL,
  566.                                         GA_Disabled,    TRUE,
  567.                                     TAG_DONE);
  568.                                 }
  569.  
  570.                                 FastMacrosChanged = TRUE;
  571.  
  572.                                 break;
  573.  
  574.                             case GAD_NEW:
  575.  
  576.                                 if(Node = NewFastMacro(LocaleString(MSG_FASTMACROPANEL_UNNAMED_TXT),""))
  577.                                 {
  578.                                     GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  579.                                         GTLV_Labels,    ~0,
  580.                                     TAG_DONE);
  581.  
  582.                                     if(FastWindow)
  583.                                     {
  584.                                         GT_SetGadgetAttrs(FastGadget,FastWindow,NULL,
  585.                                             GTLV_Labels,    ~0,
  586.                                         TAG_DONE);
  587.                                     }
  588.  
  589.                                     AddTail(&FastMacroList,(struct Node *)Node);
  590.  
  591.                                     if(FastWindow)
  592.                                     {
  593.                                         GT_SetGadgetAttrs(FastGadget,FastWindow,NULL,
  594.                                             GTLV_Labels,    &FastMacroList,
  595.                                         TAG_DONE);
  596.                                     }
  597.  
  598.                                     GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  599.                                         GTLV_Labels,    &FastMacroList,
  600.                                         GTLV_Selected,    FastMacroCount++,
  601.                                     TAG_DONE);
  602.  
  603.                                     GT_SetGadgetAttrs(GadgetArray[GAD_CODE],PanelWindow,NULL,
  604.                                         GTST_String,    "",
  605.                                         GA_Disabled,    FALSE,
  606.                                     TAG_DONE);
  607.  
  608.                                     GT_SetGadgetAttrs(GadgetArray[GAD_MACRO],PanelWindow,NULL,
  609.                                         GTST_String,    Node -> mn_Macro,
  610.                                         GA_Disabled,    FALSE,
  611.                                     TAG_DONE);
  612.  
  613.                                     GT_SetGadgetAttrs(GadgetArray[GAD_REMOVE],PanelWindow,NULL,
  614.                                         GA_Disabled,    FALSE,
  615.                                     TAG_DONE);
  616.  
  617.                                     GT_SetGadgetAttrs(GadgetArray[GAD_SAVE],PanelWindow,NULL,
  618.                                         GA_Disabled,    FALSE,
  619.                                     TAG_DONE);
  620.  
  621.                                     if(FastMacroCount > 1)
  622.                                     {
  623.                                         GT_SetGadgetAttrs(GadgetArray[GAD_TOP],PanelWindow,NULL,
  624.                                             GA_Disabled,    FALSE,
  625.                                         TAG_DONE);
  626.  
  627.                                         GT_SetGadgetAttrs(GadgetArray[GAD_UP],PanelWindow,NULL,
  628.                                             GA_Disabled,    FALSE,
  629.                                         TAG_DONE);
  630.                                     }
  631.                                     else
  632.                                     {
  633.                                         GT_SetGadgetAttrs(GadgetArray[GAD_TOP],PanelWindow,NULL,
  634.                                             GA_Disabled,    TRUE,
  635.                                         TAG_DONE);
  636.  
  637.                                         GT_SetGadgetAttrs(GadgetArray[GAD_UP],PanelWindow,NULL,
  638.                                             GA_Disabled,    TRUE,
  639.                                         TAG_DONE);
  640.                                     }
  641.  
  642.                                     GT_SetGadgetAttrs(GadgetArray[GAD_DOWN],PanelWindow,NULL,
  643.                                         GA_Disabled,    FALSE,
  644.                                     TAG_DONE);
  645.  
  646.                                     GT_SetGadgetAttrs(GadgetArray[GAD_END],PanelWindow,NULL,
  647.                                         GA_Disabled,    FALSE,
  648.                                     TAG_DONE);
  649.  
  650.                                     Selected = Node;
  651.  
  652.                                     Offset = Code;
  653.  
  654.                                     ActivateGadget(GadgetArray[GAD_MACRO],PanelWindow,NULL);
  655.  
  656.                                     ActiveGadget = GadgetArray[GAD_MACRO];
  657.  
  658.                                     FastMacrosChanged = TRUE;
  659.                                 }
  660.                                 else
  661.                                     DisplayBeep(Window -> WScreen);
  662.  
  663.                                 break;
  664.  
  665.                             case GAD_REMOVE:
  666.  
  667.                                 if(Selected)
  668.                                 {
  669.                                     GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  670.                                         GTLV_Labels,    ~0,
  671.                                     TAG_DONE);
  672.  
  673.                                     if(FastWindow)
  674.                                     {
  675.                                         GT_SetGadgetAttrs(FastGadget,FastWindow,NULL,
  676.                                             GTLV_Labels,    ~0,
  677.                                         TAG_DONE);
  678.                                     }
  679.  
  680.                                     if(--FastMacroCount)
  681.                                     {
  682.                                         if(Selected -> mn_Succ -> mn_Succ)
  683.                                             Node = Selected -> mn_Succ;
  684.                                         else
  685.                                         {
  686.                                             Node = Selected -> mn_Pred;
  687.  
  688.                                             Offset = 0;
  689.                                         }
  690.                                     }
  691.  
  692.                                     RemFastMacro(Selected);
  693.  
  694.                                     if(FastWindow)
  695.                                     {
  696.                                         GT_SetGadgetAttrs(FastGadget,FastWindow,NULL,
  697.                                             GTLV_Labels,    &FastMacroList,
  698.                                         TAG_DONE);
  699.                                     }
  700.  
  701.                                     GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  702.                                         GTLV_Labels,    &FastMacroList,
  703.                                         GTLV_Selected,    Node -> mn_Succ ? GetFastMacroOffset(Node) : ~0,
  704.                                     TAG_DONE);
  705.  
  706.                                     if(FastMacroCount < 2)
  707.                                     {
  708.                                         GT_SetGadgetAttrs(GadgetArray[GAD_TOP],PanelWindow,NULL,
  709.                                             GA_Disabled,    TRUE,
  710.                                         TAG_DONE);
  711.  
  712.                                         GT_SetGadgetAttrs(GadgetArray[GAD_UP],PanelWindow,NULL,
  713.                                             GA_Disabled,    TRUE,
  714.                                         TAG_DONE);
  715.  
  716.                                         GT_SetGadgetAttrs(GadgetArray[GAD_DOWN],PanelWindow,NULL,
  717.                                             GA_Disabled,    TRUE,
  718.                                         TAG_DONE);
  719.  
  720.                                         GT_SetGadgetAttrs(GadgetArray[GAD_END],PanelWindow,NULL,
  721.                                             GA_Disabled,    TRUE,
  722.                                         TAG_DONE);
  723.                                     }
  724.                                     else
  725.                                     {
  726.                                         if(FastMacroCount)
  727.                                         {
  728.                                             if(!Node -> mn_Succ -> mn_Succ)
  729.                                             {
  730.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_DOWN],PanelWindow,NULL,
  731.                                                     GA_Disabled,    TRUE,
  732.                                                 TAG_DONE);
  733.  
  734.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_END],PanelWindow,NULL,
  735.                                                     GA_Disabled,    TRUE,
  736.                                                 TAG_DONE);
  737.                                             }
  738.                                         }
  739.                                     }
  740.  
  741.                                     if(!FastMacroCount)
  742.                                     {
  743.                                         Selected = NULL;
  744.  
  745.                                         GT_SetGadgetAttrs(GadgetArray[GAD_CODE],PanelWindow,NULL,
  746.                                             GTST_String,    "",
  747.                                             GA_Disabled,    TRUE,
  748.                                         TAG_DONE);
  749.  
  750.                                         GT_SetGadgetAttrs(GadgetArray[GAD_MACRO],PanelWindow,NULL,
  751.                                             GTST_String,    "",
  752.                                             GA_Disabled,    TRUE,
  753.                                         TAG_DONE);
  754.  
  755.                                         GT_SetGadgetAttrs(GadgetArray[GAD_REMOVE],PanelWindow,NULL,
  756.                                             GA_Disabled,    TRUE,
  757.                                         TAG_DONE);
  758.  
  759.                                         GT_SetGadgetAttrs(GadgetArray[GAD_SAVE],PanelWindow,NULL,
  760.                                             GA_Disabled,    TRUE,
  761.                                         TAG_DONE);
  762.  
  763.                                         ActiveGadget = NULL;
  764.                                     }
  765.                                     else
  766.                                     {
  767.                                         Selected = Node;
  768.  
  769.                                         GT_SetGadgetAttrs(GadgetArray[GAD_CODE],PanelWindow,NULL,
  770.                                             GTST_String,    Selected -> mn_Code,
  771.                                         TAG_DONE);
  772.  
  773.                                         GT_SetGadgetAttrs(GadgetArray[GAD_MACRO],PanelWindow,NULL,
  774.                                             GTST_String,    Selected -> mn_Macro,
  775.                                         TAG_DONE);
  776.                                     }
  777.  
  778.                                     FastMacrosChanged = TRUE;
  779.                                 }
  780.  
  781.                                 break;
  782.  
  783.                             case GAD_LIST:
  784.  
  785.                                 if(Selected = GetFastMacro(Code))
  786.                                 {
  787.                                     Offset = Code;
  788.  
  789.                                     GT_SetGadgetAttrs(GadgetArray[GAD_MACRO],PanelWindow,NULL,
  790.                                         GTST_String,    Selected -> mn_Macro,
  791.                                         GA_Disabled,    FALSE,
  792.                                     TAG_DONE);
  793.  
  794.                                     GT_SetGadgetAttrs(GadgetArray[GAD_CODE],PanelWindow,NULL,
  795.                                         GTST_String,    Selected -> mn_Code,
  796.                                         GA_Disabled,    FALSE,
  797.                                     TAG_DONE);
  798.  
  799.                                     GT_SetGadgetAttrs(GadgetArray[GAD_REMOVE],PanelWindow,NULL,
  800.                                         GA_Disabled,    FALSE,
  801.                                     TAG_DONE);
  802.  
  803.                                     if(Selected -> mn_Pred -> mn_Pred)
  804.                                     {
  805.                                         GT_SetGadgetAttrs(GadgetArray[GAD_TOP],PanelWindow,NULL,
  806.                                             GA_Disabled,    FALSE,
  807.                                         TAG_DONE);
  808.  
  809.                                         GT_SetGadgetAttrs(GadgetArray[GAD_UP],PanelWindow,NULL,
  810.                                             GA_Disabled,    FALSE,
  811.                                         TAG_DONE);
  812.                                     }
  813.                                     else
  814.                                     {
  815.                                         GT_SetGadgetAttrs(GadgetArray[GAD_TOP],PanelWindow,NULL,
  816.                                             GA_Disabled,    TRUE,
  817.                                         TAG_DONE);
  818.  
  819.                                         GT_SetGadgetAttrs(GadgetArray[GAD_UP],PanelWindow,NULL,
  820.                                             GA_Disabled,    TRUE,
  821.                                         TAG_DONE);
  822.                                     }
  823.  
  824.                                     if(Selected -> mn_Succ -> mn_Succ)
  825.                                     {
  826.                                         GT_SetGadgetAttrs(GadgetArray[GAD_DOWN],PanelWindow,NULL,
  827.                                             GA_Disabled,    FALSE,
  828.                                         TAG_DONE);
  829.  
  830.                                         GT_SetGadgetAttrs(GadgetArray[GAD_END],PanelWindow,NULL,
  831.                                             GA_Disabled,    FALSE,
  832.                                         TAG_DONE);
  833.                                     }
  834.                                     else
  835.                                     {
  836.                                         GT_SetGadgetAttrs(GadgetArray[GAD_DOWN],PanelWindow,NULL,
  837.                                             GA_Disabled,    TRUE,
  838.                                         TAG_DONE);
  839.  
  840.                                         GT_SetGadgetAttrs(GadgetArray[GAD_END],PanelWindow,NULL,
  841.                                             GA_Disabled,    TRUE,
  842.                                         TAG_DONE);
  843.                                     }
  844.                                 }
  845.  
  846.                                 break;
  847.  
  848.                             case GAD_MACRO:
  849.  
  850.                                 if(Selected)
  851.                                 {
  852.                                     GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  853.                                         GTLV_Labels,    ~0,
  854.                                     TAG_DONE);
  855.  
  856.                                     if(FastWindow)
  857.                                     {
  858.                                         GT_SetGadgetAttrs(FastGadget,FastWindow,NULL,
  859.                                             GTLV_Labels,    ~0,
  860.                                         TAG_DONE);
  861.                                     }
  862.  
  863.                                     strcpy(Selected -> mn_Macro,SZ_GetString(Gadget));
  864.  
  865.                                     if(FastWindow)
  866.                                     {
  867.                                         GT_SetGadgetAttrs(FastGadget,FastWindow,NULL,
  868.                                             GTLV_Labels,    &FastMacroList,
  869.                                         TAG_DONE);
  870.                                     }
  871.  
  872.                                     GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  873.                                         GTLV_Labels,    &FastMacroList,
  874.                                         GTLV_Selected,    GetFastMacroOffset(Selected),
  875.                                     TAG_DONE);
  876.  
  877.                                     GT_SetGadgetAttrs(GadgetArray[GAD_CODE],PanelWindow,NULL,
  878.                                         GTST_String,    Selected -> mn_Code,
  879.                                     TAG_DONE);
  880.  
  881.                                     FastMacrosChanged = TRUE;
  882.  
  883.                                     ActivateGadget(ActiveGadget = GadgetArray[GAD_CODE],PanelWindow,NULL);
  884.                                 }
  885.  
  886.                                 break;
  887.  
  888.                             case GAD_CODE:
  889.  
  890.                                 if(Selected)
  891.                                 {
  892.                                     strcpy(Selected -> mn_Code,SZ_GetString(Gadget));
  893.  
  894.                                     FastMacrosChanged = TRUE;
  895.                                 }
  896.  
  897.                                 break;
  898.  
  899.                             case GAD_LOAD:
  900.  
  901.                                 strcpy(DummyBuffer,LastFastMacros);
  902.  
  903.                                 DummyChar = PathPart(DummyBuffer);
  904.  
  905.                                 *DummyChar = 0;
  906.  
  907.                                 BlockWindow(PanelWindow);
  908.  
  909.                                 if(FileRequest = GetFile(LocaleString(MSG_FASTMACROPANEL_LOAD_FAST_MACRO_SETTINGS_TXT),DummyBuffer,FilePart(LastFastMacros),DummyBuffer,"#?.prefs",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_LOAD_TXT)))
  910.                                 {
  911.                                     GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  912.                                         GTLV_Labels,    ~0,
  913.                                     TAG_DONE);
  914.  
  915.                                     if(FastWindow)
  916.                                     {
  917.                                         GT_SetGadgetAttrs(FastGadget,FastWindow,NULL,
  918.                                             GTLV_Labels,    ~0,
  919.                                         TAG_DONE);
  920.                                     }
  921.  
  922.                                     Selected = NULL;
  923.  
  924.                                     if(!LoadFastMacros(DummyBuffer))
  925.                                         MyEasyRequest(Window,LocaleString(MSG_FASTMACROPANEL_COULD_NOT_LOAD_FAST_MACRO_SETTINGS_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT),DummyBuffer);
  926.                                     else
  927.                                     {
  928.                                         strcpy(Config -> FileConfig -> FastMacroFileName,DummyBuffer);
  929.  
  930.                                         strcpy(LastFastMacros,DummyBuffer);
  931.  
  932.                                         FastMacrosChanged = FALSE;
  933.                                     }
  934.  
  935.                                     GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  936.                                         GTLV_Labels,    &FastMacroList,
  937.                                     TAG_DONE);
  938.  
  939.                                     GT_SetGadgetAttrs(GadgetArray[GAD_CODE],PanelWindow,NULL,
  940.                                         GTST_String,    "",
  941.                                         GA_Disabled,    TRUE,
  942.                                     TAG_DONE);
  943.  
  944.                                     GT_SetGadgetAttrs(GadgetArray[GAD_MACRO],PanelWindow,NULL,
  945.                                         GTST_String,    "",
  946.                                         GA_Disabled,    TRUE,
  947.                                     TAG_DONE);
  948.  
  949.                                     GT_SetGadgetAttrs(GadgetArray[GAD_REMOVE],PanelWindow,NULL,
  950.                                         GA_Disabled,    TRUE,
  951.                                     TAG_DONE);
  952.  
  953.                                     GT_SetGadgetAttrs(GadgetArray[GAD_TOP],PanelWindow,NULL,
  954.                                         GA_Disabled,    TRUE,
  955.                                     TAG_DONE);
  956.  
  957.                                     GT_SetGadgetAttrs(GadgetArray[GAD_UP],PanelWindow,NULL,
  958.                                         GA_Disabled,    TRUE,
  959.                                     TAG_DONE);
  960.  
  961.                                     GT_SetGadgetAttrs(GadgetArray[GAD_DOWN],PanelWindow,NULL,
  962.                                         GA_Disabled,    TRUE,
  963.                                     TAG_DONE);
  964.  
  965.                                     GT_SetGadgetAttrs(GadgetArray[GAD_END],PanelWindow,NULL,
  966.                                         GA_Disabled,    TRUE,
  967.                                     TAG_DONE);
  968.  
  969.                                     ActiveGadget = NULL;
  970.  
  971.                                     if(FastWindow)
  972.                                     {
  973.                                         GT_SetGadgetAttrs(FastGadget,FastWindow,NULL,
  974.                                             GTLV_Labels,    &FastMacroList,
  975.                                         TAG_DONE);
  976.                                     }
  977.                                 }
  978.  
  979.                                 if(FastMacroList . lh_Head -> ln_Succ)
  980.                                 {
  981.                                     GT_SetGadgetAttrs(GadgetArray[GAD_SAVE],PanelWindow,NULL,
  982.                                         GA_Disabled,    FALSE,
  983.                                     TAG_DONE);
  984.                                 }
  985.                                 else
  986.                                 {
  987.                                     GT_SetGadgetAttrs(GadgetArray[GAD_SAVE],PanelWindow,NULL,
  988.                                         GA_Disabled,    TRUE,
  989.                                     TAG_DONE);
  990.                                 }
  991.  
  992.                                 ReleaseWindow(PanelWindow);
  993.  
  994.                                 break;
  995.  
  996.                             case GAD_SAVE:
  997.  
  998.                                 strcpy(DummyBuffer,LastFastMacros);
  999.  
  1000.                                 DummyChar = PathPart(DummyBuffer);
  1001.  
  1002.                                 *DummyChar = 0;
  1003.  
  1004.                                 BlockWindow(PanelWindow);
  1005.  
  1006.                                 if(FileRequest = GetFile(LocaleString(MSG_FASTMACROPANEL_SAVE_FAST_MACRO_SETTINGS_TXT),DummyBuffer,FilePart(LastFastMacros),DummyBuffer,"#?.prefs",TRUE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SAVE_TXT)))
  1007.                                 {
  1008.                                     if(!SaveFastMacros(DummyBuffer))
  1009.                                         MyEasyRequest(Window,LocaleString(MSG_FASTMACROPANEL_COULD_NOT_SAVE_FAST_MACRO_SETTINGS_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT),DummyBuffer);
  1010.                                     else
  1011.                                     {
  1012.                                         strcpy(LastFastMacros,DummyBuffer);
  1013.  
  1014.                                         FastMacrosChanged = FALSE;
  1015.                                     }
  1016.                                 }
  1017.  
  1018.                                 ReleaseWindow(PanelWindow);
  1019.  
  1020.                                 break;
  1021.                         }
  1022.                     }
  1023.                 }
  1024.             }
  1025.  
  1026.             RemoveGList(PanelWindow,GadgetList,(UWORD)-1);
  1027.  
  1028.             PopWindow();
  1029.  
  1030.             CloseWindow(PanelWindow);
  1031.         }
  1032.     }
  1033.  
  1034.     FreeGadgets(GadgetList);
  1035. }
  1036.