summaryrefslogtreecommitdiff
path: root/indra/newview/llfilepicker_mac.mm
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llfilepicker_mac.mm')
-rw-r--r--indra/newview/llfilepicker_mac.mm175
1 files changed, 95 insertions, 80 deletions
diff --git a/indra/newview/llfilepicker_mac.mm b/indra/newview/llfilepicker_mac.mm
index 8f5b3030db..e5965abbd6 100644
--- a/indra/newview/llfilepicker_mac.mm
+++ b/indra/newview/llfilepicker_mac.mm
@@ -71,33 +71,39 @@ NSOpenPanel *init_panel(const std::vector<std::string>* allowed_types, unsigned
return panel;
}
-std::vector<std::string>* doLoadDialog(const std::vector<std::string>* allowed_types,
+std::unique_ptr<std::vector<std::string>> doLoadDialog(const std::vector<std::string>* allowed_types,
unsigned int flags)
{
- int result;
-
- NSOpenPanel *panel = init_panel(allowed_types,flags);
-
- result = [panel runModal];
-
- std::vector<std::string>* outfiles = NULL;
-
- if (result == NSOKButton)
- {
- NSArray *filesToOpen = [panel URLs];
- int i, count = [filesToOpen count];
+ std::unique_ptr<std::vector<std::string>> outfiles;
+
+ @autoreleasepool
+ {
+ int result;
+ //Aura TODO: We could init a small window and release it at the end of this routine
+ //for a modeless interface.
+
+ NSOpenPanel *panel = init_panel(allowed_types,flags);
+
+ result = [panel runModal];
- if (count > 0)
+ if (result == NSOKButton)
{
- outfiles = new std::vector<std::string>;
- }
-
- for (i=0; i<count; i++) {
- NSString *aFile = [[filesToOpen objectAtIndex:i] path];
- std::string *afilestr = new std::string([aFile UTF8String]);
- outfiles->push_back(*afilestr);
+ NSArray *filesToOpen = [panel URLs];
+ int i, count = [filesToOpen count];
+
+ if (count > 0)
+ {
+ outfiles.reset(new std::vector<std::string>);
+ }
+
+ for (i=0; i<count; i++) {
+ NSString *aFile = [[filesToOpen objectAtIndex:i] path];
+ std::string afilestr = std::string([aFile UTF8String]);
+ outfiles->push_back(afilestr);
+ }
}
}
+
return outfiles;
}
@@ -106,11 +112,14 @@ void doLoadDialogModeless(const std::vector<std::string>* allowed_types,
void (*callback)(bool, std::vector<std::string> &, void*),
void *userdata)
{
- // Note: might need to return and save this panel
- // so that it does not close immediately
- NSOpenPanel *panel = init_panel(allowed_types,flags);
+
+ @autoreleasepool
+ {
+ // Note: might need to return and save this panel
+ // so that it does not close immediately
+ NSOpenPanel *panel = init_panel(allowed_types,flags);
- [panel beginWithCompletionHandler:^(NSModalResponse result)
+ [panel beginWithCompletionHandler:^(NSModalResponse result)
{
std::vector<std::string> outfiles;
if (result == NSOKButton)
@@ -138,37 +147,41 @@ void doLoadDialogModeless(const std::vector<std::string>* allowed_types,
callback(false, outfiles, userdata);
}
}];
+ }
}
-std::string* doSaveDialog(const std::string* file,
+std::unique_ptr<std::string> doSaveDialog(const std::string* file,
const std::string* type,
const std::string* creator,
const std::string* extension,
unsigned int flags)
{
- 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]];
-
- std::string *outfile = NULL;
- NSURL* url = [NSURL fileURLWithPath:fileName];
- [panel setNameFieldStringValue: fileName];
- [panel setDirectoryURL: url];
- if([panel runModal] ==
- NSFileHandlingPanelOKButton)
- {
- NSURL* url = [panel URL];
- NSString* p = [url path];
- outfile = new std::string( [p UTF8String] );
- // write the file
- }
+ std::unique_ptr<std::string> outfile;
+ @autoreleasepool
+ {
+ 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];
+ if([panel runModal] ==
+ NSFileHandlingPanelOKButton)
+ {
+ NSURL* url = [panel URL];
+ NSString* p = [url path];
+ outfile.reset(new std::string([p UTF8String]));
+ // write the file
+ }
+ }
return outfile;
}
@@ -180,38 +193,40 @@ void doSaveDialogModeless(const std::string* file,
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]);
+ @autoreleasepool {
+ 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);
- }
- }];
+ callback(true, outfile, userdata);
+ }
+ else // cancel
+ {
+ std::string outfile;
+ callback(false, outfile, userdata);
+ }
+ }];
+ }
}
#endif