From d046e30b25335ad9084a355a6a03d88f2a82ef71 Mon Sep 17 00:00:00 2001 From: jules Date: Fri, 8 Mar 2013 14:30:38 +0000 Subject: [PATCH] FileTreeComponent selection fix. --- .../filebrowser/juce_FileTreeComponent.cpp | 35 +++++++++++++------ 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.cpp b/modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.cpp index 4994c8c3b5..cd32ae796a 100644 --- a/modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.cpp +++ b/modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.cpp @@ -116,28 +116,43 @@ public: { setOpen (true); - for (int i = 0; i < getNumSubItems(); ++i) - if (FileListTreeItem* f = dynamic_cast (getSubItem (i))) - if (f->selectFile (target)) - return true; + for (int maxRetries = 500; --maxRetries > 0;) + { + for (int i = 0; i < getNumSubItems(); ++i) + if (FileListTreeItem* f = dynamic_cast (getSubItem (i))) + if (f->selectFile (target)) + return true; + + // if we've just opened and the contents are still loading, wait for it.. + if (subContentsList != nullptr && subContentsList->isStillLoading()) + { + Thread::sleep (10); + rebuildItemsFromContentList(); + } + else + { + break; + } + } } return false; } void changeListenerCallback (ChangeBroadcaster*) + { + rebuildItemsFromContentList(); + } + + void rebuildItemsFromContentList() { clearSubItems(); if (isOpen() && subContentsList != nullptr) { for (int i = 0; i < subContentsList->getNumFiles(); ++i) - { - FileListTreeItem* const item - = new FileListTreeItem (owner, subContentsList, i, subContentsList->getFile(i), thread); - - addSubItem (item); - } + addSubItem (new FileListTreeItem (owner, subContentsList, i, + subContentsList->getFile(i), thread)); } }