1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-11 23:54:18 +00:00
JUCE/src/native/linux/juce_linux_FileChooser.cpp
2010-03-16 19:51:58 +00:00

102 lines
3.4 KiB
C++

/*
==============================================================================
This file is part of the JUCE library - "Jules' Utility Class Extensions"
Copyright 2004-9 by Raw Material Software Ltd.
------------------------------------------------------------------------------
JUCE can be redistributed and/or modified under the terms of the GNU General
Public License (Version 2), as published by the Free Software Foundation.
A copy of the license is included in the JUCE distribution, or can be found
online at www.gnu.org/licenses.
JUCE 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 General Public License for more details.
------------------------------------------------------------------------------
To release a closed-source product which uses JUCE, commercial licenses are
available: visit www.rawmaterialsoftware.com/juce for more information.
==============================================================================
*/
// (This file gets included by juce_linux_NativeCode.cpp, rather than being
// compiled on its own).
#if JUCE_INCLUDED_FILE
//==============================================================================
void FileChooser::showPlatformDialog (Array<File>& results,
const String& title,
const File& file,
const String& filters,
bool isDirectory,
bool selectsFiles,
bool isSave,
bool warnAboutOverwritingExistingFiles,
bool selectMultipleFiles,
FilePreviewComponent* previewComponent)
{
const tchar* const separator = T(":");
String command ("zenity --file-selection");
if (title.isNotEmpty())
command << " --title=\"" << title << "\"";
if (file != File::nonexistent)
command << " --filename=\"" << file.getFullPathName () << "\"";
if (isDirectory)
command << " --directory";
if (isSave)
command << " --save";
if (selectMultipleFiles)
command << " --multiple --separator=\"" << separator << "\"";
command << " 2>&1";
MemoryOutputStream result;
int status = -1;
FILE* stream = popen (command.toUTF8(), "r");
if (stream != 0)
{
for (;;)
{
char buffer [1024];
const int bytesRead = fread (buffer, 1, sizeof (buffer), stream);
if (bytesRead <= 0)
break;
result.write (buffer, bytesRead);
}
status = pclose (stream);
}
if (status == 0)
{
String resultString (String::fromUTF8 (result.getData(), result.getDataSize()));
StringArray tokens;
if (selectMultipleFiles)
tokens.addTokens (resultString, separator, String::empty);
else
tokens.add (resultString);
for (int i = 0; i < tokens.size(); i++)
results.add (File (tokens[i]));
return;
}
//xxx ain't got one!
jassertfalse
}
#endif