mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Workaround for PyQt copying dict stored in QModels
This commit is contained in:
parent
5505bb537a
commit
3562a9ff1f
@ -18,6 +18,7 @@ from io import BytesIO
|
|||||||
from itertools import count
|
from itertools import count
|
||||||
from multiprocessing.pool import ThreadPool
|
from multiprocessing.pool import ThreadPool
|
||||||
from threading import Event, Thread
|
from threading import Event, Thread
|
||||||
|
from xml.sax.saxutils import escape
|
||||||
|
|
||||||
from qt.core import (
|
from qt.core import (
|
||||||
QAbstractItemView,
|
QAbstractItemView,
|
||||||
@ -581,6 +582,10 @@ class Delegate(QStyledItemDelegate):
|
|||||||
|
|
||||||
SPACING = 10
|
SPACING = 10
|
||||||
|
|
||||||
|
def __init__(self, *a):
|
||||||
|
super().__init__(*a)
|
||||||
|
self.static_text_cache = {}
|
||||||
|
|
||||||
def sizeHint(self, option, index):
|
def sizeHint(self, option, index):
|
||||||
return QSize(COVER_SIZE[0] * 2, COVER_SIZE[1] + 2 * self.SPACING)
|
return QSize(COVER_SIZE[0] * 2, COVER_SIZE[1] + 2 * self.SPACING)
|
||||||
|
|
||||||
@ -598,11 +603,9 @@ class Delegate(QStyledItemDelegate):
|
|||||||
painter.setPen(QPen(QApplication.instance().palette().highlightedText().color()))
|
painter.setPen(QPen(QApplication.instance().palette().highlightedText().color()))
|
||||||
bottom = option.rect.bottom() - 2
|
bottom = option.rect.bottom() - 2
|
||||||
painter.drawLine(0, bottom, option.rect.right(), bottom)
|
painter.drawLine(0, bottom, option.rect.right(), bottom)
|
||||||
if 'static-text' not in theme:
|
visit = _('Right click to visit theme homepage') if theme.get('url') else ''
|
||||||
from xml.sax.saxutils import escape
|
text = _('''\
|
||||||
visit = _('Right click to visit theme homepage') if theme.get('url') else ''
|
<p><b><big>{title}<big></b><p>
|
||||||
theme['static-text'] = QStaticText(_('''\
|
|
||||||
<p><b>{title}</b><p>
|
|
||||||
<p>by <i>{author}</i> with <b>{number}</b> icons [{size}]</p>
|
<p>by <i>{author}</i> with <b>{number}</b> icons [{size}]</p>
|
||||||
<p>{description}</p>
|
<p>{description}</p>
|
||||||
<p>Version: {version} Number of users: {usage:n}</p>
|
<p>Version: {version} Number of users: {usage:n}</p>
|
||||||
@ -611,8 +614,11 @@ class Delegate(QStyledItemDelegate):
|
|||||||
number=theme.get('number', 0), description=escape(theme.get('description', '')),
|
number=theme.get('number', 0), description=escape(theme.get('description', '')),
|
||||||
size=human_readable(theme.get('compressed-size', 0)), version=theme.get('version', 1),
|
size=human_readable(theme.get('compressed-size', 0)), version=theme.get('version', 1),
|
||||||
usage=theme.get('usage', 0), visit=escape(visit)
|
usage=theme.get('usage', 0), visit=escape(visit)
|
||||||
))
|
)
|
||||||
painter.drawStaticText(COVER_SIZE[0] + self.SPACING, option.rect.top() + self.SPACING, theme['static-text'])
|
st = self.static_text_cache.get(text)
|
||||||
|
if st is None:
|
||||||
|
self.static_text_cache[text] = st = QStaticText(text)
|
||||||
|
painter.drawStaticText(COVER_SIZE[0] + self.SPACING, option.rect.top() + self.SPACING, st)
|
||||||
painter.restore()
|
painter.restore()
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user