Revision: 2638 http://skim-app.svn.sourceforge.net/skim-app/?rev=2638&view=rev Author: hofman Date: 2007-08-11 15:52:12 -0700 (Sat, 11 Aug 2007)
Log Message: ----------- Open URLs and webloc files from the clipboard. Add a download if it is a remote URL. Also allow dropping those on the download table. Modified Paths: -------------- trunk/SKDocumentController.h trunk/SKDocumentController.m trunk/SKDownloadController.h trunk/SKDownloadController.m Modified: trunk/SKDocumentController.h =================================================================== --- trunk/SKDocumentController.h 2007-08-11 13:56:44 UTC (rev 2637) +++ trunk/SKDocumentController.h 2007-08-11 22:52:12 UTC (rev 2638) @@ -50,4 +50,5 @@ @interface SKDocumentController : NSDocumentController - (void)newDocumentFromClipboard:(id)sender; +- (id)openDocumentWithContentsOfPasteboard:(NSPasteboard *)pboard error:(NSError **)outError; @end Modified: trunk/SKDocumentController.m =================================================================== --- trunk/SKDocumentController.m 2007-08-11 13:56:44 UTC (rev 2637) +++ trunk/SKDocumentController.m 2007-08-11 22:52:12 UTC (rev 2638) @@ -37,6 +37,8 @@ */ #import "SKDocumentController.h" +#import "SKDocument.h" +#import "SKDownloadController.h" #import "NSString_SKExtensions.h" // See CFBundleTypeName in Info.plist @@ -133,35 +135,68 @@ return pdfData; } -- (void)newDocumentFromClipboard:(id)sender { - +- (id)openDocumentWithContentsOfPasteboard:(NSPasteboard *)pboard error:(NSError **)outError { // allow any filter services to convert to TIFF data if we can't get PDF or PS directly - NSPasteboard *pboard = [NSPasteboard pasteboardByFilteringTypesInPasteboard:[NSPasteboard generalPasteboard]]; - NSString *pboardType = [pboard availableTypeFromArray:[NSArray arrayWithObjects:NSPDFPboardType, NSPostScriptPboardType, NSTIFFPboardType, nil]]; - if (nil == pboardType) { - NSBeep(); - return; - } + pboard = [NSPasteboard pasteboardByFilteringTypesInPasteboard:pboard]; + NSString *pboardType = [pboard availableTypeFromArray:[NSArray arrayWithObjects:NSPDFPboardType, NSPostScriptPboardType, NSTIFFPboardType, NSURLPboardType, SKWeblocFilePboardType, nil]]; + id document = nil; - NSData *data = [pboard dataForType:pboardType]; - - // if it's image data, convert to PDF, then explicitly set the pboard type to PDF - if ([pboardType isEqualToString:NSTIFFPboardType]) { - data = convertTIFFDataToPDF(data); - pboardType = NSPDFPboardType; + if ([pboardType isEqualToString:NSPDFPboardType] || [pboardType isEqualToString:NSPostScriptPboardType] || [pboardType isEqualToString:NSTIFFPboardType]) { + + NSData *data = [pboard dataForType:pboardType]; + + // if it's image data, convert to PDF, then explicitly set the pboard type to PDF + if ([pboardType isEqualToString:NSTIFFPboardType]) { + data = convertTIFFDataToPDF(data); + pboardType = NSPDFPboardType; + } + + NSString *type = [pboardType isEqualToString:NSPostScriptPboardType] ? SKPostScriptDocumentType : SKPDFDocumentType; + NSError *error = nil; + + document = [self makeUntitledDocumentOfType:type error:&error]; + + if ([document readFromData:data ofType:type error:&error]) { + [self addDocument:document]; + [document makeWindowControllers]; + [document showWindows]; + } else { + document = nil; + if (outError) + *outError = error; + } + + } else if ([pboardType isEqualToString:NSURLPboardType] || [pboardType isEqualToString:SKWeblocFilePboardType]) { + + NSURL *theURL = nil; + if ([pboardType isEqualToString:NSURLPboardType]) { + theURL = [NSURL URLFromPasteboard:pboard]; + } else if ([pboardType isEqualToString:SKWeblocFilePboardType]) { + theURL = [NSURL URLWithString:[pboard stringForType:SKWeblocFilePboardType]]; + } + if ([theURL isFileURL]) { + document = [self openDocumentWithContentsOfURL:theURL display:YES error:outError]; + } else if (theURL) { + [[SKDownloadController sharedDownloadController] addDownloadForURL:theURL]; + if (outError) + *outError = nil; + } else if (outError) { + *outError = [NSError errorWithDomain:SKDocumentErrorDomain code:0 userInfo:[NSDictionary dictionaryWithObjectsAndKeys:NSLocalizedString(@"Unable to load data from clipboard", @"Error description"), NSLocalizedDescriptionKey, nil]]; + } + + } else if (outError) { + *outError = [NSError errorWithDomain:SKDocumentErrorDomain code:0 userInfo:[NSDictionary dictionaryWithObjectsAndKeys:NSLocalizedString(@"Unable to load data from clipboard", @"Error description"), NSLocalizedDescriptionKey, nil]]; } - NSString *type = [pboardType isEqualToString:NSPostScriptPboardType] ? SKPostScriptDocumentType : SKPDFDocumentType; + return document; +} + +- (void)newDocumentFromClipboard:(id)sender { NSError *error = nil; - id document = [self makeUntitledDocumentOfType:type error:&error]; + id document = [self openDocumentWithContentsOfPasteboard:[NSPasteboard generalPasteboard] error:&error]; - if ([document readFromData:data ofType:type error:&error]) { - [self addDocument:document]; - [document makeWindowControllers]; - [document showWindows]; - } else { + if (document == nil && error) [NSApp presentError:error]; - } } - (id)openDocumentWithContentsOfURL:(NSURL *)absoluteURL display:(BOOL)displayDocument error:(NSError **)outError { Modified: trunk/SKDownloadController.h =================================================================== --- trunk/SKDownloadController.h 2007-08-11 13:56:44 UTC (rev 2637) +++ trunk/SKDownloadController.h 2007-08-11 22:52:12 UTC (rev 2638) @@ -38,6 +38,7 @@ #import <Cocoa/Cocoa.h> +extern NSString *SKWeblocFilePboardType; @interface SKDownloadController : NSWindowController { IBOutlet NSTableView *tableView; Modified: trunk/SKDownloadController.m =================================================================== --- trunk/SKDownloadController.m 2007-08-11 13:56:44 UTC (rev 2637) +++ trunk/SKDownloadController.m 2007-08-11 22:52:12 UTC (rev 2638) @@ -40,6 +40,7 @@ #import "SKDownload.h" #import "SKProgressCell.h" +NSString *SKWeblocFilePboardType = @"CorePasteboardFlavorType 0x75726C20"; @implementation SKDownloadController @@ -87,6 +88,7 @@ - (void)windowDidLoad { [self setWindowFrameAutosaveName:@"SKDownloadsWindow"]; [self updateButtons]; + [tableView registerForDraggedTypes:[NSArray arrayWithObjects:NSURLPboardType, SKWeblocFilePboardType, nil]]; } - (void)addDownloadForURL:(NSURL *)aURL { @@ -180,6 +182,37 @@ return nil; } +- (NSDragOperation)tableView:(NSTableView*)tv validateDrop:(id <NSDraggingInfo>)info proposedRow:(int)row proposedDropOperation:(NSTableViewDropOperation)op { + NSPasteboard *pboard = [info draggingPasteboard]; + NSString *type = [pboard availableTypeFromArray:[NSArray arrayWithObjects:NSURLPboardType, SKWeblocFilePboardType, nil]]; + + if (type) { + [tv setDropRow:-1 dropOperation:NSTableViewDropOn]; + return NSDragOperationEvery; + } + return NSDragOperationNone; +} + +- (BOOL)tableView:(NSTableView*)tv acceptDrop:(id <NSDraggingInfo>)info row:(int)row dropOperation:(NSTableViewDropOperation)op { + NSPasteboard *pboard = [info draggingPasteboard]; + NSString *type = [pboard availableTypeFromArray:[NSArray arrayWithObjects:NSURLPboardType, SKWeblocFilePboardType, nil]]; + NSURL *theURL; + + if ([type isEqualToString:NSURLPboardType]) { + theURL = [NSURL URLFromPasteboard:pboard]; + } else if ([type isEqualToString:SKWeblocFilePboardType]) { + theURL = [NSURL URLWithString:[pboard stringForType:SKWeblocFilePboardType]]; + } + if ([theURL isFileURL]) { + if ([[NSDocumentController sharedDocumentController] openDocumentWithContentsOfURL:theURL display:YES error:NULL]) + return YES; + } else if (theURL) { + [self addDownloadForURL:theURL]; + return YES; + } + return NO; +} + #pragma mark NSTableViewDelegate - (void)tableView:(NSTableView *)tv willDisplayCell:(id)cell forTableColumn:(NSTableColumn *)tableColumn row:(int)row { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ _______________________________________________ Skim-app-commit mailing list Skim-app-commit@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/skim-app-commit