Revision: 14566
          http://sourceforge.net/p/skim-app/code/14566
Author:   hofman
Date:     2024-10-21 21:57:32 +0000 (Mon, 21 Oct 2024)
Log Message:
-----------
Add a chooseFile: action for context menu of drag image view

Modified Paths:
--------------
    trunk/SKDragImageView.h
    trunk/SKDragImageView.m

Modified: trunk/SKDragImageView.h
===================================================================
--- trunk/SKDragImageView.h     2024-10-21 21:23:51 UTC (rev 14565)
+++ trunk/SKDragImageView.h     2024-10-21 21:57:32 UTC (rev 14566)
@@ -50,6 +50,7 @@
 
 - (IBAction)show:(nullable id)sender;
 - (IBAction)togglePreviewPanel:(nullable id)sender;
+- (IBAction)chooseFile:(id)sender;
 
 @end
 

Modified: trunk/SKDragImageView.m
===================================================================
--- trunk/SKDragImageView.m     2024-10-21 21:23:51 UTC (rev 14565)
+++ trunk/SKDragImageView.m     2024-10-21 21:57:32 UTC (rev 14566)
@@ -59,11 +59,45 @@
         [[QLPreviewPanel sharedPreviewPanel] makeKeyAndOrderFront:nil];
 }
 
+- (IBAction)chooseFile:(id)sender {
+    NSOpenPanel *oPanel = [NSOpenPanel openPanel];
+    [oPanel setAllowedFileTypes:[NSImage imageTypes]];
+    [oPanel beginSheetModalForWindow:[self window] 
completionHandler:^(NSModalResponse result){
+        if (result == NSModalResponseOK) {
+            NSURL *fileURL = [[oPanel URLs] firstObject];
+            if (fileURL) {
+                NSImage *image = [[NSImage alloc] 
initWithContentsOfURL:fileURL];
+                if (image) {
+                    [self setImage:image];
+                    NSDictionary *info = [self infoForBinding:NSValueBinding];
+                    if (info) {
+                        id observedObject = [info 
objectForKey:NSObservedObjectKey];
+                        NSString *observedKeyPath = [info 
objectForKey:NSObservedKeyPathKey];
+                        if (observedObject && observedKeyPath) {
+                            id value = image;
+                            NSValueTransformer *valueTransformer = [[info 
objectForKey:NSOptionsKey] objectForKey:NSValueTransformerBindingOption];
+                            if (valueTransformer == nil || [valueTransformer 
isEqual:[NSNull null]]) {
+                                NSString *transformerName = [[info 
objectForKey:NSOptionsKey] objectForKey:NSValueTransformerNameBindingOption];
+                                if (transformerName && [transformerName 
isEqual:[NSNull null]] == NO)
+                                    valueTransformer = [NSValueTransformer 
valueTransformerForName:transformerName];
+                            }
+                            if (valueTransformer && [valueTransformer 
isEqual:[NSNull null]] == NO &&
+                                [[valueTransformer class] 
allowsReverseTransformation])
+                                value = [valueTransformer 
reverseTransformedValue:value];
+                            [observedObject setValue:value 
forKeyPath:observedKeyPath];
+                        }
+                    }
+                }
+            }
+        }
+    }];
+}
+
 - (BOOL)validateMenuItem:(NSMenuItem *)menuItem {
     SEL action = [menuItem action];
     if (action == @selector(cut:) || action == @selector(copy:) || action == 
@selector(delete:) || action == @selector(show:) || action == 
@selector(togglePreviewPanel:))
         return [self image] != nil && [self isEditable];
-    else if (action == @selector(paste:))
+    else if (action == @selector(paste:) || action == @selector(chooseFile:))
         return [self isEditable];
     else if ([[SKDragImageView superclass] instancesRespondToSelector:_cmd])
         [super validateMenuItem:menuItem];
@@ -79,6 +113,7 @@
         [menu addItemWithTitle:NSLocalizedString(@"Delete", @"Menu item 
title") action:@selector(delete:) target:self];
         [menu addItemWithTitle:NSLocalizedString(@"Show", @"Menu item title") 
action:@selector(show:) target:self];
         [menu addItemWithTitle:NSLocalizedString(@"Quick Look", @"Menu item 
title") action:@selector(togglePreviewPanel:) target:self];
+        [menu addItemWithTitle:NSLocalizedString(@"Choose File", @"Menu item 
title") action:@selector(chooseFile:) target:self];
         [self setMenu:menu];
     }
     menu = [menu copy];

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



_______________________________________________
Skim-app-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/skim-app-commit

Reply via email to