home *** CD-ROM | disk | FTP | other *** search
- //
- // MiscProgressView.m -- a simple view class for displaying progress
- // Written originally by Don Yacktman (c) 1993 by James Heiser.
- // Modified from an example in the NeXT documentation.
- // This file is maintained by James Heiser, jheiser@adobe.com.
- // Version 1.0. All rights reserved.
- //
- // This notice may not be removed from this source code.
- //
- // This object is included in the MiscKit by permission from the author
- // and its use is governed by the MiscKit license, found in the file
- // "LICENSE.rtf" in the MiscKit distribution. Please refer to that file
- // for a list of all applicable permissions and restrictions.
- //
-
- #import "MiscProgressView.h"
-
- @implementation MiscProgressView
-
- - initFrame:(const NXRect *)frameRect
- {
- [super initFrame:frameRect];
- bg = NXConvertGrayToColor(NX_LTGRAY);
- fg = NXConvertGrayToColor(NX_DKGRAY);
- bd = NXConvertGrayToColor(NX_BLACK);
- total = MISC_PROGRESS_MAXSIZE;
- stepSize = MISC_PROGRESS_DEFAULTSTEPSIZE;
- count = 0;
- ratio = 0.0;
- return self;
- }
-
- - renderBackground
- {
- NXSetColor(bg);
- NXRectFill(&bounds);
- return self;
- }
-
- - renderBar
- {
- if ((ratio > 0) && (ratio <= 1.0)) {
- NXRect r = bounds;
- r.size.width = bounds.size.width * ratio;
- NXSetColor(fg);
- NXRectFill(&r);
- }
- return self;
- }
-
- - renderBorder
- {
- NXSetColor(bd);
- NXFrameRect(&bounds);
- return self;
- }
-
-
- - drawSelf:(const NXRect *)rects :(int)rectCount
- { // Note from Don on why this -drawSelf: is split up --
- // The three separate rendering methods make things a little less efficient,
- // but make it a lot easier to subclass and retain parts of the original
- // rendering. I wish NeXT had done something like this with the various
- // control classes so that subclasses could override parts of the steps
- // in the rendering process...or insert things at certain points in time.
- [self renderBackground];
- [self renderBar];
- [self renderBorder];
- return self;
- }
-
- - setStepSize:(int)value
- {
- stepSize = value;
- return self;
- }
-
- - (int)stepSize { return stepSize; }
- - (NXColor)backgroundColor { return bg; }
- - (NXColor)foregroundColor { return fg; }
- - (NXColor)borderColor { return bd; }
-
- - setBackgroundColor:(NXColor)color
- {
- bg = color;
- return self;
- }
-
- - setForegroundColor:(NXColor)color
- {
- fg = color;
- return self;
- }
-
- - setBorderColor:(NXColor)color
- {
- bd = color;
- return self;
- }
-
- - setRatio:(float)newRatio
- {
- if (newRatio > 1.0) newRatio = 1.0;
- if (ratio != newRatio) {
- ratio = newRatio;
- [self display];
- }
- return self;
- }
-
-
- - takeIntValueFrom:sender
- {
- int temp = [sender intValue];
- if ((temp < 0) || (temp > total)) return nil;
- count = temp;
- [self setRatio:(float)count/(float)total];
- return self;
- }
-
- - increment:sender
- {
- count += stepSize;
- [self setRatio:(float)count/(float)total];
- return self;
- }
-
- - takeFloatValueFrom:sender
- {
- [self setRatio:[sender floatValue]];
- count = ceil(ratio * (float)total);
- return self;
- }
-
- - (const char *)getInspectorClassName
- {
- return "MiscProgressViewInspector";
- }
-
- - clear:sender
- {
- count = 0;
- [self setRatio: 0];
- return self;
- }
-
-
- - read:(NXTypedStream *)stream
- {
- [super read:stream];
- NXReadTypes(stream, "ii", &total, &stepSize);
- bg = NXReadColor(stream);
- fg = NXReadColor(stream);
- bd = NXReadColor(stream);
- return self;
- }
-
- - write:(NXTypedStream *)stream
- {
- [super write:stream];
- NXWriteTypes(stream, "ii", &total, &stepSize);
- NXWriteColor(stream, bg);
- NXWriteColor(stream, fg);
- NXWriteColor(stream, bd);
- return self;
- }
-
-
- @end
-