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; }
bool FileChooser::showDialog (const bool selectsDirectories, const bool selectsFiles, const bool isSave, const bool warnAboutOverwritingExistingFiles, const bool selectMultipleFiles, FilePreviewComponent* const previewComponent) { ScopedPointer <ComponentDeletionWatcher> currentlyFocusedChecker; Component* const currentlyFocused = Component::getCurrentlyFocusedComponent(); if (currentlyFocused != 0) currentlyFocusedChecker = new ComponentDeletionWatcher (currentlyFocused); results.clear(); // the preview component needs to be the right size before you pass it in here.. jassert (previewComponent == 0 || (previewComponent->getWidth() > 10 && previewComponent->getHeight() > 10)); #if JUCE_WINDOWS if (useNativeDialogBox && ! (selectsFiles && selectsDirectories)) #elif JUCE_MAC if (useNativeDialogBox && (previewComponent == 0)) #else if (false) #endif { showPlatformDialog (results, title, startingFile, filters, selectsDirectories, selectsFiles, isSave, warnAboutOverwritingExistingFiles, selectMultipleFiles, previewComponent); } else { WildcardFileFilter wildcard (selectsFiles ? filters : String::empty, selectsDirectories ? "*" : String::empty, String::empty); int flags = isSave ? FileBrowserComponent::saveMode : FileBrowserComponent::openMode; if (selectsFiles) flags |= FileBrowserComponent::canSelectFiles; if (selectsDirectories) flags |= FileBrowserComponent::canSelectDirectories; if (selectMultipleFiles) flags |= FileBrowserComponent::canSelectMultipleItems; FileBrowserComponent browserComponent (flags, startingFile, &wildcard, previewComponent); FileChooserDialogBox box (title, String::empty, browserComponent, warnAboutOverwritingExistingFiles, browserComponent.findColour (AlertWindow::backgroundColourId)); if (box.show()) { for (int i = 0; i < browserComponent.getNumSelectedFiles(); ++i) results.add (new File (browserComponent.getSelectedFile (i))); } } if (currentlyFocused != 0 && ! currentlyFocusedChecker->hasBeenDeleted()) currentlyFocused->grabKeyboardFocus(); return results.size() > 0; }
bool FileChooser::showDialog (const bool selectsDirectories, const bool selectsFiles, const bool isSave, const bool warnAboutOverwritingExistingFiles, const bool selectMultipleFiles, FilePreviewComponent* const previewComponent) { WeakReference<Component> previouslyFocused (Component::getCurrentlyFocusedComponent()); results.clear(); // the preview component needs to be the right size before you pass it in here.. jassert (previewComponent == nullptr || (previewComponent->getWidth() > 10 && previewComponent->getHeight() > 10)); #if JUCE_WINDOWS if (useNativeDialogBox && ! (selectsFiles && selectsDirectories)) #elif JUCE_MAC || JUCE_LINUX if (useNativeDialogBox && (previewComponent == nullptr)) #else if (false) #endif { showPlatformDialog (results, title, startingFile, filters, selectsDirectories, selectsFiles, isSave, warnAboutOverwritingExistingFiles, selectMultipleFiles, previewComponent); } else { WildcardFileFilter wildcard (selectsFiles ? filters : String::empty, selectsDirectories ? "*" : String::empty, String::empty); int flags = isSave ? FileBrowserComponent::saveMode : FileBrowserComponent::openMode; if (selectsFiles) flags |= FileBrowserComponent::canSelectFiles; if (selectsDirectories) { flags |= FileBrowserComponent::canSelectDirectories; if (! isSave) flags |= FileBrowserComponent::filenameBoxIsReadOnly; } if (selectMultipleFiles) flags |= FileBrowserComponent::canSelectMultipleItems; FileBrowserComponent browserComponent (flags, startingFile, &wildcard, previewComponent); FileChooserDialogBox box (title, String::empty, browserComponent, warnAboutOverwritingExistingFiles, browserComponent.findColour (AlertWindow::backgroundColourId)); if (box.show()) { for (int i = 0; i < browserComponent.getNumSelectedFiles(); ++i) results.add (browserComponent.getSelectedFile (i)); } } if (previouslyFocused != nullptr) previouslyFocused->grabKeyboardFocus(); return results.size() > 0; }