Revision: 13088
          http://sourceforge.net/p/skim-app/code/13088
Author:   hofman
Date:     2022-10-17 10:06:55 +0000 (Mon, 17 Oct 2022)
Log Message:
-----------
convenience method to write URLs with names to pasteboard

Modified Paths:
--------------
    trunk/NSDocument_SKExtensions.m
    trunk/NSPasteboard_SKExtensions.h
    trunk/NSPasteboard_SKExtensions.m
    trunk/SKBookmarkController.m
    trunk/SKMainDocument.m
    trunk/SKMainWindowController_UI.m
    trunk/SKThumbnailView.m

Modified: trunk/NSDocument_SKExtensions.m
===================================================================
--- trunk/NSDocument_SKExtensions.m     2022-10-16 08:19:49 UTC (rev 13087)
+++ trunk/NSDocument_SKExtensions.m     2022-10-17 10:06:55 UTC (rev 13088)
@@ -55,6 +55,7 @@
 #import "NSWindow_SKExtensions.h"
 #import "SKStringConstants.h"
 #import <SkimNotes/SkimNotes.h>
+#import "NSPasteboard_SKExtensions.h"
 
 #define SKDisableExportAttributesKey @"SKDisableExportAttributes"
 
@@ -84,15 +85,11 @@
     if (fileURL) {
         NSURLComponents *components = [[NSURLComponents alloc] 
initWithURL:fileURL resolvingAgainstBaseURL:NO];
         [components setScheme:@"skim"];
-        NSString *skimURL = [[components URL] absoluteString];
+        NSURL  *skimURL = [components URL];
         [components release];
-        NSPasteboardItem *item = [[[NSPasteboardItem alloc] init] autorelease];
-        [item setString:skimURL forType:(NSString *)kUTTypeURL];
-        [item setString:skimURL forType:NSPasteboardTypeString];
-        [item setString:[self displayName] forType:@"public.url-name"];
         NSPasteboard *pboard = [NSPasteboard generalPasteboard];
         [pboard clearContents];
-        [pboard writeObjects:[NSArray arrayWithObjects:item, nil]];
+        [pboard writeURLs:[NSArray arrayWithObjects:skimURL, nil] 
names:[NSArray arrayWithObjects:[self displayName], nil]];
     } else {
         NSBeep();
     }

Modified: trunk/NSPasteboard_SKExtensions.h
===================================================================
--- trunk/NSPasteboard_SKExtensions.h   2022-10-16 08:19:49 UTC (rev 13087)
+++ trunk/NSPasteboard_SKExtensions.h   2022-10-17 10:06:55 UTC (rev 13088)
@@ -43,4 +43,6 @@
 
 - (NSURL *)pasteLocationURL;
 
+- (BOOL)writeURLs:(NSArray *)URLs names:(NSArray *)names;
+
 @end

Modified: trunk/NSPasteboard_SKExtensions.m
===================================================================
--- trunk/NSPasteboard_SKExtensions.m   2022-10-16 08:19:49 UTC (rev 13087)
+++ trunk/NSPasteboard_SKExtensions.m   2022-10-17 10:06:55 UTC (rev 13088)
@@ -38,6 +38,8 @@
 
 #import "NSPasteboard_SKExtensions.h"
 
+#define SKPasteboardTypeURLName @"public.url-name"
+
 @implementation NSPasteboard (SKExtensions)
 
 - (NSURL *)pasteLocationURL; {
@@ -58,4 +60,27 @@
     return pasteLocationURL;
 }
 
+- (BOOL)writeURLs:(NSArray *)URLs names:(NSArray *)names {
+    NSMutableArray *items = [NSMutableArray array];
+    NSUInteger i, urlCount = [URLs count], namesCount = [names count];
+    
+    for (i = 0; i < urlCount; i++) {
+        
+        NSURL *theURL = [URLs objectAtIndex:i];
+        NSPasteboardItem *item = [[[NSPasteboardItem alloc] init] autorelease];
+        
+        [item setString:[theURL absoluteString] forType:(NSString *)([theURL 
isFileURL] ? kUTTypeFileURL : kUTTypeURL)];
+        [item setString:[theURL absoluteString] 
forType:NSPasteboardTypeString];
+        if (i < namesCount)
+            [item setString:[names objectAtIndex:i] 
forType:SKPasteboardTypeURLName];
+        
+        [items addObject:item];
+    }
+    
+    if ([items count])
+        return [self writeObjects:items];
+    else
+        return NO;
+}
+
 @end

Modified: trunk/SKBookmarkController.m
===================================================================
--- trunk/SKBookmarkController.m        2022-10-16 08:19:49 UTC (rev 13087)
+++ trunk/SKBookmarkController.m        2022-10-17 10:06:55 UTC (rev 13088)
@@ -53,6 +53,7 @@
 #import "NSError_SKExtensions.h"
 #import "SKDocumentController.h"
 #import "SKRecentDocumentInfo.h"
+#import "NSPasteboard_SKExtensions.h"
 
 #define SKPasteboardTypeBookmarkRow 
@"net.sourceforge.skim-app.pasteboard.bookmarkrow"
 
