def paint(self, painter, option, index): """ Paint performs low-level painting for the item. :type painter: QtWidgets.QPainter :type option: QtWidgets.QStyleOptionViewItem :type index: QtCore.QModelIndex :rtype: None """ self.setRect(QtCore.QRect(option.rect)) painter.save() try: self.paintBackground(painter, option, index) self.paintIcon(painter, option, index) if index.column() == 0 and self.sliderValue() != 0: self.paintSlider(painter, option, index) if self.isTextVisible(): self.paintText(painter, option, index) if index.column() == 0: self.paintTypeIcon(painter, option) if index.column() == 0 and self.imageSequence(): self.paintPlayhead(painter, option) finally: painter.restore()
def visualRect(self, option): """ Return the visual rect for the item. :type option: QtWidgets.QStyleOptionViewItem :rtype: QtCore.QRect """ return QtCore.QRect(option.rect)
def rubberBandMoveEvent(self, event): """ Triggered when the user moves the mouse over the current viewport. :type event: QtWidgets.QMouseEvent :rtype: None """ if self.rubberBand() and self._rubberBandStartPos: rect = QtCore.QRect(self._rubberBandStartPos, event.pos()) rect = rect.normalized() self.rubberBand().setGeometry(rect)
def visualRect(self, option): """ Return the visual rect for the item. :type option: QtWidgets.QStyleOptionViewItem :rtype: QtCore.QRect """ rect = QtCore.QRect(option.rect) rect.setX(self.PADDING_LEFT * self.dpi()) rect.setWidth(self.sizeHint().width()) return rect
def rubberBandStartEvent(self, event): """ Triggered when the user presses an empty area. :type event: QtWidgets.QMouseEvent :rtype: None """ self._rubberBandStartPos = event.pos() rect = QtCore.QRect(self._rubberBandStartPos, QtCore.QSize()) rubberBand = self.rubberBand() rubberBand.setGeometry(rect) rubberBand.show()
def typeIconRect(self, option): """ Return the type icon rect. :rtype: QtGui.QRect """ padding = 2 * self.dpi() r = self.iconRect(option) x = r.x() + padding y = r.y() + padding rect = QtCore.QRect(x, y, 13 * self.dpi(), 13 * self.dpi()) return rect
def paintIcon(self, painter, option, index, align=None): """ Draw the icon for the item. :type painter: QtWidgets.QPainter :type option: QtWidgets.QStyleOptionViewItem :rtype: None """ column = index.column() pixmap = self.pixmap(column) if not pixmap: return rect = self.iconRect(option) pixmap = self.scalePixmap(pixmap, rect) pixmapRect = QtCore.QRect(rect) pixmapRect.setWidth(pixmap.width()) pixmapRect.setHeight(pixmap.height()) align = QtCore.Qt.AlignHCenter | QtCore.Qt.AlignVCenter x, y = 0, 0 isAlignBottom = align == QtCore.Qt.AlignBottom | QtCore.Qt.AlignLeft \ or align == QtCore.Qt.AlignBottom | QtCore.Qt.AlignHCenter \ or align == QtCore.Qt.AlignBottom | QtCore.Qt.AlignRight isAlignHCenter = align == QtCore.Qt.AlignHCenter \ or align == QtCore.Qt.AlignCenter \ or align == QtCore.Qt.AlignHCenter | QtCore.Qt.AlignBottom \ or align == QtCore.Qt.AlignHCenter | QtCore.Qt.AlignTop isAlignVCenter = align == QtCore.Qt.AlignVCenter \ or align == QtCore.Qt.AlignCenter \ or align == QtCore.Qt.AlignVCenter | QtCore.Qt.AlignLeft \ or align == QtCore.Qt.AlignVCenter | QtCore.Qt.AlignRight if isAlignHCenter: x += float(rect.width() - pixmap.width()) / 2 if isAlignVCenter: y += float(rect.height() - pixmap.height()) / 2 elif isAlignBottom: y += float(rect.height() - pixmap.height()) pixmapRect.translate(x, y) painter.drawPixmap(pixmapRect, pixmap)
def drawIconBorder(self, painter, pixmapRect): """ Draw a border around the icon. :type painter: QtWidgets.QPainter :type pixmapRect: QtWidgets.QRect :rtype: None """ pixmapRect = QtCore.QRect(pixmapRect) pixmapRect.setX(pixmapRect.x() - 5) pixmapRect.setY(pixmapRect.y() - 5) pixmapRect.setWidth(pixmapRect.width() + 5) pixmapRect.setHeight(pixmapRect.height() + 5) color = QtGui.QColor(255, 255, 255, 10) painter.setPen(QtGui.QPen(QtCore.Qt.NoPen)) painter.setBrush(QtGui.QBrush(color)) painter.drawRect(pixmapRect)
def paintRow(self, painter, option, index): """ Paint performs low-level painting for the item. :type painter: QtWidgets.QPainter :type option: QtWidgets.QStyleOptionViewItem :type index: QtCore.QModelIndex :rtype: None """ self.setRect(QtCore.QRect(option.rect)) painter.save() try: self.paintBackground(painter, option, index) if self.isTextVisible(): self._paintText(painter, option, 1) finally: painter.restore()
def dragPixmap(self, item, items): """ Show the drag pixmap for the given item. :type item: studioqt.Item :type items: list[studioqt.Item] :rtype: QtGui.QPixmap """ rect = self.visualRect(self.indexFromItem(item)) pixmap = QtGui.QPixmap() pixmap = pixmap.grabWidget(self, rect) if len(items) > 1: cWidth = 35 cPadding = 5 cText = str(len(items)) cX = pixmap.rect().center().x() - float(cWidth / 2) cY = pixmap.rect().top() + cPadding cRect = QtCore.QRect(cX, cY, cWidth, cWidth) painter = QtGui.QPainter(pixmap) painter.setRenderHint(QtGui.QPainter.Antialiasing) painter.setPen(QtCore.Qt.NoPen) painter.setBrush(self.itemsWidget().backgroundSelectedColor()) painter.drawEllipse(cRect.center(), float(cWidth / 2), float(cWidth / 2)) font = QtGui.QFont('Serif', 12, QtGui.QFont.Light) painter.setFont(font) painter.setPen(self.itemsWidget().textSelectedColor()) painter.drawText(cRect, QtCore.Qt.AlignCenter, str(cText)) return pixmap
def _paintText(self, painter, option, column): if self.itemsWidget().isIconView(): text = self.name() else: label = self.labelFromColumn(column) text = self.displayText(label) isSelected = option.state & QtWidgets.QStyle.State_Selected if isSelected: color = self.textSelectedColor() else: color = self.textColor() visualRect = self.visualRect(option) width = visualRect.width() height = visualRect.height() padding = self.padding() x = padding / 2 y = padding / 2 visualRect.translate(x, y) visualRect.setWidth(width - padding) visualRect.setHeight(height - padding) font = self.font(column) align = self.textAlignment(column) metrics = QtGui.QFontMetricsF(font) if text: textWidth = metrics.width(text) else: textWidth = 1 # # Check if the current text fits within the rect. if textWidth > visualRect.width() - padding: visualWidth = visualRect.width() text = metrics.elidedText(text, QtCore.Qt.ElideRight, visualWidth) align = QtCore.Qt.AlignLeft align = align | QtCore.Qt.AlignVCenter rect = QtCore.QRect(visualRect) if self.itemsWidget().isIconView(): if self.isLabelOverItem() or self.isLabelUnderItem(): padding = 8 if padding < 8 else padding height = metrics.height() + (padding / 2) y = (rect.y() + rect.height()) - height rect.setY(y) rect.setHeight(height) if self.isLabelOverItem(): color2 = self.itemsWidget().backgroundColor().toRgb() color2.setAlpha(200) painter.setPen(QtCore.Qt.NoPen) painter.setBrush(QtGui.QBrush(color2)) painter.drawRect(rect) pen = QtGui.QPen(color) painter.setPen(pen) painter.setFont(font) painter.drawText(rect, align, text)