#import #import "MVImageTextCell.h" @implementation MVImageTextCell - (void) dealloc { image = nil; [super dealloc]; } - (id) copyWithZone:(NSZone *) zone { MVImageTextCell *cell = (MVImageTextCell *)[super copyWithZone:zone]; cell -> image = [image retain]; return cell; } - (void) setImage:(NSImage *) anImage { [image autorelease]; image = [anImage retain]; } - (NSImage *) image { return image; } - (NSRect) imageFrameForCellFrame:(NSRect) cellFrame { if( image ) { NSRect imageFrame = NSZeroRect; imageFrame.size = [image size]; imageFrame.origin = cellFrame.origin; imageFrame.origin.x += 3.; imageFrame.origin.y += ceil( ( cellFrame.size.height - imageFrame.size.height ) / 2 ); return imageFrame; } else return NSZeroRect; } - (void) editWithFrame:(NSRect) aRect inView:(NSView *) controlView editor:(NSText *) textObj delegate:(id) anObject event:(NSEvent *) theEvent { NSRect textFrame = NSZeroRect, imageFrame = NSZeroRect; NSDivideRect( aRect, &imageFrame, &textFrame, 3. + [image size].width, NSMinXEdge ); [super editWithFrame:textFrame inView:controlView editor:textObj delegate:anObject event:theEvent]; } - (void) selectWithFrame:(NSRect) aRect inView:(NSView *) controlView editor:(NSText *) textObj delegate:(id) anObject start:(int) selStart length:(int) selLength { NSRect textFrame = NSZeroRect, imageFrame = NSZeroRect; NSDivideRect( aRect, &imageFrame, &textFrame, 3. + [image size].width, NSMinXEdge ); [super selectWithFrame:textFrame inView:controlView editor:textObj delegate:anObject start:selStart length:selLength]; } - (void) drawWithFrame:(NSRect) cellFrame inView:(NSView *) controlView { if( image != nil ) { NSSize imageSize = NSZeroSize; NSRect imageFrame = NSZeroRect; imageSize = [image size]; NSDivideRect( cellFrame, &imageFrame, &cellFrame, 3. + imageSize.width, NSMinXEdge ); if( [self drawsBackground] ) { [[self backgroundColor] set]; NSRectFill( imageFrame ); } imageFrame.origin.x += 0; imageFrame.origin.y += -1; imageFrame.size = imageSize; if( [controlView isFlipped] ) imageFrame.origin.y += ceil( ( cellFrame.size.height + imageFrame.size.height ) / 2 ); else imageFrame.origin.y += ceil( ( cellFrame.size.height - imageFrame.size.height) / 2 ); [image compositeToPoint:imageFrame.origin operation:NSCompositeSourceOver]; } [super drawWithFrame:cellFrame inView:controlView]; } - (NSSize) cellSize { NSSize cellSize = [super cellSize]; cellSize.width += ( image ? [image size].width : 0 ) + 3.; return cellSize; } @end