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

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