From 7b44654e20fb274261d7b131c383a7cfc99768c9 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Thu, 4 Sep 2014 12:40:51 +0530 Subject: [PATCH] Refactor message box to not use uic to generate the UI Also fixes incorrect resize of message box when toggling detailed message. --- src/calibre/gui2/dialogs/message_box.py | 81 ++++++++++------- src/calibre/gui2/dialogs/message_box.ui | 112 ------------------------ 2 files changed, 49 insertions(+), 144 deletions(-) delete mode 100644 src/calibre/gui2/dialogs/message_box.ui diff --git a/src/calibre/gui2/dialogs/message_box.py b/src/calibre/gui2/dialogs/message_box.py index 5fe79352c1..df4fe4389b 100644 --- a/src/calibre/gui2/dialogs/message_box.py +++ b/src/calibre/gui2/dialogs/message_box.py @@ -12,15 +12,45 @@ from PyQt5.Qt import (QDialog, QIcon, QApplication, QSize, QKeySequence, QLabel, QPlainTextEdit, QTextDocument, QCheckBox, pyqtSignal) from calibre.constants import __version__, isfrozen -from calibre.gui2.dialogs.message_box_ui import Ui_Dialog -class MessageBox(QDialog, Ui_Dialog): # {{{ +class MessageBox(QDialog): # {{{ ERROR = 0 WARNING = 1 INFO = 2 QUESTION = 3 + resize_needed = pyqtSignal() + + def setup_ui(self): + self.setObjectName("Dialog") + self.resize(497, 235) + self.gridLayout = l = QGridLayout(self) + l.setObjectName("gridLayout") + self.icon_label = la = QLabel('') + la.setMaximumSize(QSize(68, 68)) + la.setScaledContents(True) + la.setObjectName("icon_label") + l.addWidget(la) + self.msg = la = QLabel(self) + la.setWordWrap(True) + la.setOpenExternalLinks(True) + la.setObjectName("msg") + l.addWidget(la, 0, 1, 1, 1) + self.det_msg = dm = QPlainTextEdit(self) + dm.setReadOnly(True) + dm.setObjectName("det_msg") + l.addWidget(dm, 1, 0, 1, 2) + self.bb = bb = QDialogButtonBox(self) + bb.setStandardButtons(QDialogButtonBox.Ok) + bb.setObjectName("bb") + bb.accepted.connect(self.accept) + bb.rejected.connect(self.reject) + l.addWidget(bb, 3, 0, 1, 2) + self.toggle_checkbox = tc = QCheckBox(self) + tc.setObjectName("toggle_checkbox") + l.addWidget(tc, 2, 0, 1, 2) + def __init__(self, type_, title, msg, det_msg='', q_icon=None, @@ -39,7 +69,7 @@ class MessageBox(QDialog, Ui_Dialog): # {{{ self.icon = QIcon(I(icon)) else: self.icon = q_icon - self.setupUi(self) + self.setup_ui() self.setWindowTitle(title) self.setWindowIcon(self.icon) @@ -86,20 +116,23 @@ class MessageBox(QDialog, Ui_Dialog): # {{{ if not det_msg: self.det_msg_toggle.setVisible(False) + self.resize_needed.connect(self.do_resize, type=Qt.QueuedConnection) self.do_resize() + def sizeHint(self): + ans = QDialog.sizeHint(self) + ans.setWidth(max(min(ans.width(), 500), self.bb.sizeHint().width() + 100)) + ans.setHeight(min(ans.height(), 500)) + return ans + def toggle_det_msg(self, *args): - vis = unicode(self.det_msg_toggle.text()) == self.hide_det_msg - self.det_msg_toggle.setText(self.show_det_msg if vis else - self.hide_det_msg) + vis = self.det_msg.isVisible() self.det_msg.setVisible(not vis) - self.do_resize() + self.det_msg_toggle.setText(self.show_det_msg if vis else self.hide_det_msg) + self.resize_needed.emit() def do_resize(self): - sz = self.sizeHint() + QSize(100, 0) - sz.setWidth(min(500, sz.width())) - sz.setHeight(min(500, sz.height())) - self.resize(sz) + self.resize(self.sizeHint()) def copy_to_clipboard(self, *args): QApplication.clipboard().setText( @@ -129,7 +162,7 @@ class MessageBox(QDialog, Ui_Dialog): # {{{ self.det_msg_toggle.setText(self.show_det_msg) self.det_msg_toggle.setVisible(bool(msg)) self.det_msg.setVisible(False) - self.do_resize() + self.resize_needed.emit() # }}} class ViewLog(QDialog): # {{{ @@ -394,24 +427,8 @@ class JobError(QDialog): # {{{ if __name__ == '__main__': app = QApplication([]) - d = JobError(None) - d.show_error('test title', 'some long meaningless test message', 'det msg') - d.show_error('test title', 'some long meaningless test message', 'det msg') - d.show_error('test title', 'some long meaningless test message', 'det msg') - d.show_error('test title', 'some long meaningless test message', 'det msg') - d.show_error('test title', 'some long meaningless test message', 'det msg') - d.show_error('test title', 'some long meaningless test message', 'det msg') - app.setQuitOnLastWindowClosed(False) - def checkd(): - if not d.queue: - app.quit() - app.lastWindowClosed.connect(checkd) - app.exec_() - -# if __name__ == '__main__': -# app = QApplication([]) -# from calibre.gui2 import question_dialog -# print question_dialog(None, 'title', 'msg goog ', -# det_msg='det '*1000, -# show_copy_button=True) + from calibre.gui2 import question_dialog + print question_dialog(None, 'title', 'msg goog ', + det_msg='det '*1000, + show_copy_button=True) diff --git a/src/calibre/gui2/dialogs/message_box.ui b/src/calibre/gui2/dialogs/message_box.ui deleted file mode 100644 index 8064eac256..0000000000 --- a/src/calibre/gui2/dialogs/message_box.ui +++ /dev/null @@ -1,112 +0,0 @@ - - - Dialog - - - - 0 - 0 - 497 - 235 - - - - Dialog - - - - - - - 68 - 68 - - - - - - - :/images/dialog_warning.png - - - true - - - - - - - - - - true - - - true - - - - - - - true - - - - - - - Qt::Horizontal - - - QDialogButtonBox::Ok - - - - - - - - - - - - - - - - - - bb - accepted() - Dialog - accept() - - - 248 - 254 - - - 157 - 274 - - - - - bb - rejected() - Dialog - reject() - - - 316 - 260 - - - 286 - 274 - - - - -