diff --git a/src/calibre/gui2/library.py b/src/calibre/gui2/library.py
index 7da75c9017..c1af88951e 100644
--- a/src/calibre/gui2/library.py
+++ b/src/calibre/gui2/library.py
@@ -861,6 +861,9 @@ class BooksView(TableView):
def search_done(self, ok):
self._search_done(self, ok)
+ def row_count(self):
+ return self._model.count()
+
class DeviceBooksView(BooksView):
diff --git a/src/calibre/gui2/main.ui b/src/calibre/gui2/main.ui
index 02907175d0..13148b2386 100644
--- a/src/calibre/gui2/main.ui
+++ b/src/calibre/gui2/main.ui
@@ -206,6 +206,13 @@
+ -
+
+
+ set in ui.py
+
+
+
-
diff --git a/src/calibre/gui2/search_box.py b/src/calibre/gui2/search_box.py
index 7b8a63a117..bbffbc4243 100644
--- a/src/calibre/gui2/search_box.py
+++ b/src/calibre/gui2/search_box.py
@@ -256,10 +256,11 @@ class SavedSearchBox(QComboBox):
def saved_search_selected (self, qname):
#print 'in saved_search_selected'
- if qname is None or qname == '':
+ qname = unicode(qname)
+ if qname is None or not qname.strip():
return
self.normalize_state()
- self.search_box.set_search_string ('search:"'+unicode(qname)+'"')
+ self.search_box.set_search_string(u'search:"%s"' % qname)
self.setEditText(qname)
self.setToolTip(self.saved_searches.lookup(qname))
@@ -276,18 +277,19 @@ class SavedSearchBox(QComboBox):
idx = self.currentIndex
if idx < 0:
return
- self.saved_searches.delete (unicode(self.currentText()))
+ self.saved_searches.delete(unicode(self.currentText()))
self.clear_to_help()
- self.search_box.set_search_string ('')
+ self.search_box.set_search_string('')
self.emit(SIGNAL('changed()'))
# SIGNALed from the main UI
def save_search_button_clicked(self):
#print 'in save_search_button_clicked'
- name = self.currentText()
- if self.help_state or name == '':
- name = self.search_box.text().replace('"', '')
- self.saved_searches.add(name, self.search_box.text())
+ name = unicode(self.currentText())
+ if self.help_state or not name.strip():
+ name = unicode(self.search_box.text()).replace('"', '')
+ self.saved_searches.delete(name)
+ self.saved_searches.add(name, unicode(self.search_box.text()))
# now go through an initialization cycle to ensure that the combobox has
# the new search in it, that it is selected, and that the search box
# references the new search instead of the text in the search.
@@ -303,6 +305,6 @@ class SavedSearchBox(QComboBox):
idx = self.currentIndex();
if idx < 0:
return
- self.search_box.set_search_string (self.saved_searches.lookup(self.currentText()))
+ self.search_box.set_search_string(self.saved_searches.lookup(unicode(self.currentText())))
diff --git a/src/calibre/gui2/ui.py b/src/calibre/gui2/ui.py
index 5d314a730a..2ab91e585b 100644
--- a/src/calibre/gui2/ui.py
+++ b/src/calibre/gui2/ui.py
@@ -144,8 +144,9 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI):
self.search.initialize('main_search_history', colorize=True,
help_text=_('Search (For Advanced Search click the button to the left)'))
- self.connect(self.clear_button, SIGNAL('clicked()'), self.search.clear)
+ self.connect(self.clear_button, SIGNAL('clicked()'), self.search_clear)
self.connect(self.clear_button, SIGNAL('clicked()'), self.saved_search.clear_to_help)
+ self.search_clear()
self.saved_search.initialize(saved_searches, self.search, colorize=True,
help_text=_('Saved Searches'))
@@ -536,8 +537,8 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI):
SIGNAL('count_changed(int)'), self.location_view.count_changed)
self.connect(self.library_view.model(), SIGNAL('count_changed(int)'),
self.tags_view.recount)
- self.connect(self.search, SIGNAL('cleared()'), self.tags_view.clear)
- self.connect(self.saved_search, SIGNAL('changed()'), self.tags_view.recount)
+ self.connect(self.search, SIGNAL('cleared()'), self.tags_view_clear)
+ self.connect(self.saved_search, SIGNAL('changed()'), self.tags_view.recount, Qt.QueuedConnection)
if not gprefs.get('quick_start_guide_added', False):
from calibre.ebooks.metadata import MetaInformation
mi = MetaInformation(_('Calibre Quick Start Guide'), ['John Schember'])
@@ -779,8 +780,17 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI):
self.tag_match.setVisible(False)
self.popularity.setVisible(False)
+ def tags_view_clear(self):
+ self.search_count.setText(_("(all books)"))
+ self.tags_view.clear()
+
+ def search_clear(self):
+ self.search_count.setText(_("(all books)"))
+ self.search.clear()
+
def search_done(self, view, ok):
if view is self.current_view():
+ self.search_count.setText(_("(%d found)") % self.current_view().row_count())
self.search.search_done(ok)
def sync_cf_to_listview(self, current, previous):