From 531c3096e9216284884683122e39f2e9248d791e Mon Sep 17 00:00:00 2001 From: Kelvin Sherlock Date: Mon, 14 Sep 2020 18:11:50 -0400 Subject: [PATCH] drag-n-drop files to the recent disk images list. --- Ample/DiskImagesWindowController.m | 37 ++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/Ample/DiskImagesWindowController.m b/Ample/DiskImagesWindowController.m index 0d212a1..c5f68e6 100644 --- a/Ample/DiskImagesWindowController.m +++ b/Ample/DiskImagesWindowController.m @@ -33,8 +33,11 @@ @(12345), @"size", nil] ]]; + [super windowDidLoad]; + [_tableView registerForDraggedTypes: @[NSPasteboardTypeURL]]; + // Implement this method to handle any initialization after your window controller's window has been loaded from its nib file. } @@ -76,5 +79,39 @@ return YES; } +-(NSDragOperation)tableView:(NSTableView *)tableView validateDrop:(id)info proposedRow:(NSInteger)row proposedDropOperation:(NSTableViewDropOperation)dropOperation { + + return NSDragOperationCopy; +} + +-(BOOL)tableView:(NSTableView *)tableView acceptDrop:(id)info row:(NSInteger)row dropOperation:(NSTableViewDropOperation)dropOperation { + + + NSPasteboard * pb = [info draggingPasteboard]; + NSURL *url = [NSURL URLFromPasteboard: pb]; + if (!url) return NO; + + NSFileManager *fm = [NSFileManager defaultManager]; + + NSString *path = [NSString stringWithCString: [url fileSystemRepresentation] encoding: NSUTF8StringEncoding]; + if (!path) return NO; + + NSError *error = nil; + NSDictionary *attr = [fm attributesOfItemAtPath: path error: &error]; + if (error) { + NSLog(@"%@ : %@", path, error); + return NO; + } + + NSNumber *size = [attr objectForKey: NSFileSize]; + + NSMutableDictionary *d = [NSMutableDictionary dictionaryWithObjectsAndKeys: + path, @"path", + size, @"size" + , nil]; + + [_arrayController addObject: d]; + return YES; +} @end