From 9086ab8ed4c44892b74e8ade2d941af6016c0279 Mon Sep 17 00:00:00 2001 From: David Sansome Date: Thu, 17 Mar 2011 19:52:21 +0000 Subject: [PATCH] Add a "Show in file browser..." to the library context menu as well. Fixes issue #1563 --- src/core/utilities.cpp | 23 +++++++++++++++++++++++ src/core/utilities.h | 2 ++ src/library/libraryview.cpp | 12 ++++++++++++ src/library/libraryview.h | 2 ++ src/ui/mainwindow.cpp | 27 +++++++-------------------- 5 files changed, 46 insertions(+), 20 deletions(-) diff --git a/src/core/utilities.cpp b/src/core/utilities.cpp index 04133ec34..9ea90e944 100644 --- a/src/core/utilities.cpp +++ b/src/core/utilities.cpp @@ -20,10 +20,12 @@ #include #include +#include #include #include #include #include +#include #include #include @@ -276,6 +278,27 @@ QString GetConfigPath(ConfigPath config) { } } +void OpenInFileBrowser(const QStringList& filenames) { + QSet dirs; + + foreach (const QString& filename, filenames) { + // Ignore things that look like URLs + if (filename.contains("://")) + continue; + + if (!QFile::exists(filename)) + continue; + + const QString directory = QFileInfo(filename).dir().path(); + + if (dirs.contains(directory)) + continue; + dirs.insert(directory); + + QDesktopServices::openUrl(QUrl::fromLocalFile(directory)); + } +} + } // namespace Utilities diff --git a/src/core/utilities.h b/src/core/utilities.h index 3d7bc66ef..dd9e4ee3a 100644 --- a/src/core/utilities.h +++ b/src/core/utilities.h @@ -45,6 +45,8 @@ namespace Utilities { bool CopyRecursive(const QString& source, const QString& destination); bool Copy(QIODevice* source, QIODevice* destination); + void OpenInFileBrowser(const QStringList& filenames); + enum ConfigPath { Path_Root, diff --git a/src/library/libraryview.cpp b/src/library/libraryview.cpp index 677beeb82..819b4a8c8 100644 --- a/src/library/libraryview.cpp +++ b/src/library/libraryview.cpp @@ -23,6 +23,7 @@ #include "core/deletefiles.h" #include "core/mimedata.h" #include "core/musicstorage.h" +#include "core/utilities.h" #include "devices/devicemanager.h" #include "devices/devicestatefiltermodel.h" #include "scripting/scriptmanager.h" @@ -265,6 +266,8 @@ void LibraryView::contextMenuEvent(QContextMenuEvent *e) { tr("Edit track information..."), this, SLOT(EditTracks())); edit_tracks_ = context_menu_->addAction(IconLoader::Load("edit-rename"), tr("Edit tracks information..."), this, SLOT(EditTracks())); + show_in_browser_ = context_menu_->addAction(IconLoader::Load("document-open-folder"), + tr("Show in file browser..."), this, SLOT(ShowInBrowser())); context_menu_->addSeparator(); show_in_various_ = context_menu_->addAction( @@ -579,3 +582,12 @@ QString LibraryView::GetNameForNewPlaylist(const SongList& songs) { return result; } + +void LibraryView::ShowInBrowser() { + QStringList filenames; + foreach (const Song& song, GetSelectedSongs()) { + filenames << song.filename(); + } + + Utilities::OpenInFileBrowser(filenames); +} diff --git a/src/library/libraryview.h b/src/library/libraryview.h index 9a1909f76..75fd73eb8 100644 --- a/src/library/libraryview.h +++ b/src/library/libraryview.h @@ -99,6 +99,7 @@ class LibraryView : public AutoExpandingTreeView { void CopyToDevice(); void Delete(); void EditTracks(); + void ShowInBrowser(); void ShowInVarious(); void NoShowInVarious(); @@ -137,6 +138,7 @@ class LibraryView : public AutoExpandingTreeView { QAction* delete_; QAction* edit_track_; QAction* edit_tracks_; + QAction* show_in_browser_; QAction* show_in_various_; QAction* no_show_in_various_; diff --git a/src/ui/mainwindow.cpp b/src/ui/mainwindow.cpp index a28003799..4b8d3b7fe 100644 --- a/src/ui/mainwindow.cpp +++ b/src/ui/mainwindow.cpp @@ -33,6 +33,7 @@ #include "core/songloader.h" #include "core/stylesheetloader.h" #include "core/taskmanager.h" +#include "core/utilities.h" #include "devices/devicemanager.h" #include "devices/devicestatefiltermodel.h" #include "devices/deviceview.h" @@ -111,7 +112,6 @@ #endif #include -#include #include #include #include @@ -1607,29 +1607,16 @@ void MainWindow::PlaylistDelete() { delete_files->Start(selected_songs); } -void MainWindow::PlaylistOpenInBrowser(){ - QSet dirs; +void MainWindow::PlaylistOpenInBrowser() { + QStringList filenames; QModelIndexList proxy_indexes = ui_->playlist->view()->selectionModel()->selectedRows(); + foreach (const QModelIndex& proxy_index, proxy_indexes) { const QModelIndex index = playlists_->current()->proxy()->mapToSource(proxy_index); - const QString filename = - index.sibling(index.row(), Playlist::Column_Filename).data().toString(); - - // Ignore things that look like URLs - if (filename.contains("://")) - continue; - - if (!QFile::exists(filename)) - continue; - - const QString directory = QFileInfo(filename).dir().path(); - - if (dirs.contains(directory)) - continue; - dirs.insert(directory); - - QDesktopServices::openUrl(QUrl::fromLocalFile(directory)); + filenames << index.sibling(index.row(), Playlist::Column_Filename).data().toString(); } + + Utilities::OpenInFileBrowser(filenames); } void MainWindow::DeleteFinished(const SongList& songs_with_errors) {