summaryrefslogtreecommitdiffstats
path: root/umbrello/umbrello/componentwidget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'umbrello/umbrello/componentwidget.cpp')
-rw-r--r--umbrello/umbrello/componentwidget.cpp141
1 files changed, 141 insertions, 0 deletions
diff --git a/umbrello/umbrello/componentwidget.cpp b/umbrello/umbrello/componentwidget.cpp
new file mode 100644
index 00000000..f4c38270
--- /dev/null
+++ b/umbrello/umbrello/componentwidget.cpp
@@ -0,0 +1,141 @@
+/***************************************************************************
+ * *
+ * 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 <uml-devel@uml.sf.net> *
+ ***************************************************************************/
+
+// own header
+#include "componentwidget.h"
+
+// qt/kde includes
+#include <qpainter.h>
+
+// app includes
+#include <kdebug.h>
+#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(QPainter & p, int offsetX, int offsetY) {
+ UMLComponent *umlcomp = static_cast<UMLComponent*>(m_pObject);
+ if (umlcomp == NULL)
+ return;
+ UMLWidget::setPen(p);
+ if ( umlcomp->getExecutable() ) {
+ QPen 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();
+ QFont font = UMLWidget::getFont();
+ font.setBold(true);
+ const QFontMetrics &fm = getFontMetrics(FT_BOLD);
+ const int fontHeight = fm.lineSpacing();
+ QString name = getName();
+ const QString 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( QPen(Qt::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, Qt::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, Qt::AlignCenter, name );
+ } else {
+ p.drawText(offsetX + (COMPONENT_MARGIN*4), offsetY + (h/2),
+ w - (COMPONENT_MARGIN*4), fontHeight, Qt::AlignCenter, name );
+ }
+
+ if(m_bSelected) {
+ drawSelected(&p, offsetX, offsetY);
+ }
+}
+
+QSize ComponentWidget::calculateSize() {
+ if ( !m_pObject) {
+ return QSize(70, 70);
+ }
+ const QFontMetrics &fm = getFontMetrics(FT_BOLD_ITALIC);
+ const int fontHeight = fm.lineSpacing();
+
+ QString 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 QSize(width, height);
+}
+
+void ComponentWidget::saveToXMI(QDomDocument& qDoc, QDomElement& qElement) {
+ QDomElement conceptElement = qDoc.createElement("componentwidget");
+ UMLWidget::saveToXMI(qDoc, conceptElement);
+ qElement.appendChild(conceptElement);
+}
+