diff options
| author | Geenz <geenz@geenzo.com> | 2013-01-23 15:24:07 -0500 | 
|---|---|---|
| committer | Geenz <geenz@geenzo.com> | 2013-01-23 15:24:07 -0500 | 
| commit | a82ff3fcb7556bd810ec37c0b74c565b42e92250 (patch) | |
| tree | 800dfbb69b3fb940c90021c3f8b392a8d076e4fe /indra | |
| parent | 33b50bb407aeda905329fdf02761b18ccb78cf1a (diff) | |
| parent | 867289bf8045d6b648aa99cedea804208ba9f552 (diff) | |
Merge
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/newview/llfilepicker_mac.h | 58 | ||||
| -rw-r--r-- | indra/newview/llfilepicker_mac.mm | 127 | 
2 files changed, 185 insertions, 0 deletions
| diff --git a/indra/newview/llfilepicker_mac.h b/indra/newview/llfilepicker_mac.h new file mode 100644 index 0000000000..e0b7e2e8ce --- /dev/null +++ b/indra/newview/llfilepicker_mac.h @@ -0,0 +1,58 @@ +/**  + * @file llfilepicker_mac.h + * @brief OS-specific file picker + * + * $LicenseInfo:firstyear=2001&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2010, Linden Research, Inc. + *  + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + *  + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU + * Lesser General Public License for more details. + *  + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA + *  + * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA + * $/LicenseInfo$ + */ + +// OS specific file selection dialog. This is implemented as a +// singleton class, so call the instance() method to get the working +// instance. When you call getMultipleOpenFile(), it locks the picker +// until you iterate to the end of the list of selected files with +// getNextFile() or call reset(). + +#ifndef LL_LLFILEPICKER_MAC_H +#define LL_LLFILEPICKER_MAC_H + +#if LL_DARWIN + +#include <string> +#include <vector> + +//void modelessPicker(); +std::vector<std::string>* doLoadDialog(const std::vector<std::string>* allowed_types,  +                 unsigned int flags); +std::string* doSaveDialog(const std::string* file,  +                  const std::string* type, +                  const std::string* creator, +                  const std::string* extension, +                  unsigned int flags); +enum { +    F_FILE =      0x00000001, +    F_DIRECTORY = 0x00000002, +    F_MULTIPLE =  0x00000004, +    F_NAV_SUPPORT=0x00000008 +}; + +#endif + +#endif diff --git a/indra/newview/llfilepicker_mac.mm b/indra/newview/llfilepicker_mac.mm new file mode 100644 index 0000000000..13d0caeb9f --- /dev/null +++ b/indra/newview/llfilepicker_mac.mm @@ -0,0 +1,127 @@ +/**  + * @file llfilepicker_mac.cpp + * @brief OS-specific file picker + * + * $LicenseInfo:firstyear=2001&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2010, Linden Research, Inc. + *  + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + *  + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU + * Lesser General Public License for more details. + *  + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA + *  + * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA + * $/LicenseInfo$ + */ + +#ifdef LL_DARWIN +#import <Cocoa/Cocoa.h> +#include <iostream> +#include "llfilepicker_mac.h" + +std::vector<std::string>* doLoadDialog(const std::vector<std::string>* allowed_types,  +                 unsigned int flags) +{ +    int i, result; +     +    //Aura TODO:  We could init a small window and release it at the end of this routine +    //for a modeless interface. +     +    NSOpenPanel *panel = [NSOpenPanel openPanel]; +    //NSString *fileName = nil; +    NSMutableArray *fileTypes = nil; +     +     +    if ( allowed_types && !allowed_types->empty())  +    { +        fileTypes = [[NSMutableArray alloc] init]; +         +        for (i=0;i<allowed_types->size();++i) +        { +            [fileTypes addObject:  +             [NSString stringWithCString:(*allowed_types)[i].c_str()  +                                encoding:[NSString defaultCStringEncoding]]]; +        } +    } +         +    //[panel setMessage:@"Import one or more files or directories."]; +    [panel setAllowsMultipleSelection: ( (flags & F_MULTIPLE)?true:false ) ]; +    [panel setCanChooseDirectories: ( (flags & F_DIRECTORY)?true:false ) ]; +    [panel setCanCreateDirectories: true]; +    [panel setResolvesAliases: true]; +    [panel setCanChooseFiles: ( (flags & F_FILE)?true:false )]; +    [panel setTreatsFilePackagesAsDirectories: ( flags & F_NAV_SUPPORT ) ]; +     +    std::vector<std::string>* outfiles = NULL;  +     +    if (fileTypes) +    { + +        [panel setAllowedFileTypes:fileTypes]; +     +        result = [panel runModalForTypes:fileTypes]; +    } +    else  +    { +        result = [panel runModalForDirectory:NSHomeDirectory() file:nil]; +    } +     +    if (result == NSOKButton)  +    { +        NSArray *filesToOpen = [panel filenames]; +        int i, count = [filesToOpen count]; +         +        if (count > 0) +        { +            outfiles = new std::vector<std::string>; +        } +         +        for (i=0; i<count; i++) { +            NSString *aFile = [filesToOpen objectAtIndex:i]; +            std::string *afilestr = new std::string([aFile UTF8String]); +            outfiles->push_back(*afilestr); +        } +    } +    return outfiles; +} + + +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 *typens = [NSString stringWithCString:type->c_str() encoding:[NSString defaultCStringEncoding]]; +    NSArray *fileType = [[NSArray alloc] initWithObjects:typens,nil]; +     +    //[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; +     +    if([panel runModalForDirectory:nil file:fileName] ==  +       NSFileHandlingPanelOKButton)  +    {  +        outfile= new std::string( [ [panel filename] UTF8String ] ); +        // write the file  +    }  +    return outfile; +} + +#endif | 
