From 887ee0b32c5640948b0572e896ae6d19c0d56e0b Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Thu, 6 May 2010 09:19:06 -0600 Subject: [PATCH] Optional views remember their sizes when closed and re-opened --- src/calibre/gui2/sidebar.py | 13 +++++++++++-- src/calibre/gui2/widgets.py | 18 +++++++++++++++--- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/src/calibre/gui2/sidebar.py b/src/calibre/gui2/sidebar.py index 375aafbaa2..d6b58f165d 100644 --- a/src/calibre/gui2/sidebar.py +++ b/src/calibre/gui2/sidebar.py @@ -147,12 +147,21 @@ class SideBar(QToolBar): tb_state = dynamic.get('tag_browser_state', None) if tb_state is not None: self.horizontal_splitter.restoreState(tb_state) + tb_last_open_state = dynamic.get('tag_browser_last_open_state', None) + if tb_last_open_state is not None and \ + not self.horizontal_splitter.is_side_index_hidden: + self.horizontal_splitter.restoreState(tb_last_open_state) bi_state = dynamic.get('book_info_state', None) if bi_state is not None: self.vertical_splitter.restoreState(bi_state) - self.horizontal_splitter.initialize() - self.vertical_splitter.initialize() + bi_last_open_state = dynamic.get('book_info_last_open_state', None) + if bi_last_open_state is not None and \ + not self.vertical_splitter.is_side_index_hidden: + self.vertical_splitter.restoreState(bi_last_open_state) + + self.horizontal_splitter.initialize(name='tag_browser') + self.vertical_splitter.initialize(name='book_info') self.view_status_changed('book_info', not self.vertical_splitter.is_side_index_hidden) self.view_status_changed('tag_browser', not diff --git a/src/calibre/gui2/widgets.py b/src/calibre/gui2/widgets.py index 33fff1bfcb..4b61677b12 100644 --- a/src/calibre/gui2/widgets.py +++ b/src/calibre/gui2/widgets.py @@ -14,7 +14,7 @@ from PyQt4.Qt import QListView, QIcon, QFont, QLabel, QListWidget, \ QMenu, QStringListModel, QCompleter, QStringList from calibre.gui2 import human_readable, NONE, TableView, \ - error_dialog, pixmap_to_data + error_dialog, pixmap_to_data, dynamic from calibre.gui2.dialogs.job_view_ui import Ui_Dialog from calibre.gui2.filename_pattern_ui import Ui_Form from calibre import fit_image @@ -991,7 +991,9 @@ class Splitter(QSplitter): def createHandle(self): return SplitterHandle(self.orientation(), self) - def initialize(self): + def initialize(self, name=None): + if name is not None: + self._name = name for i in range(self.count()): h = self.handle(i) if h is not None: @@ -1014,13 +1016,23 @@ class Splitter(QSplitter): self.double_clicked(None) def double_clicked(self, handle): + visible = not self.is_side_index_hidden sizes = list(self.sizes()) if 0 in sizes: idx = sizes.index(0) sizes[idx] = 80 else: sizes[self.side_index] = 0 - self.setSizes(sizes) + + if visible: + dynamic.set(self._name + '_last_open_state', str(self.saveState())) + self.setSizes(sizes) + else: + state = dynamic.get(self._name+ '_last_open_state', None) + if state is not None: + self.restoreState(state) + else: + self.setSizes(sizes) self.initialize()