From 8157ad817ce61f35489540139c0d41adaccab0ce Mon Sep 17 00:00:00 2001 From: Charles Haley <> Date: Fri, 15 Apr 2011 13:12:49 +0100 Subject: [PATCH] Add multi-column search. --- src/calibre/gui2/library/models.py | 2 +- src/calibre/gui2/library/views.py | 29 +++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/calibre/gui2/library/models.py b/src/calibre/gui2/library/models.py index 0a4b7a26ba..8d89ec76ed 100644 --- a/src/calibre/gui2/library/models.py +++ b/src/calibre/gui2/library/models.py @@ -310,7 +310,6 @@ class BooksModel(QAbstractTableModel): # {{{ def sort(self, col, order, reset=True): if not self.db: return - self.about_to_be_sorted.emit(self.db.id) if not isinstance(order, bool): order = order == Qt.AscendingOrder label = self.column_map[col] @@ -321,6 +320,7 @@ class BooksModel(QAbstractTableModel): # {{{ self._sort(field, order, reset) def _sort(self, label, order, reset): + self.about_to_be_sorted.emit(self.db.id) self.db.sort(label, order) if reset: self.reset() diff --git a/src/calibre/gui2/library/views.py b/src/calibre/gui2/library/views.py index 2f237b54e3..840db906d6 100644 --- a/src/calibre/gui2/library/views.py +++ b/src/calibre/gui2/library/views.py @@ -246,6 +246,35 @@ class BooksView(QTableView): # {{{ self.sortByColumn(idx, Qt.DescendingOrder) else: self._model.sort_by_named_field(field, order, reset) + + def multisort(self, fields, reset=True, only_if_different=False): + if len(fields) == 0: + return + sh = self.cleanup_sort_history(self._model.sort_history) + if only_if_different and len(sh) >= len(fields): + ret=True + for i,t in enumerate(fields): + if t[0] != sh[i][0]: + ret = False + break + if ret: + return + + for n,d in reversed(fields): + if n in self._model.db.field_metadata.keys(): + sh.insert(0, (n, d)) + sh = self.cleanup_sort_history(sh) + self._model.sort_history = [tuple(x) for x in sh] + self._model.resort(reset=reset) + col = fields[0][0] + dir = Qt.AscendingOrder if fields[0][1] else Qt.DescendingOrder + if col in self.column_map: + col = self.column_map.index(col) + hdrs = self.horizontalHeader() + try: + hdrs.setSortIndicator(col, dir) + except: + pass # }}} # Ondevice column {{{