This is GCell.m in view mode; [Download] [Up]
#import <libc.h>
#import <stdio.h>
#import <strings.h>
#import <appkit/Application.h>
#import <appkit/Listener.h>
#import <appkit/Speaker.h>
#import <appkit/View.h>
#import <appkit/NXImage.h>
#import <appkit/NXBitmapImageRep.h>
#import <appkit/NXEPSImageRep.h>
#import <appkit/tiff.h>
#import <dpsclient/dpsNeXT.h>
#import <streams/streams.h>
#import <sys/types.h>
#import "GCell.h"
@implementation GCell
- initFromFile:(char *)file
{
char *tiff = NULL;
int length;
int okFlag;
NXStream *stream;
id speaker;
self = [super init];
speaker = [NXApp appSpeaker];
[speaker setSendPort:NXPortFromName(NX_WORKSPACEREQUEST, NULL)];
[speaker getFileIconFor: file
TIFF: &tiff
TIFFLength: &length
ok: &okFlag];
if(okFlag || tiff)
{
stream = NXOpenMemory(tiff, length, NX_READONLY);
theImage = [[NXImage alloc] initFromStream: stream ];
NXCloseMemory(stream, NX_FREEBUFFER);
}
else
{
theImage = [[NXImage alloc]
initFromFile: "/usr/lib/nib/default_app_icon.tiff" ];
}
if(file != NULL)
strcpy(name, file);
else
{
strcpy(name, "FooFile");
}
return self;
}
- calcCellSize:(NXSize *)theSize
{
NXSize s;
[theImage getSize: &s];
s.height += 4.0;
s.width += 4.0;
*theSize = s;
return self;
}
- highlight:(const NXRect *)cellFrame inView:controlView lit:(BOOL)flag;
{
return self;
}
- (BOOL)trackMouse:(NXEvent *)theEvent
inRect:(const NXRect *)cellFrame
ofView:controlView;
{
int aFlag;
if(theEvent->data.mouse.click > 1)
{
if(lastmouse)
{
id speaker = [NXApp appSpeaker];
[speaker setSendPort:
NXPortFromName(NX_WORKSPACEREQUEST, NULL)];
[speaker openFile: name ok:&aFlag];
lastmouse = NO;
}
else
{
lastmouse = YES;
}
}
else
{
NXEvent *e;
NXRect dragRect;
e = [NXApp getNextEvent: NX_MOUSEUPMASK
waitFor: .25
threshold: NX_MODALRESPTHRESHOLD];
if(e != NULL)
return YES;
dragRect.origin = cellFrame->origin;
dragRect.size.height = 48.0;
dragRect.size.width = 48.0;
[controlView dragFile: name
fromRect: &dragRect
slideBack: YES
event: theEvent];
}
return YES;
}
- drawInside: (const NXRect *)cellFrame inView:controlView
{
NXPoint compositePlace;
compositePlace.x = cellFrame->origin.x+2.0;
compositePlace.y = NX_MAXY(cellFrame)+ 2.0;
[theImage composite:NX_COPY toPoint:&compositePlace];
return self;
}
- writeRichText:(NXStream *)stream forView:view
{
return self;
}
- readRichText:(NXStream *)stream forView:view
{
return self;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.