'+_('The selected search will be ' - 'permanently deleted. Are you sure?') - +'
', 'saved_search_delete', self): - return - idx = self.currentIndex - if idx < 0: - return - ss = saved_searches().lookup(unicode(self.currentText())) - if ss is None: - return - saved_searches().delete(unicode(self.currentText())) - self.clear() - self.search_box.clear() - self.changed.emit() - # SIGNALed from the main UI def save_search_button_clicked(self): name = unicode(self.currentText()) @@ -438,8 +420,6 @@ class SavedSearchBoxMixin(object): # {{{ self.clear_button.clicked.connect(self.saved_search.clear) self.save_search_button.clicked.connect( self.saved_search.save_search_button_clicked) - self.delete_search_button.clicked.connect( - self.saved_search.delete_search_button_clicked) self.copy_search_button.clicked.connect( self.saved_search.copy_search_button_clicked) self.saved_searches_changed() @@ -448,7 +428,7 @@ class SavedSearchBoxMixin(object): # {{{ self.saved_search.setToolTip( _('Choose saved search or enter name for new saved search')) self.saved_search.setStatusTip(self.saved_search.toolTip()) - for x in ('copy', 'save', 'delete'): + for x in ('copy', 'save'): b = getattr(self, x+'_search_button') b.setStatusTip(b.toolTip()) diff --git a/src/calibre/gui2/tag_view.py b/src/calibre/gui2/tag_view.py index 6ad6f053cb..f3d5cf3c85 100644 --- a/src/calibre/gui2/tag_view.py +++ b/src/calibre/gui2/tag_view.py @@ -12,11 +12,11 @@ import traceback, copy, cPickle from itertools import izip, repeat from functools import partial -from PyQt4.Qt import Qt, QTreeView, QApplication, pyqtSignal, QFont, QSize, \ - QIcon, QPoint, QVBoxLayout, QHBoxLayout, QComboBox, QTimer,\ - QAbstractItemModel, QVariant, QModelIndex, QMenu, QFrame,\ - QPushButton, QWidget, QItemDelegate, QString, QLabel, \ - QShortcut, QKeySequence, SIGNAL, QMimeData, QToolButton +from PyQt4.Qt import (Qt, QTreeView, QApplication, pyqtSignal, QFont, QSize, + QIcon, QPoint, QVBoxLayout, QHBoxLayout, QComboBox, QTimer, + QAbstractItemModel, QVariant, QModelIndex, QMenu, QFrame, + QWidget, QItemDelegate, QString, QLabel, QAction, + QShortcut, QKeySequence, SIGNAL, QMimeData, QToolButton) from calibre.ebooks.metadata import title_sort from calibre.gui2 import config, NONE, gprefs @@ -1809,6 +1809,9 @@ class TagsModel(QAbstractItemModel): # {{{ # }}} +category_managers = ( + ) + class TagBrowserMixin(object): # {{{ def __init__(self, db): @@ -1829,8 +1832,23 @@ class TagBrowserMixin(object): # {{{ self.tags_view.drag_drop_finished.connect(self.drag_drop_finished) self.tags_view.restriction_error.connect(self.do_restriction_error, type=Qt.QueuedConnection) - self.edit_categories.clicked.connect(lambda x: - self.do_edit_user_categories()) + + for text, func, args in ( + (_('Manage Authors'), self.do_author_sort_edit, (self, + None)), + (_('Manage Series'), self.do_tags_list_edit, (None, + 'series')), + (_('Manage Publishers'), self.do_tags_list_edit, (None, + 'publisher')), + (_('Manage Tags'), self.do_tags_list_edit, (None, 'tags')), + (_('Manage User Categories'), + self.do_edit_user_categories, (None,)), + (_('Manage Saved Searches'), self.do_saved_search_edit, + (None,)) + ): + ac = QAction(text, self) + ac.triggered.connect(partial(func, *args)) + self.manage_items_button.menu().addAction(ac) def do_restriction_error(self): error_dialog(self.tags_view, _('Invalid search restriction'), @@ -2149,11 +2167,17 @@ class TagBrowserWidget(QWidget): # {{{ 'match any or all of them')) parent.tag_match.setStatusTip(parent.tag_match.toolTip()) - parent.edit_categories = QPushButton(_('Manage &user categories'), parent) - self._layout.addWidget(parent.edit_categories) - parent.edit_categories.setToolTip( - _('Add your own categories to the Tag Browser')) - parent.edit_categories.setStatusTip(parent.edit_categories.toolTip()) + + l = parent.manage_items_button = QToolButton(self) + l.setIcon(QIcon(I('tags.png'))) + l.setText(_('Manage authors, tags, etc')) + l.setToolButtonStyle(Qt.ToolButtonTextBesideIcon) + l.setPopupMode(l.InstantPopup) + l.setToolTip(_('All of these category_managers are available by right-clicking ' + 'on items in the tag browser above')) + l.m = QMenu() + l.setMenu(l.m) + self._layout.addWidget(l) # self.leak_test_timer = QTimer(self) # self.leak_test_timer.timeout.connect(self.test_for_leak)