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):