From 463603dab0ac8cf169e1199bb41ad63599cbcb16 Mon Sep 17 00:00:00 2001 From: Jim Miller Date: Mon, 9 May 2016 07:39:57 -0500 Subject: [PATCH 1/4] Save/reuse ViewLog size from proceed_question when called with log_viewer_unique_name. --- src/calibre/gui2/dialogs/message_box.py | 24 ++++++++++++++++++++++-- src/calibre/gui2/proceed.py | 10 ++++++---- 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/src/calibre/gui2/dialogs/message_box.py b/src/calibre/gui2/dialogs/message_box.py index 7f6b62f666..2113111e74 100644 --- a/src/calibre/gui2/dialogs/message_box.py +++ b/src/calibre/gui2/dialogs/message_box.py @@ -12,6 +12,7 @@ from PyQt5.Qt import (QDialog, QIcon, QApplication, QSize, QKeySequence, QLabel, QPlainTextEdit, QTextDocument, QCheckBox, pyqtSignal) from calibre.constants import __version__, isfrozen +from calibre.gui2 import gprefs class MessageBox(QDialog): # {{{ @@ -167,7 +168,7 @@ class MessageBox(QDialog): # {{{ class ViewLog(QDialog): # {{{ - def __init__(self, title, html, parent=None): + def __init__(self, title, html, parent=None, unique_name=None): QDialog.__init__(self, parent) self.l = l = QVBoxLayout() self.setLayout(l) @@ -184,8 +185,16 @@ class ViewLog(QDialog): # {{{ self.copy_button.setIcon(QIcon(I('edit-copy.png'))) self.copy_button.clicked.connect(self.copy_to_clipboard) l.addWidget(self.bb) + + if unique_name: + self.unique_name = "ViewLog_size_"+unique_name + else: + self.unique_name = None + self.geom = gprefs.get(self.unique_name, None) + self.finished.connect(self.dialog_closing) + self.resize_dialog() + self.setModal(False) - self.resize(QSize(700, 500)) self.setWindowTitle(title) self.setWindowIcon(QIcon(I('debug.png'))) self.show() @@ -193,6 +202,17 @@ class ViewLog(QDialog): # {{{ def copy_to_clipboard(self): txt = self.tb.toPlainText() QApplication.clipboard().setText(txt) + + def resize_dialog(self): + if self.geom is None: + self.resize(QSize(700, 500)) + else: + self.restoreGeometry(self.geom) + + def dialog_closing(self, result): + if self.unique_name: + self.geom = bytearray(self.saveGeometry()) + gprefs[self.unique_name] = self.geom # }}} _proceed_memory = [] diff --git a/src/calibre/gui2/proceed.py b/src/calibre/gui2/proceed.py index 84634d3284..00e7a1f782 100644 --- a/src/calibre/gui2/proceed.py +++ b/src/calibre/gui2/proceed.py @@ -20,7 +20,8 @@ from calibre.gui2.dialogs.message_box import ViewLog Question = namedtuple('Question', 'payload callback cancel_callback ' 'title msg html_log log_viewer_title log_is_file det_msg ' 'show_copy_button checkbox_msg checkbox_checked action_callback ' - 'action_label action_icon focus_action show_det show_ok icon') + 'action_label action_icon focus_action show_det show_ok icon ' + 'log_viewer_unique_name') class Icon(QWidget): @@ -306,7 +307,7 @@ class ProceedQuestion(QWidget): msg, det_msg='', show_copy_button=False, cancel_callback=None, log_is_file=False, checkbox_msg=None, checkbox_checked=False, action_callback=None, action_label=None, action_icon=None, focus_action=False, - show_det=False, show_ok=False, icon=None, **kw): + show_det=False, show_ok=False, icon=None, log_viewer_unique_name=None, **kw): ''' A non modal popup that notifies the user that a background task has been completed. This class guarantees that only a single popup is @@ -341,12 +342,13 @@ class ProceedQuestion(QWidget): :param show_det: If True, the Detailed message will be shown initially :param show_ok: If True, OK will be shown instead of YES/NO :param icon: The icon to be used for this popop (defaults to question mark). Can be either a QIcon or a string to be used with I() + :log_viewer_unique_name: If set, ViewLog will remember/reuse its size for this name in calibre.gui2.gprefs ''' question = Question( payload, callback, cancel_callback, title, msg, html_log, log_viewer_title, log_is_file, det_msg, show_copy_button, checkbox_msg, checkbox_checked, action_callback, action_label, - action_icon, focus_action, show_det, show_ok, icon) + action_icon, focus_action, show_det, show_ok, icon, log_viewer_unique_name) self.questions.append(question) self.show_question() @@ -358,7 +360,7 @@ class ProceedQuestion(QWidget): with open(log, 'rb') as f: log = f.read().decode('utf-8') self.log_viewer = ViewLog(q.log_viewer_title, log, - parent=self) + parent=self, unique_name=q.log_viewer_unique_name) def paintEvent(self, ev): painter = QPainter(self) From 0a924f2e669d20cb882c1180541fe1e265c5d48d Mon Sep 17 00:00:00 2001 From: Jim Miller Date: Mon, 9 May 2016 09:03:09 -0500 Subject: [PATCH 2/4] Fixes for Saved Search Editor. --- src/calibre/gui2/dialogs/saved_search_editor.py | 2 ++ src/calibre/gui2/dialogs/saved_search_editor.ui | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/calibre/gui2/dialogs/saved_search_editor.py b/src/calibre/gui2/dialogs/saved_search_editor.py index 63f3de2cc4..9716397152 100644 --- a/src/calibre/gui2/dialogs/saved_search_editor.py +++ b/src/calibre/gui2/dialogs/saved_search_editor.py @@ -37,6 +37,7 @@ class SavedSearchEditor(QDialog, Ui_SavedSearchEditor): def populate_search_list(self): self.search_name_box.blockSignals(True) self.search_name_box.clear() + self.search_name_box.addItem('') for name in sorted(self.searches.keys(), key=sort_key): self.search_name_box.addItem(name) self.search_names = set([icu_lower(n) for n in self.searches.keys()]) @@ -88,6 +89,7 @@ class SavedSearchEditor(QDialog, Ui_SavedSearchEditor): if self.current_search_name in self.searches: self.searches[new_search_name] = self.searches[self.current_search_name] del self.searches[self.current_search_name] + self.current_search_name = None self.populate_search_list() self.select_search(new_search_name) return True diff --git a/src/calibre/gui2/dialogs/saved_search_editor.ui b/src/calibre/gui2/dialogs/saved_search_editor.ui index af6d6f4d55..7ffa613015 100644 --- a/src/calibre/gui2/dialogs/saved_search_editor.ui +++ b/src/calibre/gui2/dialogs/saved_search_editor.ui @@ -123,7 +123,7 @@ - Add the new saved search + Add a new, empty saved search with the name entered ... From b3f7d0301727c1aadedd628e86fcb427c5f998dc Mon Sep 17 00:00:00 2001 From: Jim Miller Date: Mon, 9 May 2016 09:10:24 -0500 Subject: [PATCH 3/4] Reset Saved Search combo tooltip when cleared. --- src/calibre/gui2/search_box.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/calibre/gui2/search_box.py b/src/calibre/gui2/search_box.py index c4f838af0d..12a9bd371a 100644 --- a/src/calibre/gui2/search_box.py +++ b/src/calibre/gui2/search_box.py @@ -334,6 +334,7 @@ class SavedSearchBox(QComboBox): # {{{ QComboBox.clear(self) self.initialize_saved_search_names() self.setEditText('') + self.setToolTip(self.tool_tip_text) self.line_edit.home(False) def key_pressed(self, event): @@ -525,9 +526,9 @@ class SavedSearchBoxMixin(object): # {{{ # self.saved_searches_changed() self.saved_search.initialize(self.search, colorize=True, help_text=_('Saved Searches')) - self.saved_search.setToolTip( - _('Choose saved search or enter name for new saved search')) - self.saved_search.setStatusTip(self.saved_search.toolTip()) + self.saved_search.tool_tip_text=_('Choose saved search or enter name for new saved search') + self.saved_search.setToolTip(self.saved_search.tool_tip_text) + self.saved_search.setStatusTip(self.saved_search.tool_tip_text) for x in ('copy', 'save'): b = getattr(self, x+'_search_button') b.setStatusTip(b.toolTip()) From 70aa7450870443d1357b5a3a5365a903bbdab14d Mon Sep 17 00:00:00 2001 From: Jim Miller Date: Mon, 9 May 2016 09:49:46 -0500 Subject: [PATCH 4/4] Save ViewLog size by unique name or default name. --- src/calibre/gui2/dialogs/message_box.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/calibre/gui2/dialogs/message_box.py b/src/calibre/gui2/dialogs/message_box.py index 2113111e74..e0a7c9a1fb 100644 --- a/src/calibre/gui2/dialogs/message_box.py +++ b/src/calibre/gui2/dialogs/message_box.py @@ -186,10 +186,7 @@ class ViewLog(QDialog): # {{{ self.copy_button.clicked.connect(self.copy_to_clipboard) l.addWidget(self.bb) - if unique_name: - self.unique_name = "ViewLog_size_"+unique_name - else: - self.unique_name = None + self.unique_name = unique_name or 'view-log-dialog' self.geom = gprefs.get(self.unique_name, None) self.finished.connect(self.dialog_closing) self.resize_dialog()