/** * Overrides the standard paint event. */ void UseCaseWidget::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { Q_UNUSED(option); Q_UNUSED(widget); setPenFromSettings(painter); if (UMLWidget::useFillColor()) painter->setBrush(UMLWidget::fillColor()); QFont font = UMLWidget::font(); font.setUnderline(false); font.setBold(false); font.setItalic(m_umlObject->isAbstract()); painter->setFont(font); const QFontMetrics &fm = getFontMetrics(FT_NORMAL); const int fontHeight = fm.lineSpacing(); const int w = width(); const int h = height(); //int middleX = w / 2; bool drawStereotype = umlObject() && !umlObject()->stereotype().isEmpty(); const int textStartY = (h / 2) - (drawStereotype ? fontHeight / 4 : fontHeight / 2); painter->drawEllipse(0, 0, w, h); painter->setPen(textColor()); if (drawStereotype) painter->drawText(UC_MARGIN, textStartY-fontHeight, w - UC_MARGIN * 2, fontHeight, Qt::AlignCenter, umlObject()->stereotype(true)); painter->drawText(UC_MARGIN, textStartY, w - UC_MARGIN * 2, fontHeight, Qt::AlignCenter, name()); setPenFromSettings(painter); UMLWidget::paint(painter, option, widget); }
/** * Draws a circle and a solid arrow line and a stick arrow head. */ void MessageWidget::paintFound(QPainter *painter, const QStyleOptionGraphicsItem *option) { int x1 = m_pOw[Uml::RoleType::A]->centerX(); int x2 = m_xclicked; int w = width(); int h = height(); int offsetX = 0; int offsetY = 0; bool messageOverlapsA = m_pOw[Uml::RoleType::A]->messageOverlap(y(), this); //bool messageOverlapsB = m_pOw[Uml::RoleType::B]->messageOverlap(y(), this); if(x1 < x2) { if (messageOverlapsA) { offsetX += 7; w -= 7; } setPenFromSettings(painter); painter->setBrush(WidgetBase::lineColor()); painter->drawEllipse(offsetX + w - h, offsetY, h, h); paintArrow(painter, offsetX, offsetY + h/2, w, Qt::LeftArrow); if (messageOverlapsA) { offsetX -= 7; } } else { if (messageOverlapsA) { w -= 7; } setPenFromSettings(painter); painter->setBrush(WidgetBase::lineColor()); painter->drawEllipse(offsetX, offsetY, h, h); paintArrow(painter, offsetX, offsetY + h/2, w, Qt::RightArrow); } UMLWidget::paint(painter, option); }
/** * Draw the object as an object (default). */ void ObjectWidget::paintObject(QPainter *painter) { QFont oldFont = painter->font(); QFont font = UMLWidget::font(); font.setUnderline(true); painter->setFont(font); setPenFromSettings(painter); if(UMLWidget::useFillColor()) painter->setBrush(UMLWidget::fillColor()); else painter->setBrush(m_scene->backgroundColor()); const int w = width(); const int h = height(); const QString t = m_instanceName + QLatin1String(" : ") + name(); int multiInstOfst = 0; if (m_multipleInstance) { painter->drawRect(10, 10, w - 10, h - 10); painter->drawRect(5, 5, w - 10, h - 10); multiInstOfst = 10; } painter->drawRect(0, 0, w - multiInstOfst, h - multiInstOfst); painter->setPen(textColor()); painter->drawText(O_MARGIN, O_MARGIN, w - O_MARGIN * 2 - multiInstOfst, h - O_MARGIN * 2 - multiInstOfst, Qt::AlignCenter, t); painter->setFont(oldFont); }
/** * Draw the object as an actor. */ void ObjectWidget::paintActor(QPainter *painter) { const QFontMetrics &fm = getFontMetrics(FT_UNDERLINE); setPenFromSettings(painter); if (UMLWidget::useFillColor()) painter->setBrush(UMLWidget::fillColor()); const int w = width(); const int textStartY = A_HEIGHT + A_MARGIN; const int fontHeight = fm.lineSpacing(); const int middleX = w / 2; const int thirdH = A_HEIGHT / 3; //draw actor painter->drawEllipse(middleX - A_WIDTH / 2, 0, A_WIDTH, thirdH);//head painter->drawLine(middleX, thirdH, middleX, thirdH * 2);//body painter->drawLine(middleX, 2 * thirdH, middleX - A_WIDTH / 2, A_HEIGHT);//left leg painter->drawLine(middleX, 2 * thirdH, middleX + A_WIDTH / 2, A_HEIGHT);//right leg painter->drawLine(middleX - A_WIDTH / 2, thirdH + thirdH / 2, middleX + A_WIDTH / 2, thirdH + thirdH / 2);//arms //draw text painter->setPen(textColor()); QString t = m_instanceName + QLatin1String(" : ") + name(); painter->drawText(A_MARGIN, textStartY, w - A_MARGIN * 2, fontHeight, Qt::AlignCenter, t); }
void DatatypeWidget::draw(QPainter& p, int offsetX, int offsetY) { setPenFromSettings(p); if (UMLWidget::getUseFillColour()) { p.setBrush(UMLWidget::getFillColour()); } else { p.setBrush( m_pView->viewport()->palette().color(QPalette::Background) ); } int w = width(); int h = height(); QFontMetrics &fm = getFontMetrics(FT_NORMAL); int fontHeight = fm.lineSpacing(); p.drawRect(offsetX, offsetY, w, h); p.setPen(QPen(Qt::black)); QFont font = UMLWidget::font(); font.setBold(true); p.setFont(font); p.drawText(offsetX + DATATYPE_MARGIN, offsetY, w - DATATYPE_MARGIN* 2,fontHeight, Qt::AlignCenter, m_pObject->stereotype(true)); font.setItalic( m_pObject->isAbstract() ); p.setFont(font); p.drawText(offsetX + DATATYPE_MARGIN, offsetY + fontHeight, w - DATATYPE_MARGIN * 2, fontHeight, Qt::AlignCenter, name()); if (m_bSelected) { drawSelected(&p, offsetX, offsetY); } }
void RegionWidget::paint(QPainter & p, int offsetX, int offsetY) { setPenFromSettings(p); const int w = width(); const int h = height(); QPen pen = p.pen(); { setPenFromSettings(p); pen.setColor ( Qt::red ); pen.setStyle ( Qt::DashLine ); p.setPen( pen ); p.drawRoundRect(offsetX, offsetY, w, h, (h * 60) / w, 60); } if(m_selected) drawSelected(&p, offsetX, offsetY); }
/** * Draws a rectangle. */ void BoxWidget::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { Q_UNUSED(option); Q_UNUSED(widget); setPenFromSettings(painter); painter->drawRect(0, 0, width(), height()); UMLWidget::paint(painter, option, widget); }
/** * Override default method. */ void ObjectWidget::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { Q_UNUSED(option); Q_UNUSED(widget); if (m_drawAsActor) paintActor(painter); else paintObject(painter); setPenFromSettings(painter); UMLWidget::paint(painter, option, widget); }
/** * Overrides standard method. */ void PackageWidget::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) ); int w = width(); int h = height(); QFont font = UMLWidget::font(); font.setBold(true); //FIXME italic is true when a package is first created until you click elsewhere, not sure why font.setItalic(false); const QFontMetrics &fm = getFontMetrics(FT_BOLD); const int fontHeight = fm.lineSpacing(); p.drawRect(offsetX, offsetY, 50, fontHeight); if (m_pObject->stereotype() == "subsystem") { const int fHalf = fontHeight / 2; const int symY = offsetY + fHalf; const int symX = offsetX + 38; p.drawLine(symX, symY, symX, symY + fHalf - 2); // left leg p.drawLine(symX + 8, symY, symX + 8, symY + fHalf - 2); // right leg p.drawLine(symX, symY, symX + 8, symY); // waist p.drawLine(symX + 4, symY, symX + 4, symY - fHalf + 2); // head } p.drawRect(offsetX, offsetY + fontHeight - 1, w, h - fontHeight); p.setPen(textColor()); p.setFont(font); int lines = 1; if (m_pObject != NULL) { QString stereotype = m_pObject->stereotype(); if (!stereotype.isEmpty()) { p.drawText(offsetX, offsetY + fontHeight + PACKAGE_MARGIN, w, fontHeight, Qt::AlignCenter, m_pObject->stereotype(true)); lines = 2; } } p.drawText(offsetX, offsetY + (fontHeight*lines) + PACKAGE_MARGIN, w, fontHeight, Qt::AlignCenter, name() ); if(m_selected) { drawSelected(&p, offsetX, offsetY); } }
/** * Override default method. */ void NoteWidget::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { Q_UNUSED(option); Q_UNUSED(widget); const int margin = 10; int w = width(); int h = height(); const QFontMetrics &fm = getFontMetrics(FT_NORMAL); const int fontHeight = fm.lineSpacing(); QPolygon poly(6); poly.setPoint(0, 0, 0); poly.setPoint(1, 0, h); poly.setPoint(2, w, h); poly.setPoint(3, w, margin); poly.setPoint(4, w - margin, 0); poly.setPoint(5, 0, 0); setPenFromSettings(painter); if (UMLWidget::useFillColor()) { QBrush brush(UMLWidget::fillColor()); painter->setBrush(brush); painter->drawPolygon(poly); } else painter->drawPolyline(poly); painter->drawLine(w - margin, 0, w - margin, margin); painter->drawLine(w - margin, margin, w, margin); painter->setPen(textColor()); switch(m_noteType) { case NoteWidget::PreCondition : painter->drawText(0, margin, w, fontHeight, Qt::AlignCenter, QLatin1String("<< precondition >>")); break; case NoteWidget::PostCondition : painter->drawText(0, margin, w, fontHeight, Qt::AlignCenter, QLatin1String("<< postcondition >>")); break; case NoteWidget::Transformation : painter->drawText(0, margin, w, fontHeight, Qt::AlignCenter, QLatin1String("<< transformation >>")); break; case NoteWidget::Normal : default : break; } UMLWidget::paint(painter, option, widget); // paintText(&p, 0, 0); paintTextWordWrap(painter); }
/** * Overrides the standard paint event. */ void PreconditionWidget::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { Q_UNUSED(option); Q_UNUSED(widget); int w = width(); int h = height(); int x = m_objectWidget->x() + m_objectWidget->width() / 2; x -= w/2; setX(x); int y = this->y(); //test if y isn't above the object if (y <= m_objectWidget->y() + m_objectWidget->height()) { y = m_objectWidget->y() + m_objectWidget->height() + 15; } if (y + h >= m_objectWidget->getEndLineY()) { y = m_objectWidget->getEndLineY() - h; } setY(y); setPenFromSettings(painter); if (UMLWidget::useFillColor()) { painter->setBrush(UMLWidget::fillColor()); } { const QFontMetrics &fm = getFontMetrics(FT_NORMAL); const int fontHeight = fm.lineSpacing(); const QString precondition_value = QLatin1String("{ ") + name() + QLatin1String(" }"); //int middleX = w / 2; int textStartY = (h / 2) - (fontHeight / 2); painter->drawRoundRect(0, 0, w, h, (h * 60) / w, 60); painter->setPen(textColor()); painter->setFont(UMLWidget::font()); painter->drawText(PRECONDITION_MARGIN, textStartY, w - PRECONDITION_MARGIN * 2, fontHeight, Qt::AlignCenter, precondition_value); } UMLWidget::paint(painter, option, widget); }
/** * Reimplemented from UMLWidget and calls other paint...() methods * depending on the message type. */ void MessageWidget::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { Q_UNUSED(option); Q_UNUSED(widget); if(!m_pOw[Uml::RoleType::A] || !m_pOw[Uml::RoleType::B]) { return; } setPenFromSettings(painter); if (m_sequenceMessageType == Uml::SequenceMessage::Synchronous) { paintSynchronous(painter, option); } else if (m_sequenceMessageType == Uml::SequenceMessage::Asynchronous) { paintAsynchronous(painter, option); } else if (m_sequenceMessageType == Uml::SequenceMessage::Creation) { paintCreation(painter, option); } else if (m_sequenceMessageType == Uml::SequenceMessage::Lost) { paintLost(painter, option); } else if (m_sequenceMessageType == Uml::SequenceMessage::Found) { paintFound(painter, option); } else { uWarning() << "Unknown message type"; } }
void PreconditionWidget::paint(QPainter & p, int /*offsetX*/, int offsetY) { int w = width(); int h = height(); int x = m_pOw->getX() + m_pOw->getWidth() / 2; x -= w/2; setX(x); int y = offsetY; //test if y isn't above the object if (y <= m_pOw->getY() + m_pOw->getHeight() ) { y = m_pOw->getY() + m_pOw->getHeight() + 15; } if (y + h >= m_pOw->getEndLineY()) { y = m_pOw->getEndLineY() - h; } setY(y); setPenFromSettings(p); if ( UMLWidget::useFillColor() ) { p.setBrush( UMLWidget::fillColor() ); } { const QFontMetrics &fm = getFontMetrics(FT_NORMAL); const int fontHeight = fm.lineSpacing(); const QString precondition_value = "{ " + name() + " }"; //int middleX = w / 2; int textStartY = (h / 2) - (fontHeight / 2); p.drawRoundRect(x, y, w, h, (h * 60) / w, 60); p.setPen(textColor()); p.setFont( UMLWidget::font() ); p.drawText(x + PRECONDITION_MARGIN, y + textStartY, w - PRECONDITION_MARGIN * 2, fontHeight, Qt::AlignCenter, precondition_value); } if(m_selected) drawSelected(&p, x, y); }
/** * Overrides standard method. */ void NodeWidget::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 int wDepth = (w/3 > DEPTH ? DEPTH : w/3); const int hDepth = (h/3 > DEPTH ? DEPTH : h/3); const int bodyOffsetY = hDepth; const int bodyWidth = w - wDepth; const int bodyHeight = h - hDepth; QFont font = UMLWidget::font(); font.setBold(true); const QFontMetrics &fm = getFontMetrics(FT_BOLD); const int fontHeight = fm.lineSpacing(); QString nameStr = name(); QPolygon pointArray(5); pointArray.setPoint(0, 0, bodyOffsetY); pointArray.setPoint(1, wDepth, 0); pointArray.setPoint(2, w, 0); pointArray.setPoint(3, w, bodyHeight); pointArray.setPoint(4, bodyWidth, h); painter->drawPolygon(pointArray); painter->drawRect(0, bodyOffsetY, bodyWidth, bodyHeight); painter->drawLine(w, 0, bodyWidth, bodyOffsetY); painter->setPen(textColor()); painter->setFont(font); int lines = 1; if (m_umlObject) { QString stereotype = m_umlObject->stereotype(); if (!stereotype.isEmpty()) { painter->drawText(0, bodyOffsetY + (bodyHeight/2) - fontHeight, bodyWidth, fontHeight, Qt::AlignCenter, m_umlObject->stereotype(true)); lines = 2; } } if (UMLWidget::isInstance()) { font.setUnderline(true); painter->setFont(font); nameStr = UMLWidget::instanceName() + QLatin1String(" : ") + nameStr; } if (lines == 1) { painter->drawText(0, bodyOffsetY + (bodyHeight/2) - (fontHeight/2), bodyWidth, fontHeight, Qt::AlignCenter, nameStr); } else { painter->drawText(0, bodyOffsetY + (bodyHeight/2), bodyWidth, fontHeight, Qt::AlignCenter, nameStr); } UMLWidget::paint(painter, option, widget); }
/** * Overrides the standard paint event. */ void StateWidget::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { Q_UNUSED(option); Q_UNUSED(widget); const qreal w = width(); const qreal h = height(); if (w == 0 || h == 0) return; setPenFromSettings(painter); switch (m_stateType) { case StateWidget::Normal: { if (UMLWidget::useFillColor()) { painter->setBrush(UMLWidget::fillColor()); } const QFontMetrics &fm = getFontMetrics(FT_NORMAL); const int fontHeight = fm.lineSpacing(); int textStartY = (h / 2) - (fontHeight / 2); const int count = m_Activities.count(); if (count == 0) { painter->drawRoundRect(0, 0, w, h, (h*40)/w, (w*40)/h); painter->setPen(textColor()); QFont font = UMLWidget::font(); font.setBold(false); painter->setFont(font); painter->drawText(STATE_MARGIN, textStartY, w - STATE_MARGIN * 2, fontHeight, Qt::AlignCenter, name()); setPenFromSettings(painter); } else { painter->drawRoundRect(0, 0, w, h, (h*40)/w, (w*40)/h); textStartY = STATE_MARGIN; painter->setPen(textColor()); QFont font = UMLWidget::font(); font.setBold(true); painter->setFont(font); painter->drawText(STATE_MARGIN, textStartY, w - STATE_MARGIN * 2, fontHeight, Qt::AlignCenter, name()); font.setBold(false); painter->setFont(font); setPenFromSettings(painter); int linePosY = textStartY + fontHeight; QStringList::Iterator end(m_Activities.end()); for(QStringList::Iterator it(m_Activities.begin()); it != end; ++it) { textStartY += fontHeight; painter->drawLine(0, linePosY, w, linePosY); painter->setPen(textColor()); painter->drawText(STATE_MARGIN, textStartY, w - STATE_MARGIN * 2, fontHeight, Qt::AlignCenter, *it); setPenFromSettings(painter); linePosY += fontHeight; }//end for }//end else } break; case StateWidget::Initial : painter->setBrush(WidgetBase::lineColor()); painter->drawEllipse(0, 0, w, h); break; case StateWidget::End : painter->setBrush(WidgetBase::lineColor()); painter->drawEllipse(0, 0, w, h); painter->setBrush(Qt::white); painter->drawEllipse(1, 1, w - 2, h - 2); painter->setBrush(WidgetBase::lineColor()); painter->drawEllipse(3, 3, w - 6, h - 6); break; case StateWidget::Fork: case StateWidget::Join: { painter->setPen(Qt::black); painter->setBrush(Qt::black); painter->drawRect(rect()); } break; case StateWidget::Junction: { painter->setPen(Qt::black); painter->setBrush(Qt::black); painter->drawEllipse(rect()); } break; case StateWidget::DeepHistory: { painter->setBrush(Qt::white); painter->drawEllipse(rect()); painter->setPen(Qt::black); painter->setFont(UMLWidget::font()); const QFontMetrics &fm = getFontMetrics(FT_NORMAL); const int fontHeight = fm.lineSpacing() / 2; const int xStar = fm.boundingRect(QLatin1String("H")).width(); const int yStar = fontHeight / 4; painter->drawText((w / 6), (h / 4) + fontHeight, QLatin1String("H")); painter->drawText((w / 6) + xStar, (h / 4) + fontHeight - yStar, QLatin1String("*")); } break; case StateWidget::ShallowHistory: { painter->setBrush(Qt::white); painter->drawEllipse(rect()); painter->setPen(Qt::black); painter->setFont(UMLWidget::font()); const QFontMetrics &fm = getFontMetrics(FT_NORMAL); const int fontHeight = fm.lineSpacing() / 2; painter->drawText((w / 6), (h / 4) + fontHeight, QLatin1String("H")); } break; case StateWidget::Choice: { const qreal x = w / 2; const qreal y = h / 2; QPolygonF polygon; polygon << QPointF(x, 0) << QPointF(w, y) << QPointF(x, h) << QPointF(0, y); painter->setBrush(UMLWidget::fillColor()); painter->drawPolygon(polygon); } break; default: uWarning() << "Unknown state type: " << stateTypeStr(); break; } UMLWidget::paint(painter, option, widget); }
/** * 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; }
/** * 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; }
/** * Overrides the standard paint event. */ void ObjectNodeWidget::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { Q_UNUSED(option); Q_UNUSED(widget); int w = width(); int h = height(); const QFontMetrics &fm = getFontMetrics(FT_NORMAL); const int fontHeight = fm.lineSpacing(); int textStartY = (h / 2) - (fontHeight / 2); setPenFromSettings(painter); if (UMLWidget::useFillColor()) { painter->setBrush(UMLWidget::fillColor()); } painter->drawRect(0, 0, w, h); painter->setFont(UMLWidget::font()); switch (m_objectNodeType) { case Normal : break; case Buffer : { painter->setPen(textColor()); painter->drawText(OBJECTNODE_MARGIN, (textStartY/2), w - OBJECTNODE_MARGIN * 2, fontHeight, Qt::AlignHCenter, QLatin1String("<< centralBuffer >>")); painter->drawText(OBJECTNODE_MARGIN, (textStartY/2) + fontHeight + 5, w - OBJECTNODE_MARGIN * 2, fontHeight, Qt::AlignHCenter, name()); } break; case Data : { painter->setPen(textColor()); painter->drawText(OBJECTNODE_MARGIN, (textStartY/2), w - OBJECTNODE_MARGIN * 2, fontHeight, Qt::AlignHCenter, QLatin1String("<< datastore >>")); painter->drawText(OBJECTNODE_MARGIN, (textStartY/2) + fontHeight + 5, w - OBJECTNODE_MARGIN * 2, fontHeight, Qt::AlignHCenter, name()); } break; case Flow : { QString objectflow_value; if (state() == QLatin1String("-") || state().isEmpty()) { objectflow_value = QLatin1Char(' '); } else { objectflow_value = QLatin1Char('[') + state() + QLatin1Char(']'); } painter->drawLine(10, h/2, w-10, h/2); painter->setPen(textColor()); painter->setFont(UMLWidget::font()); painter->drawText(OBJECTNODE_MARGIN, textStartY/2 - OBJECTNODE_MARGIN, w - OBJECTNODE_MARGIN * 2, fontHeight, Qt::AlignHCenter, name()); painter->drawText(OBJECTNODE_MARGIN, textStartY/2 + textStartY + OBJECTNODE_MARGIN, w - OBJECTNODE_MARGIN * 2, fontHeight, Qt::AlignHCenter, objectflow_value); } break; } UMLWidget::paint(painter, option, widget); }