mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Fix #934509 ([Enhancement] Tag Browser Panel - Right-Click to Delete Tag)
This commit is contained in:
commit
a5627ae5cd
@ -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
|
||||||
|
@ -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,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user