mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-06-23 15:30:45 -04:00
Show recognized saved searches in create VL dialog
This commit is contained in:
commit
a90b9106ad
@ -105,9 +105,14 @@ class CreateVirtualLibrary(QDialog): # {{{
|
||||
gl.addWidget(self.vl_name, 0, 1)
|
||||
self.editing = editing
|
||||
|
||||
self.saved_searches_label = QLabel('')
|
||||
self.saved_searches_label.setTextInteractionFlags(Qt.TextSelectableByMouse)
|
||||
gl.addWidget(self.saved_searches_label, 2, 0, 1, 2)
|
||||
|
||||
self.la2 = la2 = QLabel(_('&Search expression:'))
|
||||
gl.addWidget(la2, 1, 0)
|
||||
self.vl_text = QLineEdit()
|
||||
self.vl_text.textChanged.connect(self.search_text_changed)
|
||||
la2.setBuddy(self.vl_text)
|
||||
gl.addWidget(self.vl_text, 1, 1)
|
||||
self.vl_text.setText(_build_full_search_string(self.gui))
|
||||
@ -122,7 +127,8 @@ class CreateVirtualLibrary(QDialog): # {{{
|
||||
sl.setWordWrap(True)
|
||||
sl.setTextInteractionFlags(Qt.LinksAccessibleByMouse)
|
||||
sl.linkActivated.connect(self.link_activated)
|
||||
gl.addWidget(sl, 2, 0, 1, 2)
|
||||
gl.addWidget(sl, 3, 0, 1, 2)
|
||||
gl.setRowStretch(3,10)
|
||||
|
||||
self.hl = hl = QLabel(_('''
|
||||
<h2>Virtual Libraries</h2>
|
||||
@ -162,6 +168,41 @@ class CreateVirtualLibrary(QDialog): # {{{
|
||||
|
||||
self.resize(self.sizeHint()+QSize(150, 25))
|
||||
|
||||
def search_text_changed(self, txt):
|
||||
searches = [_('Saved searches recognized in the expression:')]
|
||||
txt = unicode(txt)
|
||||
while txt:
|
||||
p = txt.partition('search:')
|
||||
if p[1]: # found 'search:'
|
||||
possible_search = p[2]
|
||||
if possible_search: # something follows the 'search:'
|
||||
if possible_search[0] == '"': # strip any quotes
|
||||
possible_search = possible_search[1:].partition('"')
|
||||
else: # find end of the search name. Is EOL, space, rparen
|
||||
sp = possible_search.find(' ')
|
||||
pp = possible_search.find(')')
|
||||
if pp < 0 or (sp > 0 and sp <= pp):
|
||||
# space in string before rparen, or neither found
|
||||
possible_search = possible_search.partition(' ')
|
||||
else:
|
||||
# rparen in string before space
|
||||
possible_search = possible_search.partition(')')
|
||||
txt = possible_search[2] # grab remainder of the string
|
||||
search_name = possible_search[0]
|
||||
if search_name.startswith('='):
|
||||
search_name = search_name[1:]
|
||||
if search_name in saved_searches().names():
|
||||
searches.append(search_name + '=' +
|
||||
saved_searches().lookup(search_name))
|
||||
else:
|
||||
txt = ''
|
||||
else:
|
||||
txt = ''
|
||||
if len(searches) > 1:
|
||||
self.saved_searches_label.setText('\n'.join(searches))
|
||||
else:
|
||||
self.saved_searches_label.setText('')
|
||||
|
||||
def name_text_edited(self, new_name):
|
||||
self.new_name = unicode(new_name)
|
||||
|
||||
@ -380,6 +421,8 @@ class SearchRestrictionMixin(object):
|
||||
elif library in virt_libs:
|
||||
db.data.set_base_restriction(virt_libs[library])
|
||||
db.data.set_base_restriction_name(library)
|
||||
self.virtual_library.setToolTip(self.virtual_library_tooltip + '\n' +
|
||||
db.data.get_base_restriction())
|
||||
self._apply_search_restriction(db.data.get_search_restriction(),
|
||||
db.data.get_search_restriction_name())
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user