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
[email protected]
https://lists.sourceforge.net/lists/listinfo/skim-app-commit