def contextMenuEvent(self, event): item = self.itemAt(event.pos()) if not item: return obj = item.obj plugin_actions = None can_view_info = self.window.view_info_action.isEnabled() menu = QtWidgets.QMenu(self) if isinstance(obj, Track): if can_view_info: menu.addAction(self.window.view_info_action) plugin_actions = list(_track_actions) if obj.num_linked_files == 1: menu.addAction(self.window.play_file_action) menu.addAction(self.window.open_folder_action) menu.addAction(self.window.track_search_action) plugin_actions.extend(_file_actions) menu.addAction(self.window.browser_lookup_action) menu.addSeparator() 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) menu.addAction(self.window.analyze_action) if isinstance(obj, UnclusteredFiles): menu.addAction(self.window.cluster_action) else: menu.addAction(self.window.album_search_action) plugin_actions = list(_cluster_actions) elif isinstance(obj, ClusterList): menu.addAction(self.window.autotag_action) menu.addAction(self.window.analyze_action) plugin_actions = list(_clusterlist_actions) elif isinstance(obj, File): if can_view_info: menu.addAction(self.window.view_info_action) menu.addAction(self.window.play_file_action) menu.addAction(self.window.open_folder_action) menu.addAction(self.window.browser_lookup_action) menu.addSeparator() menu.addAction(self.window.autotag_action) menu.addAction(self.window.analyze_action) menu.addAction(self.window.track_search_action) plugin_actions = list(_file_actions) elif isinstance(obj, Album): if can_view_info: menu.addAction(self.window.view_info_action) menu.addAction(self.window.browser_lookup_action) menu.addSeparator() menu.addAction(self.window.refresh_action) plugin_actions = list(_album_actions) menu.addAction(self.window.save_action) menu.addAction(self.window.remove_action) bottom_separator = False if isinstance(obj, Album) and not isinstance(obj, NatAlbum) and obj.loaded: releases_menu = QtWidgets.QMenu(_("&Other versions"), menu) menu.addSeparator() menu.addMenu(releases_menu) loading = releases_menu.addAction(_('Loading...')) loading.setDisabled(True) bottom_separator = True if len(self.selectedIndexes()) == len(MainPanel.columns): def _add_other_versions(): releases_menu.removeAction(loading) heading = releases_menu.addAction( obj.release_group.version_headings) heading.setDisabled(True) font = heading.font() font.setBold(True) heading.setFont(font) versions = obj.release_group.versions album_tracks_count = obj.get_num_total_files() or len( obj.tracks) preferred_countries = set( config.setting["preferred_release_countries"]) preferred_formats = set( config.setting["preferred_release_formats"]) ORDER_BEFORE, ORDER_AFTER = 0, 1 alternatives = [] for version in versions: trackmatch = countrymatch = formatmatch = ORDER_BEFORE if version['totaltracks'] != album_tracks_count: trackmatch = ORDER_AFTER if preferred_countries: countries = set(version['countries']) if not countries or not countries.intersection( preferred_countries): countrymatch = ORDER_AFTER if preferred_formats: formats = set(version['formats']) if not formats or not formats.intersection( preferred_formats): formatmatch = ORDER_AFTER group = (trackmatch, countrymatch, formatmatch) # order by group, name, and id on push heappush(alternatives, (group, version['name'], version['id'])) prev_group = None while alternatives: group, action_text, release_id = heappop(alternatives) if group != prev_group: if prev_group is not None: releases_menu.addSeparator() prev_group = group action = releases_menu.addAction(action_text) action.setCheckable(True) if obj.id == release_id: action.setChecked(True) action.triggered.connect( partial(obj.switch_release_version, release_id)) versions_count = len(versions) if versions_count > 1: releases_menu.setTitle( _("&Other versions (%d)") % versions_count) if obj.release_group.loaded: _add_other_versions() else: obj.release_group.load_versions(_add_other_versions) releases_menu.setEnabled(True) else: releases_menu.setEnabled(False) if config.setting["enable_ratings"] and \ len(self.window.selected_objects) == 1 and isinstance(obj, Track): menu.addSeparator() action = QtWidgets.QWidgetAction(menu) action.setDefaultWidget(RatingWidget(menu, obj)) menu.addAction(action) menu.addSeparator() # Using type here is intentional. isinstance will return true for the # NatAlbum instance, which can't be part of a collection. # pylint: disable=C0123 selected_albums = [ a for a in self.window.selected_objects if type(a) == Album ] if selected_albums: if not bottom_separator: menu.addSeparator() menu.addMenu( CollectionMenu(selected_albums, _("Collections"), menu)) scripts = config.setting["list_of_scripts"] if plugin_actions or scripts: menu.addSeparator() if plugin_actions: plugin_menu = QtWidgets.QMenu(_("P&lugins"), menu) plugin_menu.setIcon(self.panel.icon_plugins) menu.addMenu(plugin_menu) plugin_menus = {} for action in plugin_actions: action_menu = plugin_menu for index in range(1, len(action.MENU) + 1): key = tuple(action.MENU[:index]) if key in plugin_menus: action_menu = plugin_menus[key] else: action_menu = plugin_menus[key] = action_menu.addMenu( key[-1]) action_menu.addAction(action) if scripts: scripts_menu = ScriptsMenu(scripts, _("&Run scripts"), menu) scripts_menu.setIcon(self.panel.icon_plugins) menu.addMenu(scripts_menu) if isinstance(obj, Cluster) or isinstance( obj, ClusterList) or isinstance(obj, Album): menu.addSeparator() menu.addAction(self.expand_all_action) menu.addAction(self.collapse_all_action) menu.addAction(self.select_all_action) menu.exec_(event.globalPos()) event.accept()
def contextMenuEvent(self, event): item = self.itemAt(event.pos()) if not item: return obj = item.obj plugin_actions = None can_view_info = self.window.view_info_action.isEnabled() menu = QtWidgets.QMenu(self) if isinstance(obj, Track): if can_view_info: menu.addAction(self.window.view_info_action) plugin_actions = list(_track_actions) if obj.num_linked_files == 1: menu.addAction(self.window.play_file_action) menu.addAction(self.window.open_folder_action) menu.addAction(self.window.track_search_action) plugin_actions.extend(_file_actions) menu.addAction(self.window.browser_lookup_action) menu.addSeparator() 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) menu.addAction(self.window.analyze_action) if isinstance(obj, UnclusteredFiles): menu.addAction(self.window.cluster_action) else: menu.addAction(self.window.album_search_action) plugin_actions = list(_cluster_actions) elif isinstance(obj, ClusterList): menu.addAction(self.window.autotag_action) menu.addAction(self.window.analyze_action) plugin_actions = list(_clusterlist_actions) elif isinstance(obj, File): if can_view_info: menu.addAction(self.window.view_info_action) menu.addAction(self.window.play_file_action) menu.addAction(self.window.open_folder_action) menu.addAction(self.window.browser_lookup_action) menu.addSeparator() menu.addAction(self.window.autotag_action) menu.addAction(self.window.analyze_action) menu.addAction(self.window.track_search_action) plugin_actions = list(_file_actions) elif isinstance(obj, Album): if can_view_info: menu.addAction(self.window.view_info_action) menu.addAction(self.window.browser_lookup_action) menu.addSeparator() menu.addAction(self.window.refresh_action) plugin_actions = list(_album_actions) menu.addAction(self.window.save_action) menu.addAction(self.window.remove_action) bottom_separator = False if isinstance(obj, Album) and not isinstance(obj, NatAlbum) and obj.loaded: releases_menu = QtWidgets.QMenu(_("&Other versions"), menu) menu.addSeparator() menu.addMenu(releases_menu) loading = releases_menu.addAction(_('Loading...')) loading.setDisabled(True) bottom_separator = True if len(self.selectedIndexes()) == len(MainPanel.columns): def _add_other_versions(): releases_menu.removeAction(loading) heading = releases_menu.addAction(obj.release_group.version_headings) heading.setDisabled(True) font = heading.font() font.setBold(True) heading.setFont(font) versions = obj.release_group.versions albumtracks = obj.get_num_total_files() if obj.get_num_total_files() else len(obj.tracks) preferred_countries = set(config.setting["preferred_release_countries"]) preferred_formats = set(config.setting["preferred_release_formats"]) matches = ("trackmatch", "countrymatch", "formatmatch") priorities = {} for version in versions: priority = { "trackmatch": "0" if version['totaltracks'] == albumtracks else "?", "countrymatch": "0" if len(preferred_countries) == 0 or preferred_countries & set(version['countries'] or '') else "?", "formatmatch": "0" if len(preferred_formats) == 0 or preferred_formats & set(version['formats'] or '') else "?", } priorities[version['id']] = "".join(priority[k] for k in matches) versions.sort(key=lambda version: priorities[version['id']] + version['name']) priority = normal = False for version in versions: if not normal and "?" in priorities[version['id']]: if priority: releases_menu.addSeparator() normal = True else: priority = True action = releases_menu.addAction(version["name"]) action.setCheckable(True) if obj.id == version["id"]: action.setChecked(True) action.triggered.connect(partial(obj.switch_release_version, version["id"])) if obj.release_group.loaded: _add_other_versions() else: obj.release_group.load_versions(_add_other_versions) releases_menu.setEnabled(True) else: releases_menu.setEnabled(False) if config.setting["enable_ratings"] and \ len(self.window.selected_objects) == 1 and isinstance(obj, Track): menu.addSeparator() action = QtWidgets.QWidgetAction(menu) action.setDefaultWidget(RatingWidget(menu, obj)) menu.addAction(action) menu.addSeparator() # Using type here is intentional. isinstance will return true for the # NatAlbum instance, which can't be part of a collection. selected_albums = [a for a in self.window.selected_objects if type(a) == Album] if selected_albums: if not bottom_separator: menu.addSeparator() menu.addMenu(CollectionMenu(selected_albums, _("Collections"), menu)) scripts = config.setting["list_of_scripts"] if plugin_actions or scripts: menu.addSeparator() if plugin_actions: plugin_menu = QtWidgets.QMenu(_("P&lugins"), menu) plugin_menu.setIcon(self.panel.icon_plugins) menu.addMenu(plugin_menu) plugin_menus = {} for action in plugin_actions: action_menu = plugin_menu for index in range(1, len(action.MENU) + 1): key = tuple(action.MENU[:index]) if key in plugin_menus: action_menu = plugin_menus[key] else: action_menu = plugin_menus[key] = action_menu.addMenu(key[-1]) action_menu.addAction(action) if scripts: scripts_menu = ScriptsMenu(scripts, _("&Run scripts"), menu) scripts_menu.setIcon(self.panel.icon_plugins) menu.addMenu(scripts_menu) if isinstance(obj, Cluster) or isinstance(obj, ClusterList) or isinstance(obj, Album): menu.addSeparator() menu.addAction(self.expand_all_action) menu.addAction(self.collapse_all_action) menu.addAction(self.select_all_action) menu.exec_(event.globalPos()) event.accept()
def setupUi(self, TagEditorDialog): TagEditorDialog.setObjectName("TagEditorDialog") TagEditorDialog.resize(535, 436) self.vboxlayout = QtGui.QVBoxLayout(TagEditorDialog) self.vboxlayout.setSpacing(6) self.vboxlayout.setMargin(9) self.vboxlayout.setObjectName("vboxlayout") self.tabWidget = QtGui.QTabWidget(TagEditorDialog) self.tabWidget.setObjectName("tabWidget") self.tab_4 = QtGui.QWidget() self.tab_4.setObjectName("tab_4") self.vboxlayout1 = QtGui.QVBoxLayout(self.tab_4) self.vboxlayout1.setSpacing(6) self.vboxlayout1.setMargin(9) self.vboxlayout1.setObjectName("vboxlayout1") self.tags = QtGui.QTreeWidget(self.tab_4) self.tags.setRootIsDecorated(False) self.tags.setObjectName("tags") self.vboxlayout1.addWidget(self.tags) self.hboxlayout = QtGui.QHBoxLayout() self.hboxlayout.setObjectName("hboxlayout") self.ratingLabel = QtGui.QLabel(self.tab_4) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum,QtGui.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.ratingLabel.sizePolicy().hasHeightForWidth()) self.ratingLabel.setSizePolicy(sizePolicy) self.ratingLabel.setMinimumSize(QtCore.QSize(0,0)) self.ratingLabel.setObjectName("ratingLabel") self.hboxlayout.addWidget(self.ratingLabel) self.rating = RatingWidget(self.tab_4) self.rating.setEnabled(True) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.rating.sizePolicy().hasHeightForWidth()) self.rating.setSizePolicy(sizePolicy) self.rating.setMinimumSize(QtCore.QSize(0,0)) self.rating.setObjectName("rating") self.hboxlayout.addWidget(self.rating) self.vboxlayout1.addLayout(self.hboxlayout) self.hboxlayout1 = QtGui.QHBoxLayout() self.hboxlayout1.setSpacing(6) self.hboxlayout1.setMargin(0) self.hboxlayout1.setObjectName("hboxlayout1") self.tags_add = QtGui.QPushButton(self.tab_4) self.tags_add.setObjectName("tags_add") self.hboxlayout1.addWidget(self.tags_add) self.tags_edit = QtGui.QPushButton(self.tab_4) self.tags_edit.setObjectName("tags_edit") self.hboxlayout1.addWidget(self.tags_edit) self.tags_delete = QtGui.QPushButton(self.tab_4) self.tags_delete.setObjectName("tags_delete") self.hboxlayout1.addWidget(self.tags_delete) spacerItem = QtGui.QSpacerItem(151,20,QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.Minimum) self.hboxlayout1.addItem(spacerItem) self.vboxlayout1.addLayout(self.hboxlayout1) self.tabWidget.addTab(self.tab_4,"") self.tab_2 = QtGui.QWidget() self.tab_2.setObjectName("tab_2") self.vboxlayout2 = QtGui.QVBoxLayout(self.tab_2) self.vboxlayout2.setSpacing(6) self.vboxlayout2.setMargin(9) self.vboxlayout2.setObjectName("vboxlayout2") self.artwork_list = QtGui.QListWidget(self.tab_2) self.artwork_list.setSelectionMode(QtGui.QAbstractItemView.SingleSelection) self.artwork_list.setIconSize(QtCore.QSize(170, 170)) self.artwork_list.setMovement(QtGui.QListView.Static) self.artwork_list.setFlow(QtGui.QListView.LeftToRight) self.artwork_list.setProperty("isWrapping", QtCore.QVariant(False)) self.artwork_list.setResizeMode(QtGui.QListView.Fixed) self.artwork_list.setSpacing(10) self.artwork_list.setViewMode(QtGui.QListView.IconMode) self.artwork_list.setObjectName("artwork_list") self.vboxlayout2.addWidget(self.artwork_list) self.tabWidget.addTab(self.tab_2, "") self.tab_5 = QtGui.QWidget() self.tab_5.setObjectName("tab_5") self.vboxlayout3 = QtGui.QVBoxLayout(self.tab_5) self.vboxlayout3.setSpacing(6) self.vboxlayout3.setMargin(9) self.vboxlayout3.setObjectName("vboxlayout3") self.info = QtGui.QLabel(self.tab_5) self.info.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop) self.info.setWordWrap(True) self.info.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse|QtCore.Qt.TextSelectableByKeyboard|QtCore.Qt.TextSelectableByMouse) self.info.setObjectName("info") self.vboxlayout3.addWidget(self.info) self.tabWidget.addTab(self.tab_5, "") self.vboxlayout.addWidget(self.tabWidget) self.buttonbox = QtGui.QDialogButtonBox(TagEditorDialog) self.buttonbox.setOrientation(QtCore.Qt.Horizontal) self.buttonbox.setObjectName("buttonbox") self.vboxlayout.addWidget(self.buttonbox) self.retranslateUi(TagEditorDialog) self.tabWidget.setCurrentIndex(0) QtCore.QMetaObject.connectSlotsByName(TagEditorDialog) TagEditorDialog.setTabOrder(self.tags, self.tags_add) TagEditorDialog.setTabOrder(self.tags_add, self.tags_delete) TagEditorDialog.setTabOrder(self.tags_delete, self.tabWidget) TagEditorDialog.setTabOrder(self.tabWidget, self.artwork_list)
def contextMenuEvent(self, event): item = self.itemAt(event.pos()) if not item: return obj = item.obj plugin_actions = None can_view_info = self.window.view_info_action.isEnabled() menu = QtGui.QMenu(self) if isinstance(obj, Track): if can_view_info: menu.addAction(self.window.view_info_action) plugin_actions = list(_track_actions) if obj.num_linked_files == 1: menu.addAction(self.window.open_file_action) menu.addAction(self.window.open_folder_action) plugin_actions.extend(_file_actions) menu.addAction(self.window.browser_lookup_action) menu.addSeparator() if isinstance(obj, NonAlbumTrack): menu.addAction(self.window.refresh_action) elif isinstance(obj, Cluster): menu.addAction(self.window.browser_lookup_action) menu.addSeparator() menu.addAction(self.window.autotag_action) menu.addAction(self.window.analyze_action) if isinstance(obj, UnmatchedFiles): menu.addAction(self.window.cluster_action) plugin_actions = list(_cluster_actions) elif isinstance(obj, ClusterList): menu.addAction(self.window.autotag_action) menu.addAction(self.window.analyze_action) plugin_actions = list(_clusterlist_actions) elif isinstance(obj, File): if can_view_info: menu.addAction(self.window.view_info_action) menu.addAction(self.window.open_file_action) menu.addAction(self.window.open_folder_action) menu.addAction(self.window.browser_lookup_action) menu.addSeparator() menu.addAction(self.window.autotag_action) menu.addAction(self.window.analyze_action) plugin_actions = list(_file_actions) elif isinstance(obj, Album): if can_view_info: menu.addAction(self.window.view_info_action) menu.addAction(self.window.browser_lookup_action) menu.addSeparator() menu.addAction(self.window.refresh_action) plugin_actions = list(_album_actions) menu.addAction(self.window.save_action) menu.addAction(self.window.remove_action) bottom_separator = False if isinstance(obj, Album) and not isinstance(obj, NatAlbum) and obj.loaded: releases_menu = QtGui.QMenu(_("&Other versions"), menu) menu.addSeparator() menu.addMenu(releases_menu) loading = releases_menu.addAction(_('Loading...')) loading.setEnabled(False) bottom_separator = True if len(self.selectedIndexes()) == len(MainPanel.columns): def _add_other_versions(): releases_menu.removeAction(loading) for version in obj.release_group.versions: action = releases_menu.addAction(version["name"]) action.setCheckable(True) if obj.id == version["id"]: action.setChecked(True) action.triggered.connect(partial(obj.switch_release_version, version["id"])) _add_other_versions() if obj.release_group.loaded else \ obj.release_group.load_versions(_add_other_versions) releases_menu.setEnabled(True) else: releases_menu.setEnabled(False) if config.setting["enable_ratings"] and \ len(self.window.selected_objects) == 1 and isinstance(obj, Track): menu.addSeparator() action = QtGui.QWidgetAction(menu) action.setDefaultWidget(RatingWidget(menu, obj)) menu.addAction(action) menu.addSeparator() # Using type here is intentional. isinstance will return true for the # NatAlbum instance, which can't be part of a collection. selected_albums = [a for a in self.window.selected_objects if type(a) == Album] if selected_albums: if not bottom_separator: menu.addSeparator() menu.addMenu(CollectionMenu(selected_albums, _("Collections"), menu)) if plugin_actions: plugin_menu = QtGui.QMenu(_("&Plugins"), menu) plugin_menu.setIcon(self.panel.icon_plugins) menu.addSeparator() menu.addMenu(plugin_menu) plugin_menus = {} for action in plugin_actions: action_menu = plugin_menu for index in xrange(1, len(action.MENU)): key = tuple(action.MENU[:index]) try: action_menu = plugin_menus[key] except KeyError: action_menu = plugin_menus[key] = action_menu.addMenu(key[-1]) action_menu.addAction(action) if isinstance(obj, Cluster) or isinstance(obj, ClusterList) or isinstance(obj, Album): menu.addSeparator() menu.addAction(self.expand_all_action) menu.addAction(self.collapse_all_action) menu.exec_(event.globalPos()) event.accept()
def setupUi(self, TagEditorDialog): TagEditorDialog.setObjectName(_fromUtf8("TagEditorDialog")) TagEditorDialog.resize(535, 436) self.vboxlayout = QtGui.QVBoxLayout(TagEditorDialog) self.vboxlayout.setSpacing(6) self.vboxlayout.setMargin(9) self.vboxlayout.setObjectName(_fromUtf8("vboxlayout")) self.tabWidget = QtGui.QTabWidget(TagEditorDialog) self.tabWidget.setObjectName(_fromUtf8("tabWidget")) self.tab_4 = QtGui.QWidget() self.tab_4.setObjectName(_fromUtf8("tab_4")) self.vboxlayout1 = QtGui.QVBoxLayout(self.tab_4) self.vboxlayout1.setSpacing(6) self.vboxlayout1.setMargin(9) self.vboxlayout1.setObjectName(_fromUtf8("vboxlayout1")) self.tags = QtGui.QTreeWidget(self.tab_4) self.tags.setRootIsDecorated(False) self.tags.setObjectName(_fromUtf8("tags")) self.vboxlayout1.addWidget(self.tags) self.horizontalLayout = QtGui.QHBoxLayout() self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout")) self.ratingLabel = QtGui.QLabel(self.tab_4) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.ratingLabel.sizePolicy().hasHeightForWidth()) self.ratingLabel.setSizePolicy(sizePolicy) self.ratingLabel.setMinimumSize(QtCore.QSize(0, 0)) self.ratingLabel.setObjectName(_fromUtf8("ratingLabel")) self.horizontalLayout.addWidget(self.ratingLabel) self.rating = RatingWidget(self.tab_4) self.rating.setEnabled(True) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.rating.sizePolicy().hasHeightForWidth()) self.rating.setSizePolicy(sizePolicy) self.rating.setMinimumSize(QtCore.QSize(0, 0)) self.rating.setObjectName(_fromUtf8("rating")) self.horizontalLayout.addWidget(self.rating) self.vboxlayout1.addLayout(self.horizontalLayout) self.hboxlayout = QtGui.QHBoxLayout() self.hboxlayout.setSpacing(6) self.hboxlayout.setMargin(0) self.hboxlayout.setObjectName(_fromUtf8("hboxlayout")) self.tags_add = QtGui.QPushButton(self.tab_4) self.tags_add.setObjectName(_fromUtf8("tags_add")) self.hboxlayout.addWidget(self.tags_add) self.tags_edit = QtGui.QPushButton(self.tab_4) self.tags_edit.setObjectName(_fromUtf8("tags_edit")) self.hboxlayout.addWidget(self.tags_edit) self.tags_delete = QtGui.QPushButton(self.tab_4) self.tags_delete.setObjectName(_fromUtf8("tags_delete")) self.hboxlayout.addWidget(self.tags_delete) spacerItem = QtGui.QSpacerItem(151, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.hboxlayout.addItem(spacerItem) self.vboxlayout1.addLayout(self.hboxlayout) self.tabWidget.addTab(self.tab_4, _fromUtf8("")) self.tab_2 = QtGui.QWidget() self.tab_2.setObjectName(_fromUtf8("tab_2")) self.vboxlayout2 = QtGui.QVBoxLayout(self.tab_2) self.vboxlayout2.setSpacing(6) self.vboxlayout2.setMargin(9) self.vboxlayout2.setObjectName(_fromUtf8("vboxlayout2")) self.artwork_list = QtGui.QListWidget(self.tab_2) self.artwork_list.setSelectionMode( QtGui.QAbstractItemView.SingleSelection) self.artwork_list.setIconSize(QtCore.QSize(170, 170)) self.artwork_list.setMovement(QtGui.QListView.Static) self.artwork_list.setFlow(QtGui.QListView.LeftToRight) self.artwork_list.setProperty(_fromUtf8("isWrapping"), False) self.artwork_list.setResizeMode(QtGui.QListView.Fixed) self.artwork_list.setSpacing(10) self.artwork_list.setViewMode(QtGui.QListView.IconMode) self.artwork_list.setObjectName(_fromUtf8("artwork_list")) self.vboxlayout2.addWidget(self.artwork_list) self.tabWidget.addTab(self.tab_2, _fromUtf8("")) self.tab_5 = QtGui.QWidget() self.tab_5.setObjectName(_fromUtf8("tab_5")) self.vboxlayout3 = QtGui.QVBoxLayout(self.tab_5) self.vboxlayout3.setSpacing(6) self.vboxlayout3.setMargin(9) self.vboxlayout3.setObjectName(_fromUtf8("vboxlayout3")) self.info = QtGui.QLabel(self.tab_5) self.info.setText(_fromUtf8("")) self.info.setAlignment(QtCore.Qt.AlignLeading | QtCore.Qt.AlignLeft | QtCore.Qt.AlignTop) self.info.setWordWrap(True) self.info.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse | QtCore.Qt.TextSelectableByKeyboard | QtCore.Qt.TextSelectableByMouse) self.info.setObjectName(_fromUtf8("info")) self.vboxlayout3.addWidget(self.info) self.tabWidget.addTab(self.tab_5, _fromUtf8("")) self.vboxlayout.addWidget(self.tabWidget) self.buttonbox = QtGui.QDialogButtonBox(TagEditorDialog) self.buttonbox.setOrientation(QtCore.Qt.Horizontal) self.buttonbox.setObjectName(_fromUtf8("buttonbox")) self.vboxlayout.addWidget(self.buttonbox) self.retranslateUi(TagEditorDialog) self.tabWidget.setCurrentIndex(0) QtCore.QMetaObject.connectSlotsByName(TagEditorDialog) TagEditorDialog.setTabOrder(self.tags, self.tags_add) TagEditorDialog.setTabOrder(self.tags_add, self.tags_delete) TagEditorDialog.setTabOrder(self.tags_delete, self.tabWidget) TagEditorDialog.setTabOrder(self.tabWidget, self.artwork_list)
def contextMenuEvent(self, event): item = self.itemAt(event.pos()) if not item: return obj = item.obj plugin_actions = None can_view_info = self.window.view_info_action.isEnabled() menu = QtGui.QMenu(self) if isinstance(obj, Track): if can_view_info: menu.addAction(self.window.view_info_action) plugin_actions = list(_track_actions) if obj.num_linked_files == 1: menu.addAction(self.window.open_file_action) menu.addAction(self.window.open_folder_action) plugin_actions.extend(_file_actions) menu.addAction(self.window.browser_lookup_action) menu.addSeparator() if isinstance(obj, NonAlbumTrack): menu.addAction(self.window.refresh_action) elif isinstance(obj, Cluster): menu.addAction(self.window.browser_lookup_action) menu.addSeparator() menu.addAction(self.window.autotag_action) menu.addAction(self.window.analyze_action) if isinstance(obj, UnmatchedFiles): menu.addAction(self.window.cluster_action) plugin_actions = list(_cluster_actions) elif isinstance(obj, ClusterList): menu.addAction(self.window.autotag_action) menu.addAction(self.window.analyze_action) plugin_actions = list(_clusterlist_actions) elif isinstance(obj, File): if can_view_info: menu.addAction(self.window.view_info_action) menu.addAction(self.window.open_file_action) menu.addAction(self.window.open_folder_action) menu.addAction(self.window.browser_lookup_action) menu.addSeparator() menu.addAction(self.window.autotag_action) menu.addAction(self.window.analyze_action) plugin_actions = list(_file_actions) elif isinstance(obj, Album): menu.addAction(self.window.browser_lookup_action) menu.addSeparator() menu.addAction(self.window.refresh_action) plugin_actions = list(_album_actions) menu.addAction(self.window.save_action) menu.addAction(self.window.remove_action) if isinstance(obj, Album) and not isinstance(obj, NatAlbum) and obj.loaded: releases_menu = QtGui.QMenu(_("&Other versions"), menu) menu.addSeparator() menu.addMenu(releases_menu) loading = releases_menu.addAction(_('Loading...')) loading.setEnabled(False) def _add_other_versions(): releases_menu.removeAction(loading) actions = [] for i, version in enumerate(obj.other_versions): keys = ("date", "country", "labels", "catnums", "tracks", "format") name = " / ".join([version[k] for k in keys if version[k]]).replace("&", "&&") if name == version["tracks"]: name = "%s / %s" % (_('[no release info]'), name) action = releases_menu.addAction(name) action.setCheckable(True) if obj.id == version["mbid"]: action.setChecked(True) action.triggered.connect( partial(obj.switch_release_version, version["mbid"])) if obj.rgloaded: _add_other_versions() elif obj.rgid: obj.release_group_loaded.connect(_add_other_versions) kwargs = {"release-group": obj.rgid, "limit": 100} self.tagger.xmlws.browse_releases( obj._release_group_request_finished, **kwargs) if self.config.setting["enable_ratings"] and \ len(self.window.selected_objects) == 1 and isinstance(obj, Track): menu.addSeparator() action = QtGui.QWidgetAction(menu) action.setDefaultWidget(RatingWidget(menu, obj)) menu.addAction(action) menu.addSeparator() if plugin_actions: plugin_menu = QtGui.QMenu(_("&Plugins"), menu) plugin_menu.setIcon(self.panel.icon_plugins) menu.addSeparator() menu.addMenu(plugin_menu) plugin_menus = {} for action in plugin_actions: action_menu = plugin_menu for index in xrange(1, len(action.MENU)): key = tuple(action.MENU[:index]) try: action_menu = plugin_menus[key] except KeyError: action_menu = plugin_menus[key] = action_menu.addMenu( key[-1]) action_menu.addAction(action) if isinstance(obj, Cluster) or isinstance( obj, ClusterList) or isinstance(obj, Album): menu.addAction(self.expand_all_action) menu.addAction(self.collapse_all_action) menu.exec_(event.globalPos()) event.accept()