--- a/src/eric7/WebBrowser/GreaseMonkey/GreaseMonkeyConfiguration/GreaseMonkeyConfigurationListDelegate.py Wed Jul 13 11:16:20 2022 +0200 +++ b/src/eric7/WebBrowser/GreaseMonkey/GreaseMonkeyConfiguration/GreaseMonkeyConfigurationListDelegate.py Wed Jul 13 14:55:47 2022 +0200 @@ -22,163 +22,193 @@ Class implementing a delegate for the special list widget for GreaseMonkey scripts. """ + IconSize = 32 RemoveIconSize = 16 CheckBoxSize = 18 MinPadding = 5 ItemWidth = 200 - + def __init__(self, parent=None): """ Constructor - + @param parent reference to the parent object (QObject) """ super().__init__(parent) - - self.__removePixmap = UI.PixmapCache.getIcon( - "greaseMonkeyTrash").pixmap( - GreaseMonkeyConfigurationListDelegate.RemoveIconSize) + + self.__removePixmap = UI.PixmapCache.getIcon("greaseMonkeyTrash").pixmap( + GreaseMonkeyConfigurationListDelegate.RemoveIconSize + ) self.__rowHeight = 0 self.__padding = 0 - + def padding(self): """ Public method to get the padding used. - + @return padding used (integer) """ return self.__padding - + def paint(self, painter, option, index): """ Public method to paint the specified list item. - + @param painter painter object to paint to (QPainter) @param option style option used for painting (QStyleOptionViewItem) @param index model index of the item (QModelIndex) """ opt = QStyleOptionViewItem(option) self.initStyleOption(opt, index) - + widget = opt.widget style = widget.style() if widget is not None else QApplication.style() height = opt.rect.height() center = height // 2 + opt.rect.top() - + # Prepare title font titleFont = QFont(opt.font) titleFont.setBold(True) titleFont.setPointSize(titleFont.pointSize() + 1) - + titleMetrics = QFontMetrics(titleFont) colorRole = ( QPalette.ColorRole.Text - if Globals.isWindowsPlatform() else - (QPalette.ColorRole.HighlightedText - if opt.state & QStyle.StateFlag.State_Selected else - QPalette.ColorRole.Text) + if Globals.isWindowsPlatform() + else ( + QPalette.ColorRole.HighlightedText + if opt.state & QStyle.StateFlag.State_Selected + else QPalette.ColorRole.Text + ) ) - + leftPos = self.__padding rightPos = ( - opt.rect.right() - self.__padding - - GreaseMonkeyConfigurationListDelegate.RemoveIconSize + opt.rect.right() + - self.__padding + - GreaseMonkeyConfigurationListDelegate.RemoveIconSize ) - + # Draw background style.drawPrimitive( - QStyle.PrimitiveElement.PE_PanelItemViewItem, opt, painter, widget) - + QStyle.PrimitiveElement.PE_PanelItemViewItem, opt, painter, widget + ) + # Draw checkbox - checkBoxYPos = ( - center - - GreaseMonkeyConfigurationListDelegate.CheckBoxSize // 2 - ) + checkBoxYPos = center - GreaseMonkeyConfigurationListDelegate.CheckBoxSize // 2 opt2 = QStyleOptionViewItem(opt) if opt2.checkState == Qt.CheckState.Checked: opt2.state |= QStyle.StateFlag.State_On else: opt2.state |= QStyle.StateFlag.State_Off styleCheckBoxRect = style.subElementRect( - QStyle.SubElement.SE_CheckBoxIndicator, opt2, widget) + QStyle.SubElement.SE_CheckBoxIndicator, opt2, widget + ) opt2.rect = QRect( - leftPos, checkBoxYPos, - styleCheckBoxRect.width(), styleCheckBoxRect.height()) + leftPos, checkBoxYPos, styleCheckBoxRect.width(), styleCheckBoxRect.height() + ) style.drawPrimitive( - QStyle.PrimitiveElement.PE_IndicatorCheckBox, opt2, painter, - widget) + QStyle.PrimitiveElement.PE_IndicatorCheckBox, opt2, painter, widget + ) leftPos = opt2.rect.right() + self.__padding - + # Draw icon iconYPos = center - GreaseMonkeyConfigurationListDelegate.IconSize // 2 - iconRect = QRect(leftPos, iconYPos, - GreaseMonkeyConfigurationListDelegate.IconSize, - GreaseMonkeyConfigurationListDelegate.IconSize) + iconRect = QRect( + leftPos, + iconYPos, + GreaseMonkeyConfigurationListDelegate.IconSize, + GreaseMonkeyConfigurationListDelegate.IconSize, + ) pixmap = index.data(Qt.ItemDataRole.DecorationRole).pixmap( - GreaseMonkeyConfigurationListDelegate.IconSize) + GreaseMonkeyConfigurationListDelegate.IconSize + ) painter.drawPixmap(iconRect, pixmap) leftPos = iconRect.right() + self.__padding - + # Draw script name name = index.data(Qt.ItemDataRole.DisplayRole) leftTitleEdge = leftPos + 2 rightTitleEdge = rightPos - self.__padding try: - leftPosForVersion = ( - titleMetrics.horizontalAdvance(name) + self.__padding - ) + leftPosForVersion = titleMetrics.horizontalAdvance(name) + self.__padding except AttributeError: leftPosForVersion = titleMetrics.width(name) + self.__padding - nameRect = QRect(leftTitleEdge, opt.rect.top() + self.__padding, - rightTitleEdge - leftTitleEdge, titleMetrics.height()) + nameRect = QRect( + leftTitleEdge, + opt.rect.top() + self.__padding, + rightTitleEdge - leftTitleEdge, + titleMetrics.height(), + ) painter.setFont(titleFont) style.drawItemText( - painter, nameRect, - Qt.AlignmentFlag.AlignLeft, opt.palette, True, - name, colorRole) - + painter, + nameRect, + Qt.AlignmentFlag.AlignLeft, + opt.palette, + True, + name, + colorRole, + ) + # Draw version version = index.data(Qt.ItemDataRole.UserRole) versionRect = QRect( - nameRect.x() + leftPosForVersion, nameRect.y(), - rightTitleEdge - leftTitleEdge, titleMetrics.height()) + nameRect.x() + leftPosForVersion, + nameRect.y(), + rightTitleEdge - leftTitleEdge, + titleMetrics.height(), + ) versionFont = titleFont painter.setFont(versionFont) style.drawItemText( - painter, versionRect, - Qt.AlignmentFlag.AlignLeft, opt.palette, - True, version, colorRole) - + painter, + versionRect, + Qt.AlignmentFlag.AlignLeft, + opt.palette, + True, + version, + colorRole, + ) + # Draw description infoYPos = nameRect.bottom() + opt.fontMetrics.leading() infoRect = QRect( - nameRect.x(), infoYPos, - nameRect.width(), opt.fontMetrics.height()) + nameRect.x(), infoYPos, nameRect.width(), opt.fontMetrics.height() + ) info = opt.fontMetrics.elidedText( index.data(Qt.ItemDataRole.UserRole + 1), - Qt.TextElideMode.ElideRight, infoRect.width()) + Qt.TextElideMode.ElideRight, + infoRect.width(), + ) painter.setFont(opt.font) style.drawItemText( - painter, infoRect, + painter, + infoRect, Qt.AlignmentFlag.AlignLeft | Qt.TextFlag.TextSingleLine, - opt.palette, True, info, colorRole) - + opt.palette, + True, + info, + colorRole, + ) + # Draw remove button removeIconYPos = ( - center - - GreaseMonkeyConfigurationListDelegate.RemoveIconSize // 2 + center - GreaseMonkeyConfigurationListDelegate.RemoveIconSize // 2 ) removeIconRect = QRect( - rightPos, removeIconYPos, + rightPos, + removeIconYPos, + GreaseMonkeyConfigurationListDelegate.RemoveIconSize, GreaseMonkeyConfigurationListDelegate.RemoveIconSize, - GreaseMonkeyConfigurationListDelegate.RemoveIconSize) + ) painter.drawPixmap(removeIconRect, self.__removePixmap) - + def sizeHint(self, option, index): """ Public method to get a size hint for the specified list item. - + @param option style option used for painting (QStyleOptionViewItem) @param index model index of the item (QModelIndex) @return size hint (QSize) @@ -186,33 +216,28 @@ if not self.__rowHeight: opt = QStyleOptionViewItem(option) self.initStyleOption(opt, index) - + widget = opt.widget - style = ( - widget.style() if widget is not None - else QApplication.style() - ) - padding = style.pixelMetric( - QStyle.PixelMetric.PM_FocusFrameHMargin) + 1 - + style = widget.style() if widget is not None else QApplication.style() + padding = style.pixelMetric(QStyle.PixelMetric.PM_FocusFrameHMargin) + 1 + titleFont = opt.font titleFont.setBold(True) titleFont.setPointSize(titleFont.pointSize() + 1) - + self.__padding = ( padding if padding > GreaseMonkeyConfigurationListDelegate.MinPadding else GreaseMonkeyConfigurationListDelegate.MinPadding ) - + titleMetrics = QFontMetrics(titleFont) - + self.__rowHeight = ( - 2 * self.__padding + - opt.fontMetrics.leading() + - opt.fontMetrics.height() + - titleMetrics.height() + 2 * self.__padding + + opt.fontMetrics.leading() + + opt.fontMetrics.height() + + titleMetrics.height() ) - - return QSize(GreaseMonkeyConfigurationListDelegate.ItemWidth, - self.__rowHeight) + + return QSize(GreaseMonkeyConfigurationListDelegate.ItemWidth, self.__rowHeight)