From f788e468eb2cff72bbc56d47b568f35a78e86846 Mon Sep 17 00:00:00 2001 From: Charles Haley <> Date: Mon, 10 May 2010 12:36:54 +0100 Subject: [PATCH] Save column widths with column names so that columns keep their widths as they move around --- src/calibre/gui2/__init__.py | 17 ++++++++++++----- src/calibre/gui2/library.py | 3 ++- src/calibre/gui2/ui.py | 5 +++++ 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/src/calibre/gui2/__init__.py b/src/calibre/gui2/__init__.py index 5f0cf2e1ae..774825d90f 100644 --- a/src/calibre/gui2/__init__.py +++ b/src/calibre/gui2/__init__.py @@ -303,17 +303,24 @@ class TableView(QTableView): self.read_settings() def read_settings(self): - self.cw = dynamic[self.__class__.__name__+'column widths'] + self.cw = dynamic[self.__class__.__name__+'column width map'] def write_settings(self): - dynamic[self.__class__.__name__+'column widths'] = \ - tuple([int(self.columnWidth(i)) for i in range(self.model().columnCount(None))]) + m = dynamic[self.__class__.__name__+'column width map'] + if m is None: + m = {} + for i,c in enumerate(self.model().column_map): + m[c] = self.columnWidth(i) + dynamic[self.__class__.__name__+'column width map'] = m + self.cw = m def restore_column_widths(self): if self.cw and len(self.cw): - for i in range(len(self.cw)): - self.setColumnWidth(i, self.cw[i]) + for i,c in enumerate(self.model().column_map): + if c in self.cw: + self.setColumnWidth(i, self.cw[c]) return True + return False class FileIconProvider(QFileIconProvider): diff --git a/src/calibre/gui2/library.py b/src/calibre/gui2/library.py index 865617489f..304b909df9 100644 --- a/src/calibre/gui2/library.py +++ b/src/calibre/gui2/library.py @@ -1081,6 +1081,8 @@ class BooksView(TableView): self.setItemDelegateForColumn(cm.index(colhead), self.cc_bool_delegate) elif cc['datatype'] == 'rating': self.setItemDelegateForColumn(cm.index(colhead), self.rating_delegate) + if not self.restore_column_widths(): + self.resizeColumnsToContents() def set_context_menu(self, edit_metadata, send_to_device, convert, view, save, open_folder, book_details, delete, similar_menu=None): @@ -1186,7 +1188,6 @@ class BooksView(TableView): def row_count(self): return self._model.count() - class DeviceBooksView(BooksView): def __init__(self, parent): diff --git a/src/calibre/gui2/ui.py b/src/calibre/gui2/ui.py index 1bf128bc49..48e22f8903 100644 --- a/src/calibre/gui2/ui.py +++ b/src/calibre/gui2/ui.py @@ -1018,6 +1018,8 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI): ############################################################################ ### Force the library view to refresh, taking into consideration books information def refresh_ondevice_info(self, device_connected): + # Save current column widths because we might be turning on OnDevice + self.library_view.write_settings() self.book_on_device(None, reset=True) self.library_view.model().set_device_connected(device_connected) ############################################################################ @@ -2218,6 +2220,9 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI): return d = ConfigDialog(self, self.library_view.model(), server=self.content_server) + # Save current column widths in case columns are turned on or off + self.library_view.write_settings() + d.exec_() self.content_server = d.server if d.result() == d.Accepted: