def setCellData(self, cellType, cellId): """ setCellData(cellType: str, cellId: int) -> None Create an image based on the cell type and id. Then assign it to the label. If cellType is None, the cell will be drawn with transparent background. If cellType is '', the cell will be drawn with the caption 'Empty'. Otherwise, the cell will be drawn with white background containing cellType as caption and a small rounded shape on the lower right painted with cellId """ self.type = cellType self.id = cellId size = QtCore.QSize(*CurrentTheme.VIRTUAL_CELL_LABEL_SIZE) image = QtGui.QImage(size.width() + 12, size.height() + 12, QtGui.QImage.Format_ARGB32_Premultiplied) image.fill(0) font = QtGui.QFont() font.setStyleStrategy(QtGui.QFont.ForceOutline) painter = QtGui.QPainter() painter.begin(image) painter.setRenderHint(QtGui.QPainter.Antialiasing) if self.type is None: painter.setPen(QtCore.Qt.NoPen) painter.setBrush(QtCore.Qt.NoBrush) else: if self.type == '': painter.setPen(QtCore.Qt.gray) painter.setBrush(QtCore.Qt.NoBrush) else: painter.setPen(QtCore.Qt.black) painter.setBrush(QtCore.Qt.lightGray) painter.drawRoundRect( QtCore.QRectF(0.5, 0.5, image.width() - 1, image.height() - 1), 25, 25) painter.setFont(font) if self.type is not None: painter.drawText( QtCore.QRect(QtCore.QPoint(6, 6), size), QtCore.Qt.AlignCenter | QtCore.Qt.TextWrapAnywhere, split_camel_case(self.type)) # Draw the lower right corner number if there is an id if self.id >= 0 and self.type: QAnnotatedPipelineView.drawId( painter, image.rect(), self.id, QtCore.Qt.AlignRight | QtCore.Qt.AlignBottom) painter.end() self.setPixmap(QtGui.QPixmap.fromImage(image))
def setCellData(self, cellType, cellId): """ setCellData(cellType: str, cellId: int) -> None Create an image based on the cell type and id. Then assign it to the label. If cellType is None, the cell will be drawn with transparent background. If cellType is '', the cell will be drawn with the caption 'Empty'. Otherwise, the cell will be drawn with white background containing cellType as caption and a small rounded shape on the lower right painted with cellId """ self.type = cellType self.id = cellId size = QtCore.QSize(*CurrentTheme.VIRTUAL_CELL_LABEL_SIZE) image = QtGui.QImage(size.width() + 12, size.height()+ 12, QtGui.QImage.Format_ARGB32_Premultiplied) image.fill(0) font = QtGui.QFont() font.setStyleStrategy(QtGui.QFont.ForceOutline) painter = QtGui.QPainter() painter.begin(image) painter.setRenderHint(QtGui.QPainter.Antialiasing) if self.type==None: painter.setPen(QtCore.Qt.NoPen) painter.setBrush(QtCore.Qt.NoBrush) else: if self.type=='': painter.setPen(QtCore.Qt.gray) painter.setBrush(QtCore.Qt.NoBrush) else: painter.setPen(QtCore.Qt.black) painter.setBrush(QtCore.Qt.lightGray) painter.drawRoundRect(QtCore.QRectF(0.5, 0.5, image.width()-1, image.height()-1), 25, 25) painter.setFont(font) if self.type!=None: painter.drawText(QtCore.QRect(QtCore.QPoint(6, 6), size), QtCore.Qt.AlignCenter | QtCore.Qt.TextWrapAnywhere, split_camel_case(self.type)) # Draw the lower right corner number if there is an id if self.id>=0 and self.type: QAnnotatedPipelineView.drawId(painter, image.rect(), self.id, QtCore.Qt.AlignRight | QtCore.Qt.AlignBottom) painter.end() self.setPixmap(QtGui.QPixmap.fromImage(image))
def paint(self, painter, option, index): """ painter(painter: QPainter, option QStyleOptionViewItem, index: QModelIndex) -> None Repaint the top-level item to have a button-look style """ model = index.model() if (model.parent(index).isValid()==False or model.parent(index).parent().isValid()==False): style = self.treeView.style() r = option.rect textrect = QtCore.QRect(r.left() + 10, r.top(), r.width() - 10, r.height()) font = painter.font() font.setBold(True) painter.setFont(font) text = option.fontMetrics.elidedText( model.data(index, QtCore.Qt.DisplayRole), QtCore.Qt.ElideMiddle, textrect.width()-10) style.drawItemText(painter, textrect, QtCore.Qt.AlignLeft, option.palette, self.treeView.isEnabled(), text) painter.setPen(QtGui.QPen(QtCore.Qt.black)) fm = QtGui.QFontMetrics(font) size = fm.size(QtCore.Qt.TextSingleLine, text) #painter.drawLine(textrect.left()-5, # textrect.bottom()-1, # textrect.left()+size.width()+5, # textrect.bottom()-1) annotatedId = model.data(index, QtCore.Qt.UserRole+1) if annotatedId: idRect = QtCore.QRect( QtCore.QPoint(textrect.left()+size.width()+5, textrect.top()), textrect.bottomRight()) QAnnotatedPipelineView.drawId(painter, idRect, annotatedId, QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter) else: QtGui.QItemDelegate.paint(self, painter, option, index)