diff --git a/include/FileBrowser.h b/include/FileBrowser.h index 4f9b78c48..f9bc34820 100644 --- a/include/FileBrowser.h +++ b/include/FileBrowser.h @@ -50,7 +50,7 @@ class FileBrowser : public SideBarWidget public: FileBrowser( const QString & directories, const QString & filter, const QString & title, const QPixmap & pm, - QWidget * parent, bool dirs_as_items = false ); + QWidget * parent, bool dirs_as_items = false, bool recurse = false ); virtual ~FileBrowser(); @@ -73,6 +73,7 @@ private: QString m_filter; bool m_dirsAsItems; + bool m_recurse; } ; diff --git a/src/gui/FileBrowser.cpp b/src/gui/FileBrowser.cpp index 80390293f..fd86ffc84 100644 --- a/src/gui/FileBrowser.cpp +++ b/src/gui/FileBrowser.cpp @@ -63,11 +63,12 @@ enum TreeWidgetItemTypes FileBrowser::FileBrowser(const QString & directories, const QString & filter, const QString & title, const QPixmap & pm, - QWidget * parent, bool dirs_as_items ) : + QWidget * parent, bool dirs_as_items, bool recurse ) : SideBarWidget( title, pm, parent ), m_directories( directories ), m_filter( filter ), - m_dirsAsItems( dirs_as_items ) + m_dirsAsItems( dirs_as_items ), + m_recurse( recurse ) { setWindowTitle( tr( "Browser" ) ); m_l = new FileBrowserTreeWidget( contentParent() ); @@ -234,6 +235,19 @@ void FileBrowser::reloadTree( void ) { addItems( *it ); } + for(int i = 0; i < m_l->topLevelItemCount(); ++i) + { + if ( m_recurse ) + { + m_l->topLevelItem( i )->setExpanded( true); + } + Directory *d = dynamic_cast ( m_l->topLevelItem( i ) ); + if( d ) + { + d->update(); + d->setExpanded( false ); + } + } m_filterEdit->setText( text ); filterItems( text ); } @@ -245,8 +259,7 @@ void FileBrowser::addItems(const QString & path ) { if( m_dirsAsItems ) { - m_l->addTopLevelItem( new Directory( path, - QString::null, m_filter ) ); + m_l->addTopLevelItem( new Directory( path, QString::null, m_filter ) ); return; } @@ -265,23 +278,27 @@ void FileBrowser::addItems(const QString & path ) m_l->topLevelItem( i ) ); if( d == NULL || cur_file < d->text( 0 ) ) { - m_l->insertTopLevelItem( i, - new Directory( cur_file, path, - m_filter ) ); + Directory *dd = new Directory( cur_file, path, + m_filter ); + m_l->insertTopLevelItem( i,dd ); + dd->update(); orphan = false; break; } else if( cur_file == d->text( 0 ) ) { d->addDirectory( path ); + d->update(); orphan = false; break; } } if( orphan ) { - m_l->addTopLevelItem( new Directory( cur_file, - path, m_filter ) ); + Directory *d = new Directory( cur_file, + path, m_filter ); + d->update(); + m_l->addTopLevelItem( d ); } } } @@ -348,6 +365,7 @@ FileBrowserTreeWidget::FileBrowserTreeWidget(QWidget * parent ) : SLOT( updateDirectory( QTreeWidgetItem * ) ) ); connect( this, SIGNAL( itemExpanded( QTreeWidgetItem * ) ), SLOT( updateDirectory( QTreeWidgetItem * ) ) ); + } @@ -818,6 +836,8 @@ bool Directory::addItems(const QString & path ) path, m_filter ) ); orphan = false; m_dirCount++; + //recurse for each dir + addItems( path + cur_file + QDir::separator() ); break; } else if( cur_file == d->text( 0 ) ) @@ -832,6 +852,8 @@ bool Directory::addItems(const QString & path ) addChild( new Directory( cur_file, path, m_filter ) ); m_dirCount++; + //recurse for each dir + addItems( path + cur_file + QDir::separator() ); } added_something = true; diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index fc2168225..3e2135391 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -102,24 +102,24 @@ MainWindow::MainWindow() : "*.mmp *.mmpz *.xml *.mid *.flp", tr( "My Projects" ), embed::getIconPixmap( "project_file" ).transformed( QTransform().rotate( 90 ) ), - splitter ) ); + splitter, false, true ) ); sideBar->appendTab( new FileBrowser( ConfigManager::inst()->userSamplesDir() + "*" + ConfigManager::inst()->factorySamplesDir(), "*", tr( "My Samples" ), embed::getIconPixmap( "sample_file" ).transformed( QTransform().rotate( 90 ) ), - splitter ) ); + splitter, false, true ) ); sideBar->appendTab( new FileBrowser( ConfigManager::inst()->userPresetsDir() + "*" + ConfigManager::inst()->factoryPresetsDir(), "*.xpf *.cs.xml *.xiz", tr( "My Presets" ), embed::getIconPixmap( "preset_file" ).transformed( QTransform().rotate( 90 ) ), - splitter ) ); + splitter , false, true ) ); sideBar->appendTab( new FileBrowser( QDir::homePath(), "*", tr( "My Home" ), embed::getIconPixmap( "home" ).transformed( QTransform().rotate( 90 ) ), - splitter ) ); + splitter, false, true ) ); QStringList root_paths; #ifdef LMMS_BUILD_APPLE @@ -530,12 +530,12 @@ void MainWindow::finalize() } // Add editor subwindows - for (QWidget* widget : QList{ - gui->automationEditor(), - gui->getBBEditor(), - gui->pianoRoll(), - gui->songEditor() - }) + for (QWidget* widget : QList() + << gui->automationEditor() + << gui->getBBEditor() + << gui->pianoRoll() + << gui->songEditor() + ) { QMdiSubWindow* window = workspace()->addSubWindow(widget); window->setWindowIcon(widget->windowIcon());