QSizeF DiagramItem::calcMinimumGeometry() const { double width = MINIMUM_WIDTH; double height = 0.0; if (m_customIcon) { return stereotypeIconMinimumSize(m_customIcon->stereotypeIcon(), CUSTOM_ICON_MINIMUM_AUTO_WIDTH, CUSTOM_ICON_MINIMUM_AUTO_HEIGHT); } height += BODY_VERT_BORDER; if (CustomIconItem *stereotypeIconItem = this->stereotypeIconItem()) { width = std::max(width, stereotypeIconItem->boundingRect().width() + 2 * BODY_HORIZ_BORDER); height += std::max(FOLD_HEIGHT, stereotypeIconItem->boundingRect().height()); } else { height += FOLD_HEIGHT; } if (StereotypesItem *stereotypesItem = this->stereotypesItem()) { width = std::max(width, stereotypesItem->boundingRect().width() + 2 * BODY_HORIZ_BORDER); height += stereotypesItem->boundingRect().height(); } if (m_diagramName) { width = std::max(width, m_diagramName->boundingRect().width() + 2 * BODY_HORIZ_BORDER); height += m_diagramName->boundingRect().height(); } height += BODY_VERT_BORDER; return GeometryUtilities::ensureMinimumRasterSize(QSizeF(width, height), 2 * RASTER_WIDTH, 2 * RASTER_HEIGHT); }
QSizeF ItemItem::calcMinimumGeometry() const { double width = 0.0; double height = 0.0; if (m_customIcon) { QSizeF sz = stereotypeIconMinimumSize(m_customIcon->stereotypeIcon(), CUSTOM_ICON_MINIMUM_AUTO_WIDTH, CUSTOM_ICON_MINIMUM_AUTO_HEIGHT); if (shapeIcon().textAlignment() != qmt::StereotypeIcon::TextalignTop && shapeIcon().textAlignment() != qmt::StereotypeIcon::TextalignCenter) return sz; width = sz.width(); } height += BODY_VERT_BORDER; if (CustomIconItem *stereotypeIconItem = this->stereotypeIconItem()) { width = std::max(width, stereotypeIconItem->boundingRect().width()); height += stereotypeIconItem->boundingRect().height(); } if (StereotypesItem *stereotypesItem = this->stereotypesItem()) { width = std::max(width, stereotypesItem->boundingRect().width()); height += stereotypesItem->boundingRect().height(); } if (nameItem()) { width = std::max(width, nameItem()->boundingRect().width()); height += nameItem()->boundingRect().height(); } if (m_contextLabel) height += m_contextLabel->height(); height += BODY_VERT_BORDER; width = BODY_HORIZ_BORDER + width + BODY_HORIZ_BORDER; return GeometryUtilities::ensureMinimumRasterSize(QSizeF(width, height), 2 * RASTER_WIDTH, 2 * RASTER_HEIGHT); }
void DiagramItem::update() { prepareGeometryChange(); updateStereotypeIconDisplay(); const Style *style = adaptedStyle(stereotypeIconId()); // custom icon if (stereotypeIconDisplay() == StereotypeIcon::DisplayIcon) { if (!m_customIcon) m_customIcon = new CustomIconItem(diagramSceneModel(), this); m_customIcon->setStereotypeIconId(stereotypeIconId()); m_customIcon->setBaseSize(stereotypeIconMinimumSize(m_customIcon->stereotypeIcon(), CUSTOM_ICON_MINIMUM_AUTO_WIDTH, CUSTOM_ICON_MINIMUM_AUTO_HEIGHT)); m_customIcon->setBrush(style->fillBrush()); m_customIcon->setPen(style->outerLinePen()); m_customIcon->setZValue(SHAPE_ZVALUE); } else if (m_customIcon) { m_customIcon->scene()->removeItem(m_customIcon); delete m_customIcon; m_customIcon = 0; } // shape if (!m_customIcon) { if (!m_body) m_body = new QGraphicsPolygonItem(this); m_body->setBrush(style->fillBrush()); m_body->setPen(style->outerLinePen()); m_body->setZValue(SHAPE_ZVALUE); if (!m_fold) m_fold = new QGraphicsPolygonItem(this); m_fold->setBrush(style->extraFillBrush()); m_fold->setPen(style->outerLinePen()); m_fold->setZValue(SHAPE_DETAILS_ZVALUE); } else { if (m_fold) { m_fold->scene()->removeItem(m_fold); delete m_fold; m_fold = 0; } if (m_body) { m_body->scene()->removeItem(m_body); delete m_body; m_body = 0; } } // stereotypes updateStereotypes(stereotypeIconId(), stereotypeIconDisplay(), style); // diagram name updateNameItem(style); updateSelectionMarker(m_customIcon); updateAlignmentButtons(); updateGeometry(); }