There are several methods which the programmer must supply to create or modify the content of a View. Which ones are needed and their complexity depends on the intricacy of the planned view. The most essential methods are:
Beyond these essentials there are other possibilities, such as assigning a delegate.
/* = = = = = = = = = = = = = = R E C V I E W = = = = = = = = = = = = = */
- initFrame:(const NXRect *)frameRect
/*
* Initializes the new RECView object. First, an initFrame: message is sent
* to super to initialize RECView as a View. Next, the RECView sets its own
* state -- that it is opaque and that the origin of its coordinate system
* lies in the center of its area.
*/
{
[super initFrame:frameRect];
[self setOpaque:YES];
[self translate:floor(frame.size.width/2) :floor(frame.size.height/2)];
return self;
}
- drawSelf:(const NXRect *)rects :(int)rectCount
/*
* Draws the RECView's background and axes. If there are any points,
* these are drawn too.
*/
{
if (rects == NULL) return self;
// PSsetgray(NX_WHITE);
PSsetgray(NX_LTGRAY);
if (drawBack) NXRectFill(&rects[0]);
PSsetgray(NX_DKGRAY);
// PSsetgray(NX_BLACK);
isErrm=FALSE;
[value setStringValue: " "];
if (rec(cstr)) [value setStringValue: "T"];
else [value setStringValue: "F"];
if (isErrm) {[comment setStringValue: errm]; isErrm=FALSE;}
PSstroke();
return self;
}
- sizeTo:(NXCoord)width :(NXCoord)height
/*
* Ensures that whenever the RECView is resized, the origin of its
* coordinate system is repositioned to the center of its area.
*/
{
[super sizeTo:width :height];
[self setDrawOrigin:-floor(width/2) : -floor(height/2)];
return self;
}
- mouseDown:(NXEvent *) theEvent
/*
* Responds to a message the system sends whenever the user presses the
* mouse button when the cursor is over the RECView. The RECView changes
* the cursor to a cross-hairs image and then starts asking for mouse-dragged
* or mouse-up events. As it receives mouse-dragged events, the RECView
* updates the readOut text Cell with the cursor's coordinates. If the user
* releases the mouse button while the cursor is over the RECView,the RECView
* registers the point and then sends a message to its delegate notifying it
* of the new point.
*/
{
int looping = YES, oldMask;
NXPoint aPoint;
NXRect plotRect;
[crossCursor set];
[self getBounds:&plotRect];
oldMask = [window addToEventMask:NX_MOUSEDRAGGEDMASK];
[self lockFocus];
do {
aPoint = theEvent->location;
[window flushWindow];
if (theEvent->type == NX_MOUSEUP) {
/* on mouse-up, register point, inform delegate, and clean up state */
[window flushWindow];
looping = NO;
}
} while (looping &&
(theEvent=[NXApp getNextEvent:NX_MOUSEUPMASK|NX_MOUSEDRAGGEDMASK]));
[self unlockFocus];
[window setEventMask:oldMask];
[NXArrow set];
return self;
}