From 4a2faf83d80c0c968bddd1cf7a6b4b6523b91b12 Mon Sep 17 00:00:00 2001 From: Charles Haley <> Date: Thu, 14 Apr 2011 12:36:54 +0100 Subject: [PATCH] Add the ability to sort the library view by a specific named column (field). Useful for sorting by fields that are not visible. --- src/calibre/gui2/library/models.py | 7 +++++++ src/calibre/gui2/library/views.py | 10 ++++++++++ 2 files changed, 17 insertions(+) diff --git a/src/calibre/gui2/library/models.py b/src/calibre/gui2/library/models.py index f7074a6fee..628cfc0fb8 100644 --- a/src/calibre/gui2/library/models.py +++ b/src/calibre/gui2/library/models.py @@ -314,6 +314,13 @@ class BooksModel(QAbstractTableModel): # {{{ if not isinstance(order, bool): order = order == Qt.AscendingOrder label = self.column_map[col] + self._sort(label, order, reset) + + def sort_by_named_column(self, field, order, reset=True): + if field in self.db.field_metadata.keys(): + self._sort(field, order, reset) + + def _sort(self, label, order, reset): 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 0cce33da9e..c30707bfdc 100644 --- a/src/calibre/gui2/library/views.py +++ b/src/calibre/gui2/library/views.py @@ -236,6 +236,16 @@ class BooksView(QTableView): # {{{ sm.select(idx, sm.Select|sm.Rows) self.scroll_to_row(indices[0].row()) self.selected_ids = [] + + def sort_by_named_column(self, field, order, reset=True): + if field in self.column_map: + idx = self.column_map.index(field) + if order: + self.sortByColumn(idx, Qt.AscendingOrder) + else: + self.sortByColumn(idx, Qt.DescendingOrder) + else: + self._model.sort_by_named_column(field, order, reset) # }}} # Ondevice column {{{