From 0a11860fd63df2be020846b04c017aa55d4cd9d2 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 11 Aug 2015 11:41:41 +0530 Subject: [PATCH] Book list: Fix the current row number being partially cutoff on some windows 10 machines. Fixes #1482993 [Book number appears cut when book is marked](https://bugs.launchpad.net/calibre/+bug/1482993) --- src/calibre/gui2/library/views.py | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/calibre/gui2/library/views.py b/src/calibre/gui2/library/views.py index 7e1743d3ef..1e2aab3543 100644 --- a/src/calibre/gui2/library/views.py +++ b/src/calibre/gui2/library/views.py @@ -13,7 +13,7 @@ from collections import OrderedDict from PyQt5.Qt import ( QTableView, Qt, QAbstractItemView, QMenu, pyqtSignal, QFont, QModelIndex, QIcon, QItemSelection, QMimeData, QDrag, QStyle, QPoint, QUrl, QHeaderView, - QStyleOptionHeader, QItemSelectionModel) + QStyleOptionHeader, QItemSelectionModel, QSize, QFontMetrics) from calibre.gui2.library.delegates import (RatingDelegate, PubDateDelegate, TextDelegate, DateDelegate, CompleteDelegate, CcTextDelegate, @@ -35,6 +35,7 @@ class HeaderView(QHeaderView): # {{{ self.current_font = QFont(self.font()) self.current_font.setBold(True) self.current_font.setItalic(True) + self.fm = QFontMetrics(self.current_font) def event(self, e): if e.type() in (e.HoverMove, e.HoverEnter): @@ -43,6 +44,25 @@ class HeaderView(QHeaderView): # {{{ self.hover = -1 return QHeaderView.event(self, e) + def sectionSizeFromContents(self, logical_index): + self.ensurePolished() + opt = QStyleOptionHeader() + self.initStyleOption(opt) + opt.section = logical_index + opt.orientation = self.orientation() + opt.fontMetrics = self.fm + model = self.parent().model() + opt.text = unicode(model.headerData(logical_index, opt.orientation, Qt.DisplayRole) or '') + if opt.orientation == Qt.Vertical: + try: + opt.icon = model.headerData(logical_index, opt.orientation, Qt.DecorationRole) + opt.iconAlignment = Qt.AlignVCenter + except (IndexError, ValueError, TypeError): + pass + if self.isSortIndicatorShown(): + opt.sortIndicator = QStyleOptionHeader.SortDown + return self.style().sizeFromContents(QStyle.CT_HeaderSection, opt, QSize(), self) + def paintSection(self, painter, rect, logical_index): opt = QStyleOptionHeader() self.initStyleOption(opt)