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

  1. /*
  2. **    $Id: RatePanel.c,v 1.8 92/08/15 20:13:11 olsen Sta Locker: olsen $
  3. **    $Revision: 1.8 $
  4. **    $Date: 92/08/15 20:13:11 $
  5. **
  6. **    Editing panel for phone units configuration
  7. **
  8. **    Copyright ⌐ 1990-1992 by Olaf `Olsen' Barthel & MXM
  9. **        All Rights Reserved
  10. */
  11.  
  12. #include "termGlobal.h"
  13.  
  14. enum    {    GAD_TIME,
  15.         GAD_FIRSTUNIT,GAD_PAY1,GAD_MINUTES1,
  16.         GAD_FOLLOWINGUNITS,GAD_PAY2,GAD_MINUTES2,
  17.         GAD_LIST,
  18.         GAD_ADDTIME,GAD_ADDDATE,GAD_EDIT,
  19.         GAD_REMOVETIME,GAD_ADDDAY,GAD_CLONE,
  20.         GAD_EDITTIME,GAD_IMPORT,GAD_REMOVE };
  21.  
  22. STATIC struct Gadget *
  23. CreateAllGadgets(struct PhoneEntry *Entry,struct Gadget **GadgetArray,struct Gadget **GadgetList,APTR VisualInfo,UWORD TopEdge)
  24. {
  25.     struct Gadget        *Gadget;
  26.     struct NewGadget     NewGadget;
  27.     UWORD             Counter = 0;
  28.  
  29.     SZ_SizeSetup(Screen,&UserFont,TRUE);
  30.  
  31.     memset(&NewGadget,0,sizeof(struct NewGadget));
  32.  
  33.     if(Gadget = CreateContext(GadgetList))
  34.     {
  35.         NewGadget . ng_TextAttr        = &UserFont;
  36.         NewGadget . ng_VisualInfo    = VisualInfo;
  37.         NewGadget . ng_GadgetText    = LocaleString(MSG_RATEPANEL_TIME_GAD);
  38.         NewGadget . ng_GadgetID        = Counter;
  39.         NewGadget . ng_Flags        = PLACETEXT_ABOVE|NG_HIGHLABEL;
  40.  
  41.         GadgetArray[Counter++] = Gadget = CreateGadget(LISTVIEW_KIND,Gadget,&NewGadget,
  42.             SZ_Adjust,        TRUE,
  43.             SZ_Lines,        7,
  44.             SZ_Chars,        5,
  45.  
  46. /*            GA_Disabled,        TRUE,*/
  47.             GT_Underscore,        '_',
  48.             GTLV_ShowSelected,    NULL,
  49.         TAG_DONE);
  50.  
  51.         SZ_SetWidth(SZ_Width(STRING_KIND,NULL,10,NULL));
  52.  
  53.         SZ_AddLeftOffset(SZ_LeftOffsetDelta(MSG_RATEPANEL_PAY_PER_UNIT_GAD,MSG_RATEPANEL_FOLLOWING_UNITS_GAD));
  54.  
  55.         NewGadget . ng_GadgetText    = LocaleString(MSG_RATEPANEL_FIRST_UNIT_GAD);
  56.         NewGadget . ng_GadgetID        = Counter;
  57.         NewGadget . ng_Flags        = NG_HIGHLABEL;
  58.  
  59.         GadgetArray[Counter++] = Gadget = CreateGadget(TEXT_KIND,Gadget,&NewGadget,
  60.             SZ_Adjust,        TRUE,
  61.             SZ_AutoWidth,        TRUE,
  62.             SZ_NewColumn,        TRUE,
  63.         TAG_DONE);
  64.  
  65.         NewGadget . ng_GadgetText    = SmallCurrency();
  66.         NewGadget . ng_GadgetID        = Counter;
  67.         NewGadget . ng_Flags        = 0;
  68.  
  69.         GadgetArray[Counter++] = Gadget = CreateGadget(INTEGER_KIND,Gadget,&NewGadget,
  70.             SZ_Adjust,    TRUE,
  71.             SZ_AutoWidth,    TRUE,
  72.  
  73.             GT_Underscore,    '_',
  74.             GTIN_MaxChars,    8,
  75.             GTST_EditHook,    &CommandHook,
  76.             GA_Disabled,    TRUE,
  77.             GA_Immediate,    TRUE,
  78.         TAG_DONE);
  79.  
  80.         NewGadget . ng_GadgetText    = LocaleString(MSG_RATEPANEL_SECONDS_PER_UNIT_GAD);
  81.         NewGadget . ng_GadgetID        = Counter;
  82.  
  83.         GadgetArray[Counter++] = Gadget = CreateGadget(INTEGER_KIND,Gadget,&NewGadget,
  84.             SZ_Adjust,    TRUE,
  85.             SZ_AutoWidth,    TRUE,
  86.  
  87.             GT_Underscore,    '_',
  88.             GTIN_MaxChars,    8,
  89.             GTST_EditHook,    &CommandHook,
  90.             GA_Disabled,    TRUE,
  91.             GA_Immediate,    TRUE,
  92.         TAG_DONE);
  93.  
  94.         NewGadget . ng_GadgetText    = LocaleString(MSG_RATEPANEL_FOLLOWING_UNITS_GAD);
  95.         NewGadget . ng_GadgetID        = Counter;
  96.         NewGadget . ng_Flags        = NG_HIGHLABEL;
  97.  
  98.         GadgetArray[Counter++] = Gadget = CreateGadget(TEXT_KIND,Gadget,&NewGadget,
  99.             SZ_Adjust,    TRUE,
  100.             SZ_AutoWidth,    TRUE,
  101.         TAG_DONE);
  102.  
  103.         NewGadget . ng_GadgetText    = SmallCurrency();
  104.         NewGadget . ng_GadgetID        = Counter;
  105.         NewGadget . ng_Flags        = 0;
  106.  
  107.         GadgetArray[Counter++] = Gadget = CreateGadget(INTEGER_KIND,Gadget,&NewGadget,
  108.             SZ_Adjust,    TRUE,
  109.             SZ_AutoWidth,    TRUE,
  110.  
  111.             GT_Underscore,    '_',
  112.             GTIN_MaxChars,    8,
  113.             GTST_EditHook,    &CommandHook,
  114.             GA_Disabled,    TRUE,
  115.             GA_Immediate,    TRUE,
  116.         TAG_DONE);
  117.  
  118.         NewGadget . ng_GadgetText    = LocaleString(MSG_RATEPANEL_SECONDS_PER_UNIT_GAD);
  119.         NewGadget . ng_GadgetID        = Counter;
  120.  
  121.         GadgetArray[Counter++] = Gadget = CreateGadget(INTEGER_KIND,Gadget,&NewGadget,
  122.             SZ_Adjust,    TRUE,
  123.             SZ_AutoWidth,    TRUE,
  124.  
  125.             GT_Underscore,    '_',
  126.             GTIN_MaxChars,    8,
  127.             GTST_EditHook,    &CommandHook,
  128.             GA_Disabled,    TRUE,
  129.             GA_Immediate,    TRUE,
  130.         TAG_DONE);
  131.  
  132.         NewGadget . ng_GadgetText    = LocaleString(MSG_RATEPANEL_DAYS_AND_DATES_GAD);
  133.         NewGadget . ng_GadgetID        = Counter;
  134.         NewGadget . ng_Flags        = PLACETEXT_ABOVE|NG_HIGHLABEL;
  135.  
  136.         GadgetArray[Counter++] = Gadget = CreateGadget(LISTVIEW_KIND,Gadget,&NewGadget,
  137.             SZ_Adjust,        TRUE,
  138.             SZ_NewColumn,        TRUE,
  139.             SZ_Lines,        7,
  140.             SZ_Chars,        30,
  141.  
  142.             GT_Underscore,        '_',
  143.             GTLV_Labels,        &Entry -> TimeDateList,
  144.             GTLV_ShowSelected,    NULL,
  145.         TAG_DONE);
  146.  
  147.         SZ_ResetMaxWidth();
  148.  
  149.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_RATEPANEL_ADD_TIME_GAD),0,NULL);
  150.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_RATEPANEL_REMOVE_TIME_GAD),0,NULL);
  151.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_RATEPANEL_EDIT_TIME_GAD),0,NULL);
  152.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_RATEPANEL_ADD_DATE_GAD),0,NULL);
  153.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_RATEPANEL_ADD_DAYS_GAD),0,NULL);
  154.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_RATEPANEL_IMPORT_GAD),0,NULL);
  155.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_RATEPANEL_EDIT_GAD),0,NULL);
  156.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_RATEPANEL_CLONE_GAD),0,NULL);
  157.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_GLOBAL_REMOVE_GAD),0,NULL);
  158.  
  159.         SZ_SetWidth(SZ_ResetMaxWidth());
  160.  
  161.  
  162.         NewGadget . ng_GadgetText    = LocaleString(MSG_RATEPANEL_ADD_TIME_GAD);
  163.         NewGadget . ng_GadgetID        = Counter;
  164.         NewGadget . ng_Flags        = PLACETEXT_IN;
  165.  
  166.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  167.             SZ_Adjust,    TRUE,
  168.             SZ_AutoWidth,    TRUE,
  169.             SZ_AlignExtra,    TRUE,
  170.             SZ_AlignBottom,    TRUE,
  171.             SZ_GroupCount,    3,
  172.  
  173.             GT_Underscore,    '_',
  174.             GA_Disabled,    TRUE,
  175.         TAG_DONE);
  176.  
  177.         NewGadget . ng_GadgetText    = LocaleString(MSG_RATEPANEL_ADD_DATE_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.         TAG_DONE);
  187.  
  188.         NewGadget . ng_GadgetText    = LocaleString(MSG_RATEPANEL_EDIT_GAD);
  189.         NewGadget . ng_GadgetID        = Counter;
  190.  
  191.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  192.             SZ_Adjust,    TRUE,
  193.             SZ_AutoWidth,    TRUE,
  194.             SZ_GroupNext,    TRUE,
  195.  
  196.             GT_Underscore,    '_',
  197.             GA_Disabled,    TRUE,
  198.         TAG_DONE);
  199.  
  200.  
  201.         NewGadget . ng_GadgetText    = LocaleString(MSG_RATEPANEL_REMOVE_TIME_GAD);
  202.         NewGadget . ng_GadgetID        = Counter;
  203.  
  204.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  205.             SZ_Adjust,    TRUE,
  206.             SZ_AutoWidth,    TRUE,
  207.             SZ_AlignBottom,    TRUE,
  208.             SZ_GroupCount,    3,
  209.  
  210.             GT_Underscore,    '_',
  211.             GA_Disabled,    TRUE,
  212.         TAG_DONE);
  213.  
  214.         NewGadget . ng_GadgetText    = LocaleString(MSG_RATEPANEL_ADD_DAYS_GAD);
  215.         NewGadget . ng_GadgetID        = Counter;
  216.  
  217.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  218.             SZ_Adjust,    TRUE,
  219.             SZ_AutoWidth,    TRUE,
  220.             SZ_GroupNext,    TRUE,
  221.  
  222.             GT_Underscore,    '_',
  223.         TAG_DONE);
  224.  
  225.         NewGadget . ng_GadgetText    = LocaleString(MSG_RATEPANEL_CLONE_GAD);
  226.         NewGadget . ng_GadgetID        = Counter;
  227.  
  228.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  229.             SZ_Adjust,    TRUE,
  230.             SZ_AutoWidth,    TRUE,
  231.             SZ_GroupNext,    TRUE,
  232.  
  233.             GT_Underscore,    '_',
  234.             GA_Disabled,    TRUE,
  235.         TAG_DONE);
  236.  
  237.  
  238.         NewGadget . ng_GadgetText    = LocaleString(MSG_RATEPANEL_EDIT_TIME_GAD);
  239.         NewGadget . ng_GadgetID        = Counter;
  240.  
  241.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  242.             SZ_Adjust,    TRUE,
  243.             SZ_AutoWidth,    TRUE,
  244.             SZ_AlignBottom,    TRUE,
  245.             SZ_GroupCount,    3,
  246.  
  247.             GT_Underscore,    '_',
  248.             GA_Disabled,    TRUE,
  249.         TAG_DONE);
  250.  
  251.         NewGadget . ng_GadgetText    = LocaleString(MSG_RATEPANEL_IMPORT_GAD);
  252.         NewGadget . ng_GadgetID        = Counter;
  253.  
  254.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  255.             SZ_Adjust,    TRUE,
  256.             SZ_AutoWidth,    TRUE,
  257.             SZ_GroupNext,    TRUE,
  258.  
  259.             GT_Underscore,    '_',
  260.             GA_Disabled,    NumPhoneEntries < 2,
  261.         TAG_DONE);
  262.  
  263.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_REMOVE_GAD);
  264.         NewGadget . ng_GadgetID        = Counter;
  265.  
  266.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  267.             SZ_Adjust,    TRUE,
  268.             SZ_AutoWidth,    TRUE,
  269.             SZ_GroupNext,    TRUE,
  270.  
  271.             GT_Underscore,    '_',
  272.             GA_Disabled,    TRUE,
  273.         TAG_DONE);
  274.     }
  275.  
  276.     return(Gadget);
  277. }
  278.  
  279. STATIC VOID __regargs
  280. DisableGadgets(struct Gadget **GadgetArray,struct Window *PanelWindow,BYTE Mode)
  281. {
  282. /*
  283.     GT_SetGadgetAttrs(GadgetArray[GAD_TIME],PanelWindow,NULL,
  284.         GA_Disabled,    Mode,
  285.     TAG_DONE);
  286. */
  287.     GT_SetGadgetAttrs(GadgetArray[GAD_PAY1],PanelWindow,NULL,
  288.         GA_Disabled,    Mode,
  289.     TAG_DONE);
  290.  
  291.     GT_SetGadgetAttrs(GadgetArray[GAD_MINUTES1],PanelWindow,NULL,
  292.         GA_Disabled,    Mode,
  293.     TAG_DONE);
  294.  
  295.     GT_SetGadgetAttrs(GadgetArray[GAD_PAY2],PanelWindow,NULL,
  296.         GA_Disabled,    Mode,
  297.     TAG_DONE);
  298.  
  299.     GT_SetGadgetAttrs(GadgetArray[GAD_MINUTES2],PanelWindow,NULL,
  300.         GA_Disabled,    Mode,
  301.     TAG_DONE);
  302.  
  303.     if(Mode)
  304.         ActiveGadget = NULL;
  305. }
  306.  
  307. STATIC struct Node * __regargs
  308. GetNode(struct List *List,LONG Offset)
  309. {
  310.     struct Node    *Node;
  311.     LONG         i;
  312.  
  313.     Node = (struct Node *)List -> lh_Head;
  314.  
  315.     for(i = 0 ; i < Offset ; i++)
  316.     {
  317.         if(!Node -> ln_Succ -> ln_Succ)
  318.             return(NULL);
  319.  
  320.         Node = Node -> ln_Succ;
  321.     }
  322.  
  323.     return(Node);
  324. }
  325.  
  326. VOID
  327. RatePanel(struct List *PhoneList,struct PhoneEntry *Entry)
  328. {
  329.     struct Window    *PanelWindow;
  330.     struct Gadget    *GadgetList;
  331.     struct Gadget    *GadgetArray[GAD_REMOVE + 1];
  332.  
  333.     if(CreateAllGadgets(Entry,&GadgetArray[0],&GadgetList,VisualInfo,Screen -> WBorTop + Screen -> Font -> ta_YSize + 1))
  334.     {
  335.         if(PanelWindow = OpenWindowTags(NULL,
  336.             WA_Left,    (Screen -> Width    - SZ_GetWindowWidth())    / 2,
  337.             WA_Top,        (Screen -> Height    - SZ_GetWindowHeight())    / 2,
  338.             WA_Width,    SZ_GetWindowWidth(),
  339.             WA_Height,    SZ_GetWindowHeight(),
  340.  
  341.             WA_Activate,    TRUE,
  342.             WA_DragBar,    TRUE,
  343.             WA_DepthGadget,    TRUE,
  344.             WA_RMBTrap,    TRUE,
  345.             WA_DepthGadget,    TRUE,
  346.             WA_CloseGadget,    TRUE,
  347.             WA_CustomScreen,Screen,
  348.             WA_IDCMP,    IDCMP_GADGETDOWN | IDCMP_ACTIVEWINDOW | IDCMP_CLOSEWINDOW | IDCMP_VANILLAKEY | BUTTONIDCMP | INTEGERIDCMP | LISTVIEWIDCMP,
  349.             WA_Title,    LocaleString(MSG_RATEPANEL_RATES_PREFERENCES_TXT),
  350.         TAG_DONE))
  351.         {
  352.             struct IntuiMessage    *Massage;
  353.             ULONG             Class,Code;
  354.             struct Gadget        *Gadget;
  355.             BYTE             Terminated = FALSE;
  356.             LONG             Selected = ~0,Count = 0,TimeSelected = ~0;
  357.             struct TimeDateNode    *TimeDateNode,*NewNode;
  358.             struct List        *TimeList = NULL;
  359.  
  360.             TimeDateNode = (struct TimeDateNode *)Entry -> TimeDateList . mlh_Head;
  361.  
  362.             while(TimeDateNode -> VanillaNode . ln_Succ)
  363.             {
  364.                 Count++;
  365.  
  366.                 TimeDateNode = (struct TimeDateNode *)TimeDateNode -> VanillaNode . ln_Succ;
  367.             }
  368.  
  369.             PushWindow(PanelWindow);
  370.  
  371.             AddGList(PanelWindow,GadgetList,(UWORD)-1,(UWORD)-1,NULL);
  372.             RefreshGList(GadgetList,PanelWindow,NULL,(UWORD)-1);
  373.             GT_RefreshWindow(PanelWindow,NULL);
  374.  
  375.             ActiveGadget = NULL;
  376.  
  377.             while(!Terminated)
  378.             {
  379.                 WaitPort(PanelWindow -> UserPort);
  380.  
  381.                 while(!Terminated && (Massage = (struct IntuiMessage *)GT_GetIMsg(PanelWindow -> UserPort)))
  382.                 {
  383.                     Class    = Massage -> Class;
  384.                     Code    = Massage -> Code;
  385.                     Gadget    = (struct Gadget *)Massage -> IAddress;
  386.  
  387.                     GT_ReplyIMsg(Massage);
  388.  
  389.                     if(Class == IDCMP_VANILLAKEY)
  390.                         KeySelect(GadgetArray,GAD_REMOVE,Code,PanelWindow,&Gadget,&Class,&Code);
  391.  
  392.                     if(Class == IDCMP_GADGETDOWN)
  393.                     {
  394.                         if((Gadget -> GadgetType & GTYP_GTYPEMASK) == GTYP_STRGADGET)
  395.                             ActiveGadget = Gadget;
  396.                     }
  397.  
  398.                     if(Class == IDCMP_ACTIVEWINDOW && ActiveGadget)
  399.                         ActivateGadget(ActiveGadget,PanelWindow,NULL);
  400.  
  401.                     if(Class == IDCMP_CLOSEWINDOW)
  402.                         Terminated = TRUE;
  403.  
  404.                     if(Class == IDCMP_GADGETUP)
  405.                     {
  406.                         switch(Gadget -> GadgetID)
  407.                         {
  408.                             case GAD_TIME:    TimeSelected = Code;
  409.  
  410.                                     if(Selected != ~0)
  411.                                     {
  412.                                         GT_SetGadgetAttrs(GadgetArray[GAD_PAY1],PanelWindow,NULL,
  413.                                             GTIN_Number,    TimeDateNode -> Table[TimeSelected] . PayPerUnit[DT_FIRST_UNIT],
  414.                                         TAG_DONE);
  415.  
  416.                                         GT_SetGadgetAttrs(GadgetArray[GAD_MINUTES1],PanelWindow,NULL,
  417.                                             GTIN_Number,    TimeDateNode -> Table[TimeSelected] . SecPerUnit[DT_FIRST_UNIT],
  418.                                         TAG_DONE);
  419.  
  420.                                         GT_SetGadgetAttrs(GadgetArray[GAD_PAY2],PanelWindow,NULL,
  421.                                             GTIN_Number,    TimeDateNode -> Table[TimeSelected] . PayPerUnit[DT_NEXT_UNIT],
  422.                                         TAG_DONE);
  423.  
  424.                                         GT_SetGadgetAttrs(GadgetArray[GAD_MINUTES2],PanelWindow,NULL,
  425.                                             GTIN_Number,    TimeDateNode -> Table[TimeSelected] . SecPerUnit[DT_NEXT_UNIT],
  426.                                         TAG_DONE);
  427.                                     }
  428.  
  429.                                     break;
  430.  
  431.                             case GAD_EDITTIME:
  432.  
  433.                                     if(Selected != ~0 && TimeSelected != ~0)
  434.                                     {
  435.                                         UBYTE Time = TimeDateNode -> Table[TimeSelected] . Time;
  436.  
  437.                                         BlockWindow(PanelWindow);
  438.  
  439.                                         if(TimePanel(&TimeDateNode -> Table[TimeSelected] . Time))
  440.                                         {
  441.                                             struct List *NewTimeList;
  442.  
  443.                                             SortTimeTable(TimeDateNode);
  444.  
  445.                                             if(NewTimeList = BuildTimeList(TimeDateNode))
  446.                                             {
  447.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_TIME],PanelWindow,NULL,
  448.                                                     GTLV_Labels,    ~0,
  449.                                                 TAG_DONE);
  450.  
  451.                                                 if(TimeList)
  452.                                                     FreeVec(TimeList);
  453.  
  454.                                                 TimeList = NewTimeList;
  455.  
  456.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_TIME],PanelWindow,NULL,
  457.                                                     GTLV_Labels,    TimeList,
  458.                                                     GTLV_Selected,    0,
  459.                                                 TAG_DONE);
  460.  
  461.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  462.                                                     GTLV_Labels,    ~0,
  463.                                                 TAG_DONE);
  464.  
  465.                                                 DisableGadgets(GadgetArray,PanelWindow,TRUE);
  466.  
  467.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_EDIT],PanelWindow,NULL,
  468.                                                     GA_Disabled,    TRUE,
  469.                                                 TAG_DONE);
  470.  
  471.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_CLONE],PanelWindow,NULL,
  472.                                                     GA_Disabled,    TRUE,
  473.                                                 TAG_DONE);
  474.  
  475.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_REMOVE],PanelWindow,NULL,
  476.                                                     GA_Disabled,    TRUE,
  477.                                                 TAG_DONE);
  478.  
  479.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  480.                                                     GTLV_Labels,    &Entry -> TimeDateList,
  481.                                                     GTLV_Selected,    ~0,
  482.                                                 TAG_DONE);
  483.  
  484.                                                 Selected = ~0;
  485.  
  486.                                                 ActiveGadget = NULL;
  487.  
  488.                                                 TimeSelected = ~0;
  489.  
  490.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_ADDTIME],PanelWindow,NULL,
  491.                                                     GA_Disabled,    TRUE,
  492.                                                 TAG_DONE);
  493.  
  494.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_REMOVETIME],PanelWindow,NULL,
  495.                                                     GA_Disabled,    TRUE,
  496.                                                 TAG_DONE);
  497.  
  498.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_EDITTIME],PanelWindow,NULL,
  499.                                                     GA_Disabled,    TRUE,
  500.                                                 TAG_DONE);
  501.                                             }
  502.                                             else
  503.                                             {
  504.                                                 TimeDateNode -> Table[TimeSelected] . Time = Time;
  505.  
  506.                                                 SortTimeTable(TimeDateNode);
  507.  
  508.                                                 DisplayBeep(PanelWindow -> WScreen);
  509.                                             }
  510.                                         }
  511.  
  512.                                         ReleaseWindow(PanelWindow);
  513.                                     }
  514.  
  515.                                     break;
  516.  
  517.                             case GAD_REMOVETIME:
  518.  
  519.                                     if(Selected != ~0 && TimeSelected != ~0)
  520.                                     {
  521.                                         BlockWindow(PanelWindow);
  522.  
  523.                                         if(DeleteTimeDateNode(TimeDateNode,TimeSelected))
  524.                                         {
  525.                                             GT_SetGadgetAttrs(GadgetArray[GAD_TIME],PanelWindow,NULL,
  526.                                                 GTLV_Labels,    ~0,
  527.                                             TAG_DONE);
  528.  
  529.                                             if(TimeList)
  530.                                                 FreeVec(TimeList);
  531.  
  532.                                             if(TimeList = BuildTimeList(TimeDateNode))
  533.                                             {
  534.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_TIME],PanelWindow,NULL,
  535.                                                     GTLV_Labels,    TimeList,
  536.                                                     GTLV_Selected,    0,
  537.                                                 TAG_DONE);
  538.  
  539.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  540.                                                     GTLV_Labels,    ~0,
  541.                                                 TAG_DONE);
  542.  
  543.                                                 DisableGadgets(GadgetArray,PanelWindow,TRUE);
  544.  
  545.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_EDIT],PanelWindow,NULL,
  546.                                                     GA_Disabled,    TRUE,
  547.                                                 TAG_DONE);
  548.  
  549.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_CLONE],PanelWindow,NULL,
  550.                                                     GA_Disabled,    TRUE,
  551.                                                 TAG_DONE);
  552.  
  553.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_REMOVE],PanelWindow,NULL,
  554.                                                     GA_Disabled,    TRUE,
  555.                                                 TAG_DONE);
  556.  
  557.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  558.                                                     GTLV_Labels,    &Entry -> TimeDateList,
  559.                                                     GTLV_Selected,    ~0,
  560.                                                 TAG_DONE);
  561.  
  562.                                                 Selected = ~0;
  563.  
  564.                                                 ActiveGadget = NULL;
  565.  
  566.                                                 TimeSelected = ~0;
  567.  
  568.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_ADDTIME],PanelWindow,NULL,
  569.                                                     GA_Disabled,    TRUE,
  570.                                                 TAG_DONE);
  571.  
  572.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_REMOVETIME],PanelWindow,NULL,
  573.                                                     GA_Disabled,    TRUE,
  574.                                                 TAG_DONE);
  575.  
  576.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_EDITTIME],PanelWindow,NULL,
  577.                                                     GA_Disabled,    TRUE,
  578.                                                 TAG_DONE);
  579.                                             }
  580.                                             else
  581.                                             {
  582.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_TIME],PanelWindow,NULL,
  583.                                                     GTLV_Labels,    &EmptyList,
  584.                                                 TAG_DONE);
  585.  
  586.                                                 DisplayBeep(PanelWindow -> WScreen);
  587.                                             }
  588.                                         }
  589.                                         else
  590.                                             DisplayBeep(PanelWindow -> WScreen);
  591.  
  592.                                         ReleaseWindow(PanelWindow);
  593.                                     }
  594.  
  595.                                     break;
  596.  
  597.                             case GAD_ADDTIME:
  598.  
  599.                                     if(Selected != ~0)
  600.                                     {
  601.                                         UBYTE Time = DT_GET_TIME(12,0);
  602.  
  603.                                         BlockWindow(PanelWindow);
  604.  
  605.                                         if(TimePanel(&Time))
  606.                                         {
  607.                                             if(ResizeTimeDateNode(TimeDateNode,TimeDateNode -> Table[0] . Count + 1,Time))
  608.                                             {
  609.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_TIME],PanelWindow,NULL,
  610.                                                     GTLV_Labels,    ~0,
  611.                                                 TAG_DONE);
  612.  
  613.                                                 SortTimeTable(TimeDateNode);
  614.  
  615.                                                 if(TimeList)
  616.                                                     FreeVec(TimeList);
  617.  
  618.                                                 if(TimeList = BuildTimeList(TimeDateNode))
  619.                                                 {
  620.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_TIME],PanelWindow,NULL,
  621.                                                         GTLV_Labels,    TimeList,
  622.                                                         GTLV_Selected,    0,
  623.                                                     TAG_DONE);
  624.  
  625.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  626.                                                         GTLV_Labels,    ~0,
  627.                                                     TAG_DONE);
  628.  
  629.                                                     DisableGadgets(GadgetArray,PanelWindow,TRUE);
  630.  
  631.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_EDIT],PanelWindow,NULL,
  632.                                                         GA_Disabled,    TRUE,
  633.                                                     TAG_DONE);
  634.  
  635.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_CLONE],PanelWindow,NULL,
  636.                                                         GA_Disabled,    TRUE,
  637.                                                     TAG_DONE);
  638.  
  639.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_REMOVE],PanelWindow,NULL,
  640.                                                         GA_Disabled,    TRUE,
  641.                                                     TAG_DONE);
  642.  
  643.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  644.                                                         GTLV_Labels,    &Entry -> TimeDateList,
  645.                                                         GTLV_Selected,    ~0,
  646.                                                     TAG_DONE);
  647.  
  648.                                                     Selected = ~0;
  649.  
  650.                                                     ActiveGadget = NULL;
  651.  
  652.                                                     TimeSelected = ~0;
  653.  
  654.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_ADDTIME],PanelWindow,NULL,
  655.                                                         GA_Disabled,    TRUE,
  656.                                                     TAG_DONE);
  657.  
  658.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_REMOVETIME],PanelWindow,NULL,
  659.                                                         GA_Disabled,    TRUE,
  660.                                                     TAG_DONE);
  661.  
  662.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_EDITTIME],PanelWindow,NULL,
  663.                                                         GA_Disabled,    TRUE,
  664.                                                     TAG_DONE);
  665.                                                 }
  666.                                                 else
  667.                                                 {
  668.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_TIME],PanelWindow,NULL,
  669.                                                         GTLV_Labels,    &EmptyList,
  670.                                                     TAG_DONE);
  671.  
  672.                                                     DisplayBeep(PanelWindow -> WScreen);
  673.                                                 }
  674.                                             }
  675.                                             else
  676.                                                 DisplayBeep(PanelWindow -> WScreen);
  677.                                         }
  678.  
  679.                                         ReleaseWindow(PanelWindow);
  680.                                     }
  681.  
  682.                                     break;
  683.  
  684.                             case GAD_PAY1:    TimeDateNode -> Table[TimeSelected] . PayPerUnit[DT_FIRST_UNIT] = GT_INTEGER(Gadget);
  685.                                     break;
  686.  
  687.                             case GAD_PAY2:    TimeDateNode -> Table[TimeSelected] . PayPerUnit[DT_NEXT_UNIT] = GT_INTEGER(Gadget);
  688.                                     break;
  689.  
  690.                             case GAD_MINUTES1:
  691.                                     TimeDateNode -> Table[TimeSelected] . SecPerUnit[DT_FIRST_UNIT] = GT_INTEGER(Gadget);
  692.                                     break;
  693.  
  694.                             case GAD_MINUTES2:
  695.                                     TimeDateNode -> Table[TimeSelected] . SecPerUnit[DT_NEXT_UNIT] = GT_INTEGER(Gadget);
  696.                                     break;
  697.  
  698.                             case GAD_LIST:    if(TimeList)
  699.                                         FreeVec(TimeList);
  700.  
  701.                                     TimeDateNode = (struct TimeDateNode *)GetNode((struct List *)&Entry -> TimeDateList,Code);
  702.  
  703.                                     if(TimeList = BuildTimeList(TimeDateNode))
  704.                                     {
  705.                                         TimeSelected = 0;
  706.  
  707.                                         Selected = Code;
  708.  
  709.                                         DisableGadgets(GadgetArray,PanelWindow,FALSE);
  710.  
  711.                                         TimeDateNode = (struct TimeDateNode *)GetNode((struct List *)&Entry -> TimeDateList,Selected);
  712.  
  713.                                         GT_SetGadgetAttrs(GadgetArray[GAD_PAY1],PanelWindow,NULL,
  714.                                             GTIN_Number,    TimeDateNode -> Table[TimeSelected] . PayPerUnit[DT_FIRST_UNIT],
  715.                                         TAG_DONE);
  716.  
  717.                                         GT_SetGadgetAttrs(GadgetArray[GAD_MINUTES1],PanelWindow,NULL,
  718.                                             GTIN_Number,    TimeDateNode -> Table[TimeSelected] . SecPerUnit[DT_FIRST_UNIT],
  719.                                         TAG_DONE);
  720.  
  721.                                         GT_SetGadgetAttrs(GadgetArray[GAD_PAY2],PanelWindow,NULL,
  722.                                             GTIN_Number,    TimeDateNode -> Table[TimeSelected] . PayPerUnit[DT_NEXT_UNIT],
  723.                                         TAG_DONE);
  724.  
  725.                                         GT_SetGadgetAttrs(GadgetArray[GAD_MINUTES2],PanelWindow,NULL,
  726.                                             GTIN_Number,    TimeDateNode -> Table[TimeSelected] . SecPerUnit[DT_NEXT_UNIT],
  727.                                         TAG_DONE);
  728.  
  729.                                         GT_SetGadgetAttrs(GadgetArray[GAD_TIME],PanelWindow,NULL,
  730.                                             GTLV_Labels,    TimeList,
  731.                                             GTLV_Selected,    0,
  732.                                         TAG_DONE);
  733.  
  734.                                         GT_SetGadgetAttrs(GadgetArray[GAD_ADDTIME],PanelWindow,NULL,
  735.                                             GA_Disabled,    FALSE,
  736.                                         TAG_DONE);
  737.  
  738.                                         GT_SetGadgetAttrs(GadgetArray[GAD_REMOVETIME],PanelWindow,NULL,
  739.                                             GA_Disabled,    TimeDateNode -> Table[0] . Count < 2,
  740.                                         TAG_DONE);
  741.  
  742.                                         GT_SetGadgetAttrs(GadgetArray[GAD_EDITTIME],PanelWindow,NULL,
  743.                                             GA_Disabled,    FALSE,
  744.                                         TAG_DONE);
  745.  
  746.                                         if(Selected)
  747.                                         {
  748.                                             GT_SetGadgetAttrs(GadgetArray[GAD_EDIT],PanelWindow,NULL,
  749.                                                 GA_Disabled,    FALSE,
  750.                                             TAG_DONE);
  751.  
  752.                                             GT_SetGadgetAttrs(GadgetArray[GAD_CLONE],PanelWindow,NULL,
  753.                                                 GA_Disabled,    FALSE,
  754.                                             TAG_DONE);
  755.  
  756.                                             GT_SetGadgetAttrs(GadgetArray[GAD_REMOVE],PanelWindow,NULL,
  757.                                                 GA_Disabled,    FALSE,
  758.                                             TAG_DONE);
  759.                                         }
  760.                                         else
  761.                                         {
  762.                                             GT_SetGadgetAttrs(GadgetArray[GAD_EDIT],PanelWindow,NULL,
  763.                                                 GA_Disabled,    TRUE,
  764.                                             TAG_DONE);
  765.  
  766.                                             GT_SetGadgetAttrs(GadgetArray[GAD_CLONE],PanelWindow,NULL,
  767.                                                 GA_Disabled,    TRUE,
  768.                                             TAG_DONE);
  769.  
  770.                                             GT_SetGadgetAttrs(GadgetArray[GAD_REMOVE],PanelWindow,NULL,
  771.                                                 GA_Disabled,    TRUE,
  772.                                             TAG_DONE);
  773.                                         }
  774.                                     }
  775.                                     else
  776.                                     {
  777.                                         TimeDateNode = NULL;
  778.  
  779.                                         DisplayBeep(PanelWindow -> WScreen);
  780.  
  781.                                         GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  782.                                             GTLV_Labels,    ~0,
  783.                                         TAG_DONE);
  784.  
  785.                                         DisableGadgets(GadgetArray,PanelWindow,TRUE);
  786.  
  787.                                         GT_SetGadgetAttrs(GadgetArray[GAD_EDIT],PanelWindow,NULL,
  788.                                             GA_Disabled,    TRUE,
  789.                                         TAG_DONE);
  790.  
  791.                                         GT_SetGadgetAttrs(GadgetArray[GAD_CLONE],PanelWindow,NULL,
  792.                                             GA_Disabled,    TRUE,
  793.                                         TAG_DONE);
  794.  
  795.                                         GT_SetGadgetAttrs(GadgetArray[GAD_REMOVE],PanelWindow,NULL,
  796.                                             GA_Disabled,    TRUE,
  797.                                         TAG_DONE);
  798.  
  799.                                         GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  800.                                             GTLV_Labels,    &Entry -> TimeDateList,
  801.                                             GTLV_Selected,    ~0,
  802.                                         TAG_DONE);
  803.  
  804.                                         Selected = ~0;
  805.  
  806.                                         ActiveGadget = NULL;
  807.  
  808.                                         GT_SetGadgetAttrs(GadgetArray[GAD_TIME],PanelWindow,NULL,
  809.                                             GTLV_Selected,    0,
  810.                                         TAG_DONE);
  811.  
  812.                                         TimeSelected = ~0;
  813.  
  814.                                         GT_SetGadgetAttrs(GadgetArray[GAD_ADDTIME],PanelWindow,NULL,
  815.                                             GA_Disabled,    TRUE,
  816.                                         TAG_DONE);
  817.  
  818.                                         GT_SetGadgetAttrs(GadgetArray[GAD_REMOVETIME],PanelWindow,NULL,
  819.                                             GA_Disabled,    TRUE,
  820.                                         TAG_DONE);
  821.  
  822.                                         GT_SetGadgetAttrs(GadgetArray[GAD_EDITTIME],PanelWindow,NULL,
  823.                                             GA_Disabled,    TRUE,
  824.                                         TAG_DONE);
  825.                                     }
  826.  
  827.                                     break;
  828.  
  829.                             case GAD_IMPORT:BlockWindow(PanelWindow);
  830.  
  831.                                     GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  832.                                         GTLV_Labels,    ~0,
  833.                                     TAG_DONE);
  834.  
  835.                                     ImportPanel(Entry,PhoneList);
  836.  
  837.                                     DisableGadgets(GadgetArray,PanelWindow,TRUE);
  838.  
  839.                                     GT_SetGadgetAttrs(GadgetArray[GAD_EDIT],PanelWindow,NULL,
  840.                                         GA_Disabled,    TRUE,
  841.                                     TAG_DONE);
  842.  
  843.                                     GT_SetGadgetAttrs(GadgetArray[GAD_CLONE],PanelWindow,NULL,
  844.                                         GA_Disabled,    TRUE,
  845.                                     TAG_DONE);
  846.  
  847.                                     GT_SetGadgetAttrs(GadgetArray[GAD_REMOVE],PanelWindow,NULL,
  848.                                         GA_Disabled,    TRUE,
  849.                                     TAG_DONE);
  850.  
  851.                                     GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  852.                                         GTLV_Labels,    &Entry -> TimeDateList,
  853.                                         GTLV_Selected,    ~0,
  854.                                     TAG_DONE);
  855.  
  856.                                     Selected = ~0;
  857.  
  858.                                     ActiveGadget = NULL;
  859.  
  860.                                     GT_SetGadgetAttrs(GadgetArray[GAD_TIME],PanelWindow,NULL,
  861.                                         GTLV_Selected,    0,
  862.                                     TAG_DONE);
  863.  
  864.                                     TimeSelected = ~0;
  865.  
  866.                                     GT_SetGadgetAttrs(GadgetArray[GAD_ADDTIME],PanelWindow,NULL,
  867.                                         GA_Disabled,    TRUE,
  868.                                     TAG_DONE);
  869.  
  870.                                     GT_SetGadgetAttrs(GadgetArray[GAD_REMOVETIME],PanelWindow,NULL,
  871.                                         GA_Disabled,    TRUE,
  872.                                     TAG_DONE);
  873.  
  874.                                     GT_SetGadgetAttrs(GadgetArray[GAD_EDITTIME],PanelWindow,NULL,
  875.                                         GA_Disabled,    TRUE,
  876.                                     TAG_DONE);
  877.  
  878.                                     ReleaseWindow(PanelWindow);
  879.                                     break;
  880.  
  881.                             case GAD_ADDDAY:
  882.                             case GAD_ADDDATE:
  883.  
  884.                                     BlockWindow(PanelWindow);
  885.  
  886.                                     if(NewNode = CreateTimeDateNode(0,1,"",2))
  887.                                     {
  888.                                         APTR OldActiveGadget = ActiveGadget;
  889.                                         BYTE Result;
  890.  
  891.                                         if(Gadget -> GadgetID == GAD_ADDDAY)
  892.                                         {
  893.                                             NewNode -> Month    = -1;
  894.                                             NewNode -> Day    = 0;
  895.  
  896.                                             Result = DayPanel(NewNode);
  897.                                         }
  898.                                         else
  899.                                             Result = DatePanel(NewNode);
  900.  
  901.                                         if(Result)
  902.                                         {
  903.                                             AdaptTimeDateNode(NewNode);
  904.  
  905.                                             GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  906.                                                 GTLV_Labels,    ~0,
  907.                                             TAG_DONE);
  908.  
  909.                                             AddTail((struct List *)&Entry -> TimeDateList,&NewNode -> VanillaNode);
  910.  
  911.                                             Selected = Count++;
  912.  
  913.                                             GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  914.                                                 GTLV_Labels,    &Entry -> TimeDateList,
  915.                                                 GTLV_Selected,    Selected,
  916.                                             TAG_DONE);
  917.  
  918.                                             TimeDateNode = NewNode;
  919.  
  920. Redisplay:                                        if(TimeList)
  921.                                                 FreeVec(TimeList);
  922.  
  923.                                             if(TimeList = BuildTimeList(TimeDateNode))
  924.                                             {
  925.                                                 if(TimeSelected == ~0)
  926.                                                     TimeSelected = 0;
  927.  
  928.                                                 DisableGadgets(GadgetArray,PanelWindow,FALSE);
  929.  
  930.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_PAY1],PanelWindow,NULL,
  931.                                                     GTIN_Number,    TimeDateNode -> Table[TimeSelected] . PayPerUnit[DT_FIRST_UNIT],
  932.                                                 TAG_DONE);
  933.  
  934.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_MINUTES1],PanelWindow,NULL,
  935.                                                     GTIN_Number,    TimeDateNode -> Table[TimeSelected] . SecPerUnit[DT_FIRST_UNIT],
  936.                                                 TAG_DONE);
  937.  
  938.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_PAY2],PanelWindow,NULL,
  939.                                                     GTIN_Number,    TimeDateNode -> Table[TimeSelected] . PayPerUnit[DT_NEXT_UNIT],
  940.                                                 TAG_DONE);
  941.  
  942.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_MINUTES2],PanelWindow,NULL,
  943.                                                     GTIN_Number,    TimeDateNode -> Table[TimeSelected] . SecPerUnit[DT_NEXT_UNIT],
  944.                                                 TAG_DONE);
  945.  
  946.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_EDIT],PanelWindow,NULL,
  947.                                                     GA_Disabled,    FALSE,
  948.                                                 TAG_DONE);
  949.  
  950.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_CLONE],PanelWindow,NULL,
  951.                                                     GA_Disabled,    FALSE,
  952.                                                 TAG_DONE);
  953.  
  954.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_REMOVE],PanelWindow,NULL,
  955.                                                     GA_Disabled,    FALSE,
  956.                                                 TAG_DONE);
  957.  
  958.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_TIME],PanelWindow,NULL,
  959.                                                     GTLV_Labels,    TimeList,
  960.                                                     GTLV_Selected,    TimeSelected,
  961.                                                 TAG_DONE);
  962.  
  963.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_ADDTIME],PanelWindow,NULL,
  964.                                                     GA_Disabled,    FALSE,
  965.                                                 TAG_DONE);
  966.  
  967.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_REMOVETIME],PanelWindow,NULL,
  968.                                                     GA_Disabled,    TimeDateNode -> Table[0] . Count < 2,
  969.                                                 TAG_DONE);
  970.  
  971.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_EDITTIME],PanelWindow,NULL,
  972.                                                     GA_Disabled,    FALSE,
  973.                                                 TAG_DONE);
  974.  
  975.                                                 ActivateGadget(GadgetArray[GAD_PAY1],PanelWindow,NULL);
  976.  
  977.                                                 ActiveGadget = GadgetArray[GAD_PAY1];
  978.                                             }
  979.                                             else
  980.                                             {
  981.                                                 TimeDateNode = NULL;
  982.  
  983.                                                 DisplayBeep(PanelWindow -> WScreen);
  984.  
  985.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  986.                                                     GTLV_Labels,    ~0,
  987.                                                 TAG_DONE);
  988.  
  989.                                                 DisableGadgets(GadgetArray,PanelWindow,TRUE);
  990.  
  991.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_EDIT],PanelWindow,NULL,
  992.                                                     GA_Disabled,    TRUE,
  993.                                                 TAG_DONE);
  994.  
  995.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_CLONE],PanelWindow,NULL,
  996.                                                     GA_Disabled,    TRUE,
  997.                                                 TAG_DONE);
  998.  
  999.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_REMOVE],PanelWindow,NULL,
  1000.                                                     GA_Disabled,    TRUE,
  1001.                                                 TAG_DONE);
  1002.  
  1003.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  1004.                                                     GTLV_Labels,    &Entry -> TimeDateList,
  1005.                                                     GTLV_Selected,    ~0,
  1006.                                                 TAG_DONE);
  1007.  
  1008.                                                 Selected = ~0;
  1009.  
  1010.                                                 ActiveGadget = NULL;
  1011.  
  1012.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_TIME],PanelWindow,NULL,
  1013.                                                     GTLV_Selected,    0,
  1014.                                                 TAG_DONE);
  1015.  
  1016.                                                 TimeSelected = ~0;
  1017.  
  1018.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_ADDTIME],PanelWindow,NULL,
  1019.                                                     GA_Disabled,    TRUE,
  1020.                                                 TAG_DONE);
  1021.  
  1022.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_REMOVETIME],PanelWindow,NULL,
  1023.                                                     GA_Disabled,    TRUE,
  1024.                                                 TAG_DONE);
  1025.  
  1026.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_EDITTIME],PanelWindow,NULL,
  1027.                                                     GA_Disabled,    TRUE,
  1028.                                                 TAG_DONE);
  1029.                                             }
  1030.                                         }
  1031.                                         else
  1032.                                         {
  1033.                                             FreeVec(NewNode);
  1034.  
  1035.                                             if(ActiveGadget = OldActiveGadget)
  1036.                                                 ActivateGadget(OldActiveGadget,PanelWindow,NULL);
  1037.                                         }
  1038.                                     }
  1039.  
  1040.                                     ReleaseWindow(PanelWindow);
  1041.                                     break;
  1042.  
  1043.                             case GAD_REMOVE:if(--Count)
  1044.                                     {
  1045.                                         if(TimeDateNode -> VanillaNode . ln_Succ -> ln_Succ)
  1046.                                             NewNode = (struct TimeDateNode *)TimeDateNode -> VanillaNode . ln_Succ;
  1047.                                         else
  1048.                                             NewNode = (struct TimeDateNode *)TimeDateNode -> VanillaNode . ln_Pred;
  1049.                                     }
  1050.  
  1051.                                     GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  1052.                                         GTLV_Labels,    ~0,
  1053.                                     TAG_DONE);
  1054.  
  1055.                                     Remove(TimeDateNode);
  1056.  
  1057.                                     FreeVec(TimeDateNode);
  1058.  
  1059.                                     if(Count > 1)
  1060.                                     {
  1061.                                         GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  1062.                                             GTLV_Labels,    &Entry -> TimeDateList,
  1063.                                             GTLV_Selected,    Count,
  1064.                                         TAG_DONE);
  1065.  
  1066.                                         TimeDateNode = NewNode;
  1067.  
  1068.                                         goto Redisplay;
  1069.                                     }
  1070.                                     else
  1071.                                     {
  1072.                                         DisableGadgets(GadgetArray,PanelWindow,TRUE);
  1073.  
  1074.                                         GT_SetGadgetAttrs(GadgetArray[GAD_EDIT],PanelWindow,NULL,
  1075.                                             GA_Disabled,    TRUE,
  1076.                                         TAG_DONE);
  1077.  
  1078.                                         GT_SetGadgetAttrs(GadgetArray[GAD_CLONE],PanelWindow,NULL,
  1079.                                             GA_Disabled,    TRUE,
  1080.                                         TAG_DONE);
  1081.  
  1082.                                         GT_SetGadgetAttrs(GadgetArray[GAD_REMOVE],PanelWindow,NULL,
  1083.                                             GA_Disabled,    TRUE,
  1084.                                         TAG_DONE);
  1085.  
  1086.                                         GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  1087.                                             GTLV_Labels,    &Entry -> TimeDateList,
  1088.                                             GTLV_Selected,    ~0,
  1089.                                         TAG_DONE);
  1090.  
  1091.                                         ActiveGadget = NULL;
  1092.  
  1093.                                         TimeDateNode = NULL;
  1094.                                     }
  1095.  
  1096.                                     break;
  1097.  
  1098.                             case GAD_CLONE:    if(NewNode = CreateTimeDateNode(0,1,"",TimeDateNode -> Table[0] . Count))
  1099.                                     {
  1100.                                         CopyMem(TimeDateNode,NewNode,sizeof(struct TimeDateNode));
  1101.  
  1102.                                         NewNode -> VanillaNode . ln_Name = NewNode -> Buffer;
  1103.  
  1104.                                         GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  1105.                                             GTLV_Labels,    ~0,
  1106.                                         TAG_DONE);
  1107.  
  1108.                                         AddTail((struct List *)&Entry -> TimeDateList,&NewNode -> VanillaNode);
  1109.  
  1110.                                         GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  1111.                                             GTLV_Labels,    &Entry -> TimeDateList,
  1112.                                             GTLV_Selected,    Count++,
  1113.                                         TAG_DONE);
  1114.  
  1115.                                         TimeDateNode = NewNode;
  1116.  
  1117.                                         goto Redisplay;
  1118.                                     }
  1119.  
  1120.                                     break;
  1121.  
  1122.                             case GAD_EDIT:    GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  1123.                                         GTLV_Labels,    ~0,
  1124.                                     TAG_DONE);
  1125.  
  1126.                                     BlockWindow(PanelWindow);
  1127.  
  1128.                                     {
  1129.                                         struct Gadget *OldActiveGadget = ActiveGadget;
  1130.  
  1131.                                         if(TimeDateNode -> Month == -1)
  1132.                                             DayPanel(TimeDateNode);
  1133.                                         else
  1134.                                             DatePanel(TimeDateNode);
  1135.  
  1136.                                         AdaptTimeDateNode(TimeDateNode);
  1137.  
  1138.                                         GT_SetGadgetAttrs(GadgetArray[GAD_LIST],PanelWindow,NULL,
  1139.                                             GTLV_Labels,    &Entry -> TimeDateList,
  1140.                                             GTLV_Selected,    Selected,
  1141.                                         TAG_DONE);
  1142.  
  1143.                                         if(ActiveGadget = OldActiveGadget)
  1144.                                             ActivateGadget(OldActiveGadget,PanelWindow,NULL);
  1145.                                     }
  1146.  
  1147.                                     ReleaseWindow(PanelWindow);
  1148.  
  1149.                                     break;
  1150.  
  1151.                             default:    break;
  1152.                         }
  1153.                     }
  1154.                 }
  1155.             }
  1156.  
  1157.             RemoveGList(PanelWindow,GadgetList,(UWORD)-1);
  1158.  
  1159.             PopWindow();
  1160.  
  1161.             CloseWindow(PanelWindow);
  1162.  
  1163.             if(TimeList)
  1164.                 FreeVec(TimeList);
  1165.         }
  1166.  
  1167.         FreeGadgets(GadgetList);
  1168.     }
  1169.  
  1170.     ActiveGadget = NULL;
  1171. }
  1172.