This is PileOfChips.m in view mode; [Download] [Up]
/* Skeleton generated by Interface Builder */
#import "PileOfChips.h"
#import <appkit/graphics.h>
#import <appkit/Cell.h>
#import <appkit/NXImage.h>
#import <dpsclient/wraps.h>
@implementation PileOfChips
- setChips:(int)number
{
totalValue=number;
[myTextField setIntValue:totalValue];
[self display];
return self;
}
// *
// * TakeChipValueFrom is written mainly so that pileOfChips can be a target
// * for sliders and the like.
// *
- takeChipValueFrom:sender
{
totalValue=[sender intValue];
[myTextField setIntValue:totalValue];
[self display];
return self;
}
- testTakeChipValueFrom:sender
{
totalValue=[sender intValue];
[myTextField setIntValue:totalValue];
[otherPile setChips:(30-totalValue)];
[self display];
return self;
}
// redefined methods
- initFrame:(const NXRect *)frameRect
{
[super initFrame:frameRect];
// set up chipImageOne
chipImageOne=[[NXImage alloc] init];
[chipImageOne initFromSection:"one-1"];
// find boundaries
height=bounds.size.height;
width=bounds.size.width;
return self;
}
// *
// * drawSelf is where all the real work gets done.
// *
- drawSelf:(const NXRect *)rects :(int)rectCount
{
int chipsLeft;
int numberOfRows;
NXPoint currentPoint={0.0, 0.0};
// clear screen
PSsetgray(NX_LTGRAY);
NXRectFill(&bounds);
PSsetgray(NX_WHITE);
NXFrameRectWithWidth(&bounds, 2.0);
// begin drawing chips
// see if we have room
if ((height < (CLEARANCE + STEPUP)) || (width <(STEPRIGHT+STARTRIGHT)))
return self;
// Otherwise, draw it.
currentPoint.x=STARTRIGHT;
currentPoint.y=STARTUP;
numberOfRows=0;
// draw all the chips
for (chipsLeft=totalValue;chipsLeft>0;chipsLeft--)
{
// while there is still space left in this pile, draw a chip and move
if ((height-currentPoint.y>CLEARANCE))
{
[chipImageOne composite:NX_SOVER toPoint:¤tPoint];
currentPoint.y+=STEPUP;
} else
{
// otherwise, reset y and move x
// reset
currentPoint.y=STARTUP;
currentPoint.x+=STEPRIGHT;
// check to see if we still have room
while ((width<(currentPoint.x+CLEARANCE)))
{
// if not, reset again
numberOfRows++;
currentPoint.x=STARTRIGHT+((numberOfRows%2)*STEPRIGHT/2);
}
// draw the thing and move up a notch
[chipImageOne composite:NX_SOVER toPoint:¤tPoint];
currentPoint.y+=STEPUP;
}
}
return self;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.