//-----------------------------------------------------------------------------
// VST Plug-Ins SDK
// VSTGUI: Graphical User Interface Framework for VST plugins :
//
// Version 3.0       $Date: 2005/11/01 10:03:05 $
//
//-----------------------------------------------------------------------------
// VSTGUI LICENSE
// © 2004, Steinberg Media Technologies, All Rights Reserved
//-----------------------------------------------------------------------------
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
//   * Redistributions of source code must retain the above copyright notice,
//     this list of conditions and the following disclaimer.
//   * Redistributions in binary form must reproduce the above copyright notice,
//     this list of conditions and the following disclaimer in the documentation
//     and/or other materials provided with the distribution.
//   * Neither the name of the Steinberg Media Technologies nor the names of its
//     contributors may be used to endorse or promote products derived from this
//     software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A  PARTICULAR PURPOSE ARE DISCLAIMED.
// IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
// OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE  OF THIS SOFTWARE, EVEN IF ADVISED
// OF THE POSSIBILITY OF SUCH DAMAGE.
//-----------------------------------------------------------------------------

#ifndef __cfileselector__
#define __cfileselector__

#include "vstgui.h"

BEGIN_NAMESPACE_VSTGUI

#ifndef __aeffectx__
struct VstFileSelect;
#endif

//-----------------------------------------------------------------------------
// CFileSelector Declaration
//!
//-----------------------------------------------------------------------------
class CFileSelector
{
public:
    CFileSelector (void* ptr);
    virtual ~CFileSelector ();

    long run (VstFileSelect *vstFileSelect);

protected:
    void* ptr;
    VstFileSelect *vstFileSelect;

    #if MAC
    static pascal void navEventProc (const NavEventCallbackMessage callBackSelector, NavCBRecPtr callBackParms, NavCallBackUserData callBackUD);
    static pascal Boolean navObjectFilterProc (AEDesc *theItem, void *info, void *callBackUD, NavFilterModes filterMode);
    #endif
};

#ifndef __aeffectx__
struct VstFileType
{
    VstFileType (char* _name, char *_macType, char *_dosType, char *_unixType = 0, char *_mimeType1 = 0, char *_mimeType2 = 0)
    {
        if (_name)
            strcpy (name, _name);
        if (_macType)
            strcpy (macType, _macType);
        if (_dosType)
            strcpy (dosType, _dosType);
        if (_unixType)
            strcpy (unixType, _unixType);
        if (_mimeType1)
            strcpy (mimeType1, _mimeType1);
        if (_mimeType2)
            strcpy (mimeType2, _mimeType2);
    }
    char name[128];
    char macType[8];
    char dosType[8];
    char unixType[8];
    char mimeType1[128];
    char mimeType2[128];
};

struct VstFileSelect
{
    long command;           // see enum kVstFileLoad....
    long type;              // see enum kVstFileType...

    long macCreator;        // optional: 0 = no creator

    long nbFileTypes;       // nb of fileTypes to used
    VstFileType *fileTypes; // list of fileTypes

    char title[1024];       // text display in the file selector's title

    char *initialPath;      // initial path

    char *returnPath;       // use with kVstFileLoad and kVstDirectorySelect
                            // if null is passed, the host will allocated memory
                            // the plugin should then called closeOpenFileSelector for freeing memory
    long sizeReturnPath;

    char **returnMultiplePaths; // use with kVstMultipleFilesLoad
                                // the host allocates this array. The plugin should then called closeOpenFileSelector for freeing memory
    long nbReturnPath;          // number of selected paths

    long reserved;              // reserved for host application
    char future[116];           // future use
};

enum {
    kVstFileLoad = 0,
    kVstFileSave,
    kVstMultipleFilesLoad,
    kVstDirectorySelect,

    kVstFileType = 0
};
#endif

END_NAMESPACE_VSTGUI

#endif
