/** * Copy the internal presentation of this object into the new * object. */ void UMLEntityAttributeList::copyInto(UMLEntityAttributeList* rhs) const { // Don't copy yourself. if (rhs == this) return; rhs->clear(); // Suffering from const; we shall not modify our object. UMLEntityAttributeList* tmp = new UMLEntityAttributeList(*this); UMLEntityAttribute* item; for (UMLEntityAttributeListIt eait( *tmp ); eait.hasNext() ;) { item = eait.next(); rhs->append((UMLEntityAttribute*)item->clone()); } delete tmp; }
/** * Create an UMLAttribute. * @param name an optional name for the attribute * @param type an optional type object for the attribute * @param vis the visibility of the attribute * @param iv the initial value for the attribute * @return the just created attribute or null */ UMLAttribute* UMLEntity::createAttribute(const QString &name /*= QString()*/, UMLObject *type /*= 0*/, Uml::Visibility vis /* = Uml::Visibility::Private*/, const QString& iv /* = QString()*/) { Uml::IDType id = UniqueID::gen(); QString currentName; if (name.isNull()) { currentName = uniqChildName(UMLObject::ot_EntityAttribute); } else { currentName = name; } UMLEntityAttribute* newAttribute = new UMLEntityAttribute(this, currentName, id, vis, type, iv); int button = KDialog::Accepted; bool goodName = false; //check for name.isNull() stops dialog being shown //when creating attribute via list view while (button == KDialog::Accepted && !goodName && name.isNull()) { QPointer<UMLEntityAttributeDialog> dialog = new UMLEntityAttributeDialog(0, newAttribute); button = dialog->exec(); QString name = newAttribute->name(); if (name.length() == 0) { KMessageBox::error(0, i18n("That is an invalid name."), i18n("Invalid Name")); } else if ( findChildObject(name) != NULL ) { KMessageBox::error(0, i18n("That name is already being used."), i18n("Not a Unique Name")); } else { goodName = true; } delete dialog; } if (button != KDialog::Accepted) { delete newAttribute; return 0; } addEntityAttribute(newAttribute); UMLDoc *umldoc = UMLApp::app()->document(); umldoc->signalUMLObjectCreated(newAttribute); return newAttribute; }
/** * Adds pair to the list. */ void UMLForeignKeyConstraintDialog::slotAddPair() { // get the index of the selected local column and referenced column int indexL = m_ColumnWidgets.localColumnCB->currentIndex(); int indexR = m_ColumnWidgets.referencedColumnCB->currentIndex(); if (indexL == -1 || indexR == -1) { return; } // local entity attribute UMLEntityAttribute* localColumn = m_pLocalAttributeList.at(indexL); // referenced entity attribute UMLEntityAttribute* referencedColumn = m_pReferencedAttributeList.at(indexR); // remove from combo boxes m_ColumnWidgets.localColumnCB->removeItem(indexL); m_ColumnWidgets.referencedColumnCB->removeItem(indexR); // remove from local cache m_pLocalAttributeList.removeAt(indexL); m_pReferencedAttributeList.removeAt(indexR); // add to local cache of mapping EntityAttributePair pair = qMakePair(localColumn, referencedColumn); m_pAttributeMapList.append(pair); // update mapping view QTreeWidgetItem* mapping = new QTreeWidgetItem(m_ColumnWidgets.mappingTW); mapping->setText(0, localColumn->toString(Uml::st_SigNoVis)); mapping->setText(1, referencedColumn->toString(Uml::st_SigNoVis)); m_ColumnWidgets.mappingTW->addTopLevelItem(mapping); slotResetWidgetState(); }
void EntityWidget::draw(QPainter& p, int offsetX, int offsetY) { UMLWidget::setPen(p); if(UMLWidget::getUseFillColour()) p.setBrush(UMLWidget::getFillColour()); else p.setBrush(m_pView -> viewport() -> backgroundColor()); const int w = width(); const int h = height(); const QFontMetrics &fm = getFontMetrics(FT_NORMAL); int fontHeight = fm.lineSpacing(); const QString name = this->getName(); p.drawRect(offsetX, offsetY, w, h); p.setPen(QPen(Qt::black)); QFont font = UMLWidget::getFont(); font.setBold(true); p.setFont(font); int y = 0; if ( !m_pObject->getStereotype().isEmpty() ) { p.drawText(offsetX + ENTITY_MARGIN, offsetY, w - ENTITY_MARGIN * 2,fontHeight, Qt::AlignCenter, m_pObject->getStereotype(true)); font.setItalic( m_pObject -> getAbstract() ); 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 -> getAbstract() ); 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; } UMLWidget::setPen(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(Uml::ot_EntityAttribute); for (entityattribute = list.first(); entityattribute; entityattribute = list.next()) { QString text = entityattribute->getName(); p.setPen( QPen(Qt::black) ); UMLEntityAttribute* casted = dynamic_cast<UMLEntityAttribute*>( entityattribute ); if( casted && casted->getIndexType() == Uml::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; } if (m_bSelected) { drawSelected(&p, offsetX, offsetY); } }
/** * 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; }