/** * Draws the entity as a rectangle with a box underneith with a list of literals */ void EntityWidget::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { Q_UNUSED(option); Q_UNUSED(widget); setPenFromSettings(painter); if(UMLWidget::useFillColor()) painter->setBrush(UMLWidget::fillColor()); else painter->setBrush(m_scene->backgroundColor()); const int w = width(); const int h = height(); const QFontMetrics &fm = getFontMetrics(FT_NORMAL); int fontHeight = fm.lineSpacing(); const QString name = this->name(); painter->drawRect(0, 0, w, h); painter->setPen(textColor()); QFont font = UMLWidget::font(); font.setBold(true); painter->setFont(font); int y = 0; if (!m_umlObject->stereotype().isEmpty()) { painter->drawText(ENTITY_MARGIN, 0, w - ENTITY_MARGIN * 2, fontHeight, Qt::AlignCenter, m_umlObject->stereotype(true)); font.setItalic(m_umlObject->isAbstract()); painter->setFont(font); painter->drawText(ENTITY_MARGIN, fontHeight, w - ENTITY_MARGIN * 2, fontHeight, Qt::AlignCenter, name); font.setBold(false); font.setItalic(false); painter->setFont(font); y = fontHeight * 2; } else { font.setItalic(m_umlObject->isAbstract()); painter->setFont(font); painter->drawText(ENTITY_MARGIN, 0, w - ENTITY_MARGIN * 2, fontHeight, Qt::AlignCenter, name); font.setBold(false); font.setItalic(false); painter->setFont(font); y = fontHeight; } setPenFromSettings(painter); painter->drawLine(0, y, w, y); QFontMetrics fontMetrics(font); UMLClassifier *classifier = (UMLClassifier*)m_umlObject; UMLClassifierListItem* entityattribute = 0; UMLClassifierListItemList list = classifier->getFilteredList(UMLObject::ot_EntityAttribute); foreach (entityattribute, list) { QString text = entityattribute->name(); painter->setPen(textColor()); UMLEntityAttribute* casted = dynamic_cast<UMLEntityAttribute*>(entityattribute); if(casted && casted->indexType() == UMLEntityAttribute::Primary) { font.setUnderline(true); painter->setFont(font); font.setUnderline(false); } painter->drawText(ENTITY_MARGIN, y, fontMetrics.width(text), fontHeight, Qt::AlignVCenter, text); painter->setFont(font); y+=fontHeight; }
/** * Draws the entity as a rectangle with a box underneith with a list of literals */ void EntityWidget::paint(QPainter& p, int offsetX, int offsetY) { setPenFromSettings(p); if(UMLWidget::useFillColor()) p.setBrush(UMLWidget::fillColor()); else p.setBrush( m_scene->viewport()->palette().color(QPalette::Background) ); const int w = width(); const int h = height(); const QFontMetrics &fm = getFontMetrics(FT_NORMAL); int fontHeight = fm.lineSpacing(); const QString name = this->name(); p.drawRect(offsetX, offsetY, w, h); p.setPen(textColor()); QFont font = UMLWidget::font(); font.setBold(true); p.setFont(font); int y = 0; if ( !m_pObject->stereotype().isEmpty() ) { p.drawText(offsetX + ENTITY_MARGIN, offsetY, w - ENTITY_MARGIN * 2,fontHeight, Qt::AlignCenter, m_pObject->stereotype(true)); font.setItalic( m_pObject->isAbstract() ); p.setFont(font); p.drawText(offsetX + ENTITY_MARGIN, offsetY + fontHeight, w - ENTITY_MARGIN * 2, fontHeight, Qt::AlignCenter, name); font.setBold(false); font.setItalic(false); p.setFont(font); y = fontHeight * 2; } else { font.setItalic( m_pObject->isAbstract() ); p.setFont(font); p.drawText(offsetX + ENTITY_MARGIN, offsetY, w - ENTITY_MARGIN * 2, fontHeight, Qt::AlignCenter, name); font.setBold(false); font.setItalic(false); p.setFont(font); y = fontHeight; } setPenFromSettings(p); p.drawLine(offsetX, offsetY + y, offsetX + w - 1, offsetY + y); QFontMetrics fontMetrics(font); UMLClassifier *classifier = (UMLClassifier*)m_pObject; UMLClassifierListItem* entityattribute = 0; UMLClassifierListItemList list = classifier->getFilteredList(UMLObject::ot_EntityAttribute); foreach (entityattribute , list ) { QString text = entityattribute->name(); p.setPen(textColor()); UMLEntityAttribute* casted = dynamic_cast<UMLEntityAttribute*>( entityattribute ); if( casted && casted->indexType() == UMLEntityAttribute::Primary ) { font.setUnderline( true ); p.setFont( font ); font.setUnderline( false ); } p.drawText(offsetX + ENTITY_MARGIN, offsetY + y, fontMetrics.width(text), fontHeight, Qt::AlignVCenter, text); p.setFont( font ); y+=fontHeight; }