Re: App-specific URLs and the pasteboard. Need help.
Re: App-specific URLs and the pasteboard. Need help.
- Subject: Re: App-specific URLs and the pasteboard. Need help.
- From: Duncan Champney <email@hidden>
- Date: Sat, 19 Jan 2008 07:59:08 -0500
On Jan 18, 2008, at 11:05 AM, Alastair Houghton wrote:
On 18 Jan 2008, at 15:27, Duncan Champney wrote:
I build my URL string in the variable theURLString, then add it to
the general pasteboard using the following code:
theFW_URL = [NSURL URLWithString:theURLString];
[theFW_URL writeToPasteboard: thePasteBoard];
NSString* theURLName = [NSString stringWithFormat:
NSLocalizedString(@FW_URL_PREFIX ,nil), theDocumentName];
success = [thePasteBoard setString:theURLName forType:
NSStringPboardType];
Have you tried NSURLPboardType?
Or NSHTMLPboardType with HTML containing a link?
Or, for that matter, NSRTFPboardType, which I think you'll find can
hold links too; you can make RTF fairly easily from an
NSAttributedString, and if that string happened to contain a link
(hint: see NSLinkAttributeName), I think you'll get the behaviour
you want.
At present, I think you're relying on the end application to parse
your text into a link, which won't work in many cases.
Kind regards,
Alastair.
--
http://alastairs-place.net
Alastair,
I was using NSURLPboardType, but I don't think I was using it correctly.
Based on your advice, I tried using NSHTMLPboardType. That worked
better, but still not ideally.
As you say, NSRTFPboardType seems to work with the widest variety of
applications. What I do now is to write RTF to the pasteboard, and
also write some HTML as a string. The HTML string is useful for
posting links to websites. Here's the code I came up with:
NSArray* types = [NSArray arrayWithObjects: NSRTFPboardType,
NSStringPboardType, nil];
[thePasteBoard declareTypes:types owner: nil];
theFW_URL = [NSURL URLWithString:theURLString]; //theURLString
contains the text of the URL
[theFW_URL writeToPasteboard: thePasteBoard];
//Create string "Fractalworks plot <theDocumentName>
NSString* theURLName = [NSString stringWithFormat:
NSLocalizedString(@FW_URL_PREFIX ,nil), theDocumentName];
theFW_URL = [NSURL URLWithString:theURLString];
//Create an NSAttributedString to hold the RTF description of the URL.
theStringRange.location = 0;
theStringRange.length = [theURLName length];
theAttributesDict = [NSDictionary dictionaryWithObject: theFW_URL
forKey: NSLinkAttributeName];
theRTF_string= [[NSAttributedString alloc] initWithString:
theURLName attributes:theAttributesDict];
NSData* the_RTF_data = [theRTF_string RTFFromRange: theStringRange
documentAttributes: nil];
success = [thePasteBoard setData:the_RTF_data forType:
NSRTFPboardType];
//Also write a string with HTML text into the pasterboard, for apps
that can't deal with the RTF data.
theURLString = [NSString stringWithFormat: @"<u><a href=\"%@\">%@</
a></u>", theURLString, theURLName];
success = [thePasteBoard setString:theURLString forType:
NSStringPboardType];
Older Carbon apps like Appleworks don't seem to work with this code,
though. They take the "vanilla" text from the RTF, rather than using
the NSStringPboardType like you'd expect.
I have a preference to "write application URLS as text" and in that
case, I write just the NSStringPboardType data containing the URL to
the pasteboard. (That code isn't shown for the sake of brevity.)
Thanks again for your help.
Duncan
_______________________________________________
Cocoa-dev mailing list (email@hidden)
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:
This email sent to email@hidden