diff options
Diffstat (limited to 'indra/newview/llfilepicker_mac.mm')
-rw-r--r-- | indra/newview/llfilepicker_mac.mm | 50 |
1 files changed, 48 insertions, 2 deletions
diff --git a/indra/newview/llfilepicker_mac.mm b/indra/newview/llfilepicker_mac.mm index f6892f40fa..8f5b3030db 100644 --- a/indra/newview/llfilepicker_mac.mm +++ b/indra/newview/llfilepicker_mac.mm @@ -112,9 +112,9 @@ void doLoadDialogModeless(const std::vector<std::string>* allowed_types, [panel beginWithCompletionHandler:^(NSModalResponse result) { + std::vector<std::string> outfiles; if (result == NSOKButton) { - std::vector<std::string> outfiles; NSArray *filesToOpen = [panel URLs]; int i, count = [filesToOpen count]; @@ -128,11 +128,15 @@ void doLoadDialogModeless(const std::vector<std::string>* allowed_types, } callback(true, outfiles, userdata); } - else + else // no valid result { callback(false, outfiles, userdata); } } + else // cancel + { + callback(false, outfiles, userdata); + } }]; } @@ -168,4 +172,46 @@ std::string* doSaveDialog(const std::string* file, return outfile; } +void doSaveDialogModeless(const std::string* file, + const std::string* type, + const std::string* creator, + const std::string* extension, + unsigned int flags, + void (*callback)(bool, std::string&, void*), + void *userdata) +{ + NSSavePanel *panel = [NSSavePanel savePanel]; + + NSString *extensionns = [NSString stringWithCString:extension->c_str() encoding:[NSString defaultCStringEncoding]]; + NSArray *fileType = [extensionns componentsSeparatedByString:@","]; + + //[panel setMessage:@"Save Image File"]; + [panel setTreatsFilePackagesAsDirectories: ( flags & F_NAV_SUPPORT ) ]; + [panel setCanSelectHiddenExtension:true]; + [panel setAllowedFileTypes:fileType]; + NSString *fileName = [NSString stringWithCString:file->c_str() encoding:[NSString defaultCStringEncoding]]; + + NSURL* url = [NSURL fileURLWithPath:fileName]; + [panel setNameFieldStringValue: fileName]; + [panel setDirectoryURL: url]; + + + [panel beginWithCompletionHandler:^(NSModalResponse result) + { + if (result == NSOKButton) + { + NSURL* url = [panel URL]; + NSString* p = [url path]; + std::string outfile([p UTF8String]); + + callback(true, outfile, userdata); + } + else // cancel + { + std::string outfile; + callback(false, outfile, userdata); + } + }]; +} + #endif |