I think I may have got this to work, so here goes:
The data cell for the table column displaying the hyperlink is now a custom
NSTextFieldCell with the following implementation over-ridden:
- (NSUInteger)hitTestForEvent: (NSEvent *)event
inRect: (NSRect)cellFrame
ofView: (NSView *)controlView
{
if([event type] == NSLeftMouseDown)
{
// User has clicked on the cell (assume for now that the entire
cell is clickable).
#ifdef DEBUG
NSAssert([self attributedStringValue] != nil, @"There should be
an attributed string value for this cell!");
#endif
NSAttributedString *string = [self attributedStringValue];
NSSize stringSize = [string size];
NSPoint mouseLocation = [controlView convertPoint: [event
locationInWindow] fromView:nil];
#ifdef DEBUG
NSAssert((cellFrame.origin.y <= mouseLoc.y) && (mouseLoc.y <=
cellFrame.origin.y + cellFrame.size.height), @"Click was not inside the cell
rect!");
NSAssert(cellFrame.size.height == stringSize.height, @"The cell
frame is not equal to the height of the cell name string!");
#endif
if(cellFrame.origin.x + stringSize.width < mouseLocation.x)
{
// The mouse click missed the bounds of the displayed
string, so don't open the URL.
return NSCellHitNone;
}
NSRange stringRange = NSMakeRange(0, [string length]);
NSURL *stringURL = [string attribute: NSLinkAttributeName
atIndex: 0
effectiveRange:
&stringRange];
#ifdef DEBUG
NSAssert(stringURL != nil, @"A URL should be attached to every
attributed string for this column!");
NSAssert([stringURL isKindOfClass: [NSURL class]], @"we didn't
get a URL from the attributed string for this cell!");
#endif
LSOpenCFURLRef((CFURLRef)stringURL, NULL);
}
return NSCellHitContentArea;
}
This still has the issue that the mouse won't change cursor when it enters the
string's bounds, but at least the hyperlink actually opens now.
Thanks for your help!
________________________________________
From: [email protected]
[[email protected]] On Behalf Of Jerry
Krinock [[email protected]]
Sent: 11 January 2010 19:30
To: cocoa-dev
Subject: Re: Hyperlinks in Table Views
This might help you:
http://developer.apple.com/mac/library/releasenotes/cocoa/AppKitOlderNotes.html#NSTableView
Note especially the section titled "NSTableView/NSOutlineView - Single click to
edit"
_______________________________________________
Cocoa-dev mailing list ([email protected])
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/david.doyle%40sophos.com
This email sent to [email protected]
Sophos Plc, The Pentagon, Abingdon Science Park, Abingdon, OX14 3YP, United
Kingdom.
Company Reg No 2096520. VAT Reg No GB 348 3873 20.
_______________________________________________
Cocoa-dev mailing list ([email protected])
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com
This email sent to [email protected]