home *** CD-ROM | disk | FTP | other *** search
/ Aminet 4 / Aminet 4 - November 1994.iso / aminet / comm / term / term41source.lha / Extras / Source / term-Source.lha / PatternPanel.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-08-02  |  22.1 KB  |  964 lines

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