Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

NSOpenPanel Sheet

This is how I display an open panel as a floating window.

Can someone help me out with running the panel as a sheet ? The window object is mWindow. Much of the standard code I was using is depreciated.

NSOpenPanel *openPanel = [NSOpenPanel openPanel];
NSArray* fileTypes = [[NSArray alloc] initWithObjects:@"mp3", @"mp2", @"m4a", nil];

[openPanel setAllowsMultipleSelection: NO];
[openPanel setCanChooseDirectories:NO];
[openPanel setCanCreateDirectories:NO];
[openPanel setCanChooseFiles:YES];
[openPanel setAllowedFileTypes:fileTypes];

NSString * filePath = @"~/Desktop";
filePath = [filePath stringByExpandingTildeInPath];
NSURL *fileURL = [NSURL fileURLWithPath:filePath]; 
[openPanel setDirectoryURL:fileURL];

NSInteger clicked = [openPanel runModal];
if (clicked == NSFileHandlingPanelOKButton) {
    for (NSURL *url in [openPanel URLs]) {
        NSString *urlString = [url path];
        [input setStringValue:urlString];
        NSString *myString = [input stringValue];
        NSString *oldPath = [myString lastPathComponent];
        [inputDisplay setStringValue:oldPath];
    }
}
like image 563
user1198008 Avatar asked Feb 09 '12 21:02

user1198008


1 Answers

Pretty simple, it's right there in the docs though you may have missed it because the relevant method is actually part of NSSavePanel, from which NSOpenPanel inherits.

Presuming you're targeting Snow Leopard or better and thus have access to blocks, it's just a matter replacing your runModal call with this:

[openPanel beginSheetModalForWindow:mWindow completionHandler:^(NSInteger result) {

    if (result == NSFileHandlingPanelOKButton) {

        // Do something.
    }
}];
like image 139
Francis McGrew Avatar answered Sep 21 '22 18:09

Francis McGrew