From a1201c899c34986445263a7f34c3b3580c6ab543 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 13 Aug 2010 10:57:10 -0600 Subject: [PATCH 1/2] Cover browser in separate window: Fix closing and tooltips and keyboard shortcut activation --- src/calibre/gui2/cover_flow.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/calibre/gui2/cover_flow.py b/src/calibre/gui2/cover_flow.py index c72f53201f..4b8067bd8f 100644 --- a/src/calibre/gui2/cover_flow.py +++ b/src/calibre/gui2/cover_flow.py @@ -129,6 +129,8 @@ class CoverFlowMixin(object): self.cover_flow.setWordWrap(True) if config['separate_cover_flow']: self.cb_splitter.button.clicked.connect(self.toggle_cover_browser) + self.cb_splitter.button.set_state_to_show() + self.cb_splitter.action_toggle.triggered.connect(self.toggle_cover_browser) if CoverFlow is not None: self.cover_flow.stop.connect(self.hide_cover_browser) else: @@ -137,7 +139,7 @@ class CoverFlowMixin(object): self.cover_flow.stop.connect(self.cb_splitter.hide_side_pane) self.cb_splitter.button.toggled.connect(self.cover_browser_toggled) - def toggle_cover_browser(self): + def toggle_cover_browser(self, *args): cbd = getattr(self, 'cb_dialog', None) if cbd is not None: self.hide_cover_browser() @@ -182,14 +184,21 @@ class CoverFlowMixin(object): self.cover_flow.setFocus(Qt.OtherFocusReason) d.show() self.cb_splitter.button.set_state_to_hide() - d.finished.connect(self.cb_splitter.button.set_state_to_show) + d.finished.connect(self.cover_browser_closed) self.cb_dialog = d + self.cb_splitter.button.set_state_to_hide() - def hide_cover_browser(self): + def cover_browser_closed(self, *args): + self.cb_dialog = None + self.cb_splitter.button.set_state_to_show() + + def hide_cover_browser(self, *args): cbd = getattr(self, 'cb_dialog', None) if cbd is not None: cbd.accept() self.cb_dialog = None + self.cb_splitter.button.set_state_to_show() + def sync_cf_to_listview(self, current, previous): if self.cover_flow_sync_flag and self.cover_flow.isVisible() and \ From 042f67b12ed16100731833d5788a5b61a72772a5 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 13 Aug 2010 11:17:25 -0600 Subject: [PATCH 2/2] When showing cover browser in a separate window, remember the last used window size --- src/calibre/gui2/cover_flow.py | 36 ++++++++++++++++++++++++---------- 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/src/calibre/gui2/cover_flow.py b/src/calibre/gui2/cover_flow.py index 4b8067bd8f..925aa15adf 100644 --- a/src/calibre/gui2/cover_flow.py +++ b/src/calibre/gui2/cover_flow.py @@ -10,10 +10,10 @@ Module to implement the Cover Flow feature import sys, os, time from PyQt4.Qt import QImage, QSizePolicy, QTimer, QDialog, Qt, QSize, \ - QStackedLayout, QLabel + QStackedLayout, QLabel, QByteArray, pyqtSignal from calibre import plugins -from calibre.gui2 import config, available_height, available_width +from calibre.gui2 import config, available_height, available_width, gprefs pictureflow, pictureflowerror = plugins['pictureflow'] @@ -107,6 +107,28 @@ else: DatabaseImages = None FileSystemImages = None +class CBDialog(QDialog): + + closed = pyqtSignal() + + def __init__(self, parent, cover_flow): + QDialog.__init__(self, parent) + self._layout = QStackedLayout() + self.setLayout(self._layout) + self.setWindowTitle(_('Browse by covers')) + self.layout().addWidget(cover_flow) + + geom = gprefs.get('cover_browser_dialog_geometry', bytearray('')) + geom = QByteArray(geom) + if not self.restoreGeometry(geom): + h, w = available_height()-60, int(available_width()/1.5) + self.resize(w, h) + + def closeEvent(self, *args): + geom = bytearray(self.saveGeometry()) + gprefs['cover_browser_dialog_geometry'] = geom + self.closed.emit() + class CoverFlowMixin(object): def __init__(self): @@ -173,18 +195,12 @@ class CoverFlowMixin(object): def show_cover_browser(self): - d = QDialog(self) - ah, aw = available_height(), available_width() - d.resize(int(aw/1.5), ah-60) - d._layout = QStackedLayout() - d.setLayout(d._layout) - d.setWindowTitle(_('Browse by covers')) - d.layout().addWidget(self.cover_flow) + d = CBDialog(self, self.cover_flow) self.cover_flow.setVisible(True) self.cover_flow.setFocus(Qt.OtherFocusReason) d.show() self.cb_splitter.button.set_state_to_hide() - d.finished.connect(self.cover_browser_closed) + d.closed.connect(self.cover_browser_closed) self.cb_dialog = d self.cb_splitter.button.set_state_to_hide()