From 2aea19fff13f0aa326fd6bee1eb570d4bec009ba Mon Sep 17 00:00:00 2001 From: Michael Gregorius Date: Tue, 14 Apr 2020 14:45:08 +0200 Subject: [PATCH] Add "Open containing folder" (#5453) Add functionality to open the containing folder of a file that's selected in LMMS' file browser. Technical details ------------------ Add a new private method openContainingFolder to FileBrowser. Add a new action to the context menu of a selected file. This action in turn calls the added method. The current implementation of openContainingFolder delegates to QDesktopServices::openUrl with the directory of the selected file. Please note that this will only open the directory but not select the file as this is much more complicated due to different implementations that are needed for the different platforms (Linux/Windows/MacOS). Using QDesktopServices::openUrl seems to be the most simple cross platform way which uses functionality that's already available in Qt. --- include/FileBrowser.h | 1 + src/gui/FileBrowser.cpp | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/include/FileBrowser.h b/include/FileBrowser.h index b84ba5e54..0e8ce7bf3 100644 --- a/include/FileBrowser.h +++ b/include/FileBrowser.h @@ -125,6 +125,7 @@ private slots: void activateListItem( QTreeWidgetItem * item, int column ); void openInNewInstrumentTrackBBE( void ); void openInNewInstrumentTrackSE( void ); + void openContainingFolder(); void sendToActiveInstrumentTrack( void ); void updateDirectory( QTreeWidgetItem * item ); diff --git a/src/gui/FileBrowser.cpp b/src/gui/FileBrowser.cpp index 809518683..52641a73d 100644 --- a/src/gui/FileBrowser.cpp +++ b/src/gui/FileBrowser.cpp @@ -24,6 +24,7 @@ */ +#include #include #include #include @@ -380,6 +381,11 @@ void FileBrowserTreeWidget::contextMenuEvent(QContextMenuEvent * e ) "B+B Editor" ), this, SLOT( openInNewInstrumentTrackBBE() ) ); + contextMenu.addSeparator(); + contextMenu.addAction( QIcon(embed::getIconPixmap( "folder" )), + tr( "Open containing folder" ), + this, + SLOT( openContainingFolder() ) ); contextMenu.exec( e->globalPos() ); m_contextMenuItem = NULL; } @@ -671,6 +677,16 @@ void FileBrowserTreeWidget::openInNewInstrumentTrackSE( void ) +void FileBrowserTreeWidget::openContainingFolder() +{ + if (m_contextMenuItem) + { + QFileInfo fileInfo(m_contextMenuItem->fullName()); + QDesktopServices::openUrl(QUrl::fromLocalFile(fileInfo.dir().path())); + } +} + + void FileBrowserTreeWidget::sendToActiveInstrumentTrack( void ) {