home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus Extra 1996 #3 / AmigaPlus_CD-ROM-EXTRA_Nr.3.bin / aminet-spiele / denk&grübel / crazyclock / source / namewindow.c < prev   
C/C++ Source or Header  |  1993-10-10  |  3KB  |  112 lines

  1. /*
  2.  * namewindow.c V1.1
  3.  *
  4.  * name window handling
  5.  *
  6.  * (c) 1992-1993 Holger Brunst
  7.  */
  8.  
  9. #include <CClock.h>
  10.  
  11. /* Window data */
  12. #define WIN_X   192
  13. #define WIN_Y   68      
  14. #define WIN_W   256
  15. #define WIN_H   64
  16. #define WINDOW_IDCMP (IDCMP_REFRESHWINDOW|STRINGIDCMP) 
  17. static struct Window *win;
  18.  
  19. /* Gadget data */
  20. #define GAD_W   200
  21. #define GAD_H   15
  22. #define GAD_X   (WIN_W-GAD_W)/2
  23. #define GAD_Y   (WIN_H-GAD_H)/2
  24.  
  25. #define GAD_NAME 0
  26. #define GAD_NUM  1
  27. static const struct TagItem nametags[] = {GTST_String, "MrS. Anonymous",
  28.                                           GTST_MaxChars, HIGH_STRLEN,
  29.                                           TAG_DONE};
  30. static struct Gadget *gadlist;
  31. static struct GadgetData gads[] = {
  32.  { "Enter your Name", STRING_KIND, PLACETEXT_ABOVE, nametags,
  33.     GAD_X, GAD_Y, GAD_W, GAD_H, NULL}
  34. };
  35.  
  36. /* Name buffer */
  37. static char name[HIGH_STRLEN+1];
  38.  
  39. BOOL OpenNameWindow(void)
  40. {
  41.  /* Create gadgets */
  42.  if (gadlist = CreateGadgetList(gads, GAD_NUM, 0)) {
  43.   /* Open Window */
  44.   if (win = OpenWindowTags(NULL, WA_Left, WIN_X,
  45.                                  WA_Top, WIN_Y,
  46.                                  WA_Width, WIN_W,
  47.                                  WA_Height, WIN_H,
  48.                                  WA_PubScreen, Screen,
  49.                                  WA_Flags, WFLG_SMART_REFRESH|WFLG_ACTIVATE|
  50.                                            WFLG_RMBTRAP,
  51.                                  TAG_DONE)) {
  52.  
  53.    /* Add gadgets to window */
  54.    AddGList(win, gadlist, ~0, ~0, NULL);
  55.    RefreshGList(gadlist, win, NULL, ~0);
  56.    GT_RefreshWindow(win, NULL);
  57.  
  58.    /* Acvtivate name gadget */
  59.    ActivateGadget(gads[GAD_NAME].gadget, win, NULL);
  60.  
  61.    /* Set IDCMPPort */
  62.    win->UserPort = IDCMPPort;
  63.    win->UserData = HandleNameWindowIDCMP;
  64.    ModifyIDCMP(win, WINDOW_IDCMP);
  65.    
  66.    /* O.K. */
  67.    return (TRUE);
  68.   }
  69.   FreeGadgets(gadlist);
  70.  }
  71.  /* failure */
  72.  return (FALSE);
  73. }
  74.  
  75. static void CloseNameWindow(void)
  76. {
  77.  RemoveGList(win, gadlist, ~0);
  78.  CloseWindowSafely(win);
  79.  FreeGadgets(gadlist);
  80. }
  81.  
  82. void *HandleNameWindowIDCMP(struct IntuiMessage *msg)
  83. {
  84.  switch (msg->Class) {
  85.   case IDCMP_GADGETUP: {
  86.                         USHORT   gad = (((struct Gadget *) msg->IAddress)->GadgetID);
  87.  
  88.                         /* Close window? */
  89.                         if (gad == GAD_NAME) {
  90.                          /* Copy string gadget buffer to internal buffer */ 
  91.                          strcpy(name,
  92.                                 ( (struct StringInfo *)
  93.                                  ( (struct Gadget *)
  94.                                   msg->IAddress
  95.                                  )->SpecialInfo
  96.                                 )->Buffer);                        
  97.  
  98.                          /* Yes. Don't forget to reply message! */
  99.                          GT_ReplyIMsg(msg);
  100.                          CloseNameWindow();
  101.                          return (name);
  102.                         }
  103.                         break;
  104.                        }
  105.  
  106.   case IDCMP_REFRESHWINDOW: GT_BeginRefresh(win);
  107.                             GT_EndRefresh(win, TRUE);
  108.                             break;
  109.  }
  110.  return (NULL);
  111. }
  112.