home *** CD-ROM | disk | FTP | other *** search
/ Garbo / Garbo.cdr / mac / comm / revrdist.sit / RevRdist / RevRdist src / statwind.c < prev    next >
Encoding:
C/C++ Source or Header  |  1990-05-17  |  4.8 KB  |  210 lines  |  [TEXT/KAHL]

  1. /*
  2.  * statwind.c - routines to manage status dialog window
  3.  */
  4.  
  5. #include "RevRdist.h"
  6. #include <TransSkelProto.h>
  7.  
  8. DialogPtr        StatusDialog;
  9.  
  10. static void setAppearance (Integer, int);
  11. static void statEvent (Integer, EventRecord *);
  12. static void statClobber (void);
  13.  
  14.  
  15.  
  16.  
  17. /*
  18.  *=========================================================================
  19.  * setStat (s) - adjust status window dialog based on global variables
  20.  *    entry:    Flags, Pause set
  21.  *=========================================================================
  22.  */
  23. void
  24. setStat ()
  25. {
  26.     if (StatusDialog)
  27.     {
  28.         /*
  29.          * Show/hide, activate/deactivate
  30.          *    the reboot text
  31.          *    the please wait text
  32.          *    the Pause and Continue buttons
  33.          */
  34.         setAppearance (STS_REBOOT, (Flags & DB_STARTUP));
  35.         setAppearance (STS_WAIT, (Pause != S_IDLE));
  36.         setAppearance (STS_PAUSE, (Pause == S_RUNNING));
  37.         setAppearance (STS_CONT, (Pause == S_PAUSED));
  38.         setAppearance (STS_CANCEL, (Pause != S_IDLE));
  39.         if (Pause == S_RUNNING && Watch)
  40.             SetCursor (*Watch);
  41.         else
  42.             InitCursor ();
  43.     }
  44. }
  45.  
  46.  
  47.  
  48.  
  49. /*
  50.  *=========================================================================
  51.  * setAppearance (itemNo, f) - visible appearance of item in status dialog
  52.  *    entry:    itemNo = dialog item number to set
  53.  *            f = true to make active/visible, false to make inactive/hidden
  54.  *=========================================================================
  55.  */
  56. void
  57. setAppearance (itemNo, f)
  58.     Integer            itemNo;
  59.     int                f;
  60. {
  61.     Integer            itemType;        /* for GetDItem call */
  62.     Handle            item;            /* " */
  63.     Rect            r;                /* " */
  64.     Integer            val, val2;        /* temp */
  65.     Str255            str;
  66.  
  67. #define    OUTASIGHT    0x1000            /* amount to move item to hide it */
  68.  
  69.     GetDItem (StatusDialog, itemNo, &itemType, &item, &r);
  70.     val = itemType & ~itemDisable;
  71.     switch (val)
  72.     {
  73.     case ctrlItem+btnCtrl:
  74.         /*
  75.          * Use HiliteControl on buttons
  76.          */
  77.         val = f ? 0 : 255;
  78.         HiliteControl ((ControlHandle)item, val);
  79.         break;
  80.  
  81.     case statText:
  82.         /*
  83.          * For static text, hide it by moving it offscreen
  84.          */
  85.         val = f ? 0 : OUTASIGHT;
  86.         val2 = r.top & OUTASIGHT;
  87.         if (val != val2)
  88.         {
  89.             GetIText (item, str);
  90.             SetIText (item, (SP)"\p");
  91.             r.top ^= OUTASIGHT;
  92.             SetDItem (StatusDialog, itemNo, itemType, item, &r);
  93.             SetIText (item, str);
  94.         }
  95.         break;
  96.     }
  97. }
  98.             
  99.  
  100.  
  101. /*
  102.  *=========================================================================
  103.  * showstat () - put up status window
  104.  * entry:    skelmain() active
  105.  *=========================================================================
  106.  */
  107. void
  108. showstat ()
  109. {
  110.     register Integer itemNo;        /* index to dialog items */
  111.     Integer            itemType;        /* for GetDItem call */
  112.     Handle            item;            /* " */
  113.     Rect            r;                /* " */
  114.  
  115.     StatusDialog = GetNewDialog (RSRC_BASE+WIND_STATUS, nil, (WindowPtr) -1L);
  116.     if (StatusDialog == nil)
  117.         return;
  118.     setStat ();                        /* enable/disable as appropriate */
  119.     SkelDialog (StatusDialog, statEvent, nil, statClobber);
  120.     TextFont (1);
  121.     ShowWindow ((WindowPtr) StatusDialog);
  122. }
  123.  
  124.  
  125.  
  126. /*
  127.  *=========================================================================
  128.  * statClobber () - get rid of the status dialog resources
  129.  *=========================================================================
  130.  */
  131. void
  132. statClobber ()
  133. {
  134.     if (StatusDialog)
  135.         DisposDialog (StatusDialog);
  136.     StatusDialog = nil;
  137. }
  138.  
  139.  
  140. /*
  141.  *=========================================================================
  142.  * statEvent (itemNo, theEvent) - handle events in status dialog
  143.  * entry:    itemNo = the item number in dialog
  144.  *            theEvent = ptr to event record significant to dialog
  145.  *=========================================================================
  146.  */
  147. void
  148. statEvent (itemNo, theEvent)
  149.     Integer            itemNo;
  150.     EventRecord *    theEvent;
  151. {
  152.  
  153.     switch (itemNo)
  154.     {
  155.     case STS_PAUSE:                    /* Pause button */
  156.         if (Pause == S_RUNNING)
  157.             Pause = S_PAUSED;
  158.         setStat ();
  159.         break;
  160.  
  161.     case STS_CANCEL:                /* Cancel button */
  162.         Quit = true;
  163.         /* Fall into ... */
  164.  
  165.     case STS_CONT:                    /* Continue button */
  166.         if (Pause == S_PAUSED)
  167.             Pause = S_RUNNING;
  168.         setStat ();
  169.         break;
  170.     }
  171. }
  172.  
  173.  
  174. static Longint    msgtime;            /* the time of the last msg */
  175. /*
  176.  *=========================================================================
  177.  * statMsg (s) - set status window message
  178.  *    entry:    s = StringPtr of message text
  179.  *=========================================================================
  180.  */
  181. void
  182. statMsg (s)
  183. StringPtr    s;
  184. {
  185.     Integer            itemType;        /* for GetDItem call */
  186.     Handle            item;            /* " */
  187.     Rect            r;                /* " */
  188.  
  189.     if (StatusDialog)
  190.     {
  191.         GetDItem (StatusDialog, STS_STATUS, &itemType, &item, &r);
  192.         if ((itemType & ~itemDisable) == statText)
  193.             SetIText (item, s);
  194.         msgtime = TickCount ();
  195.     }
  196. }
  197.  
  198.  
  199.  
  200. /*
  201.  *=========================================================================
  202.  * statMsgClr () - clear status window message
  203.  *=========================================================================
  204.  */
  205. void
  206. statMsgClr ()
  207. {
  208.     if (TickCount () > msgtime + 2*60)
  209.         statMsg ((SP)"\p");
  210. }