home *** CD-ROM | disk | FTP | other *** search
/ Amiga Elysian Archive / AmigaElysianArchive.iso / comm / term23_2.lha / Source_Code / termSource / TimePanel.c < prev    next >
C/C++ Source or Header  |  1992-08-18  |  5KB  |  203 lines

  1. /*
  2. **    $Id: TimePanel.c,v 1.2 92/08/15 20:15:36 olsen Sta Locker: olsen $
  3. **    $Revision: 1.2 $
  4. **    $Date: 92/08/15 20:15:36 $
  5. **
  6. **    Editing panel for time values
  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,GAD_USE,GAD_CANCEL };
  15.  
  16. STATIC LONG __saveds
  17. ShowTime(struct Gadget *SomeGadget,WORD Level)
  18. {
  19.     STATIC UBYTE Buffer[6];
  20.  
  21.     SPrintf(Buffer,"%2ld:%ld0",Level / 6,Level % 6);
  22.  
  23.     return((LONG)Buffer);
  24. }
  25.  
  26. STATIC struct Gadget *
  27. CreateAllGadgets(UBYTE Time,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.         WORD Left = SZ_LeftOffsetN(MSG_TIMEPANEL_TIME_GAD,-1),Width;
  40.  
  41.         SZ_ResetMaxWidth();
  42.  
  43.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_GLOBAL_USE_GAD),0,NULL);
  44.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_GLOBAL_CANCEL_GAD),0,NULL);
  45.  
  46.         Width = SZ_ResetMaxWidth();
  47.  
  48.         SZ_SetWidth(Width);
  49.  
  50.         if(Width > Left)
  51.             SZ_AddLeftOffset(Width);
  52.         else
  53.             SZ_AddLeftOffset(Left);
  54.  
  55.         NewGadget . ng_GadgetText    = LocaleString(MSG_TIMEPANEL_TIME_GAD);
  56.         NewGadget . ng_TextAttr        = &UserFont;
  57.         NewGadget . ng_VisualInfo    = VisualInfo;
  58.         NewGadget . ng_GadgetID        = Counter;
  59.  
  60.         GadgetArray[Counter++] = Gadget = CreateGadget(SLIDER_KIND,Gadget,&NewGadget,
  61.             SZ_Adjust,        TRUE,
  62.             SZ_AutoWidth,        TRUE,
  63.  
  64.             GT_Underscore,        '_',
  65.             GTSL_Min,        DT_GET_TIME( 0, 0),
  66.             GTSL_Max,        DT_GET_TIME(23,50),
  67.             GTSL_Level,        Time,
  68.             GTSL_DispFunc,        ShowTime,
  69.             GTSL_LevelFormat,    "%s",
  70.             GTSL_MaxLevelLen,    5,
  71.         TAG_DONE);
  72.  
  73.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_USE_GAD);
  74.         NewGadget . ng_GadgetID        = Counter;
  75.         NewGadget . ng_Flags        = 0;
  76.  
  77.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  78.             SZ_Adjust,    TRUE,
  79.             SZ_AutoWidth,    TRUE,
  80.             SZ_AlignExtra,    TRUE,
  81.             SZ_AlignLeft,    TRUE,
  82.             SZ_AlignBottom,    TRUE,
  83.  
  84.             GT_Underscore,    '_',
  85.         TAG_DONE);
  86.  
  87.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_CANCEL_GAD);
  88.         NewGadget . ng_GadgetID        = Counter;
  89.  
  90.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  91.             SZ_Adjust,    TRUE,
  92.             SZ_AutoWidth,    TRUE,
  93.             SZ_AlignRight,    TRUE,
  94.  
  95.             GT_Underscore,    '_',
  96.         TAG_DONE);
  97.     }
  98.  
  99.     return(Gadget);
  100. }
  101.  
  102. BYTE
  103. TimePanel(UBYTE *StartTime)
  104. {
  105.     struct Window    *PanelWindow;
  106.     struct Gadget    *GadgetList = NULL;
  107.     struct Gadget    *GadgetArray[GAD_CANCEL + 1];
  108.     UBYTE         Time = *StartTime;
  109.     BYTE         Result = FALSE;
  110.  
  111.     if(CreateAllGadgets(Time,&GadgetArray[0],&GadgetList,VisualInfo,Screen -> WBorTop + Screen -> Font -> ta_YSize + 1))
  112.     {
  113.         if(PanelWindow = OpenWindowTags(NULL,
  114.             WA_Left,    (Screen -> Width    - SZ_GetWindowWidth())    / 2,
  115.             WA_Top,        (Screen -> Height    - SZ_GetWindowHeight())    / 2,
  116.             WA_Width,    SZ_GetWindowWidth(),
  117.             WA_Height,    SZ_GetWindowHeight(),
  118.  
  119.             WA_Activate,    TRUE,
  120.             WA_DragBar,    TRUE,
  121.             WA_DepthGadget,    TRUE,
  122.             WA_RMBTrap,    TRUE,
  123.             WA_DepthGadget,    TRUE,
  124.             WA_CloseGadget,    TRUE,
  125.             WA_CustomScreen,Screen,
  126.  
  127.             WA_IDCMP,    IDCMP_CLOSEWINDOW | IDCMP_VANILLAKEY | BUTTONIDCMP | SLIDERIDCMP,
  128.  
  129.             WA_Title,    LocaleString(MSG_TIMEPANEL_SET_TIME_TXT),
  130.         TAG_DONE))
  131.         {
  132.             struct IntuiMessage    *Massage;
  133.             ULONG             Class,Code;
  134.             struct Gadget        *Gadget;
  135.             BYTE             Terminated = FALSE;
  136.  
  137.             PushWindow(PanelWindow);
  138.  
  139.             AddGList(PanelWindow,GadgetList,(UWORD)-1,(UWORD)-1,NULL);
  140.             RefreshGList(GadgetList,PanelWindow,NULL,(UWORD)-1);
  141.             GT_RefreshWindow(PanelWindow,NULL);
  142.  
  143.             ActiveGadget = NULL;
  144.  
  145.             while(!Terminated)
  146.             {
  147.                 WaitPort(PanelWindow -> UserPort);
  148.  
  149.                 while(!Terminated && (Massage = (struct IntuiMessage *)GT_GetIMsg(PanelWindow -> UserPort)))
  150.                 {
  151.                     Class    = Massage -> Class;
  152.                     Code    = Massage -> Code;
  153.                     Gadget    = (struct Gadget *)Massage -> IAddress;
  154.  
  155.                     GT_ReplyIMsg(Massage);
  156.  
  157.                     if(Class == IDCMP_VANILLAKEY)
  158.                         KeySelect(GadgetArray,GAD_CANCEL,Code,PanelWindow,&Gadget,&Class,&Code);
  159.  
  160.                     if(Class == IDCMP_CLOSEWINDOW)
  161.                         Terminated = TRUE;
  162.  
  163.                     if(Class == IDCMP_MOUSEMOVE)
  164.                         Time = Code;
  165.  
  166.                     if(Class == IDCMP_GADGETUP)
  167.                     {
  168.                         switch(Gadget -> GadgetID)
  169.                         {
  170.                             case GAD_TIME:        Time = Code;
  171.                                         break;
  172.  
  173.                             case GAD_USE:        Terminated = TRUE;
  174.  
  175.                                         Result = TRUE;
  176.  
  177.                                         *StartTime = Time;
  178.  
  179.                                         break;
  180.  
  181.                             case GAD_CANCEL:    Terminated = TRUE;
  182.  
  183.                                         break;
  184.  
  185.                             default:        break;
  186.                         }
  187.                     }
  188.                 }
  189.             }
  190.  
  191.             RemoveGList(PanelWindow,GadgetList,(UWORD)-1);
  192.  
  193.             PopWindow();
  194.  
  195.             CloseWindow(PanelWindow);
  196.         }
  197.     }
  198.  
  199.     FreeGadgets(GadgetList);
  200.  
  201.     return(Result);
  202. }
  203.