This is CompletionView.m in view mode; [Download] [Up]
/* CompletionView.m * CompletionView is a simple "gas gauge" display to display the proress * of some calclation. As you call [compltionView setDoubleValue:value] * with values of 0.0 to 1.0, the completion view go from empty to full. * * You may freely copy, distribute, and reuse the code in this example. * NeXT disclaims any warranty of any kind, expressed or implied, as to its * fitness for any particular use. * * Written by: Robert Poor * Created: Sep/92 * * Below is the body of the .m file with detailed comments as appropriate. */ #import "CompletionView.h" #import <appkit/Cell.h> #import <appkit/graphics.h> #import <dpsclient/psops.h> @interface CompletionView(CompletionViewPrivate) - _setInstanceValue:(double *)instanceValue from:(double)newValue; @end @implementation CompletionView:View - initFrame:(const NXRect *)frameRect { [super initFrame:frameRect]; backgroundColor = NX_LTGRAY; completionColor = NX_DKGRAY; updateTextField = NO; /* set value and pctValue to out-of-range values ... */ value = -1.0; pctValue = -1; /* ... to force an update here */ [self setDoubleValue:0.0]; return self; } - (double)value { return value; } - setDoubleValue:(double)newValue { /* limit newValue to fall within 0 and 1 (inclusive) */ if (newValue < 0.0) newValue = 0.0; else if (newValue > 1.0) newValue = 1.0; if (newValue != value) { value = newValue; [self display]; if (updateTextField) { /* update the associated TextField, if any... */ int newPctValue = newValue * 100; if (newPctValue != pctValue) { char buf[5]; pctValue = newPctValue; sprintf(buf,"%3d%%",pctValue); [textField setStringValue:buf]; } } } return self; } - (float)backgroundColor { return backgroundColor; } - setBackgroundColor:(float)color { backgroundColor = color; return self; } - (float)completionColor { return completionColor; } - setCompletionColor:(float)color { completionColor = color; return self; } - textField { return textField; } - setTextField:aTextField { if (aTextField && [aTextField respondsTo:@selector(setStringValue:)]) { textField = aTextField; updateTextField = YES; return self; } else { return nil; } } - drawSelf:(NXRect *)rects :(int)rectCount { NXRect completionRect = bounds; /* erase the background */ PSsetgray (backgroundColor); NXRectFill(&bounds); if (bounds.size.width > bounds.size.height) { /* grow horizontally */ completionRect.size.width = bounds.size.width * value; } else { /* grow vertically */ completionRect.size.height = bounds.size.height * value; } PSsetgray (NX_DKGRAY); NXRectFill(&completionRect); return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.