home *** CD-ROM | disk | FTP | other *** search
/ Otherware / Otherware_1_SB_Development.iso / amiga / comms / comprgs / term232.lha / Source_Code / termSource / FastMacroPanel.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-08-18  |  26.5 KB  |  989 lines

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