mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-10 23:44:24 +00:00
Cleaned up some FileChooser code, and added a new method showDialog()
This commit is contained in:
parent
3d1aaf1aa9
commit
e10dfff1af
4 changed files with 63 additions and 75 deletions
|
|
@ -68,7 +68,8 @@ public:
|
|||
conjuction with canSelectFiles). */
|
||||
canSelectMultipleItems = 16, /**< specifies that the user can select multiple items. */
|
||||
useTreeView = 32, /**< specifies that a tree-view should be shown instead of a file list. */
|
||||
filenameBoxIsReadOnly = 64 /**< specifies that the user can't type directly into the filename box. */
|
||||
filenameBoxIsReadOnly = 64, /**< specifies that the user can't type directly into the filename box. */
|
||||
warnAboutOverwriting = 128 /**< specifies that the dialog should warn about overwriting existing files (if possible). */
|
||||
};
|
||||
|
||||
//==============================================================================
|
||||
|
|
|
|||
|
|
@ -26,81 +26,88 @@
|
|||
FileChooser::FileChooser (const String& chooserBoxTitle,
|
||||
const File& currentFileOrDirectory,
|
||||
const String& fileFilters,
|
||||
const bool useNativeDialogBox_)
|
||||
const bool useNativeBox)
|
||||
: title (chooserBoxTitle),
|
||||
filters (fileFilters),
|
||||
startingFile (currentFileOrDirectory),
|
||||
useNativeDialogBox (useNativeDialogBox_)
|
||||
useNativeDialogBox (useNativeBox && isPlatformDialogAvailable())
|
||||
{
|
||||
if (useNativeDialogBox)
|
||||
{
|
||||
static bool canUseNativeBox = isPlatformDialogAvailable();
|
||||
if (! canUseNativeBox)
|
||||
useNativeDialogBox = false;
|
||||
}
|
||||
|
||||
if (! fileFilters.containsNonWhitespaceChars())
|
||||
filters = "*";
|
||||
}
|
||||
|
||||
FileChooser::~FileChooser()
|
||||
{
|
||||
}
|
||||
FileChooser::~FileChooser() {}
|
||||
|
||||
#if JUCE_MODAL_LOOPS_PERMITTED
|
||||
bool FileChooser::browseForFileToOpen (FilePreviewComponent* previewComponent)
|
||||
bool FileChooser::browseForFileToOpen (FilePreviewComponent* previewComp)
|
||||
{
|
||||
return showDialog (false, true, false, false, false, previewComponent);
|
||||
return showDialog (FileBrowserComponent::openMode
|
||||
| FileBrowserComponent::canSelectFiles,
|
||||
previewComp);
|
||||
}
|
||||
|
||||
bool FileChooser::browseForMultipleFilesToOpen (FilePreviewComponent* previewComponent)
|
||||
bool FileChooser::browseForMultipleFilesToOpen (FilePreviewComponent* previewComp)
|
||||
{
|
||||
return showDialog (false, true, false, false, true, previewComponent);
|
||||
return showDialog (FileBrowserComponent::openMode
|
||||
| FileBrowserComponent::canSelectFiles
|
||||
| FileBrowserComponent::canSelectMultipleItems,
|
||||
previewComp);
|
||||
}
|
||||
|
||||
bool FileChooser::browseForMultipleFilesOrDirectories (FilePreviewComponent* previewComponent)
|
||||
bool FileChooser::browseForMultipleFilesOrDirectories (FilePreviewComponent* previewComp)
|
||||
{
|
||||
return showDialog (true, true, false, false, true, previewComponent);
|
||||
return showDialog (FileBrowserComponent::openMode
|
||||
| FileBrowserComponent::canSelectFiles
|
||||
| FileBrowserComponent::canSelectDirectories
|
||||
| FileBrowserComponent::canSelectMultipleItems,
|
||||
previewComp);
|
||||
}
|
||||
|
||||
bool FileChooser::browseForFileToSave (const bool warnAboutOverwritingExistingFiles)
|
||||
bool FileChooser::browseForFileToSave (const bool warnAboutOverwrite)
|
||||
{
|
||||
return showDialog (false, true, true, warnAboutOverwritingExistingFiles, false, nullptr);
|
||||
return showDialog (FileBrowserComponent::saveMode
|
||||
| FileBrowserComponent::canSelectFiles
|
||||
| (warnAboutOverwrite ? FileBrowserComponent::warnAboutOverwriting : 0),
|
||||
nullptr);
|
||||
}
|
||||
|
||||
bool FileChooser::browseForDirectory()
|
||||
{
|
||||
return showDialog (true, false, false, false, false, nullptr);
|
||||
return showDialog (FileBrowserComponent::openMode
|
||||
| FileBrowserComponent::canSelectDirectories,
|
||||
nullptr);
|
||||
}
|
||||
|
||||
bool FileChooser::showDialog (const bool selectsDirectories,
|
||||
const bool selectsFiles,
|
||||
const bool isSave,
|
||||
const bool warnAboutOverwritingExistingFiles,
|
||||
const bool selectMultipleFiles,
|
||||
FilePreviewComponent* const previewComponent)
|
||||
bool FileChooser::showDialog (const int flags, FilePreviewComponent* const previewComp)
|
||||
{
|
||||
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));
|
||||
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 && (previewComponent == nullptr))
|
||||
if (useNativeDialogBox && (previewComp == nullptr))
|
||||
#else
|
||||
if (false)
|
||||
#endif
|
||||
{
|
||||
showPlatformDialog (results, title, startingFile, filters,
|
||||
selectsDirectories, selectsFiles, isSave,
|
||||
warnAboutOverwritingExistingFiles,
|
||||
selectMultipleFiles,
|
||||
previewComponent);
|
||||
warnAboutOverwrite, selectMultiple, previewComp);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -108,28 +115,10 @@ bool FileChooser::showDialog (const bool selectsDirectories,
|
|||
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);
|
||||
FileBrowserComponent browserComponent (flags, startingFile, &wildcard, previewComp);
|
||||
|
||||
FileChooserDialogBox box (title, String::empty,
|
||||
browserComponent,
|
||||
warnAboutOverwritingExistingFiles,
|
||||
browserComponent, warnAboutOverwrite,
|
||||
browserComponent.findColour (AlertWindow::backgroundColourId));
|
||||
|
||||
if (box.show())
|
||||
|
|
@ -155,16 +144,6 @@ File FileChooser::getResult() const
|
|||
return results.getFirst();
|
||||
}
|
||||
|
||||
const Array<File>& FileChooser::getResults() const
|
||||
{
|
||||
return results;
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
FilePreviewComponent::FilePreviewComponent()
|
||||
{
|
||||
}
|
||||
|
||||
FilePreviewComponent::~FilePreviewComponent()
|
||||
{
|
||||
}
|
||||
FilePreviewComponent::FilePreviewComponent() {}
|
||||
FilePreviewComponent::~FilePreviewComponent() {}
|
||||
|
|
|
|||
|
|
@ -143,6 +143,17 @@ public:
|
|||
*/
|
||||
bool browseForMultipleFilesOrDirectories (FilePreviewComponent* previewComponent = nullptr);
|
||||
|
||||
//==============================================================================
|
||||
/** Runs a dialog box for the given set of option flags.
|
||||
The flag values used are those in FileBrowserComponent::FileChooserFlags.
|
||||
|
||||
@returns true if the user chose a directory and pressed 'ok', in which case, use
|
||||
the getResult() method to find out what they chose. Returns false
|
||||
if they cancelled instead.
|
||||
@see FileBrowserComponent::FileChooserFlags
|
||||
*/
|
||||
bool showDialog (int flags, FilePreviewComponent* previewComponent);
|
||||
|
||||
//==============================================================================
|
||||
/** Returns the last file that was chosen by one of the browseFor methods.
|
||||
|
||||
|
|
@ -167,18 +178,14 @@ public:
|
|||
|
||||
@see getResult
|
||||
*/
|
||||
const Array<File>& getResults() const;
|
||||
const Array<File>& getResults() const noexcept { return results; }
|
||||
|
||||
private:
|
||||
//==============================================================================
|
||||
String title, filters;
|
||||
File startingFile;
|
||||
const File startingFile;
|
||||
Array<File> results;
|
||||
bool useNativeDialogBox;
|
||||
|
||||
bool showDialog (bool selectsDirectories, bool selectsFiles, bool isSave,
|
||||
bool warnAboutOverwritingExistingFiles, bool selectMultipleFiles,
|
||||
FilePreviewComponent* previewComponent);
|
||||
const bool useNativeDialogBox;
|
||||
|
||||
static void showPlatformDialog (Array<File>& results, const String& title, const File& file,
|
||||
const String& filters, bool selectsDirectories, bool selectsFiles,
|
||||
|
|
@ -186,7 +193,7 @@ private:
|
|||
FilePreviewComponent* previewComponent);
|
||||
static bool isPlatformDialogAvailable();
|
||||
|
||||
JUCE_LEAK_DETECTOR (FileChooser)
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (FileChooser)
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue