/* ============================================================================== This file is part of the JUCE library. Copyright (c) 2017 - ROLI Ltd. JUCE is an open source library subject to commercial or open-source licensing. By using JUCE, you agree to the terms of both the JUCE 5 End-User License Agreement and JUCE 5 Privacy Policy (both updated and effective as of the 27th April 2017). End User License Agreement: www.juce.com/juce-5-licence Privacy Policy: www.juce.com/juce-5-privacy-policy Or: You may also use this code under the terms of the GPL v3 (see www.gnu.org/licenses). JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE DISCLAIMED. ============================================================================== */ namespace juce { FileChooser::FileChooser (const String& chooserBoxTitle, const File& currentFileOrDirectory, const String& fileFilters, const bool useNativeBox, const bool treatFilePackagesAsDirectories) : title (chooserBoxTitle), filters (fileFilters), startingFile (currentFileOrDirectory), useNativeDialogBox (useNativeBox && isPlatformDialogAvailable()), treatFilePackagesAsDirs (treatFilePackagesAsDirectories) { if (! fileFilters.containsNonWhitespaceChars()) filters = "*"; } FileChooser::~FileChooser() {} #if JUCE_MODAL_LOOPS_PERMITTED bool FileChooser::browseForFileToOpen (FilePreviewComponent* previewComp) { return showDialog (FileBrowserComponent::openMode | FileBrowserComponent::canSelectFiles, previewComp); } bool FileChooser::browseForMultipleFilesToOpen (FilePreviewComponent* previewComp) { return showDialog (FileBrowserComponent::openMode | FileBrowserComponent::canSelectFiles | FileBrowserComponent::canSelectMultipleItems, previewComp); } bool FileChooser::browseForMultipleFilesOrDirectories (FilePreviewComponent* previewComp) { return showDialog (FileBrowserComponent::openMode | FileBrowserComponent::canSelectFiles | FileBrowserComponent::canSelectDirectories | FileBrowserComponent::canSelectMultipleItems, previewComp); } bool FileChooser::browseForFileToSave (const bool warnAboutOverwrite) { return showDialog (FileBrowserComponent::saveMode | FileBrowserComponent::canSelectFiles | (warnAboutOverwrite ? FileBrowserComponent::warnAboutOverwriting : 0), nullptr); } bool FileChooser::browseForDirectory() { return showDialog (FileBrowserComponent::openMode | FileBrowserComponent::canSelectDirectories, nullptr); } bool FileChooser::showDialog (const int flags, FilePreviewComponent* const previewComp) { FocusRestorer focusRestorer; results.clear(); // the preview component needs to be the right size before you pass it in here.. jassert (previewComp == nullptr || (previewComp->getWidth() > 10 && previewComp->getHeight() > 10)); const bool selectsDirectories = (flags & FileBrowserComponent::canSelectDirectories) != 0; const bool selectsFiles = (flags & FileBrowserComponent::canSelectFiles) != 0; const bool isSave = (flags & FileBrowserComponent::saveMode) != 0; const bool warnAboutOverwrite = (flags & FileBrowserComponent::warnAboutOverwriting) != 0; const bool selectMultiple = (flags & FileBrowserComponent::canSelectMultipleItems) != 0; // You've set the flags for both saveMode and openMode! jassert (! (isSave && (flags & FileBrowserComponent::openMode) != 0)); #if JUCE_WINDOWS if (useNativeDialogBox && ! (selectsFiles && selectsDirectories)) #elif JUCE_MAC || JUCE_LINUX if (useNativeDialogBox) #else if (false) #endif { showPlatformDialog (results, title, startingFile, filters, selectsDirectories, selectsFiles, isSave, warnAboutOverwrite, selectMultiple, treatFilePackagesAsDirs, previewComp); } else { ignoreUnused (selectMultiple); WildcardFileFilter wildcard (selectsFiles ? filters : String(), selectsDirectories ? "*" : String(), String()); FileBrowserComponent browserComponent (flags, startingFile, &wildcard, previewComp); FileChooserDialogBox box (title, String(), browserComponent, warnAboutOverwrite, browserComponent.findColour (AlertWindow::backgroundColourId)); if (box.show()) { for (int i = 0; i < browserComponent.getNumSelectedFiles(); ++i) results.add (browserComponent.getSelectedFile (i)); } } return results.size() > 0; } #endif File FileChooser::getResult() const { // if you've used a multiple-file select, you should use the getResults() method // to retrieve all the files that were chosen. jassert (results.size() <= 1); return results.getFirst(); } //============================================================================== FilePreviewComponent::FilePreviewComponent() {} FilePreviewComponent::~FilePreviewComponent() {} } // namespace juce