home *** CD-ROM | disk | FTP | other *** search
/ Nebula 1995 August / NEBULA.bin / SourceCode / Palettes / Chart / Source / BarChartInspector.m < prev    next >
Encoding:
Text File  |  1994-06-07  |  9.0 KB  |  274 lines

  1. // -------------------------------------------------------------------------------------
  2. // BarChartInspector.m
  3. // Martin D. Flynn, NeXT Computer, Inc.
  4. // -------------------------------------------------------------------------------------
  5.  
  6. #import <appkit/appkit.h>
  7. #import "BarChartInspector.h"
  8. #import "BarChart.h"
  9.  
  10. // -------------------------------------------------------------------------------------
  11. @implementation BarChartInspector
  12.  
  13. // -------------------------------------------------------------------------------------
  14. // This method exists for linker purposes only.  It is not executed. 
  15. + forceBarChartLink { return [BarChart class]; }
  16.  
  17. // -------------------------------------------------------------------------------------
  18. // << These two class methods don't get inherited >>
  19. //+ finishLoading:(struct mach_header*) hdr { NIBDidLoadClass(self, hdr); return (id)nil; }
  20. //+ startUnloading { NIBWillUnloadClass(self); return (id)nil; }
  21.  
  22. // -------------------------------------------------------------------------------------
  23.  
  24. - _centerInspectorBox:box
  25. {
  26.   id        newView = [[View alloc] initFrame:&inspectorFrame];
  27.   NXRect    bFrame;
  28.   [newView addSubview:box];
  29.   [box setBorderType:NX_NOBORDER];
  30.   [box getFrame:&bFrame];
  31.   bFrame.origin.x = (inspectorFrame.size.width  - bFrame.size.width ) / 2.0;
  32.   bFrame.origin.y = inspectorFrame.size.height - bFrame.size.height;
  33.   [box setFrame:&bFrame];
  34.   return newView;
  35. }
  36.  
  37. - init
  38. {
  39.     char    buff[MAXPATHLEN + 1];
  40.     id        bundle;
  41.  
  42.     [super init];
  43.     bundle = [NXBundle bundleForClass:[self class]];
  44.     [bundle getPath:buff forResource:"BarChartInspector" ofType:"nib"];
  45.     [NXApp loadNibFile:buff owner:self withNames:NO fromZone:[self zone]];
  46.   
  47.     [inspectorBox setBorderType:NX_NOBORDER];
  48.     [[inspectorBox contentView] getFrame:&inspectorFrame];
  49.   
  50.     generalBox = [self _centerInspectorBox:generalBox];
  51.     xAxisBox   = [self _centerInspectorBox:xAxisBox  ];
  52.     yAxisBox   = [self _centerInspectorBox:yAxisBox  ];
  53.  
  54.     [self inspectGeneral:self];
  55.   
  56.     return self;
  57.   
  58. }
  59.  
  60. - revert:sender
  61. {
  62.   int        chartType;
  63.   NXRect    *dataRange, *tickMark;
  64.  
  65.   /* color/gray state */
  66.   [drawInColorBtn setState:[object drawInColor]];
  67.   [self setColorGrayMode:drawInColorBtn];
  68.  
  69.   /* background */
  70.   [backgroundTransSwitch setState:[object backgroundTransparent]];
  71.   [backgroundGrayMatrix selectCellWithTag:rint([object backgroundGray] * 3.0)];
  72.   [backgroundColorWell    setColor:[object backgroundColor]];
  73.   [self setBackgroundTransState:backgroundTransSwitch];
  74.  
  75.   /* chart/grid colors */
  76.   [dftChartGrayMatrix   selectCellWithTag:rint([object dftChartGray  ] * 3.0)];
  77.   [xGridGrayMatrix      selectCellWithTag:rint([object xGridGray     ] * 3.0)];
  78.   [yGridGrayMatrix      selectCellWithTag:rint([object yGridGray     ] * 3.0)];
  79.   [dftChartColorWell    setColor:[object dftChartColor  ]];
  80.   [xGridColorWell        setColor:[object xGridColor     ]];
  81.   [yGridColorWell        setColor:[object yGridColor     ]];
  82.  
  83.   /* grid state */
  84.   [xGridDraw setState:[object xGridDraw]];
  85.   [self setXGridDrawState:xGridDraw];
  86.   [yGridDraw setState:[object yGridDraw]];
  87.   [self setYGridDrawState:yGridDraw];
  88.  
  89.   /* chart type */
  90.   chartType = [object dftChartType];
  91.   [[dftChartTypeMatrix findCellWithTag:0] setState:((chartType & chartBAR  )?YES:NO)];
  92.   [[dftChartTypeMatrix findCellWithTag:1] setState:((chartType & chartLINE )?YES:NO)];
  93.   [[dftChartTypeMatrix findCellWithTag:2] setState:((chartType & chartPOINT)?YES:NO)];
  94.   [[dftChartTypeMatrix findCellWithTag:3] setState:((chartType & chartAREA )?YES:NO)];
  95.  
  96.   /* axis data ranges & scaling */
  97.   dataRange = [object dataRange];
  98.   [xDataRangeLo setFloatValue:dataRange->origin.x];
  99.   [xDataRangeHi setFloatValue:dataRange->origin.x + dataRange->size.width];
  100.   [yDataRangeLo setFloatValue:dataRange->origin.y];
  101.   [yDataRangeHi setFloatValue:dataRange->origin.y + dataRange->size.height];
  102.   [xLogScaling  setState:[object xLogScaling]];
  103.   [yLogScaling  setState:[object yLogScaling]];
  104.   if ([xLogScaling state]&&([xDataRangeLo floatValue]<=0.0))[xDataRangeLo setFloatValue:1.0];
  105.   if ([yLogScaling state]&&([yDataRangeLo floatValue]<=0.0))[yDataRangeLo setFloatValue:1.0];
  106.  
  107.   /* tick marks */
  108.   tickMark = [object tickMark];
  109.   [xTickIncrement setFloatValue:tickMark->size.width];
  110.   [yTickIncrement setFloatValue:tickMark->size.height];
  111.  
  112.   /* axis labels */
  113.   [xShowLabels  setState:[object xShowLabels]];
  114.   [xLabelRotate setState:[object xLabelRotate]];
  115.   [yShowLabels  setState:[object yShowLabels]];
  116.   [yLabelRotate setState:[object yLabelRotate]];
  117.  
  118.   [window display];
  119.   
  120.   return [super revert:sender];
  121. }
  122.  
  123. - ok:sender
  124. {
  125.   int        chartType;
  126.   NXRect    dataRange, tickMark;
  127.   
  128.   /* background transparent */
  129.   [object setBackgroundTransparent:[backgroundTransSwitch state]];
  130.  
  131.   /* color/gray state */
  132.   if ([drawInColorBtn state]) {
  133.     [object setBackgroundColor:[backgroundColorWell color]];
  134.     [object setDftChartColor:  [dftChartColorWell color]];
  135.     [object setXGridColor:     [xGridColorWell color]];
  136.     [object setYGridColor:     [yGridColorWell color]];
  137.   } else {
  138.     [object setBackgroundGray: [[backgroundGrayMatrix selectedCell] tag] / 3.0];
  139.     [object setDftChartGray:   [[dftChartGrayMatrix   selectedCell] tag] / 3.0];
  140.     [object setXGridGray:      [[xGridGrayMatrix      selectedCell] tag] / 3.0];
  141.     [object setYGridGray:      [[yGridGrayMatrix      selectedCell] tag] / 3.0];
  142.   }
  143.  
  144.   /* grid state */
  145.   [object setXGridDraw:[xGridDraw state]];
  146.   [object setYGridDraw:[yGridDraw state]];
  147.  
  148.   /* chart type */
  149.   chartType = 0;
  150.   if ([[dftChartTypeMatrix findCellWithTag:0] state]) chartType |= chartBAR;
  151.   if ([[dftChartTypeMatrix findCellWithTag:1] state]) chartType |= chartLINE;
  152.   if ([[dftChartTypeMatrix findCellWithTag:2] state]) chartType |= chartPOINT;
  153.   if ([[dftChartTypeMatrix findCellWithTag:3] state]) chartType |= chartAREA;
  154.   [object setDftChartType:chartType];
  155.  
  156.   /* axis data ranges & scaling */
  157.   [object setXLogScaling:[xLogScaling state]];
  158.   [object setYLogScaling:[yLogScaling state]];
  159.   if ([xLogScaling state]&&([xDataRangeLo floatValue]<=0.0))[xDataRangeLo setFloatValue:1.0];
  160.   if ([yLogScaling state]&&([yDataRangeLo floatValue]<=0.0))[yDataRangeLo setFloatValue:1.0];
  161.   dataRange.origin.x    = [xDataRangeLo floatValue];
  162.   dataRange.size.width  = [xDataRangeHi floatValue] - dataRange.origin.x;
  163.   dataRange.origin.y    = [yDataRangeLo floatValue];
  164.   dataRange.size.height = [yDataRangeHi floatValue] - dataRange.origin.y;
  165.   [object setDataRange:&dataRange];
  166.  
  167.   /* tick marks */
  168.   tickMark.origin.x     = 0.0;
  169.   tickMark.size.width   = [xTickIncrement floatValue];
  170.   tickMark.origin.y     = 0.0;
  171.   tickMark.size.height  = [yTickIncrement floatValue];
  172.   [object setTickMark:&tickMark];
  173.  
  174.   /* axis labels */
  175.   [object setXShowLabels:[xShowLabels state]];
  176.   [object setXLabelRotate:[xLabelRotate state]];
  177.   [object setYShowLabels:[yShowLabels state]];
  178.   [object setYLabelRotate:[yLabelRotate state]];
  179.  
  180.   [window display];
  181.  
  182.   return [super ok:sender];
  183. }
  184.  
  185. - (BOOL)wantsButtons
  186. {
  187.     return YES;
  188. }
  189.  
  190. // -------------------------------------------------------------------------------------
  191.  
  192. /* set background transparent */
  193. - setBackgroundTransState:sender
  194. {
  195.   BOOL    state = ![backgroundTransSwitch state];
  196.   [backgroundColorWell setEnabled:state];
  197.   [backgroundGrayMatrix setEnabled:state];
  198.   [[backgroundGrayMatrix selectedCell] setState:state];
  199.   [backgroundGrayMatrix display];
  200.   return self;
  201. }
  202.  
  203. /* set xGrid drawing state */
  204. - setXGridDrawState:sender
  205. {
  206.   BOOL    state = [xGridDraw state];
  207.   [xGridColorWell setEnabled:state];
  208.   [xGridGrayMatrix setEnabled:state];
  209.   [[xGridGrayMatrix selectedCell] setState:state];
  210.   [xGridGrayMatrix display];
  211.   return self;
  212. }
  213.  
  214. /* set yGrid drawing state */
  215. - setYGridDrawState:sender
  216. {
  217.   BOOL    state = [yGridDraw state];
  218.   [yGridColorWell setEnabled:state];
  219.   [yGridGrayMatrix setEnabled:state];
  220.   [[yGridGrayMatrix selectedCell] setState:state];
  221.   [yGridGrayMatrix display];
  222.   return self;
  223. }
  224.  
  225. /* set color/gray mode */
  226. - setColorGrayMode:sender
  227. {
  228.   if ([drawInColorBtn state]) {
  229.     [backgroundGrayMatrix removeFromSuperview];
  230.     [[backgroundCGBox contentView] addSubview:backgroundColorWell];
  231.     [dftChartGrayMatrix removeFromSuperview];
  232.     [[chartCGBox contentView] addSubview:dftChartColorWell];
  233.     [xGridGrayMatrix removeFromSuperview];
  234.     [[xGridCGBox contentView] addSubview:xGridColorWell];
  235.     [yGridGrayMatrix removeFromSuperview];
  236.     [[yGridCGBox contentView] addSubview:yGridColorWell];
  237.   } else {
  238.     [backgroundColorWell removeFromSuperview];
  239.     [[backgroundCGBox contentView] addSubview:backgroundGrayMatrix];
  240.     [dftChartColorWell removeFromSuperview];
  241.     [[chartCGBox contentView] addSubview:dftChartGrayMatrix];
  242.     [xGridColorWell removeFromSuperview];
  243.     [[xGridCGBox contentView] addSubview:xGridGrayMatrix];
  244.     [yGridColorWell removeFromSuperview];
  245.     [[yGridCGBox contentView] addSubview:yGridGrayMatrix];
  246.   }
  247.   [window display];
  248.   return self;
  249. }
  250.  
  251. /* inspect general */
  252. - inspectGeneral:sender
  253. {
  254.   [inspectorBox setContentView:generalBox];
  255.   [self setColorGrayMode:drawInColorBtn];
  256.   return [inspectorBox display];
  257. }
  258.  
  259. /* inspect x-axis */
  260. - inspectXAxis:sender
  261. {
  262.   [inspectorBox setContentView:xAxisBox];
  263.   return [inspectorBox display];
  264. }
  265.  
  266. /* inspect y-axis */
  267. - inspectYAxis:sender
  268. {
  269.   [inspectorBox setContentView:yAxisBox];
  270.   return [inspectorBox display];
  271. }
  272.  
  273. @end
  274.