/*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * copyright (C) 2003-2007 * * Umbrello UML Modeller Authors * ***************************************************************************/ // own header #include "componentwidget.h" // qt/kde includes #include // app includes #include #include "component.h" #include "umlview.h" ComponentWidget::ComponentWidget(UMLView * view, UMLComponent *c) : UMLWidget(view, c) { init(); } void ComponentWidget::init() { UMLWidget::setBaseType(Uml::wt_Component); setSize(100, 30); m_pMenu = 0; //set defaults from m_pView if (m_pView) { //check to see if correct const Settings::OptionState& ops = m_pView->getOptionState(); m_bShowStereotype = ops.classState.showStereoType; } //maybe loading and this may not be set. if (m_pObject) { updateComponentSize(); update(); } } ComponentWidget::~ComponentWidget() {} void ComponentWidget::draw(TQPainter & p, int offsetX, int offsetY) { UMLComponent *umlcomp = static_cast(m_pObject); if (umlcomp == NULL) return; UMLWidget::setPen(p); if ( umlcomp->getExecutable() ) { TQPen thickerPen = p.pen(); thickerPen.setWidth(2); p.setPen(thickerPen); } if ( UMLWidget::getUseFillColour() ) { p.setBrush( UMLWidget::getFillColour() ); } else { p.setBrush( m_pView->viewport()->backgroundColor() ); } const int w = width(); const int h = height(); TQFont font = UMLWidget::getFont(); font.setBold(true); const TQFontMetrics &fm = getFontMetrics(FT_BOLD); const int fontHeight = fm.lineSpacing(); TQString name = getName(); const TQString stereotype = m_pObject->getStereotype(); p.drawRect(offsetX + 2*COMPONENT_MARGIN, offsetY, w - 2*COMPONENT_MARGIN, h); p.drawRect(offsetX, offsetY + h/2 - fontHeight/2 - fontHeight, COMPONENT_MARGIN*4, fontHeight); p.drawRect(offsetX, offsetY + h/2 + fontHeight/2, COMPONENT_MARGIN*4, fontHeight); p.setPen( TQPen(TQt::black) ); p.setFont(font); int lines = 1; if (!stereotype.isEmpty()) { p.drawText(offsetX + (COMPONENT_MARGIN*4), offsetY + (h/2) - fontHeight, w - (COMPONENT_MARGIN*4), fontHeight, TQt::AlignCenter, m_pObject->getStereotype(true)); lines = 2; } if ( UMLWidget::getIsInstance() ) { font.setUnderline(true); p.setFont(font); name = UMLWidget::getInstanceName() + " : " + name; } if (lines == 1) { p.drawText(offsetX + (COMPONENT_MARGIN*4), offsetY + (h/2) - (fontHeight/2), w - (COMPONENT_MARGIN*4), fontHeight, TQt::AlignCenter, name ); } else { p.drawText(offsetX + (COMPONENT_MARGIN*4), offsetY + (h/2), w - (COMPONENT_MARGIN*4), fontHeight, TQt::AlignCenter, name ); } if(m_bSelected) { drawSelected(&p, offsetX, offsetY); } } TQSize ComponentWidget::calculateSize() { if ( !m_pObject) { return TQSize(70, 70); } const TQFontMetrics &fm = getFontMetrics(FT_BOLD_ITALIC); const int fontHeight = fm.lineSpacing(); TQString name = m_pObject->getName(); if ( UMLWidget::getIsInstance() ) { name = UMLWidget::getInstanceName() + " : " + name; } int width = fm.width(name); int stereoWidth = 0; if (!m_pObject->getStereotype().isEmpty()) { stereoWidth = fm.width(m_pObject->getStereotype(true)); } if (stereoWidth > width) width = stereoWidth; width += COMPONENT_MARGIN * 6; width = 70>width ? 70 : width; //minumin width of 70 int height = (2*fontHeight) + (COMPONENT_MARGIN * 3); return TQSize(width, height); } void ComponentWidget::saveToXMI(TQDomDocument& qDoc, TQDomElement& qElement) { TQDomElement conceptElement = qDoc.createElement("componentwidget"); UMLWidget::saveToXMI(qDoc, conceptElement); qElement.appendChild(conceptElement); }