Fix #934509 ([Enhancement] Tag Browser Panel - Right-Click to Delete Tag)

This commit is contained in:
Kovid Goyal 2012-02-18 17:59:59 +05:30
commit a5627ae5cd
2 changed files with 47 additions and 4 deletions

View File

@ -29,7 +29,7 @@ class TagBrowserMixin(object): # {{{
self.library_view.model().count_changed_signal.connect(self.tags_view.recount) self.library_view.model().count_changed_signal.connect(self.tags_view.recount)
self.tags_view.set_database(db, self.tag_match, self.sort_by) self.tags_view.set_database(db, self.tag_match, self.sort_by)
self.tags_view.tags_marked.connect(self.search.set_search_string) self.tags_view.tags_marked.connect(self.search.set_search_string)
self.tags_view.tag_list_edit.connect(self.do_tags_list_edit) self.tags_view.tags_list_edit.connect(self.do_tags_list_edit)
self.tags_view.edit_user_category.connect(self.do_edit_user_categories) self.tags_view.edit_user_category.connect(self.do_edit_user_categories)
self.tags_view.delete_user_category.connect(self.do_delete_user_category) self.tags_view.delete_user_category.connect(self.do_delete_user_category)
self.tags_view.del_item_from_user_cat.connect(self.do_del_item_from_user_cat) self.tags_view.del_item_from_user_cat.connect(self.do_del_item_from_user_cat)
@ -43,6 +43,7 @@ class TagBrowserMixin(object): # {{{
self.tags_view.drag_drop_finished.connect(self.drag_drop_finished) self.tags_view.drag_drop_finished.connect(self.drag_drop_finished)
self.tags_view.restriction_error.connect(self.do_restriction_error, self.tags_view.restriction_error.connect(self.do_restriction_error,
type=Qt.QueuedConnection) type=Qt.QueuedConnection)
self.tags_view.tag_item_delete.connect(self.do_tag_item_delete)
for text, func, args, cat_name in ( for text, func, args, cat_name in (
(_('Manage Authors'), (_('Manage Authors'),
@ -244,6 +245,38 @@ class TagBrowserMixin(object): # {{{
self.do_tag_item_renamed() self.do_tag_item_renamed()
self.tags_view.recount() self.tags_view.recount()
def do_tag_item_delete(self, category, item_id, orig_name):
'''
Delete an item from some category.
'''
if not question_dialog(self.tags_view,
title=_('Delete item'),
msg='<p>'+
_('%s will be deleted from all books. Are you sure?')
%orig_name,
skip_dialog_name='tag_item_delete',
skip_dialog_msg=_('Show this confirmation again')):
return
db = self.current_db
if category == 'tags':
delete_func = db.delete_tag_using_id
elif category == 'series':
delete_func = db.delete_series_using_id
elif category == 'publisher':
delete_func = db.delete_publisher_using_id
else: # must be custom
cc_label = db.field_metadata[category]['label']
delete_func = partial(db.delete_custom_item_using_id, label=cc_label)
m = self.tags_view.model()
if delete_func:
delete_func(item_id)
m.delete_item_from_all_user_categories(orig_name, category)
# Clean up the library view
self.do_tag_item_renamed()
self.tags_view.recount()
def do_tag_item_renamed(self): def do_tag_item_renamed(self):
# Clean up library view and search # Clean up library view and search
# get information to redo the selection # get information to redo the selection

View File

@ -63,7 +63,7 @@ class TagsView(QTreeView): # {{{
del_item_from_user_cat = pyqtSignal(object, object, object) del_item_from_user_cat = pyqtSignal(object, object, object)
add_item_to_user_cat = pyqtSignal(object, object, object) add_item_to_user_cat = pyqtSignal(object, object, object)
add_subcategory = pyqtSignal(object) add_subcategory = pyqtSignal(object)
tag_list_edit = pyqtSignal(object, object) tags_list_edit = pyqtSignal(object, object)
saved_search_edit = pyqtSignal(object) saved_search_edit = pyqtSignal(object)
rebuild_saved_searches = pyqtSignal() rebuild_saved_searches = pyqtSignal()
author_sort_edit = pyqtSignal(object, object, object, object) author_sort_edit = pyqtSignal(object, object, object, object)
@ -71,6 +71,7 @@ class TagsView(QTreeView): # {{{
search_item_renamed = pyqtSignal() search_item_renamed = pyqtSignal()
drag_drop_finished = pyqtSignal(object) drag_drop_finished = pyqtSignal(object)
restriction_error = pyqtSignal() restriction_error = pyqtSignal()
tag_item_delete = pyqtSignal(object, object, object)
def __init__(self, parent=None): def __init__(self, parent=None):
QTreeView.__init__(self, parent=None) QTreeView.__init__(self, parent=None)
@ -234,8 +235,11 @@ class TagsView(QTreeView): # {{{
if action == 'edit_item': if action == 'edit_item':
self.edit(index) self.edit(index)
return return
if action == 'delete_item':
self.tag_item_delete.emit(key, index.id, index.original_name)
return
if action == 'open_editor': if action == 'open_editor':
self.tag_list_edit.emit(category, key) self.tags_list_edit.emit(category, key)
return return
if action == 'manage_categories': if action == 'manage_categories':
self.edit_user_category.emit(category) self.edit_user_category.emit(category)
@ -246,7 +250,7 @@ class TagsView(QTreeView): # {{{
if action == 'add_to_category': if action == 'add_to_category':
tag = index.tag tag = index.tag
if len(index.children) > 0: if len(index.children) > 0:
for c in index.children: for c in index.all_children():
self.add_item_to_user_cat.emit(category, c.tag.original_name, self.add_item_to_user_cat.emit(category, c.tag.original_name,
c.tag.category) c.tag.category)
self.add_item_to_user_cat.emit(category, tag.original_name, self.add_item_to_user_cat.emit(category, tag.original_name,
@ -345,6 +349,12 @@ class TagsView(QTreeView): # {{{
_('Rename %s')%display_name(tag), _('Rename %s')%display_name(tag),
partial(self.context_menu_handler, action='edit_item', partial(self.context_menu_handler, action='edit_item',
index=index)) index=index))
if key in ('tags', 'series', 'publisher') or \
self._model.db.field_metadata.is_custom_field(key):
self.context_menu.addAction(self.delete_icon,
_('Delete %s')%display_name(tag),
partial(self.context_menu_handler, action='delete_item',
key=key, index=tag))
if key == 'authors': if key == 'authors':
self.context_menu.addAction(_('Edit sort for %s')%display_name(tag), self.context_menu.addAction(_('Edit sort for %s')%display_name(tag),
partial(self.context_menu_handler, partial(self.context_menu_handler,