Fixes #1909380 [Tag Browser: Drag & drop doesn't give VL prompt](https://bugs.launchpad.net/calibre/+bug/1909380)
This commit is contained in:
Kovid Goyal 2020-12-27 18:03:40 +05:30
commit 51a21c3887
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
2 changed files with 16 additions and 10 deletions

View File

@ -18,7 +18,7 @@ from PyQt5.Qt import (
from calibre.constants import config_dir from calibre.constants import config_dir
from calibre.db.categories import Tag from calibre.db.categories import Tag
from calibre.ebooks.metadata import rating_to_stars from calibre.ebooks.metadata import rating_to_stars
from calibre.gui2 import config, error_dialog, file_icon_provider, gprefs from calibre.gui2 import config, error_dialog, file_icon_provider, gprefs, question_dialog
from calibre.gui2.dialogs.confirm_delete import confirm from calibre.gui2.dialogs.confirm_delete import confirm
from calibre.library.field_metadata import category_icon_map from calibre.library.field_metadata import category_icon_map
from calibre.utils.config import prefs, tweaks from calibre.utils.config import prefs, tweaks
@ -298,6 +298,15 @@ class TagTreeItem(object): # {{{
FL_Interval = namedtuple('FL_Interval', ('first_chr', 'last_chr', 'length')) FL_Interval = namedtuple('FL_Interval', ('first_chr', 'last_chr', 'length'))
def rename_only_in_vl_question(parent):
return question_dialog(parent,
_('Rename in Virtual library'), '<p>' +
_('Do you want this rename to apply only to books '
'in the current Virtual library?') + '</p>',
yes_text=_('Yes, apply only in VL'),
no_text=_('No, apply in entire library'))
class TagsModel(QAbstractItemModel): # {{{ class TagsModel(QAbstractItemModel): # {{{
search_item_renamed = pyqtSignal() search_item_renamed = pyqtSignal()
@ -878,8 +887,10 @@ class TagsModel(QAbstractItemModel): # {{{
new_name = dest_item.tag.original_name + '.' + src_simple_name new_name = dest_item.tag.original_name + '.' + src_simple_name
else: else:
new_name = src_simple_name new_name = src_simple_name
# In d&d renames always use the vl. This might be controversial. if self.get_in_vl():
src_item.use_vl = True src_item.use_vl = rename_only_in_vl_question(self.gui_parent)
else:
src_item.use_vl = False
self.rename_item(src_item, key, new_name) self.rename_item(src_item, key, new_name)
return True return True
# Should be working with a user category # Should be working with a user category

View File

@ -20,7 +20,7 @@ from calibre.constants import config_dir
from calibre.ebooks.metadata import rating_to_stars from calibre.ebooks.metadata import rating_to_stars
from calibre.gui2.complete2 import EditWithComplete from calibre.gui2.complete2 import EditWithComplete
from calibre.gui2.tag_browser.model import (TagTreeItem, TAG_SEARCH_STATES, from calibre.gui2.tag_browser.model import (TagTreeItem, TAG_SEARCH_STATES,
TagsModel, DRAG_IMAGE_ROLE, COUNT_ROLE) TagsModel, DRAG_IMAGE_ROLE, COUNT_ROLE, rename_only_in_vl_question)
from calibre.gui2.widgets import EnLineEdit from calibre.gui2.widgets import EnLineEdit
from calibre.gui2 import (config, gprefs, choose_files, pixmap_to_data, from calibre.gui2 import (config, gprefs, choose_files, pixmap_to_data,
rating_font, empty_index, question_dialog) rating_font, empty_index, question_dialog)
@ -133,12 +133,7 @@ class TagDelegate(QStyledItemDelegate): # {{{
if not item.ignore_vl: if not item.ignore_vl:
if item.use_vl is None: if item.use_vl is None:
if self.tags_view.model().get_in_vl(): if self.tags_view.model().get_in_vl():
item.use_vl = question_dialog(self.tags_view, item.use_vl = rename_only_in_vl_question(self.tags_view)
_('Rename in Virtual library'), '<p>' +
_('Do you want this rename to apply only to books '
'in the current Virtual library?') + '</p>',
yes_text=_('Yes, apply only in VL'),
no_text=_('No, apply in entire library'))
else: else:
item.use_vl = False item.use_vl = False
elif not item.use_vl and self.tags_view.model().get_in_vl(): elif not item.use_vl and self.tags_view.model().get_in_vl():