This is StocMagView.m in view mode; [Download] [Up]
/* Generated by Interface Builder */ #import "StocMagView.h" #import "StocController.h" #import "SmsObject.h" #import <dpsclient/wraps.h> // for PSxxx stuff #import "PWfft.h" #define WIDTH bounds.size.width #define HEIGHT bounds.size.height @implementation StocMagView - initFrame:(const NXRect *)frameRect { self = [super initFrame: frameRect]; userPath = newUserPath(); return self; } - getTheSmsObject { if (!winDelegate) winDelegate = [window delegate]; if ([winDelegate respondsTo:@selector(getTheSmsObject)]) return [winDelegate getTheSmsObject]; else return NULL; } //------------------------------------------------------------------- // Translate from x/y values to display pixel coordinates - (float) xToPix:(float)x { float a = x-[winDelegate getFirstFrameMag]; float b = [winDelegate getLastFrameMag]-[winDelegate getFirstFrameMag]; return (WIDTH * a/b); } - (float) yToPix:(float)y { float a = y-[winDelegate getBottomDb]; float b = [winDelegate getTopDb]-[winDelegate getBottomDb]; return (16 + (HEIGHT - 16) * a/b); } //------------------------------------------------------------------- // - drawSelf:: - Draw the magnitude trajectories in the view - drawSelf:(NXRect *)rects :(int)rectCount { id theSmsObject = [self getTheSmsObject]; int iFrame = [winDelegate getFirstFrameMag]; float fMag = 0, fLastMag = 0; float OffHigh = 16, OffLow = 1, FirstFrame = [winDelegate getFirstFrameMag], LastFrame = [winDelegate getLastFrameMag], range10 = (LastFrame - FirstFrame) / 10, rangeLow10 = WIDTH/10; NXEraseRect(&bounds); PSsetlinewidth(0.0); PWinit(); if (theSmsObject != NULL) { [self lockFocus]; PWdrawStocruler((int)FirstFrame,(int)LastFrame,(int)range10,(float)rangeLow10); [self unlockFocus]; beginUserPath(userPath, NO); UPmoveto(userPath, OffLow-1, OffHigh-1); UPlineto(userPath, WIDTH, OffHigh-1); fMag = [theSmsObject getStochasticGain:iFrame]; UPmoveto(userPath, [self xToPix:(float)iFrame], [self yToPix:fMag]); fLastMag = fMag; for (iFrame = [winDelegate getFirstFrameMag]+1; iFrame <= [winDelegate getLastFrameMag]; iFrame++) { fMag = [theSmsObject getStochasticGain:iFrame]; UPlineto(userPath, [self xToPix:(float)iFrame], [self yToPix:fMag]); fLastMag = fMag; } endUserPath(userPath, dps_ustroke); sendUserPath(userPath); } return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.