/** * Checks if changes are valid and applies them if they are, * else returns false */ bool UMLTemplateDialog::apply() { m_datatypeWidget->apply(); QString name = m_pNameLE->text(); if(name.length() == 0) { KMessageBox::error(this, i18n("You have entered an invalid template name."), i18n("Template Name Invalid"), 0); m_pNameLE->setText(m_pTemplate->name()); return false; } UMLClassifier * pClass = dynamic_cast<UMLClassifier *>(m_pTemplate->parent()); if (pClass) { UMLObject *o = pClass->findChildObject(name); if (o && o != m_pTemplate) { KMessageBox::error(this, i18n("The template parameter name you have chosen is already being used in this operation."), i18n("Template Name Not Unique"), 0); m_pNameLE->setText(m_pTemplate->name()); return false; } } m_pTemplate->setName(name); m_stereotypeWidget->apply(); m_docWidget->apply(); return true; }
/** * 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 = m_pEntityAttribute->umlParent()->asUMLClassifier(); UMLObject *o = pConcept ? pConcept->findChildObject(name) : 0; 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); } m_datatypeWidget->apply(); return true; }
/** * Checks if changes are valid and applies them if they are, * else returns false */ bool UMLTemplateDialog::apply() { QString typeName = m_pTypeCB->currentText(); UMLDoc *pDoc = UMLApp::app()->document(); UMLClassifierList namesList( pDoc->concepts() ); foreach (UMLClassifier* obj, namesList) { if (typeName == obj->name()) { m_pTemplate->setType(obj); } } if (namesList.isEmpty()) { // not found. // FIXME: This implementation is not good yet. m_pTemplate->setTypeName( typeName ); } QString name = m_pNameLE->text(); if( name.length() == 0 ) { KMessageBox::error(this, i18n("You have entered an invalid template name."), i18n("Template Name Invalid"), false); m_pNameLE->setText( m_pTemplate->name() ); return false; } UMLClassifier * pClass = dynamic_cast<UMLClassifier *>( m_pTemplate->parent() ); if (pClass) { UMLObject *o = pClass->findChildObject(name); if (o && o != m_pTemplate) { KMessageBox::error(this, i18n("The template parameter name you have chosen is already being used in this operation."), i18n("Template Name Not Unique"), false); m_pNameLE->setText( m_pTemplate->name() ); return false; } } m_pTemplate->setName(name); m_pTemplate->setStereotype( m_pStereoTypeLE->text() ); return true; }
/** * This slot is called to finish item editing */ void UMLListViewItem::slotEditFinished(const QString &newText) { m_label = text(0); DEBUG(DBG_LVI) << this << "text=" << newText; UMLListView* listView = static_cast<UMLListView*>(treeWidget()); UMLDoc* doc = listView->document(); if (newText == m_label) { return; } if (newText.isEmpty()) { cancelRenameWithMsg(); return; } switch (m_type) { case lvt_UseCase: case lvt_Actor: case lvt_Class: case lvt_Package: case lvt_UseCase_Folder: case lvt_Logical_Folder: case lvt_Component_Folder: case lvt_Deployment_Folder: case lvt_EntityRelationship_Folder: case lvt_Interface: case lvt_Datatype: case lvt_Enum: case lvt_EnumLiteral: case lvt_Subsystem: case lvt_Component: case lvt_Port: case lvt_Node: case lvt_Category: if (m_object == 0 || !doc->isUnique(newText)) { cancelRenameWithMsg(); return; } UMLApp::app()->executeCommand(new Uml::CmdRenameUMLObject(m_object, newText)); doc->setModified(true); m_label = newText; break; case lvt_Operation: { if (m_object == 0) { cancelRenameWithMsg(); return; } UMLOperation *op = static_cast<UMLOperation*>(m_object); UMLClassifier *parent = static_cast<UMLClassifier *>(op->parent()); Model_Utils::OpDescriptor od; Model_Utils::Parse_Status st = Model_Utils::parseOperation(newText, od, parent); if (st == Model_Utils::PS_OK) { // TODO: Check that no operation with the exact same profile exists. UMLApp::app()->executeCommand(new Uml::CmdRenameUMLObject(op, od.m_name)); op->setType(od.m_pReturnType); UMLAttributeList parmList = op->getParmList(); const int newParmListCount = parmList.count(); if (newParmListCount > od.m_args.count()) { // Remove parameters at end of of list that no longer exist. for (int i = od.m_args.count(); i < newParmListCount; i++) { UMLAttribute *a = parmList.at(i); op->removeParm(a, false); } } Model_Utils::NameAndType_ListIt lit = od.m_args.begin(); for (int i = 0; lit != od.m_args.end(); ++lit, ++i) { const Model_Utils::NameAndType& nm_tp = *lit; UMLAttribute *a; if (i < newParmListCount) { a = parmList.at(i); } else { a = new UMLAttribute(op); a->setID(UniqueID::gen()); } UMLApp::app()->executeCommand(new Uml::CmdRenameUMLObject(a, nm_tp.m_name)); a->setType(nm_tp.m_type); a->setParmKind(nm_tp.m_direction); a->setInitialValue(nm_tp.m_initialValue); if (i >= newParmListCount) { op->addParm(a); } } m_label = op->toString(Uml::SignatureType::SigNoVis); } else { KMessageBox::error(0, Model_Utils::psText(st), i18n("Rename canceled")); } setText(m_label); break; } case lvt_Attribute: case lvt_EntityAttribute: { if (m_object == 0) { cancelRenameWithMsg(); return; } UMLClassifier *parent = static_cast<UMLClassifier*>(m_object->parent()); Model_Utils::NameAndType nt; Uml::Visibility::Enum vis; Model_Utils::Parse_Status st; st = Model_Utils::parseAttribute(newText, nt, parent, &vis); if (st == Model_Utils::PS_OK) { UMLObject *exists = parent->findChildObject(newText); if (exists) { cancelRenameWithMsg(); return; } UMLApp::app()->executeCommand(new Uml::CmdRenameUMLObject(m_object, nt.m_name)); UMLAttribute *pAtt = static_cast<UMLAttribute*>(m_object); pAtt->setType(nt.m_type); pAtt->setVisibility(vis); pAtt->setParmKind(nt.m_direction); pAtt->setInitialValue(nt.m_initialValue); m_label = pAtt->toString(Uml::SignatureType::SigNoVis); } else { KMessageBox::error(0, Model_Utils::psText(st), i18n("Rename canceled")); } setText(m_label); break; } case lvt_PrimaryKeyConstraint: case lvt_UniqueConstraint: case lvt_ForeignKeyConstraint: case lvt_CheckConstraint: { if (m_object == 0) { cancelRenameWithMsg(); return; } UMLEntity *parent = static_cast<UMLEntity*>(m_object->parent()); QString name; Model_Utils::Parse_Status st; st = Model_Utils::parseConstraint(newText, name, parent); if (st == Model_Utils::PS_OK) { UMLObject *exists = parent->findChildObject(name); if (exists) { cancelRenameWithMsg(); return; } UMLApp::app()->executeCommand(new Uml::CmdRenameUMLObject(m_object, name)); UMLEntityConstraint* uec = static_cast<UMLEntityConstraint*>(m_object); m_label = uec->toString(Uml::SignatureType::SigNoVis); } else { KMessageBox::error(0, Model_Utils::psText(st), i18n("Rename canceled")); } setText(m_label); break; } case lvt_Template: { if (m_object == 0) { cancelRenameWithMsg(); return; } UMLClassifier *parent = static_cast<UMLClassifier*>(m_object->parent()); Model_Utils::NameAndType nt; Model_Utils::Parse_Status st = Model_Utils::parseTemplate(newText, nt, parent); if (st == Model_Utils::PS_OK) { UMLObject *exists = parent->findChildObject(newText); if (exists) { cancelRenameWithMsg(); return; } UMLApp::app()->executeCommand(new Uml::CmdRenameUMLObject(m_object, nt.m_name)); UMLTemplate *tmpl = static_cast<UMLTemplate*>(m_object); tmpl->setType(nt.m_type); m_label = tmpl->toString(Uml::SignatureType::SigNoVis); } else { KMessageBox::error(0, Model_Utils::psText(st), i18n("Rename canceled")); } setText(m_label); break; } case lvt_UseCase_Diagram: case lvt_Class_Diagram: case lvt_Sequence_Diagram: case lvt_Collaboration_Diagram: case lvt_State_Diagram: case lvt_Activity_Diagram: case lvt_Component_Diagram: case lvt_Deployment_Diagram: { UMLView *view = doc->findView(ID()); if (view == 0) { cancelRenameWithMsg(); return; } UMLView *anotherView = doc->findView(view->umlScene()->type(), newText); if (anotherView && anotherView->umlScene()->ID() == ID()) { anotherView = 0; } if (anotherView) { cancelRenameWithMsg(); return; } view->umlScene()->setName(newText); setText(newText); doc->signalDiagramRenamed(view); break; } default: KMessageBox::error(0, i18n("Renaming an item of listview type %1 is not yet implemented.", m_type), i18n("Function Not Implemented")); setText(m_label); break; } doc->setModified(true); }
/** If clipboard has mime type application/x-uml-clip5, Pastes the data from the clipboard into the current Doc */ bool UMLClipboard::pasteClip5(QMimeSource* data) { UMLDoc *doc = UMLApp::app()->getDocument(); UMLListView *listView = UMLApp::app()->getListView(); UMLListViewItem* lvitem = dynamic_cast<UMLListViewItem *>( listView->currentItem() ); if (!lvitem || (lvitem->getType() != Uml::lvt_Class && lvitem->getType() != Uml::lvt_Interface)) { return false; } UMLClassifier *parent = dynamic_cast<UMLClassifier *>(lvitem->getUMLObject()); if (parent == NULL) { kError() << "UMLClipboard::pasteClip5: parent is not a UMLClassifier" << endl; return false; } UMLObjectList objects; objects.setAutoDelete(false); IDChangeLog* idchanges = 0; bool result = UMLDrag::decodeClip5(data, objects, parent); if(!result) { return false; } UMLObject *obj = 0; doc->setModified(true); idchanges = doc->getChangeLog(); // Assume success if at least one child object could be pasted if (objects.count()) result = false; for (UMLObjectListIt it(objects); (obj = it.current()) != NULL; ++it) { obj->setID(doc->assignNewID(obj->getID())); switch(obj->getBaseType()) { case Uml::ot_Attribute : { UMLObject *exist = parent->findChildObject(obj->getName(), Uml::ot_Attribute); if (exist) { QString newName = parent->uniqChildName(Uml::ot_Attribute, obj->getName()); obj->setName(newName); } UMLAttribute *att = static_cast<UMLAttribute*>(obj); if (parent->addAttribute(att, idchanges)) { result = true; } else { kError() << "UMLClipboard::pasteClip5: " << parent->getName() << "->addAttribute(" << att->getName() << ") failed" << endl; } break; } case Uml::ot_Operation : { UMLOperation *op = static_cast<UMLOperation*>(obj); UMLOperation *exist = parent->checkOperationSignature(op->getName(), op->getParmList()); if (exist) { QString newName = parent->uniqChildName(Uml::ot_Operation, obj->getName()); op->setName(newName); } if (parent->addOperation(op, idchanges)) { result = true; } else { kError() << "UMLClipboard::pasteClip5: " << parent->getName() << "->addOperation(" << op->getName() << ") failed" << endl; } break; } default : kWarning() << "pasting unknown children type in clip type 5" << endl; return false; } } return result; }
/** * 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; }