mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Edit book: Reports: Fix rendering of images in the images report table
This commit is contained in:
parent
5228e61a0e
commit
d380be1e1e
@ -4,39 +4,42 @@
|
|||||||
__license__ = 'GPL v3'
|
__license__ = 'GPL v3'
|
||||||
__copyright__ = '2015, Kovid Goyal <kovid at kovidgoyal.net>'
|
__copyright__ = '2015, Kovid Goyal <kovid at kovidgoyal.net>'
|
||||||
|
|
||||||
import time, textwrap, os
|
import os
|
||||||
from threading import Thread
|
|
||||||
from contextlib import suppress
|
|
||||||
from operator import itemgetter
|
|
||||||
from functools import partial, lru_cache
|
|
||||||
from collections import defaultdict
|
|
||||||
from csv import writer as csv_writer
|
|
||||||
from io import StringIO
|
|
||||||
|
|
||||||
import regex
|
import regex
|
||||||
|
import textwrap
|
||||||
|
import time
|
||||||
|
from collections import defaultdict
|
||||||
|
from contextlib import suppress
|
||||||
|
from csv import writer as csv_writer
|
||||||
|
from functools import lru_cache, partial
|
||||||
|
from io import StringIO
|
||||||
|
from operator import itemgetter
|
||||||
from qt.core import (
|
from qt.core import (
|
||||||
QSize, QStackedLayout, QLabel, QVBoxLayout, Qt, QWidget, pyqtSignal,
|
QAbstractItemModel, QAbstractItemView, QAbstractTableModel, QApplication,
|
||||||
QAbstractTableModel, QTableView, QSortFilterProxyModel, QIcon, QListWidget,
|
QByteArray, QComboBox, QDialogButtonBox, QFont, QFontDatabase, QHBoxLayout,
|
||||||
QListWidgetItem, QLineEdit, QStackedWidget, QSplitter, QByteArray, QPixmap,
|
QIcon, QLabel, QLineEdit, QListWidget, QListWidgetItem, QMenu, QModelIndex,
|
||||||
QStyledItemDelegate, QModelIndex, QRect, QStyle, QPalette, QTimer, QMenu,
|
QPalette, QPixmap, QRadioButton, QRect, QSize, QSortFilterProxyModel, QSplitter,
|
||||||
QAbstractItemModel, QTreeView, QFont, QRadioButton, QHBoxLayout,
|
QStackedLayout, QStackedWidget, QStyle, QStyledItemDelegate, Qt, QTableView,
|
||||||
QFontDatabase, QComboBox, QUrl, QAbstractItemView, QDialogButtonBox, QTextCursor)
|
QTextCursor, QTimer, QTreeView, QUrl, QVBoxLayout, QWidget, pyqtSignal
|
||||||
|
)
|
||||||
|
from threading import Thread
|
||||||
|
|
||||||
from calibre import human_readable, fit_image
|
from calibre import fit_image, human_readable
|
||||||
from calibre.constants import DEBUG
|
from calibre.constants import DEBUG
|
||||||
from calibre.ebooks.oeb.polish.report import (
|
from calibre.ebooks.oeb.polish.report import (
|
||||||
gather_data, CSSEntry, CSSFileMatch, MatchLocation, ClassEntry,
|
ClassElement, ClassEntry, ClassFileMatch, CSSEntry, CSSFileMatch, CSSRule,
|
||||||
ClassFileMatch, ClassElement, CSSRule, LinkLocation)
|
LinkLocation, MatchLocation, gather_data
|
||||||
from calibre.gui2 import error_dialog, question_dialog, choose_save_file, open_url
|
)
|
||||||
from calibre.utils.webengine import secure_webengine
|
from calibre.gui2 import choose_save_file, error_dialog, open_url, question_dialog
|
||||||
from calibre.gui2.webengine import RestartingWebEngineView
|
|
||||||
from calibre.gui2.tweak_book import current_container, tprefs, dictionaries
|
|
||||||
from calibre.gui2.tweak_book.widgets import Dialog
|
|
||||||
from calibre.gui2.progress_indicator import ProgressIndicator
|
from calibre.gui2.progress_indicator import ProgressIndicator
|
||||||
from calibre.utils.icu import primary_contains, numeric_sort_key
|
from calibre.gui2.tweak_book import current_container, dictionaries, tprefs
|
||||||
from calibre.utils.unicode_names import character_name_from_code
|
from calibre.gui2.tweak_book.widgets import Dialog
|
||||||
|
from calibre.gui2.webengine import RestartingWebEngineView
|
||||||
|
from calibre.utils.icu import numeric_sort_key, primary_contains
|
||||||
from calibre.utils.localization import calibre_langcode_to_name, canonicalize_lang
|
from calibre.utils.localization import calibre_langcode_to_name, canonicalize_lang
|
||||||
from polyglot.builtins import iteritems, as_bytes
|
from calibre.utils.unicode_names import character_name_from_code
|
||||||
|
from calibre.utils.webengine import secure_webengine
|
||||||
|
from polyglot.builtins import as_bytes, iteritems
|
||||||
|
|
||||||
# Utils {{{
|
# Utils {{{
|
||||||
|
|
||||||
@ -379,26 +382,31 @@ class ImagesDelegate(QStyledItemDelegate):
|
|||||||
QStyledItemDelegate.__init__(self, *args)
|
QStyledItemDelegate.__init__(self, *args)
|
||||||
|
|
||||||
def sizeHint(self, option, index):
|
def sizeHint(self, option, index):
|
||||||
ans = QStyledItemDelegate.sizeHint(self, option, index)
|
style = (option.styleObject or self.parent() or QApplication.instance()).style()
|
||||||
|
self.initStyleOption(option, index)
|
||||||
|
ans = style.sizeFromContents(QStyle.ContentsType.CT_ItemViewItem, option, QSize(), option.styleObject or self.parent())
|
||||||
entry = index.data(Qt.ItemDataRole.UserRole)
|
entry = index.data(Qt.ItemDataRole.UserRole)
|
||||||
if entry is None:
|
if entry is None:
|
||||||
return ans
|
return ans
|
||||||
th = self.parent().thumbnail_height
|
th = int(self.parent().thumbnail_height * self.parent().devicePixelRatio())
|
||||||
pmap = self.pixmap(th, entry._replace(usage=()), self.parent().devicePixelRatioF())
|
pmap = self.pixmap(th, entry._replace(usage=()), self.parent().devicePixelRatioF())
|
||||||
if pmap.isNull():
|
if pmap.isNull():
|
||||||
width = height = 0
|
width = height = 0
|
||||||
else:
|
else:
|
||||||
width, height = pmap.width(), pmap.height()
|
width, height = int(pmap.width() / pmap.devicePixelRatio()), int(pmap.height() / pmap.devicePixelRatio())
|
||||||
m = self.MARGIN * 2
|
m = self.MARGIN * 2
|
||||||
return QSize(max(width + m, ans.width()), height + m + self.MARGIN + ans.height())
|
return QSize(max(width + m, ans.width()), height + m + self.MARGIN + ans.height())
|
||||||
|
|
||||||
def paint(self, painter, option, index):
|
def paint(self, painter, option, index):
|
||||||
QStyledItemDelegate.paint(self, painter, option, ROOT)
|
style = (option.styleObject or self.parent() or QApplication.instance()).style()
|
||||||
|
self.initStyleOption(option, index)
|
||||||
|
option.text = ''
|
||||||
|
style.drawControl(QStyle.ControlElement.CE_ItemViewItem, option, painter, option.styleObject or self.parent())
|
||||||
entry = index.data(Qt.ItemDataRole.UserRole)
|
entry = index.data(Qt.ItemDataRole.UserRole)
|
||||||
if entry is None:
|
if entry is None:
|
||||||
return
|
return
|
||||||
painter.save()
|
painter.save()
|
||||||
th = self.parent().thumbnail_height
|
th = int(self.parent().thumbnail_height * self.parent().devicePixelRatio())
|
||||||
pmap = self.pixmap(th, entry._replace(usage=()), painter.device().devicePixelRatioF())
|
pmap = self.pixmap(th, entry._replace(usage=()), painter.device().devicePixelRatioF())
|
||||||
if pmap.isNull():
|
if pmap.isNull():
|
||||||
bottom = option.rect.top()
|
bottom = option.rect.top()
|
||||||
@ -1477,8 +1485,9 @@ class Reports(Dialog):
|
|||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
from calibre.gui2 import Application
|
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
from calibre.gui2 import Application
|
||||||
app = Application([])
|
app = Application([])
|
||||||
from calibre.gui2.tweak_book import set_current_container
|
from calibre.gui2.tweak_book import set_current_container
|
||||||
from calibre.gui2.tweak_book.boss import get_container
|
from calibre.gui2.tweak_book.boss import get_container
|
||||||
|
Loading…
x
Reference in New Issue
Block a user