diff --git a/picard/cluster.py b/picard/cluster.py index 95449388e..52a055213 100644 --- a/picard/cluster.py +++ b/picard/cluster.py @@ -126,6 +126,12 @@ class Cluster(QtCore.QObject, Item): def can_browser_lookup(self): return not self.special + def can_view_info(self): + if self.files: + return True + else: + return False + def is_album_like(self): return True @@ -284,6 +290,9 @@ class UnmatchedFiles(Cluster): def can_autotag(self): return len(self.files) > 0 + def can_view_info(self): + return False + class ClusterList(list, Item): diff --git a/picard/ui/infodialog.py b/picard/ui/infodialog.py index ffc9e440a..f052b94d6 100644 --- a/picard/ui/infodialog.py +++ b/picard/ui/infodialog.py @@ -167,3 +167,32 @@ class AlbumInfoDialog(InfoDialog): else: tabWidget.setTabText(tab_index, _("&Info")) self.tab_hide(tab) + + +class ClusterInfoDialog(InfoDialog): + + def __init__(self, cluster, parent=None): + InfoDialog.__init__(self, cluster, parent) + self.setWindowTitle(_("Cluster Info")) + + def _display_info_tab(self): + tab = self.ui.info_tab + cluster = self.obj + tabWidget = self.ui.tabWidget + tab_index = tabWidget.indexOf(tab) + tabWidget.setTabText(tab_index, _("&Info")) + info = [] + info.append("%s %s" % (_('Album:'), + unicode(QtCore.Qt.escape(cluster.metadata["album"])))) + info.append("%s %s" % (_('Artist:'), + unicode(QtCore.Qt.escape(cluster.metadata["albumartist"])))) + lines = [] + for file in cluster.iterfiles(False): + artist = file.metadata["artist"] or file.metadata["albumartist"] or cluster.metadata["albumartist"] + lines.append(file.metadata["tracknumber"]+ u" " + + file.metadata["title"] + " - " + artist + " (" + + file.metadata["~length"]+ ")") + info.append("%s
%s" % (_('Tracklist:'), + '
'.join([unicode(QtCore.Qt.escape(s)) for s in + lines]))) + self.ui.info.setText('
'.join(info)) diff --git a/picard/ui/itemviews.py b/picard/ui/itemviews.py index 04a211067..39f7ff8ea 100644 --- a/picard/ui/itemviews.py +++ b/picard/ui/itemviews.py @@ -256,6 +256,8 @@ class BaseTreeView(QtGui.QTreeWidget): if isinstance(obj, NonAlbumTrack): menu.addAction(self.window.refresh_action) elif isinstance(obj, Cluster): + if can_view_info: + menu.addAction(self.window.view_info_action) menu.addAction(self.window.browser_lookup_action) menu.addSeparator() menu.addAction(self.window.autotag_action) diff --git a/picard/ui/mainwindow.py b/picard/ui/mainwindow.py index 7a072ce59..b6f6a8a1f 100644 --- a/picard/ui/mainwindow.py +++ b/picard/ui/mainwindow.py @@ -23,9 +23,10 @@ import sys import os.path from picard import config, log +from picard.album import Album +from picard.cluster import Cluster from picard.file import File from picard.track import Track -from picard.album import Album from picard.formats import supported_formats from picard.ui.coverartbox import CoverArtBox from picard.ui.itemviews import MainPanel @@ -33,7 +34,7 @@ from picard.ui.metadatabox import MetadataBox from picard.ui.filebrowser import FileBrowser from picard.ui.tagsfromfilenames import TagsFromFileNamesDialog from picard.ui.options.dialog import OptionsDialog -from picard.ui.infodialog import FileInfoDialog, AlbumInfoDialog +from picard.ui.infodialog import FileInfoDialog, AlbumInfoDialog, ClusterInfoDialog from picard.ui.infostatus import InfoStatus from picard.ui.passworddialog import PasswordDialog from picard.ui.util import find_starting_directory, ButtonLineEdit @@ -774,6 +775,9 @@ class MainWindow(QtGui.QMainWindow): if isinstance(self.selected_objects[0], Album): album = self.selected_objects[0] dialog = AlbumInfoDialog(album, self) + elif isinstance(self.selected_objects[0], Cluster): + cluster = self.selected_objects[0] + dialog = ClusterInfoDialog(cluster, self) else: file = self.tagger.get_files_from_objects(self.selected_objects)[0] dialog = FileInfoDialog(file, self)