From 6baf778e41d15fe3e23f32b7a8fe82e695f7477e Mon Sep 17 00:00:00 2001 From: jules Date: Fri, 18 Sep 2015 10:49:33 +0100 Subject: [PATCH] Updated FileBrowserComponent to refresh its list if the user switches to another app and then returns. --- .../filebrowser/juce_FileBrowserComponent.cpp | 27 ++++++++++++++----- .../filebrowser/juce_FileBrowserComponent.h | 20 +++++++------- 2 files changed, 30 insertions(+), 17 deletions(-) diff --git a/modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.cpp b/modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.cpp index e67215d20f..d7c0feb3c9 100644 --- a/modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.cpp +++ b/modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.cpp @@ -32,7 +32,8 @@ FileBrowserComponent::FileBrowserComponent (int flags_, previewComp (previewComp_), currentPathBox ("path"), fileLabel ("f", TRANS ("file:")), - thread ("Juce FileBrowser") + thread ("Juce FileBrowser"), + wasProcessActive (false) { // You need to specify one or other of the open/save flags.. jassert ((flags & (saveMode | openMode)) != 0); @@ -109,6 +110,8 @@ FileBrowserComponent::FileBrowserComponent (int flags_, setRoot (currentRoot); thread.startThread (4); + + startTimer (2000); } FileBrowserComponent::~FileBrowserComponent() @@ -178,7 +181,7 @@ void FileBrowserComponent::deselectAllFiles() bool FileBrowserComponent::isFileSuitable (const File& file) const { return (flags & canSelectFiles) != 0 - && (fileFilter == nullptr || fileFilter->isFileSuitable (file)); + && (fileFilter == nullptr || fileFilter->isFileSuitable (file)); } bool FileBrowserComponent::isDirectorySuitable (const File&) const @@ -190,10 +193,10 @@ bool FileBrowserComponent::isFileOrDirSuitable (const File& f) const { if (f.isDirectory()) return (flags & canSelectDirectories) != 0 - && (fileFilter == nullptr || fileFilter->isDirectorySuitable (f)); + && (fileFilter == nullptr || fileFilter->isDirectorySuitable (f)); return (flags & canSelectFiles) != 0 && f.exists() - && (fileFilter == nullptr || fileFilter->isFileSuitable (f)); + && (fileFilter == nullptr || fileFilter->isFileSuitable (f)); } //============================================================================== @@ -401,8 +404,6 @@ void FileBrowserComponent::browserRootChanged (const File&) {} bool FileBrowserComponent::keyPressed (const KeyPress& key) { - (void) key; - #if JUCE_LINUX || JUCE_WINDOWS if (key.getModifiers().isCommandDown() && (key.getKeyCode() == 'H' || key.getKeyCode() == 'h')) @@ -413,6 +414,7 @@ bool FileBrowserComponent::keyPressed (const KeyPress& key) } #endif + ignoreUnused (key); return false; } @@ -589,3 +591,16 @@ void FileBrowserComponent::getRoots (StringArray& rootNames, StringArray& rootPa { getDefaultRoots (rootNames, rootPaths); } + +void FileBrowserComponent::timerCallback() +{ + const bool isProcessActive = Process::isForegroundProcess(); + + if (wasProcessActive != isProcessActive) + { + wasProcessActive = isProcessActive; + + if (isProcessActive && fileList != nullptr) + refresh(); + } +} diff --git a/modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.h b/modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.h index 3053fd5875..284ee95b4f 100644 --- a/modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.h +++ b/modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.h @@ -41,7 +41,8 @@ class JUCE_API FileBrowserComponent : public Component, private TextEditorListener, private ButtonListener, private ComboBoxListener, // (can't use ComboBox::Listener due to idiotic VC2005 bug) - private FileFilter + private FileFilter, + private Timer { public: //============================================================================== @@ -103,8 +104,7 @@ public: */ File getSelectedFile (int index) const noexcept; - /** Deselects any files that are currently selected. - */ + /** Deselects any files that are currently selected. */ void deselectAllFiles(); /** Returns true if the currently selected file(s) are usable. @@ -150,8 +150,7 @@ public: */ virtual String getActionVerb() const; - /** Returns true if the saveMode flag was set when this component was created. - */ + /** Returns true if the saveMode flag was set when this component was created. */ bool isSaveMode() const noexcept; /** Sets the label that will be displayed next to the filename entry box. @@ -243,10 +242,8 @@ public: bool isFileSuitable (const File&) const override; /** @internal */ bool isDirectorySuitable (const File&) const override; - /** @internal */ FilePreviewComponent* getPreviewComponent() const noexcept; - /** @internal */ DirectoryContentsDisplayComponent* getDisplayComponent() const noexcept; @@ -263,13 +260,13 @@ protected: private: //============================================================================== - ScopedPointer fileList; + ScopedPointer fileList; const FileFilter* fileFilter; int flags; File currentRoot; Array chosenFiles; - ListenerList listeners; + ListenerList listeners; ScopedPointer fileListComponent; FilePreviewComponent* previewComp; @@ -277,11 +274,12 @@ private: TextEditor filenameBox; Label fileLabel; ScopedPointer