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

  1. /*
  2. **    $Id: DatePanel.c,v 1.7 92/08/15 20:12:30 olsen Sta Locker: olsen $
  3. **    $Revision: 1.7 $
  4. **    $Date: 92/08/15 20:12:30 $
  5. **
  6. **    Editing panel for date selection
  7. **
  8. **    Copyright ⌐ 1990-1992 by Olaf `Olsen' Barthel & MXM
  9. **        All Rights Reserved
  10. */
  11.  
  12. #include "termGlobal.h"
  13.  
  14. enum    {    GAD_MONTH,GAD_DAY,GAD_COMMENT,GAD_USE,GAD_CANCEL };
  15.  
  16. STATIC UBYTE * __saveds
  17. ShowMonth(struct Gadget *SomeGadget,WORD Level)
  18. {
  19.     STATIC UBYTE Month[20];
  20.  
  21.     SPrintf(Month,"%9s",LocaleString(Level + MSG_DATEPANEL_JANUARY_TXT));
  22.  
  23.     return(Month);
  24. }
  25.  
  26. STATIC struct Gadget *
  27. CreateAllGadgets(struct TimeDateNode *Node,struct Gadget **GadgetArray,struct Gadget **GadgetList,APTR VisualInfo,UWORD TopEdge)
  28. {
  29.     struct Gadget        *Gadget;
  30.     struct NewGadget     NewGadget;
  31.     UWORD             Counter = 0;
  32.  
  33.     SZ_SizeSetup(Screen,&UserFont,TRUE);
  34.  
  35.     memset(&NewGadget,0,sizeof(struct NewGadget));
  36.  
  37.     if(Gadget = CreateContext(GadgetList))
  38.     {
  39.         SZ_AddLeftOffset(SZ_LeftOffsetN(MSG_DATEPANEL_MONTH_GAD,MSG_DATEPANEL_DAY_GAD,MSG_GLOBAL_COMMENT_GAD,-1));
  40.  
  41.         SZ_SetWidth(SZ_Width(STRING_KIND,NULL,20,NULL));
  42.  
  43.         NewGadget . ng_GadgetText    = LocaleString(MSG_DATEPANEL_MONTH_GAD);
  44.         NewGadget . ng_TextAttr        = &UserFont;
  45.         NewGadget . ng_GadgetID        = Counter;
  46.         NewGadget . ng_Flags        = PLACETEXT_LEFT|NG_HIGHLABEL;
  47.         NewGadget . ng_VisualInfo    = VisualInfo;
  48.  
  49.         GadgetArray[Counter++] = Gadget = CreateGadget(SLIDER_KIND,Gadget,&NewGadget,
  50.             SZ_Adjust,        TRUE,
  51.             SZ_AutoWidth,        TRUE,
  52.  
  53.             GT_Underscore,        '_',
  54.             GTSL_Level,        Node -> Month,
  55.             GTSL_Max,        11,
  56.             GTSL_MaxLevelLen,    9,
  57.             GTSL_LevelFormat,    "%s",
  58.             GTSL_DispFunc,        ShowMonth,
  59.             PGA_Freedom,        LORIENT_HORIZ,
  60.             GA_Immediate,        TRUE,
  61.             GA_RelVerify,        TRUE,
  62.         TAG_DONE);
  63.  
  64.         NewGadget . ng_GadgetText    = LocaleString(MSG_DATEPANEL_DAY_GAD);
  65.         NewGadget . ng_GadgetID        = Counter;
  66.  
  67.         GadgetArray[Counter++] = Gadget = CreateGadget(SLIDER_KIND,Gadget,&NewGadget,
  68.             SZ_Adjust,        TRUE,
  69.             SZ_AutoWidth,        TRUE,
  70.  
  71.             GT_Underscore,        '_',
  72.             GTSL_Level,        Node -> Day,
  73.             GTSL_Min,        1,
  74.             GTSL_Max,        31,
  75.             GTSL_MaxLevelLen,    2,
  76.             GTSL_LevelFormat,    "%2ld",
  77.             PGA_Freedom,        LORIENT_HORIZ,
  78.             GA_Immediate,        TRUE,
  79.             GA_RelVerify,        TRUE,
  80.         TAG_DONE);
  81.  
  82.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_COMMENT_GAD);
  83.         NewGadget . ng_GadgetID        = Counter;
  84.  
  85.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  86.             SZ_Adjust,    TRUE,
  87.             SZ_AutoWidth,    TRUE,
  88.  
  89.             GT_Underscore,    '_',
  90.             GTST_MaxChars,    19,
  91.             GTST_EditHook,    &CommandHook,
  92.             GTST_String,    Node -> Comment,
  93.             GA_Immediate,    TRUE,
  94.         TAG_DONE);
  95.  
  96.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_GLOBAL_USE_GAD),0,NULL);
  97.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_GLOBAL_CANCEL_GAD),0,NULL);
  98.  
  99.         SZ_SetWidth(SZ_ResetMaxWidth());
  100.  
  101.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_USE_GAD);
  102.         NewGadget . ng_GadgetID        = Counter;
  103.         NewGadget . ng_Flags        = 0;
  104.  
  105.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  106.             SZ_Adjust,    TRUE,
  107.             SZ_AutoWidth,    TRUE,
  108.             SZ_AlignExtra,    TRUE,
  109.             SZ_AlignLeft,    TRUE,
  110.             SZ_AlignBottom,    TRUE,
  111.  
  112.             GT_Underscore,    '_',
  113.         TAG_DONE);
  114.  
  115.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_CANCEL_GAD);
  116.         NewGadget . ng_GadgetID        = Counter;
  117.  
  118.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  119.             SZ_Adjust,    TRUE,
  120.             SZ_AutoWidth,    TRUE,
  121.             SZ_AlignRight,    TRUE,
  122.  
  123.             GT_Underscore,    '_',
  124.         TAG_DONE);
  125.     }
  126.  
  127.     return(Gadget);
  128. }
  129.  
  130. BYTE
  131. DatePanel(struct TimeDateNode *Node)
  132. {
  133.     STATIC BYTE MaxDays[12] = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
  134.  
  135.     struct Window        *PanelWindow;
  136.     struct Gadget        *GadgetList;
  137.     struct Gadget        *GadgetArray[GAD_CANCEL + 1];
  138.     BYTE             Result = FALSE;
  139.     struct TimeDateNode     LocalNode;
  140.  
  141.     LocalNode = *Node;
  142.  
  143.     if(CreateAllGadgets(Node,&GadgetArray[0],&GadgetList,VisualInfo,Screen -> WBorTop + Screen -> Font -> ta_YSize + 1))
  144.     {
  145.         if(PanelWindow = OpenWindowTags(NULL,
  146.             WA_Left,    (Screen -> Width    - SZ_GetWindowWidth())    / 2,
  147.             WA_Top,        (Screen -> Height    - SZ_GetWindowHeight())    / 2,
  148.             WA_Width,    SZ_GetWindowWidth(),
  149.             WA_Height,    SZ_GetWindowHeight(),
  150.  
  151.             WA_Activate,    TRUE,
  152.             WA_DragBar,    TRUE,
  153.             WA_DepthGadget,    TRUE,
  154.             WA_RMBTrap,    TRUE,
  155.             WA_DepthGadget,    TRUE,
  156.             WA_CloseGadget,    TRUE,
  157.             WA_CustomScreen,Screen,
  158.             WA_IDCMP,    IDCMP_CLOSEWINDOW | IDCMP_VANILLAKEY | IDCMP_GADGETDOWN | BUTTONIDCMP | SLIDERIDCMP,
  159.             WA_Title,    LocaleString(MSG_DATEPANEL_DATE_SETTINGS_TXT),
  160.         TAG_DONE))
  161.         {
  162.             struct IntuiMessage    *Massage;
  163.             ULONG             Class,Code;
  164.             struct Gadget        *Gadget;
  165.             BYTE             Terminated = FALSE;
  166.  
  167.             PushWindow(PanelWindow);
  168.  
  169.             AddGList(PanelWindow,GadgetList,(UWORD)-1,(UWORD)-1,NULL);
  170.             RefreshGList(GadgetList,PanelWindow,NULL,(UWORD)-1);
  171.             GT_RefreshWindow(PanelWindow,NULL);
  172.  
  173.             ActiveGadget = NULL;
  174.  
  175.             while(!Terminated)
  176.             {
  177.                 WaitPort(PanelWindow -> UserPort);
  178.  
  179.                 while(!Terminated && (Massage = (struct IntuiMessage *)GT_GetIMsg(PanelWindow -> UserPort)))
  180.                 {
  181.                     Class    = Massage -> Class;
  182.                     Code    = Massage -> Code;
  183.                     Gadget    = (struct Gadget *)Massage -> IAddress;
  184.  
  185.                     GT_ReplyIMsg(Massage);
  186.  
  187.                     if(Class == IDCMP_VANILLAKEY)
  188.                         KeySelect(GadgetArray,GAD_CANCEL,Code,PanelWindow,&Gadget,&Class,&Code);
  189.  
  190.                     if(Class == IDCMP_GADGETDOWN)
  191.                     {
  192.                         if((Gadget -> GadgetType & GTYP_GTYPEMASK) == GTYP_STRGADGET)
  193.                             ActiveGadget = Gadget;
  194.                     }
  195.  
  196.                     if(Class == IDCMP_ACTIVEWINDOW && ActiveGadget)
  197.                         ActivateGadget(ActiveGadget,PanelWindow,NULL);
  198.  
  199.                     if(Class == IDCMP_CLOSEWINDOW)
  200.                         Terminated = TRUE;
  201.  
  202.                     if(Class == IDCMP_MOUSEMOVE)
  203.                     {
  204.                         switch(Gadget -> GadgetID)
  205.                         {
  206.                             case GAD_MONTH:    Node -> Month = Code;
  207.                                     break;
  208.  
  209.                             case GAD_DAY:    Node -> Day = Code;
  210.                                     break;
  211.                         }
  212.                     }
  213.  
  214.                     if(Class == IDCMP_GADGETUP)
  215.                     {
  216.                         switch(Gadget -> GadgetID)
  217.                         {
  218.                             case GAD_MONTH:    Node -> Month = Code;
  219.  
  220.                                     if(Node -> Day > MaxDays[Node -> Month])
  221.                                     {
  222.                                         GT_SetGadgetAttrs(GadgetArray[GAD_DAY],PanelWindow,NULL,
  223.                                             GTSL_Level,    Node -> Day = MaxDays[Node -> Month],
  224.                                         TAG_DONE);
  225.                                     }
  226.  
  227.                                     break;
  228.  
  229.                             case GAD_DAY:    if(Code > MaxDays[Node -> Month])
  230.                                     {
  231.                                         Code = MaxDays[Node -> Month];
  232.  
  233.                                         GT_SetGadgetAttrs(GadgetArray[GAD_DAY],PanelWindow,NULL,
  234.                                             GTSL_Level,    Code,
  235.                                         TAG_DONE);
  236.                                     }
  237.  
  238.                                     Node -> Day = Code;
  239.                                     break;
  240.  
  241.                             case GAD_USE:    strcpy(Node -> Comment,GT_STRING(GadgetArray[GAD_COMMENT]));
  242.  
  243.                                     Terminated = TRUE;
  244.  
  245.                                     Result = TRUE;
  246.  
  247.                                     break;
  248.  
  249.                             case GAD_CANCEL:*Node = LocalNode;
  250.  
  251.                                     Terminated = TRUE;
  252.  
  253.                                     break;
  254.  
  255.                             default:    break;
  256.                         }
  257.                     }
  258.                 }
  259.             }
  260.  
  261.             RemoveGList(PanelWindow,GadgetList,(UWORD)-1);
  262.  
  263.             PopWindow();
  264.  
  265.             CloseWindow(PanelWindow);
  266.         }
  267.  
  268.         FreeGadgets(GadgetList);
  269.     }
  270.  
  271.     return(Result);
  272. }
  273.