diff --git a/src/calibre/gui2/library/__init__.py b/src/calibre/gui2/library/__init__.py index 8aa897b413..d7180de99a 100644 --- a/src/calibre/gui2/library/__init__.py +++ b/src/calibre/gui2/library/__init__.py @@ -7,4 +7,4 @@ __docformat__ = 'restructuredtext en' from PyQt4.Qt import Qt -DEFAULT_SORT = ('timestamp', Qt.AscendingOrder) +DEFAULT_SORT = ('timestamp', Qt.DescendingOrder) diff --git a/src/calibre/gui2/library/models.py b/src/calibre/gui2/library/models.py index 97e2317dce..f5fbc822b8 100644 --- a/src/calibre/gui2/library/models.py +++ b/src/calibre/gui2/library/models.py @@ -231,7 +231,7 @@ class BooksModel(QAbstractTableModel): # {{{ def resort(self, reset=True): try: col = self.column_map.index(self.sorted_on[0]) - except: + except ValueError: col = 0 self.sort(col, self.sorted_on[1], reset=reset) @@ -853,9 +853,6 @@ class DeviceBooksModel(BooksModel): # {{{ self.searched.emit(False) - def resort(self, reset): - self.sort(self.sorted_on[0], self.sorted_on[1], reset=reset) - def sort(self, col, order, reset=True): descending = order != Qt.AscendingOrder def strcmp(attr): diff --git a/src/calibre/gui2/library/views.py b/src/calibre/gui2/library/views.py index ee7ab5e838..70a0e05a47 100644 --- a/src/calibre/gui2/library/views.py +++ b/src/calibre/gui2/library/views.py @@ -49,8 +49,8 @@ class BooksView(QTableView): # {{{ self.column_header.sectionMoved.connect(self.save_state) self.column_header.setContextMenuPolicy(Qt.CustomContextMenu) self.column_header.customContextMenuRequested.connect(self.show_column_header_context_menu) - # }}} + self._model.database_changed.connect(self.database_changed) hv = self.verticalHeader() hv.setClickable(True) @@ -76,6 +76,8 @@ class BooksView(QTableView): # {{{ self.sortByColumn(idx, Qt.AscendingOrder) elif action == 'descending': self.sortByColumn(idx, Qt.DescendingOrder) + elif action == 'defaults': + self.apply_state(self.get_default_state()) self.save_state() @@ -117,6 +119,13 @@ class BooksView(QTableView): # {{{ m.addAction(name, partial(self.column_header_context_handler, action='show', column=col)) + + self.column_header_context_menu.addSeparator() + self.column_header_context_menu.addAction( + _('Restore default layout'), + partial(self.column_header_context_handler, + action='defaults', column=col)) + self.column_header_context_menu.popup(self.column_header.mapToGlobal(pos)) @@ -209,25 +218,30 @@ class BooksView(QTableView): # {{{ h.resizeSection(cmap[col], sizes[col]) self.apply_sort_history(state.get('sort_history', None)) + def get_default_state(self): + old_state = {'hidden_columns': [], + 'sort_history':[DEFAULT_SORT], + 'column_positions': {}, + 'column_sizes': {}} + h = self.column_header + cm = self.column_map + for i in range(h.count()): + name = cm[i] + old_state['column_positions'][name] = h.logicalIndex(i) + if name != 'ondevice': + old_state['column_sizes'][name] = \ + max(self.sizeHintForColumn(i), h.sectionSizeHint(i)) + if name == 'timestamp': + old_state['column_sizes'][name] += 12 + return old_state + def restore_state(self): name = unicode(self.objectName()) old_state = None if name: old_state = gprefs.get(name + ' books view state', None) if old_state is None: - # Default layout - old_state = {'hidden_columns': [], - 'sort_history':[DEFAULT_SORT], - 'column_positions': {}, - 'column_sizes': {}} - h = self.column_header - cm = self.column_map - for i in range(h.count()): - name = cm[i] - old_state['column_positions'][name] = h.logicalIndex(i) - if name != 'ondevice': - old_state['column_sizes'][name] = \ - max(self.sizeHintForColumn(i), h.sectionSizeHint(i)) + old_state = self.get_default_state() if tweaks['sort_columns_at_startup'] is not None: old_state['sort_history'] = tweaks['sort_columns_at_startup'] @@ -379,6 +393,7 @@ class DeviceBooksView(BooksView): # {{{ def set_database(self, db): self._model.set_database(db) + self.restore_state() def resizeColumnsToContents(self): QTableView.resizeColumnsToContents(self) diff --git a/src/calibre/gui2/ui.py b/src/calibre/gui2/ui.py index 536c68f77d..c8f1ae5ded 100644 --- a/src/calibre/gui2/ui.py +++ b/src/calibre/gui2/ui.py @@ -2408,6 +2408,9 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI): config.set('main_window_geometry', self.saveGeometry()) dynamic.set('sort_history', self.library_view.model().sort_history) self.sidebar.save_state() + for view in ('library_view', 'memory_view', 'card_a_view', + 'card_b_view'): + getattr(self, view).save_state() def restart(self): self.quit(restart=True) diff --git a/src/calibre/library/database2.py b/src/calibre/library/database2.py index 5971333078..ed56d35bdc 100644 --- a/src/calibre/library/database2.py +++ b/src/calibre/library/database2.py @@ -182,13 +182,13 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns): columns = ['id', 'title', # col table link_col query ('authors', 'authors', 'author', 'sortconcat(link.id, name)'), - ('publisher', 'publishers', 'publisher', 'name'), - ('rating', 'ratings', 'rating', 'ratings.rating'), 'timestamp', '(SELECT MAX(uncompressed_size) FROM data WHERE book=books.id) size', + ('rating', 'ratings', 'rating', 'ratings.rating'), ('tags', 'tags', 'tag', 'group_concat(name)'), '(SELECT text FROM comments WHERE book=books.id) comments', ('series', 'series', 'series', 'name'), + ('publisher', 'publishers', 'publisher', 'name'), 'series_index', 'sort', 'author_sort', @@ -212,8 +212,9 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns): custom_cols = list(sorted(custom_map.keys())) lines.extend([custom_map[x] for x in custom_cols]) - self.FIELD_MAP = {'id':0, 'title':1, 'authors':2, 'publisher':3, 'rating':4, 'timestamp':5, - 'size':6, 'tags':7, 'comments':8, 'series':9, 'series_index':10, + self.FIELD_MAP = {'id':0, 'title':1, 'authors':2, 'timestamp':3, + 'size':4, 'rating':5, 'tags':6, 'comments':7, 'series':8, + 'publisher':9, 'series_index':10, 'sort':11, 'author_sort':12, 'formats':13, 'isbn':14, 'path':15, 'lccn':16, 'pubdate':17, 'flags':18, 'uuid':19}