This is ImageCell.m in view mode; [Download] [Up]
#import <appkit/appkit.h>
#import <foundation/foundation.h>
#import "graphicCellProtocol.h" // Stolen from the appkit source
#import "ImageCell.h"
@implementation ImageCell
- (id)initIconCell:(const char *)iconName;
{
self = [super initIconCell:iconName];
_path = nil;
_image = nil;
return self;
}
- free;
{
[_image free];
[_path release];
return [super free];
}
- (NXImage *)image;
{
return _image;
}
- (void)setImage:(NXImage *)anImage;
{
[_image free];
_image = anImage;
}
- (NSString *)imagePath;
{
return _path;
}
- (void)setImagePath:(NSString *)aPathName;
{
[_path release];
_path = [aPathName copy];
[self setImage:[[NXImage alloc] initFromFile:[_path cString]]];
}
//-----------------------------------------------------------------------------
- drawSelf:(const NXRect *) cellFrame inView:controlView
{
NXPoint point = cellFrame->origin;
point.y += cellFrame->size.height;
[_image composite:NX_SOVER toPoint:&point];
return self;
}
- highlight:(const NXRect *) cellFrame inView:controlView lit:(BOOL) flag
{
return self;
}
- calcCellSize:(NXSize *) theSize
{
[_image getSize:theSize];
return self;
}
//-----------------------------------------------------------------------------
- (BOOL)trackMouse:(NXEvent *)theEvent
inRect:(const NXRect *)cellFrame
ofView:controlView;
{
if (theEvent->data.mouse.click == 1)
{
NXEvent buf, *ev;
ev = [NXApp peekNextEvent:NX_MOUSEDOWNMASK|NX_MOUSEUPMASK
into:&buf waitFor:0.3 threshold:NX_MODALRESPTHRESHOLD];
if (!ev || ev->type == NX_MOUSEDRAGGED)
{
Pasteboard *pboard = [Pasteboard newName:NXDragPboard];
const char *pboard_types[] =
{
NXTIFFPboardType, NXFilenamePboardType
};
NXPoint point = theEvent->location;
NXPoint nullPoint = { 0.0, 0.0 };
NXSize size;
[pboard declareTypes:&NXFilenamePboardType num:1 owner:nil];
[pboard writeType:NXFilenamePboardType data:[_path cString]
length:[_path cStringLength]];
// [pboard writeType:NXTIFFPboardType data:...
[_image getSize:&size];
point.x -= size.width / 2;
point.y -= size.height / 2;
[controlView convertPoint:&point fromView:nil];
[controlView dragImage:_image at:&point offset:&nullPoint
event:theEvent pasteboard:pboard source:controlView
slideBack:YES];
return YES;
}
}
else if (theEvent->data.mouse.click > 1)
{
[[[NXApp class] workspace] openFile:[_path cString] fromImage:_image
at:&theEvent->location inView:controlView];
return YES;
}
return NO;
}
//-----------------------------------------------------------------------------
/* Read Image (name and) data from the RTF-Stream generated by the ArticleViewControl */
- readRichText:(NXStream *) stream forView:(id <NXGraphicCellProtocol>)view
{
char name[MAXPATHLEN + 1];
NXScanf(stream, "%[^}]", name);
[self setImagePath:[NSString stringWithCString:name]];
#ifdef DEBUG
{
NXSize size;
[_image getSize:&size];
fprintf(stderr, "image '%s' (%f, %f)\n", name, size.width, size.height);
}
#endif
return self;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.