This is PercentView.m in view mode; [Download] [Up]
#import "PercentView.h"
#import <appkit/appkit.h>
@implementation PercentView
- initFrame:(const NXRect *) theFrame viewType:(PercentViewType) type
{
[super initFrame: theFrame];
viewType = type;
return self;
}
- newSession:(float) endSize
{
sizeToPercent = 1.0 / endSize;
minChange = asin(1.0 / bounds.size.width) / 360.0;
size = 0;
return self;
}
- updateSession:(int) currentSize
{
if( currentSize <= size + minChange )
return nil;
percent = sizeToPercent * currentSize;
return [self displayPercent: percent];
}
- displayPercent: (float) p
{
if( p < 0.0 )
p = 0.0;
else if(p > 1.0 )
p = 1.0;
percent = p;
[self display];
return self;
}
- takeFloatValueFrom: sender
{
[self displayPercent: [sender floatValue]];
return self;
}
- drawSelf: (const NXRect *) rects :(int) rectCount
{
if(rectCount == 0)
return self;
/* Erase my bounds */
PSsetgray(NX_LTGRAY);
NXRectFill(&bounds);
switch( viewType )
{
case eBarView:
[self drawBar];
break;
case ePieView:
[self drawPie];
break;
default:
break;
}
[super drawSelf: rects : rectCount];
return self;
}
- drawPie
{
float x,y,dx,dy;
float r,endAngle;
/* Calculate my center, radius, and end angle */
dx = bounds.size.width / 2.0;
x = dx + bounds.origin.x;
dy = bounds.size.height / 2.0;
y = dy + bounds.origin.y;
r = MIN(dx,dy);
r -= 2;
endAngle = 90.0 - 360.0 * percent;
/* Draw black circle for the dial */
PSsetgray(NX_BLACK);
PSarc(x, y, r, 0.0, 360.0);
PSstroke();
/* Draw the pie slice */
PSmoveto(x, y);
PSarcn(x,y,r,90.0, endAngle);
PSclosepath();
PSgsave();
PSsetgray(NX_DKGRAY);
PSfill();
PSgrestore();
PSstroke();
return self;
}
- drawBar
{
float width, height;
/* Calculate the bar with & height */
height = bounds.size.height;
width = bounds.size.width * percent;
/* Fill the bar with dark gray */
PSsetgray(NX_DKGRAY);
PSrectfill(bounds.origin.x, bounds.origin.y, width, height);
/* Draw our frame in black */
PSsetgray(NX_BLACK);
PSrectstroke(bounds.origin.x, bounds.origin.y+1, bounds.size.width-1, height-1);
PSmoveto(width, 0.0);
PSrlineto(0.0, height);
PSstroke();
return self;
}
@end
/* RCS Information:
$Author: me $;
$Date: 93/02/23 02:01:55 $;
$Source: /usr1/me/NeXTSrc/MyClasses/RCS/PercentView.m,v $;
$Revision: 1.1 $;
*/
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.