@@ -571,20 +572,18 @@
 - (IBAction)copyURL:(id)sender {
     NSArray *selectedBookmarks = minimumCoverForBookmarks([outlineView 
selectedItems]);
     NSMutableArray *skimURLs = [NSMutableArray array];
+    NSMutableArray *labels = [NSMutableArray array];
     for (SKBookmark *bookmark in selectedBookmarks) {
-        NSString *skimURL = [[bookmark skimURL] absoluteString];
+        NSURL *skimURL = [bookmark skimURL];
         if (skimURL) {
-            NSPasteboardItem *item = [[[NSPasteboardItem alloc] init] 
autorelease];
-            [item setString:skimURL forType:(NSString *)kUTTypeURL];
-            [item setString:skimURL forType:NSPasteboardTypeString];
-            [item setString:[bookmark label] forType:@"public.url-name"];
-            [skimURLs addObject:item];
+            [skimURLs addObject:skimURL];
+            [labels addObject:[bookmark label]];
         }
     }
     if ([skimURLs count]) {
         NSPasteboard *pboard = [NSPasteboard generalPasteboard];
         [pboard clearContents];
-        [pboard writeObjects:skimURLs];
+        [pboard writeURLs:skimURLs names:labels];
     } else {
         NSBeep();
     }

Modified: trunk/SKMainDocument.m
===================================================================
--- trunk/SKMainDocument.m      2022-10-16 08:19:49 UTC (rev 13087)
+++ trunk/SKMainDocument.m      2022-10-17 10:06:55 UTC (rev 13088)
@@ -92,6 +92,7 @@
 #import "PDFOutline_SKExtensions.h"
 #import "PDFView_SKExtensions.h"
 #import "SKLine.h"
+#import "NSPasteboard_SKExtensions.h"
 
 #define BUNDLE_DATA_FILENAME @"data"
 #define PRESENTATION_OPTIONS_KEY 
@"net_sourceforge_skim-app_presentation_options"
@@ -1035,14 +1036,9 @@
             skimURL = [components URL];
             [components release];
         }
-        NSString *string = [skimURL absoluteString];
-        NSPasteboardItem *item = [[[NSPasteboardItem alloc] init] autorelease];
-        [item setString:string forType:(NSString *)kUTTypeURL];
-        [item setString:string forType:NSPasteboardTypeString];
-        [item setString:[self displayName] forType:@"public.url-name"];
         NSPasteboard *pboard = [NSPasteboard generalPasteboard];
         [pboard clearContents];
-        [pboard writeObjects:[NSArray arrayWithObjects:item, nil]];
+        [pboard writeURLs:[NSArray arrayWithObjects:skimURL, nil] 
names:[NSArray arrayWithObject:[self displayName]]];
     } else {
         NSBeep();
     }

Modified: trunk/SKMainWindowController_UI.m
===================================================================
--- trunk/SKMainWindowController_UI.m   2022-10-16 08:19:49 UTC (rev 13087)
+++ trunk/SKMainWindowController_UI.m   2022-10-17 10:06:55 UTC (rev 13088)
@@ -90,6 +90,7 @@
 #import "NSView_SKExtensions.h"
 #import "NSImage_SKExtensions.h"
 #import "NSObject_SKExtensions.h"
+#import "NSPasteboard_SKExtensions.h"
 
 #define NOTES_KEY       @"notes"
 #define SNAPSHOTS_KEY   @"snapshots"
@@ -1004,15 +1005,11 @@
     NSUInteger idx = [[sender representedObject] firstIndex];
     if (idx != NSNotFound) {
         PDFPage *page = [[pdfView document] pageAtIndex:idx];
-        NSString *skimURL = [[page skimURL] absoluteString];
+        NSURL *skimURL = [page skimURL];
         if (skimURL != nil) {
-            NSPasteboardItem *item = [[[NSPasteboardItem alloc] init] 
autorelease];
-            [item setString:skimURL forType:(NSString *)kUTTypeURL];
-            [item setString:skimURL forType:NSPasteboardTypeString];
-            [item setString:[[self document] displayName] 
forType:@"public.url-name"];
             NSPasteboard *pboard = [NSPasteboard generalPasteboard];
             [pboard clearContents];
-            [pboard writeObjects:[NSArray arrayWithObjects:item, nil]];
+            [pboard writeURLs:[NSArray arrayWithObjects:skimURL, nil] 
names:[NSArray arrayWithObjects:[[self document] displayName], nil]];
         }
     }
 }

Modified: trunk/SKThumbnailView.m
===================================================================
--- trunk/SKThumbnailView.m     2022-10-16 08:19:49 UTC (rev 13087)
+++ trunk/SKThumbnailView.m     2022-10-17 10:06:55 UTC (rev 13088)
@@ -48,6 +48,7 @@
 #import "PDFPage_SKExtensions.h"
 #import "NSColor_SKExtensions.h"
 #import "SKThumbnailImageView.h"
+#import "NSPasteboard_SKExtensions.h"
 
 #define MARGIN 8.0
 #define TEXT_MARGIN 4.0
@@ -435,15 +436,11 @@
 
 - (void)copyPageURL:(id)sender {
     PDFPage *page = [[self thumbnail] page];
-    NSString *skimURL = [[page skimURL] absoluteString];
+    NSURL *skimURL = [page skimURL];
     if (skimURL != nil) {
-        NSPasteboardItem *item = [[[NSPasteboardItem alloc] init] autorelease];
-        [item setString:skimURL forType:(NSString *)kUTTypeURL];
-        [item setString:skimURL forType:NSPasteboardTypeString];
-        [item setString:[[[[self window] windowController] document] 
displayName] forType:@"public.url-name"];
         NSPasteboard *pboard = [NSPasteboard generalPasteboard];
         [pboard clearContents];
-        [pboard writeObjects:[NSArray arrayWithObjects:item, nil]];
+        [pboard writeURLs:[NSArray arrayWithObjects:skimURL, nil] 
names:[NSArray arrayWithObjects:[[[[self window] windowController] document] 
displayName], nil]];
     }
 }
 

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.



_______________________________________________
Skim-app-commit mailing list
Skim-app-commit@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/skim-app-commit

Reply via email to