/** * Inserts @p type into the type-combobox as well as its completion object. */ void UMLEntityAttributeDialog::insertTypesSorted(const QString& type) { QStringList types; // add the data types UMLDoc * pDoc = UMLApp::app()->document(); UMLClassifierList dataTypes = pDoc->datatypes(); if (dataTypes.count() == 0) { // Switch to SQL as the active language if no datatypes are set. UMLApp::app()->setActiveLanguage(Uml::ProgrammingLanguage::SQL); pDoc->addDefaultDatatypes(); qApp->processEvents(); dataTypes = pDoc->datatypes(); } foreach (UMLClassifier* dat, dataTypes) { types << dat->name(); } // add the given parameter if (!types.contains(type)) { types << type; } types.sort(); m_pTypeCB->clear(); m_pTypeCB->insertItems(-1, types); // select the given parameter int currentIndex = m_pTypeCB->findText(type); if (currentIndex > -1) { m_pTypeCB->setCurrentIndex(currentIndex); } m_pTypeCB->completionObject()->addItem(type); }
/** * Checks if changes are valid and applies them if they are, * else returns false */ bool UMLEntityAttributeDialog::apply() { QString name = m_pNameLE->text(); if (name.isEmpty()) { KMessageBox::error(this, i18n("You have entered an invalid entity attribute name."), i18n("Entity Attribute Name Invalid"), 0); m_pNameLE->setText(m_pEntityAttribute->name()); return false; } UMLClassifier * pConcept = dynamic_cast<UMLClassifier *>(m_pEntityAttribute->parent()); UMLObject *o = pConcept->findChildObject(name); if (o && o != m_pEntityAttribute) { KMessageBox::error(this, i18n("The entity attribute name you have chosen is already being used in this operation."), i18n("Entity Attribute Name Not Unique"), 0); m_pNameLE->setText(m_pEntityAttribute->name()); return false; } m_pEntityAttribute->setName(name); m_pEntityAttribute->setInitialValue(m_pInitialLE->text()); m_stereotypeWidget->apply(); m_pEntityAttribute->setValues(m_pValuesLE->text()); m_pEntityAttribute->setAttributes(m_pAttributesCB->currentText()); m_pEntityAttribute->setAutoIncrement(m_pAutoIncrementCB->isChecked()); m_pEntityAttribute->setNull(m_pNullCB->isChecked()); /* if (m_pPublicRB->isChecked()) { m_pEntityAttribute->setIndexType(UMLEntityAttribute::Primary); } else if (m_pProtectedRB->isChecked()) { m_pEntityAttribute->setIndexType(UMLEntityAttribute::Unique); } else */ if (m_pPrivateRB->isChecked()) { m_pEntityAttribute->setIndexType(UMLEntityAttribute::Index); } else { m_pEntityAttribute->setIndexType(UMLEntityAttribute::None); } QString typeName = m_pTypeCB->currentText(); UMLDoc *pDoc = UMLApp::app()->document(); UMLClassifierList dataTypes = pDoc->datatypes(); foreach (UMLClassifier* dat, dataTypes) { if (typeName == dat->name()) { m_pEntityAttribute->setType(dat); return true; } } UMLObject *obj = pDoc->findUMLObject(typeName); UMLClassifier *classifier = dynamic_cast<UMLClassifier*>(obj); if (classifier == NULL) { // If it's obviously a pointer type (C++) then create a datatype. // Else we don't know what it is so as a compromise create a class. UMLObject::ObjectType ot = (typeName.contains(QChar::fromLatin1('*')) ? UMLObject::ot_Datatype : UMLObject::ot_Class); obj = Object_Factory::createUMLObject(ot, typeName); if (obj == NULL) return false; classifier = static_cast<UMLClassifier*>(obj); } m_pEntityAttribute->setType(classifier); return true; }