This is KenoCardView.m in view mode; [Download] [Up]
#import "KenoCardView.h"
#import "Keno.h"
#import "KenoCard.h"
@implementation KenoCardView
- awakeFromNib
{
cellNumberFont = [Font newFont:"Helvetica-Bold" size:24];
[self setFlipped:YES];
[self adjustMatrix];
return self;
}
- adjustMatrix
{
float width = NX_WIDTH(&bounds);
float height = NX_HEIGHT(&bounds);
float textWidth;
int r, c, i=0;
cellWidth = width/KENO_NUMCOLS;
cellHeight = height/KENO_NUMROWS;
for(r=0; r<KENO_NUMROWS; r++)
{
for(c=0; c<KENO_NUMCOLS; c++)
{
kcell[i].number = i+1;
sprintf(kcell[i].text, "%d", i+1);
kcell[i].x = c*cellWidth;
kcell[i].y = r*cellHeight;
NX_X(&kcell[i].cellRect) = kcell[i].x;
NX_Y(&kcell[i].cellRect) = kcell[i].y;
NX_WIDTH(&kcell[i].cellRect) = cellWidth;
NX_HEIGHT(&kcell[i].cellRect) = cellHeight;
textWidth = [cellNumberFont getWidthOf:kcell[i].text];
kcell[i].textX = kcell[i].x+(cellWidth - textWidth)/2;
kcell[i].textY = kcell[i].y + cellHeight - ((cellHeight - 24.0)/2.0) - 2.0;
i++;
}
}
return self;
}
- clearCells
{
int i;
for(i=0; i<KENO_NUMCELLS; i++)
{
kcell[i].isSelected = NO;
}
[self display];
return self;
}
- (int)getCellForPoint:(NXPoint *)mousePoint
{
int i;
for(i=0; i<KENO_NUMCELLS; i++)
{
if(NXPointInRect(mousePoint, &kcell[i].cellRect))
{
return i;
}
}
return KENO_NOCELL;
}
- drawSelf:(const NXRect *)rects :(int)rectCount
{
int i;
PSsetgray(NX_WHITE);
PSsetlinewidth(2.0);
NXRectFill(&bounds);
[cellNumberFont set];
PSsetgray(NX_BLACK);
PSmoveto(NX_X(&bounds)+1.0, NX_Y(&bounds)+1.0);
PSlineto(NX_X(&bounds)+1.0, NX_Y(&bounds)+NX_HEIGHT(&bounds)-1.0);
PSlineto(NX_X(&bounds)+NX_WIDTH(&bounds)-1.0, NX_Y(&bounds)+NX_HEIGHT(&bounds)-1.0);
PSlineto(NX_X(&bounds)+NX_WIDTH(&bounds)-1.0, NX_Y(&bounds)+1.0);
PSclosepath();
PSstroke();
for(i=0; i<KENO_NUMROWS-1; i++)
{
PSmoveto(NX_X(&bounds), i*cellHeight+cellHeight);
PSlineto(NX_WIDTH(&bounds), i*cellHeight+cellHeight);
PSstroke();
}
for(i=0; i<KENO_NUMCOLS-1; i++)
{
PSmoveto(i*cellWidth+cellWidth, NX_Y(&bounds));
PSlineto(i*cellWidth+cellWidth, NX_HEIGHT(&bounds));
PSstroke();
}
for(i=0; i<KENO_NUMCELLS; i++)
{
PSsetgray(NX_BLACK);
//PSmoveto(kcell[i].x, kcell[i].y);
//PSlineto(kcell[i].x, kcell[i].y+cellHeight);
//PSlineto(kcell[i].x+cellWidth, kcell[i].y+cellHeight);
//PSlineto(kcell[i].x+cellWidth, kcell[i].y);
//PSstroke();
if(kcell[i].isSelected)
PSsetgray(NX_DKGRAY);
else
PSsetgray(NX_LTGRAY);
PSmoveto(kcell[i].textX, kcell[i].textY);
PSshow(kcell[i].text);
}
return self;
}
- (BOOL)acceptsFirstMouse
{
return YES;
}
- mouseDown:(NXEvent *)theEvent
{
NXPoint mousePoint = theEvent->location;
int cellTouched;
[self convertPoint:&mousePoint fromView:nil];
cellTouched = [self getCellForPoint:&mousePoint];
if(cellTouched != KENO_NOCELL)
{
kcell[cellTouched].isSelected = !kcell[cellTouched].isSelected;
}
[self display];
NXPing();
return self;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.