This is NodeView.m in view mode; [Download] [Up]
/**************************************************
* SynthBuilder
* Copyright 1993 Nick Porcaro All Rights Reserved
**************************************************/
/*
* NodeView.h
* Eric Jordan, independent work, Spring, 1992
*/
#import <dpsclient/psops.h>
#import <dpsclient/wraps.h>
#import <stdlib.h>
#import <appkit/Panel.h>
#import "NodeView.h"
#import "FakeSynthPatch.h"
#import "FakePatchPoint.h"
#import "Controller.h"
@implementation NodeView
+ initialize
/* Set the version. This can be used in a later version to distinguish older
* formats when unarchiving documents.
*/
{
[NodeView setVersion:2];
return self;
}
-init
{
[super init];
redirectNextMouseUp = NO;
return self;
}
-setPatch:aPatch
{
thePatch = aPatch;
return self;
}
- getPatch
{
thePatch = [[Controller theController] theSP];
return self;
}
-setTag:(int)newTag
{
tag = newTag;
return self;
}
-(int)getTag
{
return tag;
}
- (BOOL) isAnOutput
{
id aFakeUG;
aFakeUG = [self superview];
if ([aFakeUG isMethodAnOutput:tag])
{
return YES;
}
else
{
return NO;
}
}
-(NXRect)frame
{
return frame;
}
-(BOOL)acceptsFirstMouse
{
return YES;
}
-drawSelf:(const NXRect *)rects :(int)rectCount
{
/*
NXRect *rect = (NXRect *)NXZoneMalloc([self zone], sizeof (*rect));
rect->origin.x = frame.origin.x;
rect->origin.y = frame.origin.y;
rect->size.width = frame.size.width;
rect->size.height = frame.size.height;
[self convertRectFromSuperview:rect];
PSsetgray(NX_BLACK);
NXRectFill(rect);
NXPing();
*/
return self;
}
-mouseDown:(NXEvent *)theEvent
{
[self getPatch];
redirectNextMouseUp = YES;
[window addToEventMask:NX_LMOUSEDRAGGEDMASK];
[thePatch setFrom:self];
return self;
}
-mouseDragged:(NXEvent *)theEvent
{
NXPoint otherEndPoint;
NXPoint thisEndPoint;
[self getPatch];
[[superview superview] lockFocus];
otherEndPoint.x = frame.origin.x+frame.size.width/2;
otherEndPoint.y = frame.origin.y+frame.size.height/2;
[[superview superview] convertPoint:&otherEndPoint fromView:superview];
thisEndPoint = theEvent->location;
[[superview superview] convertPoint:&thisEndPoint fromView:nil];
PSnewinstance();
PSsetinstance(YES);
PSmoveto(thisEndPoint.x, thisEndPoint.y);
PSlineto(otherEndPoint.x, otherEndPoint.y);
if ([thePatch getXMemory])
PSsetgray(NX_DKGRAY);
else
PSsetgray(NX_BLACK);
PSsetlinewidth(LINEWIDTH);
PSstroke();
PSsetinstance(NO);
[[superview superview] unlockFocus];
[window flushWindow];
NXPing();
return self;
}
-mouseUp:(NXEvent *)theEvent
{
[self getPatch];
if (redirectNextMouseUp)
{
id ReturnValue;
NXPoint location = theEvent->location;
[[superview superview] lockFocus];
PSnewinstance();
[[superview superview] unlockFocus];
redirectNextMouseUp = NO;
ReturnValue=[[[superview superview] hitTest:&location] mouseUp:theEvent];
[thePatch setFrom:nil];
[window removeFromEventMask:NX_LMOUSEDRAGGEDMASK];
return ReturnValue;
}
[thePatch connect:self];
return self;
}
-write:(NXTypedStream *) stream
{
[super write:stream];
NXWriteTypes(stream, "ic@", &tag, &redirectNextMouseUp);
return self;
}
-read:(NXTypedStream *) stream
{
int version;
[super read:stream];
version = NXTypedStreamClassVersion(stream, "NodeView");
switch (version)
{
case(2):
{
NXReadTypes(stream, "ic@", &tag, &redirectNextMouseUp);
break;
}
default:
{
/* Older versions */
NXReadTypes(stream, "ic", &tag, &redirectNextMouseUp);
}
}
return self;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.