/* ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" Copyright 2004-11 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. ============================================================================== */ bool FileChooser::isPlatformDialogAvailable() { ChildProcess child; const bool ok = child.start ("which zenity") && child.readAllProcessOutput().trim().isNotEmpty(); child.waitForProcessToFinish (60 * 1000); return ok; } void FileChooser::showPlatformDialog (Array& results, const String& title, const File& file, const String& filters, bool isDirectory, bool selectsFiles, bool isSave, bool warnAboutOverwritingExistingFiles, bool selectMultipleFiles, FilePreviewComponent* previewComponent) { const String separator (":"); StringArray args; args.add ("zenity"); args.add ("--file-selection"); if (title.isNotEmpty()) args.add ("--title=" + title); if (isDirectory) args.add ("--directory"); if (isSave) args.add ("--save"); if (selectMultipleFiles) { args.add ("--multiple"); args.add ("--separator=" + separator); } const File previousWorkingDirectory (File::getCurrentWorkingDirectory()); if (file.isDirectory()) { file.setAsCurrentWorkingDirectory(); } else if (file.exists()) { file.getParentDirectory().setAsCurrentWorkingDirectory(); args.add ("--filename=" + file.getFileName()); } args.add ("2>&1"); ChildProcess child; if (child.start (args)) { const String result (child.readAllProcessOutput().trim()); if (result.isNotEmpty()) { StringArray tokens; if (selectMultipleFiles) tokens.addTokens (result, separator, "\""); else tokens.add (result); for (int i = 0; i < tokens.size(); i++) results.add (File (tokens[i])); } child.waitForProcessToFinish (60 * 1000); } previousWorkingDirectory.setAsCurrentWorkingDirectory(); }