home *** CD-ROM | disk | FTP | other *** search
/ Nebula / nebula.bin / SourceCode / Classes / Gauges / Gauge.h < prev    next >
Text File  |  1993-01-19  |  6KB  |  189 lines

  1. /**********************************************************************/
  2. /* Gauge super class
  3. /* Subclasses need to override 
  4. /*    drawself    should assume that the bitmap is correct
  5. /*    refreshBackground:    should call display so we see immediately
  6. /*    sizeTo::    if they alter orientation
  7. /* 
  8. /*    Rev 0.x        Works but other objects must look for overflow (subclass of View)
  9. /*    Rev    0.9        First revision that I started log for.
  10. /*    11/24/89        Made this a control so it could do target action (per DS)
  11. /*
  12. /*
  13. /* will notify target (via target/action) of any overflow
  14. /* not all subclasses will use the title capabillity
  15. /*
  16. /*
  17. /* for speed:
  18. /*    turn off autoscaling
  19. /*    set modulus tic = 0.0
  20. /*
  21. /* Bugs:
  22. /*    Overflow is not detected if the value is set and then scale changed
  23. /*    no way to autoscale and still have a cap
  24. /*
  25. /* AutoScaling:
  26. /*     Autoscaling with no labels will cause the number of tics to change.
  27. /*    when blowing up or shrinking tic mark values otherwise...
  28. /*
  29. /*     This will rescale the tic marks or start values under thse rules
  30. /*     Underrun:
  31. /*        if .aThreshLo > 0.0 
  32. /*        then move low point so we are centered
  33. /*        else if aThreshHi < 1.0 
  34. /*        then rescale tic marks to blow up
  35. /*    
  36. /*     Overrun
  37. /*        if .aThreshHi < 1.0
  38. /*        then move the tic marks to shrink
  39. /*        else if .aThreshLo > 0.0
  40. /*        then move up low so this is centered
  41. /*
  42. /*
  43. /**********************************************************************/
  44.  
  45. /* Generated by Interface Builder */
  46.  
  47. #import <appkit/Control.h>
  48. #import <appkit/Box.h>    /* border styles */
  49. #import <appkit/Font.h>    /* font object commands */
  50.  
  51. #define GAUGEMAX ((GaugeDat.ticSize*(GaugeDat.numMajor-1))+GaugeDat.startValue)
  52. #define GAUGESIZE (GaugeDat.ticSize*(GaugeDat.numMajor-1))
  53. #define GAUGEHI    ((GAUGESIZE*GaugeDat.aThreshHi)+GaugeDat.startValue)
  54. #define GAUGELO    ((GAUGESIZE*GaugeDat.aThreshLo)+GaugeDat.startValue)
  55. #define CONDITIONAL_REFRESH \
  56.     if (GaugeFlags.autoRenderBit) [self refreshBackground:self]
  57. #define FancyRect(tR)\
  58.     if (GaugeFlags.borderType == NX_LINE)\
  59.         NXFrameRect(tR);\
  60.     else if (GaugeFlags.borderType == NX_BEZEL)\
  61.         NXDrawButton(tR,  (const NXRect * ) tR);\
  62.     else if (GaugeFlags.borderType == NX_RIDGE)\
  63.         NXDrawGroove(tR,  (const NXRect *) tR);\
  64.  
  65. #define FancyBack(tR)\
  66.     if (GaugeFlags.borderType == NX_LINE)\
  67.         NXFrameRect(tR);\
  68.     else if (GaugeFlags.borderType == NX_BEZEL)\
  69.         NXDrawGrayBezel(tR,  (const NXRect *) tR);\
  70.     else if (GaugeFlags.borderType == NX_RIDGE)\
  71.         NXDrawGroove(tR,  (const NXRect *) tR);\
  72.  
  73. @interface Gauge:Control
  74. {
  75. struct    _GaugeFlags{
  76.     unsigned int    titleOn:1;    /* display title ? */
  77.     unsigned int    ticsOn:1;    /* display tic marks */
  78.     unsigned int    labelTicsOn:1;    /* show values of the major tics */
  79.     unsigned int    autoScaleOn:1;    /* autoscale on overrun or underrun */
  80.     unsigned int    jumpChange:1;    /* jump or smooth change */
  81.     unsigned int    overFlow:1;    /* is data out of range */
  82.     unsigned int    autoRenderBit:1;/* re-render bitmap on all changes? */
  83.     unsigned int    dummy:9;    /* place holder for future */
  84.     int        borderType;    /* what kind of border */
  85.             /* NX_NOBORDER, NX_LINE, NX_BEZEL, NX_RIDGE */
  86.     } GaugeFlags;
  87. struct     _GaugeDat{
  88.     float    backGray;    /* backdrop gray (around gauge) */
  89.     float    faceGray;    /* gray of gauge background */
  90.     float    ticGray;
  91.     float    textGray;
  92.     float    ptGray;
  93.     id    bm;                /* off screen window */
  94.     int    bmgState;        /* gstate of the off screen window */
  95.     double    startValue;    /* base value of gauge */
  96.     double    ticSize;        /* the size of a major tic mark */
  97.     double    value;
  98.     int    numMajor;        /* number of tic marks, including base mark */
  99.     int    numMinor;        /* minor tics per major tic */
  100.     double    ticQuanta;    /* quanta of tick (0.0) = any */
  101.                         /* forces tic size */
  102.     double    aThreshHi;    /* threshold to auto scale */
  103.     double    aThreshLo;    /* % of scale */
  104.     char    *labelTicPat;        /* fprintf pattern for the labels for tics */
  105.     char    *ticFontName;        /* the font of the tic labels */
  106.     char    *title;            /* the title string */
  107.     char    *titleFontName;    /* name of font for title string */
  108.     } GaugeDat;
  109.     id target;
  110.     SEL action;
  111.  
  112. }
  113.  
  114. /**********************************************************************/
  115. /* Factory Methods 
  116. /**********************************************************************/
  117. + newFrame: (NXRect *) r;
  118.  
  119. /**********************************************************************/
  120. /* Public Methods 
  121. /**********************************************************************/
  122. - changeBMSize;                /* resizes the bitmap to our current bounds size */
  123. - refreshBackground:sender;        /* overriden gens [self display]*/
  124.  
  125. /*____________________________________________________________________*/
  126.  
  127. - setBackGray:(float)bg Face:(float)fg Tic:(float)tg Text:(float)teg 
  128.             Point:(float)pg;
  129. - setBackgroundGray:(float)tC;
  130. - setFaceGray:(float)tc;
  131. - setTicGray:(float)tC;
  132. - setTextGray:(float)tC;
  133. - setPointerGray:(float)tC;
  134. - (float)backgroundGray;
  135. - (float)faceGray;
  136. - (float)ticGray;
  137. - (float)textGray;
  138. - (float)pointerGray;
  139.  
  140. /*____________________________________________________________________*/
  141.  
  142. - setLowThresh:(double)lT HighThresh:(double)hT AndQuanta:(double)qT;
  143. - setTic:(double)sTic AndStart:(double)aStart;
  144. - setTicSize:(double)sTic;
  145. - setStartValue:(double)aStart;
  146. - setDoubleValue:(double)aD;
  147. - setFloatValue:(float)aF;
  148. - takeDoubleValueFrom:sender;
  149. - takeFloatValueFrom:sender;
  150. - (double)maxValue;
  151. - (double)ticSize;
  152. - (double)startValue;
  153. - (double)doubleValue;
  154. - (float)floatValue;
  155. - (BOOL)overFlowDetected;
  156.  
  157. /*____________________________________________________________________*/
  158.  
  159. - setMajorTics:(int)nTic;
  160. - setMinorTics:(int)nTic;
  161. - setTitle:(char *)nTitle;
  162. - (int)majorTics;
  163. - (int)minorTics;
  164. - (char *)title;
  165.  
  166. /*____________________________________________________________________*/
  167.  
  168. - setTitleEnable:(BOOL)aFlag;
  169. - setTicsEnable:(BOOL)aFlag;
  170. - setLabelTicsEnable:(BOOL)aFlag;
  171. - setAutoScaleEnable:(BOOL)aFlag;
  172. - setJumpChangeEnable:(BOOL)aFlag;
  173. - setBorderType:(int)aType;
  174. - (BOOL)titleEnabled;
  175. - (BOOL)ticsEnabled;
  176. - (BOOL)labelTicsEnabled;
  177. - (BOOL)autoScaleEnabled;
  178. - (BOOL)jumpChangeEnabled;
  179. - (int)borderType;
  180.  
  181. /*____________________________________________________________________*/
  182.  
  183. - setTarget:aTarget;
  184. - setAction:(SEL)anAction;
  185.  
  186.  
  187.  
  188. @end
  189.