Fix rich text delegate not working with Qt compiled in debug mode. Fixes #1089011 (calibre-0.9.9: qt assert failure upon metadata download)

This commit is contained in:
Kovid Goyal 2012-12-12 10:40:09 +05:30
parent de4d1a0f80
commit 4cd6c889a9

View File

@ -17,10 +17,12 @@ from Queue import Queue, Empty
from io import BytesIO from io import BytesIO
from PyQt4.Qt import (QStyledItemDelegate, QTextDocument, QRectF, QIcon, Qt, from PyQt4.Qt import (QStyledItemDelegate, QTextDocument, QRectF, QIcon, Qt,
QApplication, QDialog, QVBoxLayout, QLabel, QDialogButtonBox, QStyle, QApplication, QDialog, QVBoxLayout, QLabel,
QStackedWidget, QWidget, QTableView, QGridLayout, QFontInfo, QPalette, QDialogButtonBox, QStyle, QStackedWidget, QWidget,
QTimer, pyqtSignal, QAbstractTableModel, QVariant, QSize, QListView, QTableView, QGridLayout, QFontInfo, QPalette, QTimer,
QPixmap, QAbstractListModel, QColor, QRect, QTextBrowser, QModelIndex) pyqtSignal, QAbstractTableModel, QVariant, QSize,
QListView, QPixmap, QAbstractListModel, QColor, QRect,
QTextBrowser, QStringListModel)
from PyQt4.QtWebKit import QWebView from PyQt4.QtWebKit import QWebView
from calibre.customize.ui import metadata_plugins from calibre.customize.ui import metadata_plugins
@ -44,6 +46,8 @@ class RichTextDelegate(QStyledItemDelegate): # {{{
def __init__(self, parent=None, max_width=160): def __init__(self, parent=None, max_width=160):
QStyledItemDelegate.__init__(self, parent) QStyledItemDelegate.__init__(self, parent)
self.max_width = max_width self.max_width = max_width
self.dummy_model = QStringListModel([' '], self)
self.dummy_index = self.dummy_model.index(0)
def to_doc(self, index, option=None): def to_doc(self, index, option=None):
doc = QTextDocument() doc = QTextDocument()
@ -66,7 +70,7 @@ class RichTextDelegate(QStyledItemDelegate): # {{{
return ans return ans
def paint(self, painter, option, index): def paint(self, painter, option, index):
QStyledItemDelegate.paint(self, painter, option, QModelIndex()) QStyledItemDelegate.paint(self, painter, option, self.dummy_index)
painter.save() painter.save()
painter.setClipRect(QRectF(option.rect)) painter.setClipRect(QRectF(option.rect))
painter.translate(option.rect.topLeft()) painter.translate(option.rect.topLeft())