From ef88bd24d7eaf9b04799c2fe8bfc654b0898f664 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 2 Aug 2023 20:59:26 +0530 Subject: [PATCH] Improve rendering of data file list --- .../gui2/dialogs/data_files_manager.py | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/calibre/gui2/dialogs/data_files_manager.py b/src/calibre/gui2/dialogs/data_files_manager.py index d1925e2a46..d1c5fc7687 100644 --- a/src/calibre/gui2/dialogs/data_files_manager.py +++ b/src/calibre/gui2/dialogs/data_files_manager.py @@ -10,7 +10,8 @@ from functools import partial from qt.core import ( QAbstractItemView, QAbstractListModel, QComboBox, QCursor, QDialogButtonBox, QHBoxLayout, QIcon, QItemSelection, QItemSelectionModel, QLabel, QListView, QMenu, - QPushButton, QSize, QStyledItemDelegate, Qt, QTimer, QVBoxLayout, pyqtSignal, sip, + QPushButton, QRect, QSize, QSizeF, QStyle, QStyledItemDelegate, Qt, QTextDocument, + QTimer, QVBoxLayout, pyqtSignal, sip, ) from calibre import human_readable, prepare_string_for_xml @@ -61,6 +62,26 @@ class Delegate(QStyledItemDelegate): else: editor.selectAll() + def paint(self, painter, option, index): + painter.save() + if option.state & QStyle.StateFlag.State_Selected: + painter.fillRect(option.rect, option.palette.highlight()) + dec = index.data(Qt.ItemDataRole.DecorationRole) + sz = QSize(option.rect.height(), option.rect.height()) + r = option.rect + ir = QRect(r.topLeft(), sz) + dec.paint(painter, ir) + r.adjust(ir.width(), 0, 0, 0) + lines = (index.data(Qt.ItemDataRole.DisplayRole) or '').splitlines() + d = QTextDocument() + d.setDocumentMargin(1) + d.setPageSize(QSizeF(r.size())) + d.setTextWidth(r.width()) + d.setHtml(f'{lines[0]}
{lines[1]}') + painter.translate(r.topLeft()) + d.drawContents(painter) + painter.restore() + class Files(QAbstractListModel):