mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-06-23 15:30:45 -04:00
Book details: Ctrl-clicking on tags now adds them to the existing search instead of replacing it. Fixes #1930136 [[Enhancement] Holding Ctrl and clicking on a tag in the Book details should add to the current search](https://bugs.launchpad.net/calibre/+bug/1930136)
This commit is contained in:
parent
76f595274b
commit
3136eac5ff
@ -151,19 +151,19 @@ def init_find_in_grouped_search(menu, field, value, book_info):
|
|||||||
m.addAction(QIcon(get_icon_path(field, '')),
|
m.addAction(QIcon(get_icon_path(field, '')),
|
||||||
_('in category %s')%escape_for_menu(field_name),
|
_('in category %s')%escape_for_menu(field_name),
|
||||||
lambda g=field: book_info.search_requested(
|
lambda g=field: book_info.search_requested(
|
||||||
'{}:"={}"'.format(g, value.replace('"', r'\"'))))
|
'{}:"={}"'.format(g, value.replace('"', r'\"')), ''))
|
||||||
for gst in gsts_to_show:
|
for gst in gsts_to_show:
|
||||||
icon_path = get_icon_path(gst, '@')
|
icon_path = get_icon_path(gst, '@')
|
||||||
m.addAction(QIcon(icon_path),
|
m.addAction(QIcon(icon_path),
|
||||||
_('in grouped search %s')%gst,
|
_('in grouped search %s')%gst,
|
||||||
lambda g=gst: book_info.search_requested(
|
lambda g=gst: book_info.search_requested(
|
||||||
'{}:"={}"'.format(g, value.replace('"', r'\"'))))
|
'{}:"={}"'.format(g, value.replace('"', r'\"')), ''))
|
||||||
else:
|
else:
|
||||||
menu.addAction(QIcon(I('search.png')),
|
menu.addAction(QIcon(I('search.png')),
|
||||||
_('Search calibre for {val} in category {name}').format(
|
_('Search calibre for {val} in category {name}').format(
|
||||||
val=escape_for_menu(value), name=escape_for_menu(field_name)),
|
val=escape_for_menu(value), name=escape_for_menu(field_name)),
|
||||||
lambda g=field: book_info.search_requested(
|
lambda g=field: book_info.search_requested(
|
||||||
'{}:"={}"'.format(g, value.replace('"', r'\"'))))
|
'{}:"={}"'.format(g, value.replace('"', r'\"')), ''))
|
||||||
|
|
||||||
|
|
||||||
def render_html(mi, vertical, widget, all_fields=False, render_data_func=None, pref_name='book_display_fields'): # {{{
|
def render_html(mi, vertical, widget, all_fields=False, render_data_func=None, pref_name='book_display_fields'): # {{{
|
||||||
@ -918,7 +918,7 @@ class BookDetails(QWidget): # {{{
|
|||||||
show_book_info = pyqtSignal()
|
show_book_info = pyqtSignal()
|
||||||
open_containing_folder = pyqtSignal(int)
|
open_containing_folder = pyqtSignal(int)
|
||||||
view_specific_format = pyqtSignal(int, object)
|
view_specific_format = pyqtSignal(int, object)
|
||||||
search_requested = pyqtSignal(object)
|
search_requested = pyqtSignal(object, object)
|
||||||
remove_specific_format = pyqtSignal(int, object)
|
remove_specific_format = pyqtSignal(int, object)
|
||||||
remove_metadata_item = pyqtSignal(int, object, object)
|
remove_metadata_item = pyqtSignal(int, object, object)
|
||||||
save_specific_format = pyqtSignal(int, object)
|
save_specific_format = pyqtSignal(int, object)
|
||||||
@ -1030,7 +1030,14 @@ class BookDetails(QWidget): # {{{
|
|||||||
typ, val = link.partition(':')[::2]
|
typ, val = link.partition(':')[::2]
|
||||||
|
|
||||||
def search_term(field, val):
|
def search_term(field, val):
|
||||||
self.search_requested.emit('{}:"={}"'.format(field, val.replace('"', '\\"')))
|
append = ''
|
||||||
|
if QApplication.instance().keyboardModifiers() & Qt.KeyboardModifier.ControlModifier:
|
||||||
|
append = 'OR'
|
||||||
|
|
||||||
|
self.search_requested.emit(
|
||||||
|
'{}:"={}"'.format(field, val.replace('"', '\\"')),
|
||||||
|
append
|
||||||
|
)
|
||||||
|
|
||||||
def browse(url):
|
def browse(url):
|
||||||
try:
|
try:
|
||||||
|
@ -664,7 +664,7 @@ class LayoutMixin(object): # {{{
|
|||||||
type=Qt.ConnectionType.QueuedConnection)
|
type=Qt.ConnectionType.QueuedConnection)
|
||||||
self.book_details.open_containing_folder.connect(self.iactions['View'].view_folder_for_id)
|
self.book_details.open_containing_folder.connect(self.iactions['View'].view_folder_for_id)
|
||||||
self.book_details.view_specific_format.connect(self.iactions['View'].view_format_by_id)
|
self.book_details.view_specific_format.connect(self.iactions['View'].view_format_by_id)
|
||||||
self.book_details.search_requested.connect(self.search.set_search_string)
|
self.book_details.search_requested.connect(self.set_search_string_with_append)
|
||||||
self.book_details.remove_specific_format.connect(
|
self.book_details.remove_specific_format.connect(
|
||||||
self.iactions['Remove Books'].remove_format_by_id)
|
self.iactions['Remove Books'].remove_format_by_id)
|
||||||
self.book_details.remove_metadata_item.connect(
|
self.book_details.remove_metadata_item.connect(
|
||||||
@ -691,6 +691,14 @@ class LayoutMixin(object): # {{{
|
|||||||
self.library_view.currentIndex())
|
self.library_view.currentIndex())
|
||||||
self.library_view.setFocus(Qt.FocusReason.OtherFocusReason)
|
self.library_view.setFocus(Qt.FocusReason.OtherFocusReason)
|
||||||
|
|
||||||
|
def set_search_string_with_append(self, expression, append=''):
|
||||||
|
current = self.search.text().strip()
|
||||||
|
if append:
|
||||||
|
expr = f'{current} {append} {expression}' if current else expression
|
||||||
|
else:
|
||||||
|
expr = expression
|
||||||
|
self.search.set_search_string(expr)
|
||||||
|
|
||||||
def edit_identifiers_triggerred(self):
|
def edit_identifiers_triggerred(self):
|
||||||
book_id = self.library_view.current_book
|
book_id = self.library_view.current_book
|
||||||
db = self.current_db.new_api
|
db = self.current_db.new_api
|
||||||
|
Loading…
x
Reference in New Issue
Block a user