home *** CD-ROM | disk | FTP | other *** search
/ BCI NET / BCI NET Dec 94.iso / archives / telecomm / terms / term-4.1-source.lha / Extras / Source / term-Source.lha / FastMacroPanel.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-08-14  |  19.1 KB  |  852 lines

  1. /*
  2. **    FastMacroPanel.c
  3. **
  4. **    Editing panel for fast! macros
  5. **
  6. **    Copyright © 1990-1994 by Olaf `Olsen' Barthel
  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_CLEAR,
  15.         GAD_LOAD,GAD_SAVE,GAD_USE
  16.     };
  17.  
  18. BOOLEAN __regargs
  19. FastMacroPanel(struct List *FastMacroList,STRPTR LastFastMacros,struct Window *Parent)
  20. {
  21.     struct LayoutHandle    *Handle;
  22.     BOOLEAN             FastMacrosChanged = FALSE;
  23.  
  24.     if(Handle = LT_CreateHandleTags(Window -> WScreen,
  25.         LH_LocaleHook,    &LocaleHook,
  26.     TAG_DONE))
  27.     {
  28.         struct Window    *FastWindow;
  29.         struct IBox     Bounds;
  30.  
  31.         LT_New(Handle,
  32.             LA_Type,    VERTICAL_KIND,
  33.         TAG_DONE);
  34.         {
  35.             LT_New(Handle,
  36.                 LA_Type,    VERTICAL_KIND,
  37.                 LA_LabelID,    MSG_V36_0037,
  38.             TAG_DONE);
  39.             {
  40.                 LT_New(Handle,
  41.                     LA_Type,    LISTVIEW_KIND,
  42.                     LA_LabelID,    MSG_FASTMACROPANEL_MACRO_LIST_GAD,
  43.                     LA_LabelPlace,    PLACE_LEFT,
  44.                     LA_Chars,    30,
  45.                     LA_Lines,    10,
  46.                     LA_ID,        GAD_LIST,
  47.                     LALV_CursorKey,    TRUE,
  48.                     LALV_MaxGrowY,    20,
  49.                     LALV_MaxGrowX,    50,
  50.                     GTLV_Labels,    FastMacroList,
  51.  
  52.                     Kick30 ? LALV_Link : TAG_IGNORE, NIL_LINK,
  53.                 TAG_DONE);
  54.  
  55.                 LT_New(Handle,
  56.                     LA_Type,    STRING_KIND,
  57.                     LA_LabelID,    MSG_FASTMACROPANEL_MACRO_GAD,
  58.                     LA_ID,        GAD_MACRO,
  59.                     GTST_MaxChars,    20,
  60.                     GA_Disabled,    TRUE,
  61.                 TAG_DONE);
  62.  
  63.                 LT_New(Handle,
  64.                     LA_Type,    STRING_KIND,
  65.                     LA_LabelID,    MSG_FASTMACROPANEL_MACRO_TEXT_GAD,
  66.                     LA_ID,        GAD_CODE,
  67.                     GTST_MaxChars,    255,
  68.                     GA_Disabled,    TRUE,
  69.                 TAG_DONE);
  70.  
  71.                 LT_EndGroup(Handle);
  72.             }
  73.  
  74.             LT_New(Handle,
  75.                 LA_Type,    HORIZONTAL_KIND,
  76.             TAG_DONE);
  77.             {
  78.                 LT_New(Handle,
  79.                     LA_Type,    HORIZONTAL_KIND,
  80.                     LA_LabelID,    MSG_V36_0038,
  81.                     LA_Spread,    TRUE,
  82.                     LA_SameSize,    TRUE,
  83.                 TAG_DONE);
  84.                 {
  85.                     LT_New(Handle,
  86.                         LA_Type,    BUTTON_KIND,
  87.                         LA_LabelText,    "|<",
  88.                         LA_ID,        GAD_TOP,
  89.                         LA_NoKey,    TRUE,
  90.                         GA_Disabled,    TRUE,
  91.                     TAG_DONE);
  92.  
  93.                     LT_New(Handle,
  94.                         LA_Type,    BUTTON_KIND,
  95.                         LA_LabelText,    "<",
  96.                         LA_ID,        GAD_UP,
  97.                         LA_NoKey,    TRUE,
  98.                         GA_Disabled,    TRUE,
  99.                     TAG_DONE);
  100.  
  101.                     LT_New(Handle,
  102.                         LA_Type,    BUTTON_KIND,
  103.                         LA_LabelText,    ">",
  104.                         LA_ID,        GAD_DOWN,
  105.                         LA_NoKey,    TRUE,
  106.                         GA_Disabled,    TRUE,
  107.                     TAG_DONE);
  108.  
  109.                     LT_New(Handle,
  110.                         LA_Type,    BUTTON_KIND,
  111.                         LA_LabelText,    ">|",
  112.                         LA_ID,        GAD_END,
  113.                         LA_NoKey,    TRUE,
  114.                         GA_Disabled,    TRUE,
  115.                     TAG_DONE);
  116.  
  117.                     LT_EndGroup(Handle);
  118.                 }
  119.  
  120.                 LT_New(Handle,
  121.                     LA_Type,    HORIZONTAL_KIND,
  122.                     LA_LabelID,    MSG_V36_0043,
  123.                     LA_Spread,    TRUE,
  124.                     LA_SameSize,    TRUE,
  125.                 TAG_DONE);
  126.                 {
  127.                     LT_New(Handle,
  128.                         LA_Type,    BUTTON_KIND,
  129.                         LA_LabelID,    MSG_FASTMACROPANEL_NEW_GAD,
  130.                         LA_ID,        GAD_NEW,
  131.                     TAG_DONE);
  132.  
  133.                     LT_New(Handle,
  134.                         LA_Type,    BUTTON_KIND,
  135.                         LA_LabelID,    MSG_GLOBAL_REMOVE_GAD,
  136.                         LA_ID,        GAD_REMOVE,
  137.                         GA_Disabled,    TRUE,
  138.                     TAG_DONE);
  139.  
  140.                     LT_New(Handle,
  141.                         LA_Type,    BUTTON_KIND,
  142.                         LA_LabelID,    MSG_UPLOADQUEUE_CLEAR_TXT,
  143.                         LA_ID,        GAD_CLEAR,
  144.                         GA_Disabled,    FastMacroList -> lh_Head -> ln_Succ == NULL,
  145.                     TAG_DONE);
  146.  
  147.                     LT_EndGroup(Handle);
  148.                 }
  149.  
  150.                 LT_EndGroup(Handle);
  151.             }
  152.  
  153.             LT_New(Handle,
  154.                 LA_Type,    VERTICAL_KIND,
  155.             TAG_DONE);
  156.             {
  157.                 LT_New(Handle,LA_Type,XBAR_KIND,LAXB_FullSize,TRUE,TAG_DONE);
  158.  
  159.                 LT_EndGroup(Handle);
  160.             }
  161.  
  162.             LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  163.                 LAGR_SameSize,    TRUE,
  164.                 LAGR_Spread,    TRUE,
  165.                 LA_ExtraSpace,    TRUE,
  166.             TAG_DONE);
  167.             {
  168.                 LT_New(Handle,
  169.                     LA_Type,    BUTTON_KIND,
  170.                     LA_LabelID,    MSG_GLOBAL_USE_GAD,
  171.                     LA_ID,        GAD_USE,
  172.                     LABT_ReturnKey,    TRUE,
  173.                     LABT_ExtraFat,    TRUE,
  174.                 TAG_DONE);
  175.  
  176.                 LT_New(Handle,
  177.                     LA_Type,    BUTTON_KIND,
  178.                     LA_LabelID,    MSG_GLOBAL_LOAD_GAD,
  179.                     LA_ID,        GAD_LOAD,
  180.                     LABT_ExtraFat,    TRUE,
  181.                 TAG_DONE);
  182.  
  183.                 LT_New(Handle,
  184.                     LA_Type,    BUTTON_KIND,
  185.                     LA_LabelID,    MSG_GLOBAL_SAVE_GAD,
  186.                     LA_ID,        GAD_SAVE,
  187.                     LABT_ExtraFat,    TRUE,
  188.                     GA_Disabled,    FastMacroList -> lh_Head -> ln_Succ == NULL,
  189.                 TAG_DONE);
  190.  
  191.                 LT_EndGroup(Handle);
  192.             }
  193.  
  194.             LT_EndGroup(Handle);
  195.         }
  196.  
  197.         if(Screen && Window)
  198.         {
  199.             Bounds . Left    = Window -> LeftEdge;
  200.             Bounds . Top    = Window -> TopEdge;
  201.             Bounds . Width    = Window -> Width;
  202.             Bounds . Height    = Window -> Height;
  203.         }
  204.  
  205.         if(FastWindow = LT_Layout(Handle,LocaleString(MSG_FASTMACROPANEL_FAST_MACRO_PREFERENCES_TXT),Screen ? &Bounds : NULL,0,0,IDCMP_CLOSEWINDOW,0,
  206.             LAWN_HelpHook,        &GuideHook,
  207.             LAWN_Parent,        Parent,
  208.             WA_DepthGadget,        TRUE,
  209.             WA_CloseGadget,        TRUE,
  210.             WA_DragBar,        TRUE,
  211.             WA_RMBTrap,        TRUE,
  212.             WA_Activate,        TRUE,
  213.         TAG_DONE))
  214.         {
  215.             struct IntuiMessage    *Message;
  216.             BOOLEAN             Done = FALSE;
  217.             ULONG             MsgClass,
  218.                          MsgQualifier;
  219.             UWORD             MsgCode;
  220.             struct Gadget        *MsgGadget;
  221.  
  222.             struct MacroNode    *Node,*Selected = NULL;
  223.             ULONG             Offset = 0;
  224.  
  225.             UBYTE              DummyBuffer[MAX_FILENAME_LENGTH],
  226.                         *DummyChar;
  227.             struct FileRequester    *FileRequest;
  228.  
  229.             GuideContext(CONTEXT_FASTMACROS);
  230.  
  231.             PushWindow(FastWindow);
  232.  
  233.             LT_ShowWindow(Handle,TRUE);
  234.  
  235.             do
  236.             {
  237.                 if(Wait(PORTMASK(FastWindow -> UserPort) | SIG_BREAK) & SIG_BREAK)
  238.                     break;
  239.  
  240.                 while(Message = (struct IntuiMessage *)GT_GetIMsg(FastWindow -> UserPort))
  241.                 {
  242.                     MsgClass    = Message -> Class;
  243.                     MsgQualifier    = Message -> Qualifier;
  244.                     MsgCode        = Message -> Code;
  245.                     MsgGadget    = (struct Gadget *)Message -> IAddress;
  246.  
  247.                     GT_ReplyIMsg(Message);
  248.  
  249.                     LT_HandleInput(Handle,MsgQualifier,&MsgClass,&MsgCode,&MsgGadget);
  250.  
  251.                     if(MsgClass == IDCMP_CLOSEWINDOW)
  252.                         Done = TRUE;
  253.  
  254.                     if(MsgClass == IDCMP_GADGETUP)
  255.                     {
  256.                         switch(MsgGadget -> GadgetID)
  257.                         {
  258.                             case GAD_USE:
  259.  
  260.                                 Done = TRUE;
  261.                                 break;
  262.  
  263.                             case GAD_TOP:
  264.  
  265.                                 LT_SetAttributes(Handle,GAD_LIST,
  266.                                     GTLV_Labels,    ~0,
  267.                                 TAG_DONE);
  268.  
  269.                                 Remove((struct Node *)Selected);
  270.  
  271.                                 AddHead(FastMacroList,(struct Node *)Selected);
  272.  
  273.                                 RefreshFastWindow(TRUE);
  274.  
  275.                                 Offset = 0;
  276.  
  277.                                 LT_SetAttributes(Handle,GAD_LIST,
  278.                                     GTLV_Labels,    FastMacroList,
  279.                                     GTLV_Selected,    Offset,
  280.                                     GTLV_Top,    Offset,
  281.                                 TAG_DONE);
  282.  
  283.                                 LT_SetAttributes(Handle,GAD_TOP,
  284.                                     GA_Disabled,    TRUE,
  285.                                 TAG_DONE);
  286.  
  287.                                 LT_SetAttributes(Handle,GAD_UP,
  288.                                     GA_Disabled,    TRUE,
  289.                                 TAG_DONE);
  290.  
  291.                                 LT_SetAttributes(Handle,GAD_DOWN,
  292.                                     GA_Disabled,    !Selected -> mn_Succ -> mn_Succ,
  293.                                 TAG_DONE);
  294.  
  295.                                 LT_SetAttributes(Handle,GAD_END,
  296.                                     GA_Disabled,    !Selected -> mn_Succ -> mn_Succ,
  297.                                 TAG_DONE);
  298.  
  299.                                 FastMacrosChanged = TRUE;
  300.  
  301.                                 break;
  302.  
  303.                             case GAD_UP:
  304.  
  305.                                 LT_SetAttributes(Handle,GAD_LIST,
  306.                                     GTLV_Labels,    ~0,
  307.                                 TAG_DONE);
  308.  
  309.                                 Node = Selected -> mn_Pred -> mn_Pred;
  310.  
  311.                                 Remove((struct Node *)Selected);
  312.  
  313.                                 Insert(FastMacroList,(struct Node *)Selected,(struct Node *)Node);
  314.  
  315.                                 RefreshFastWindow(TRUE);
  316.  
  317.                                 Offset--;
  318.  
  319.                                 LT_SetAttributes(Handle,GAD_LIST,
  320.                                     GTLV_Labels,    FastMacroList,
  321.                                     GTLV_Selected,    Offset,
  322.                                     GTLV_Top,    Offset,
  323.                                 TAG_DONE);
  324.  
  325.                                 LT_SetAttributes(Handle,GAD_TOP,
  326.                                     GA_Disabled,    !Selected -> mn_Pred -> mn_Pred,
  327.                                 TAG_DONE);
  328.  
  329.                                 LT_SetAttributes(Handle,GAD_UP,
  330.                                     GA_Disabled,    !Selected -> mn_Pred -> mn_Pred,
  331.                                 TAG_DONE);
  332.  
  333.                                 LT_SetAttributes(Handle,GAD_DOWN,
  334.                                     GA_Disabled,    !Selected -> mn_Succ -> mn_Succ,
  335.                                 TAG_DONE);
  336.  
  337.                                 LT_SetAttributes(Handle,GAD_END,
  338.                                     GA_Disabled,    !Selected -> mn_Succ -> mn_Succ,
  339.                                 TAG_DONE);
  340.  
  341.                                 FastMacrosChanged = TRUE;
  342.  
  343.                                 break;
  344.  
  345.                             case GAD_DOWN:
  346.  
  347.                                 LT_SetAttributes(Handle,GAD_LIST,
  348.                                     GTLV_Labels,    ~0,
  349.                                 TAG_DONE);
  350.  
  351.                                 Node = Selected -> mn_Succ;
  352.  
  353.                                 Remove((struct Node *)Selected);
  354.  
  355.                                 Insert(FastMacroList,(struct Node *)Selected,(struct Node *)Node);
  356.  
  357.                                 RefreshFastWindow(TRUE);
  358.  
  359.                                 Offset++;
  360.  
  361.                                 LT_SetAttributes(Handle,GAD_LIST,
  362.                                     GTLV_Labels,    FastMacroList,
  363.                                     GTLV_Selected,    Offset,
  364.                                     GTLV_Top,    Offset,
  365.                                 TAG_DONE);
  366.  
  367.                                 LT_SetAttributes(Handle,GAD_TOP,
  368.                                     GA_Disabled,    !Selected -> mn_Pred -> mn_Pred,
  369.                                 TAG_DONE);
  370.  
  371.                                 LT_SetAttributes(Handle,GAD_UP,
  372.                                     GA_Disabled,    !Selected -> mn_Pred -> mn_Pred,
  373.                                 TAG_DONE);
  374.  
  375.                                 LT_SetAttributes(Handle,GAD_DOWN,
  376.                                     GA_Disabled,    !Selected -> mn_Succ -> mn_Succ,
  377.                                 TAG_DONE);
  378.  
  379.                                 LT_SetAttributes(Handle,GAD_END,
  380.                                     GA_Disabled,    !Selected -> mn_Succ -> mn_Succ,
  381.                                 TAG_DONE);
  382.  
  383.                                 FastMacrosChanged = TRUE;
  384.  
  385.                                 break;
  386.  
  387.                             case GAD_END:
  388.  
  389.                                 LT_SetAttributes(Handle,GAD_LIST,
  390.                                     GTLV_Labels,    ~0,
  391.                                 TAG_DONE);
  392.  
  393.                                 Remove((struct Node *)Selected);
  394.  
  395.                                 AddTail(FastMacroList,(struct Node *)Selected);
  396.  
  397.                                 RefreshFastWindow(TRUE);
  398.  
  399.                                 Offset = FastMacroCount - 1;
  400.  
  401.                                 LT_SetAttributes(Handle,GAD_LIST,
  402.                                     GTLV_Labels,    FastMacroList,
  403.                                     GTLV_Selected,    Offset,
  404.                                     GTLV_Top,    Offset,
  405.                                 TAG_DONE);
  406.  
  407.                                 LT_SetAttributes(Handle,GAD_TOP,
  408.                                     GA_Disabled,    !Selected -> mn_Pred -> mn_Pred,
  409.                                 TAG_DONE);
  410.  
  411.                                 LT_SetAttributes(Handle,GAD_UP,
  412.                                     GA_Disabled,    !Selected -> mn_Pred -> mn_Pred,
  413.                                 TAG_DONE);
  414.  
  415.                                 LT_SetAttributes(Handle,GAD_DOWN,
  416.                                     GA_Disabled,    !Selected -> mn_Succ -> mn_Succ,
  417.                                 TAG_DONE);
  418.  
  419.                                 LT_SetAttributes(Handle,GAD_END,
  420.                                     GA_Disabled,    !Selected -> mn_Succ -> mn_Succ,
  421.                                 TAG_DONE);
  422.  
  423.                                 FastMacrosChanged = TRUE;
  424.  
  425.                                 break;
  426.  
  427.                             case GAD_NEW:
  428.  
  429.                                 if(Node = NewFastMacro(LocaleString(MSG_FASTMACROPANEL_UNNAMED_TXT),""))
  430.                                 {
  431.                                     LT_SetAttributes(Handle,GAD_LIST,
  432.                                         GTLV_Labels,    ~0,
  433.                                     TAG_DONE);
  434.  
  435.                                     AddTail(FastMacroList,(struct Node *)Node);
  436.  
  437.                                     RefreshFastWindow(TRUE);
  438.  
  439.                                     LT_SetAttributes(Handle,GAD_LIST,
  440.                                         GTLV_Labels,    FastMacroList,
  441.                                         GTLV_Selected,    FastMacroCount++,
  442.                                     TAG_DONE);
  443.  
  444.                                     LT_SetAttributes(Handle,GAD_CODE,
  445.                                         GTST_String,    "",
  446.                                         GA_Disabled,    FALSE,
  447.                                     TAG_DONE);
  448.  
  449.                                     LT_SetAttributes(Handle,GAD_MACRO,
  450.                                         GTST_String,    Node -> mn_Macro,
  451.                                         GA_Disabled,    FALSE,
  452.                                     TAG_DONE);
  453.  
  454.                                     LT_SetAttributes(Handle,GAD_REMOVE,
  455.                                         GA_Disabled,    FALSE,
  456.                                     TAG_DONE);
  457.  
  458.                                     LT_SetAttributes(Handle,GAD_SAVE,
  459.                                         GA_Disabled,    FALSE,
  460.                                     TAG_DONE);
  461.  
  462.                                     LT_SetAttributes(Handle,GAD_CLEAR,
  463.                                         GA_Disabled,    FALSE,
  464.                                     TAG_DONE);
  465.  
  466.                                     Selected = Node;
  467.  
  468.                                     Offset = MsgCode;
  469.  
  470.                                     LT_SetAttributes(Handle,GAD_TOP,
  471.                                         GA_Disabled,    !Selected -> mn_Pred -> mn_Pred,
  472.                                     TAG_DONE);
  473.  
  474.                                     LT_SetAttributes(Handle,GAD_UP,
  475.                                         GA_Disabled,    !Selected -> mn_Pred -> mn_Pred,
  476.                                     TAG_DONE);
  477.  
  478.                                     LT_SetAttributes(Handle,GAD_DOWN,
  479.                                         GA_Disabled,    !Selected -> mn_Succ -> mn_Succ,
  480.                                     TAG_DONE);
  481.  
  482.                                     LT_SetAttributes(Handle,GAD_END,
  483.                                         GA_Disabled,    !Selected -> mn_Succ -> mn_Succ,
  484.                                     TAG_DONE);
  485.  
  486.                                     LT_Activate(Handle,GAD_MACRO);
  487.  
  488.                                     FastMacrosChanged = TRUE;
  489.                                 }
  490.                                 else
  491.                                     DisplayBeep(FastWindow -> WScreen);
  492.  
  493.                                 break;
  494.  
  495.                             case GAD_CLEAR:
  496.  
  497.                                 LT_SetAttributes(Handle,GAD_LIST,
  498.                                     GTLV_Labels,    ~0,
  499.                                 TAG_DONE);
  500.  
  501.                                 FreeList(FastMacroList);
  502.  
  503.                                 RefreshFastWindow(TRUE);
  504.  
  505.                                 FastMacroCount = 0;
  506.                                 
  507.                                 LT_SetAttributes(Handle,GAD_LIST,
  508.                                     GTLV_Labels,    FastMacroList,
  509.                                     GTLV_Selected,    ~0,
  510.                                 TAG_DONE);
  511.  
  512.                                 Selected = NULL;
  513.  
  514.                                 LT_SetAttributes(Handle,GAD_TOP,
  515.                                     GA_Disabled,    TRUE,
  516.                                 TAG_DONE);
  517.  
  518.                                 LT_SetAttributes(Handle,GAD_UP,
  519.                                     GA_Disabled,    TRUE,
  520.                                 TAG_DONE);
  521.  
  522.                                 LT_SetAttributes(Handle,GAD_DOWN,
  523.                                     GA_Disabled,    TRUE,
  524.                                 TAG_DONE);
  525.  
  526.                                 LT_SetAttributes(Handle,GAD_END,
  527.                                     GA_Disabled,    TRUE,
  528.                                 TAG_DONE);
  529.  
  530.                                 LT_SetAttributes(Handle,GAD_REMOVE,
  531.                                     GA_Disabled,    TRUE,
  532.                                 TAG_DONE);
  533.  
  534.                                 LT_SetAttributes(Handle,GAD_MACRO,
  535.                                     GTST_String,    "",
  536.                                     GA_Disabled,    TRUE,
  537.                                 TAG_DONE);
  538.  
  539.                                 LT_SetAttributes(Handle,GAD_CODE,
  540.                                     GTST_String,    "",
  541.                                     GA_Disabled,    TRUE,
  542.                                 TAG_DONE);
  543.  
  544.                                 LT_SetAttributes(Handle,GAD_SAVE,
  545.                                     GA_Disabled,    TRUE,
  546.                                 TAG_DONE);
  547.  
  548.                                 LT_SetAttributes(Handle,GAD_CLEAR,
  549.                                     GA_Disabled,    TRUE,
  550.                                 TAG_DONE);
  551.  
  552.                                 FastMacrosChanged = FALSE;
  553.  
  554.                                 break;
  555.  
  556.                             case GAD_REMOVE:
  557.  
  558.                                 if(Selected)
  559.                                 {
  560.                                     LT_SetAttributes(Handle,GAD_LIST,
  561.                                         GTLV_Labels,    ~0,
  562.                                     TAG_DONE);
  563.  
  564.                                     if(--FastMacroCount)
  565.                                     {
  566.                                         if(Selected -> mn_Succ -> mn_Succ)
  567.                                             Node = Selected -> mn_Succ;
  568.                                         else
  569.                                         {
  570.                                             Node = Selected -> mn_Pred;
  571.  
  572.                                             Offset = 0;
  573.                                         }
  574.                                     }
  575.  
  576.                                     FreeNode((struct Node *)Selected);
  577.  
  578.                                     RefreshFastWindow(TRUE);
  579.  
  580.                                     LT_SetAttributes(Handle,GAD_LIST,
  581.                                         GTLV_Labels,    FastMacroList,
  582.                                         GTLV_Selected,    Node -> mn_Succ ? GetNodeOffset((struct Node *)Node,FastMacroList) : ~0,
  583.                                     TAG_DONE);
  584.  
  585.                                     if(!FastMacroCount)
  586.                                     {
  587.                                         Selected = NULL;
  588.  
  589.                                         LT_SetAttributes(Handle,GAD_TOP,
  590.                                             GA_Disabled,    TRUE,
  591.                                         TAG_DONE);
  592.  
  593.                                         LT_SetAttributes(Handle,GAD_UP,
  594.                                             GA_Disabled,    TRUE,
  595.                                         TAG_DONE);
  596.  
  597.                                         LT_SetAttributes(Handle,GAD_DOWN,
  598.                                             GA_Disabled,    TRUE,
  599.                                         TAG_DONE);
  600.  
  601.                                         LT_SetAttributes(Handle,GAD_END,
  602.                                             GA_Disabled,    TRUE,
  603.                                         TAG_DONE);
  604.  
  605.                                         LT_SetAttributes(Handle,GAD_REMOVE,
  606.                                             GA_Disabled,    TRUE,
  607.                                         TAG_DONE);
  608.  
  609.                                         LT_SetAttributes(Handle,GAD_MACRO,
  610.                                             GTST_String,    "",
  611.                                             GA_Disabled,    TRUE,
  612.                                         TAG_DONE);
  613.  
  614.                                         LT_SetAttributes(Handle,GAD_CODE,
  615.                                             GTST_String,    "",
  616.                                             GA_Disabled,    TRUE,
  617.                                         TAG_DONE);
  618.  
  619.                                         LT_SetAttributes(Handle,GAD_SAVE,
  620.                                             GA_Disabled,    TRUE,
  621.                                         TAG_DONE);
  622.  
  623.                                         LT_SetAttributes(Handle,GAD_CLEAR,
  624.                                             GA_Disabled,    TRUE,
  625.                                         TAG_DONE);
  626.                                     }
  627.                                     else
  628.                                     {
  629.                                         Selected = Node;
  630.  
  631.                                         LT_SetAttributes(Handle,GAD_CODE,
  632.                                             GTST_String,    Selected -> mn_Code,
  633.                                         TAG_DONE);
  634.  
  635.                                         LT_SetAttributes(Handle,GAD_MACRO,
  636.                                             GTST_String,    Selected -> mn_Macro,
  637.                                         TAG_DONE);
  638.  
  639.                                         LT_SetAttributes(Handle,GAD_TOP,
  640.                                             GA_Disabled,    !Selected -> mn_Pred -> mn_Pred,
  641.                                         TAG_DONE);
  642.  
  643.                                         LT_SetAttributes(Handle,GAD_UP,
  644.                                             GA_Disabled,    !Selected -> mn_Pred -> mn_Pred,
  645.                                         TAG_DONE);
  646.  
  647.                                         LT_SetAttributes(Handle,GAD_DOWN,
  648.                                             GA_Disabled,    !Selected -> mn_Succ -> mn_Succ,
  649.                                         TAG_DONE);
  650.  
  651.                                         LT_SetAttributes(Handle,GAD_END,
  652.                                             GA_Disabled,    !Selected -> mn_Succ -> mn_Succ,
  653.                                         TAG_DONE);
  654.                                     }
  655.  
  656.                                     FastMacrosChanged = TRUE;
  657.                                 }
  658.  
  659.                                 break;
  660.  
  661.                             case GAD_LIST:
  662.  
  663.                                 if(Selected = (struct MacroNode *)GetListNode(MsgCode,FastMacroList))
  664.                                 {
  665.                                     Offset = MsgCode;
  666.  
  667.                                     LT_SetAttributes(Handle,GAD_MACRO,
  668.                                         GTST_String,    Selected -> mn_Macro,
  669.                                         GA_Disabled,    FALSE,
  670.                                     TAG_DONE);
  671.  
  672.                                     LT_SetAttributes(Handle,GAD_CODE,
  673.                                         GTST_String,    Selected -> mn_Code,
  674.                                         GA_Disabled,    FALSE,
  675.                                     TAG_DONE);
  676.  
  677.                                     LT_SetAttributes(Handle,GAD_REMOVE,
  678.                                         GA_Disabled,    FALSE,
  679.                                     TAG_DONE);
  680.  
  681.                                     LT_SetAttributes(Handle,GAD_TOP,
  682.                                         GA_Disabled,    !Selected -> mn_Pred -> mn_Pred,
  683.                                     TAG_DONE);
  684.  
  685.                                     LT_SetAttributes(Handle,GAD_UP,
  686.                                         GA_Disabled,    !Selected -> mn_Pred -> mn_Pred,
  687.                                     TAG_DONE);
  688.  
  689.                                     LT_SetAttributes(Handle,GAD_DOWN,
  690.                                         GA_Disabled,    !Selected -> mn_Succ -> mn_Succ,
  691.                                     TAG_DONE);
  692.  
  693.                                     LT_SetAttributes(Handle,GAD_END,
  694.                                         GA_Disabled,    !Selected -> mn_Succ -> mn_Succ,
  695.                                     TAG_DONE);
  696.                                 }
  697.  
  698.                                 break;
  699.  
  700.                             case GAD_MACRO:
  701.  
  702.                                 if(Selected)
  703.                                 {
  704.                                     LT_SetAttributes(Handle,GAD_LIST,
  705.                                         GTLV_Labels,    ~0,
  706.                                     TAG_DONE);
  707.  
  708.                                     strcpy(Selected -> mn_Macro,(STRPTR)LT_GetAttributes(Handle,GAD_MACRO,TAG_DONE));
  709.  
  710.                                     RefreshFastWindow(TRUE);
  711.  
  712.                                     LT_SetAttributes(Handle,GAD_LIST,
  713.                                         GTLV_Labels,    FastMacroList,
  714.                                         GTLV_Selected,    GetNodeOffset((struct Node *)Selected,FastMacroList),
  715.                                     TAG_DONE);
  716.  
  717.                                     LT_SetAttributes(Handle,GAD_CODE,
  718.                                         GTST_String,    Selected -> mn_Code,
  719.                                     TAG_DONE);
  720.  
  721.                                     FastMacrosChanged = TRUE;
  722.  
  723.                                     LT_Activate(Handle,GAD_CODE);
  724.                                 }
  725.  
  726.                                 break;
  727.  
  728.                             case GAD_CODE:
  729.  
  730.                                 if(Selected)
  731.                                 {
  732.                                     strcpy(Selected -> mn_Code,(STRPTR)LT_GetAttributes(Handle,GAD_CODE,TAG_DONE));
  733.  
  734.                                     FastMacrosChanged = TRUE;
  735.                                 }
  736.  
  737.                                 break;
  738.  
  739.                             case GAD_LOAD:
  740.  
  741.                                 SplitFileName(LastFastMacros,&DummyChar,DummyBuffer);
  742.  
  743.                                 LT_LockWindow(FastWindow);
  744.  
  745.                                 if(FileRequest = GetFile(FastWindow,LocaleString(MSG_FASTMACROPANEL_LOAD_FAST_MACRO_SETTINGS_TXT),DummyBuffer,FilePart(LastFastMacros),DummyBuffer,"#?.prefs",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_LOAD_TXT),TRUE))
  746.                                 {
  747.                                     LT_SetAttributes(Handle,GAD_LIST,
  748.                                         GTLV_Labels,    ~0,
  749.                                     TAG_DONE);
  750.  
  751.                                     Selected = NULL;
  752.  
  753.                                     if(!LoadFastMacros(DummyBuffer,FastMacroList))
  754.                                         ShowError(FastWindow,ERR_LOAD_ERROR,IoErr(),DummyBuffer);
  755.                                     else
  756.                                     {
  757.                                         strcpy(Config -> FileConfig -> FastMacroFileName,DummyBuffer);
  758.  
  759.                                         strcpy(LastFastMacros,DummyBuffer);
  760.  
  761.                                         FastMacrosChanged = FALSE;
  762.                                     }
  763.  
  764.                                     LT_SetAttributes(Handle,GAD_LIST,
  765.                                         GTLV_Labels,    FastMacroList,
  766.                                     TAG_DONE);
  767.  
  768.                                     LT_SetAttributes(Handle,GAD_CODE,
  769.                                         GTST_String,    "",
  770.                                         GA_Disabled,    TRUE,
  771.                                     TAG_DONE);
  772.  
  773.                                     LT_SetAttributes(Handle,GAD_MACRO,
  774.                                         GTST_String,    "",
  775.                                         GA_Disabled,    TRUE,
  776.                                     TAG_DONE);
  777.  
  778.                                     LT_SetAttributes(Handle,GAD_REMOVE,
  779.                                         GA_Disabled,    TRUE,
  780.                                     TAG_DONE);
  781.  
  782.                                     LT_SetAttributes(Handle,GAD_TOP,
  783.                                         GA_Disabled,    TRUE,
  784.                                     TAG_DONE);
  785.  
  786.                                     LT_SetAttributes(Handle,GAD_UP,
  787.                                         GA_Disabled,    TRUE,
  788.                                     TAG_DONE);
  789.  
  790.                                     LT_SetAttributes(Handle,GAD_DOWN,
  791.                                         GA_Disabled,    TRUE,
  792.                                     TAG_DONE);
  793.  
  794.                                     LT_SetAttributes(Handle,GAD_END,
  795.                                         GA_Disabled,    TRUE,
  796.                                     TAG_DONE);
  797.  
  798.                                     LT_SetAttributes(Handle,GAD_SAVE,
  799.                                         GA_Disabled,    !FastMacroCount,
  800.                                     TAG_DONE);
  801.  
  802.                                     LT_SetAttributes(Handle,GAD_CLEAR,
  803.                                         GA_Disabled,    !FastMacroCount,
  804.                                     TAG_DONE);
  805.  
  806.                                     RefreshFastWindow(TRUE);
  807.  
  808.                                     FreeAslRequest(FileRequest);
  809.                                 }
  810.  
  811.                                 LT_UnlockWindow(FastWindow);
  812.  
  813.                                 break;
  814.  
  815.                             case GAD_SAVE:
  816.  
  817.                                 SplitFileName(LastFastMacros,&DummyChar,DummyBuffer);
  818.  
  819.                                 LT_LockWindow(FastWindow);
  820.  
  821.                                 if(FileRequest = GetFile(FastWindow,LocaleString(MSG_FASTMACROPANEL_SAVE_FAST_MACRO_SETTINGS_TXT),DummyBuffer,FilePart(LastFastMacros),DummyBuffer,"#?.prefs",TRUE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SAVE_TXT),TRUE))
  822.                                 {
  823.                                     if(!SaveFastMacros(DummyBuffer,FastMacroList))
  824.                                         ShowError(FastWindow,ERR_SAVE_ERROR,IoErr(),DummyBuffer);
  825.                                     else
  826.                                     {
  827.                                         strcpy(LastFastMacros,DummyBuffer);
  828.  
  829.                                         FastMacrosChanged = FALSE;
  830.                                     }
  831.  
  832.                                     FreeAslRequest(FileRequest);
  833.                                 }
  834.  
  835.                                 LT_UnlockWindow(FastWindow);
  836.  
  837.                                 break;
  838.                         }
  839.                     }
  840.                 }
  841.             }
  842.             while(!Done);
  843.  
  844.             PopWindow();
  845.         }
  846.  
  847.         LT_DeleteHandle(Handle);
  848.     }
  849.  
  850.     return(FastMacrosChanged);
  851. }
  852.