From 04cec656d28f46430aa68c1b72d2d524ce83592d Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 20 Dec 2011 15:27:58 +0530 Subject: [PATCH] Add a checkbox to allow users to disable the popup that asks if books should be auto-converted before sending to device --- src/calibre/gui2/__init__.py | 27 ++++++++++++++++++++++-- src/calibre/gui2/device.py | 2 +- src/calibre/gui2/dialogs/message_box.py | 1 + src/calibre/gui2/dialogs/message_box.ui | 9 +++++++- src/calibre/gui2/preferences/behavior.py | 1 + src/calibre/gui2/ui.py | 7 ++++-- 6 files changed, 41 insertions(+), 6 deletions(-) diff --git a/src/calibre/gui2/__init__.py b/src/calibre/gui2/__init__.py index 47d7748eb9..668c876ca7 100644 --- a/src/calibre/gui2/__init__.py +++ b/src/calibre/gui2/__init__.py @@ -273,11 +273,34 @@ def error_dialog(parent, title, msg, det_msg='', show=False, return d def question_dialog(parent, title, msg, det_msg='', show_copy_button=False, - default_yes=True): + default_yes=True, + # Skippable dialogs + # Set skip_dialog_name to a unique name for this dialog + # Set skip_dialog_msg to a message displayed to the user + skip_dialog_name=None, skip_dialog_msg=_('Show this confirmation again'), + skip_dialog_skipped_value=True, skip_dialog_skip_precheck=True): from calibre.gui2.dialogs.message_box import MessageBox + + auto_skip = set(gprefs.get('questions_to_auto_skip', [])) + if (skip_dialog_name is not None and skip_dialog_name in auto_skip): + return bool(skip_dialog_skipped_value) + d = MessageBox(MessageBox.QUESTION, title, msg, det_msg, parent=parent, show_copy_button=show_copy_button, default_yes=default_yes) - return d.exec_() == d.Accepted + + if skip_dialog_name is not None and skip_dialog_msg: + tc = d.toggle_checkbox + tc.setVisible(True) + tc.setText(skip_dialog_msg) + tc.setChecked(bool(skip_dialog_skip_precheck)) + + ret = d.exec_() == d.Accepted + + if skip_dialog_name is not None and not d.toggle_checkbox.isChecked(): + auto_skip.add(skip_dialog_name) + gprefs.set('questions_to_auto_skip', list(auto_skip)) + + return ret def info_dialog(parent, title, msg, det_msg='', show=False, show_copy_button=True): diff --git a/src/calibre/gui2/device.py b/src/calibre/gui2/device.py index 51e4a1a8c1..4fb68e1b22 100644 --- a/src/calibre/gui2/device.py +++ b/src/calibre/gui2/device.py @@ -683,7 +683,7 @@ class DeviceMixin(object): # {{{ return self.ask_a_yes_no_question( _('No suitable formats'), msg, ans_when_user_unavailable=True, - det_msg=autos + det_msg=autos, skip_dialog_name='auto_convert_before_send' ) def set_default_thumbnail(self, height): diff --git a/src/calibre/gui2/dialogs/message_box.py b/src/calibre/gui2/dialogs/message_box.py index 7fd7a0addf..84e5569a88 100644 --- a/src/calibre/gui2/dialogs/message_box.py +++ b/src/calibre/gui2/dialogs/message_box.py @@ -44,6 +44,7 @@ class MessageBox(QDialog, Ui_Dialog): # {{{ self.msg.setText(msg) self.det_msg.setPlainText(det_msg) self.det_msg.setVisible(False) + self.toggle_checkbox.setVisible(False) if show_copy_button: self.ctc_button = self.bb.addButton(_('&Copy to clipboard'), diff --git a/src/calibre/gui2/dialogs/message_box.ui b/src/calibre/gui2/dialogs/message_box.ui index 136e6d250e..8064eac256 100644 --- a/src/calibre/gui2/dialogs/message_box.ui +++ b/src/calibre/gui2/dialogs/message_box.ui @@ -53,7 +53,7 @@ - + Qt::Horizontal @@ -63,6 +63,13 @@ + + + + + + + diff --git a/src/calibre/gui2/preferences/behavior.py b/src/calibre/gui2/preferences/behavior.py index 1247c54ec9..b5070cbdea 100644 --- a/src/calibre/gui2/preferences/behavior.py +++ b/src/calibre/gui2/preferences/behavior.py @@ -162,6 +162,7 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form): for key in dynamic.keys(): if key.endswith('_again') and dynamic[key] is False: dynamic[key] = True + gprefs['questions_to_auto_skip'] = [] info_dialog(self, _('Done'), _('Confirmation dialogs have all been reset'), show=True) diff --git a/src/calibre/gui2/ui.py b/src/calibre/gui2/ui.py index 16fdb2e155..39bf80da07 100644 --- a/src/calibre/gui2/ui.py +++ b/src/calibre/gui2/ui.py @@ -407,11 +407,14 @@ class Main(MainWindow, MainWindowMixin, DeviceMixin, EmailMixin, # {{{ return getattr(self, '__systray_minimized', False) def ask_a_yes_no_question(self, title, msg, det_msg='', - show_copy_button=False, ans_when_user_unavailable=True): + show_copy_button=False, ans_when_user_unavailable=True, + skip_dialog_name=None, skipped_value=True): if self.is_minimized_to_tray: return ans_when_user_unavailable return question_dialog(self, title, msg, det_msg=det_msg, - show_copy_button=show_copy_button) + show_copy_button=show_copy_button, + skip_dialog_name=skip_dialog_name, + skip_dialog_skipped_value=skipped_value) def hide_windows(self): for window in QApplication.topLevelWidgets():