diff --git a/umbrello/dialogs/pages/classgeneralpage.h b/umbrello/dialogs/pages/classgeneralpage.h --- a/umbrello/dialogs/pages/classgeneralpage.h +++ b/umbrello/dialogs/pages/classgeneralpage.h @@ -79,10 +79,10 @@ void apply(); private: - UMLObject * m_pObject; - ObjectWidget * m_pWidget; - UMLWidget * m_pInstanceWidget; - UMLDoc * m_pUmldoc; + UMLObject * m_pUMLObject; + ObjectWidget * m_pObjectWidget; + UMLWidget * m_pUMLWidget; + UMLDoc * m_pUMLDoc; QLabel * m_pInstanceL, * m_pStereoTypeL; QCheckBox * m_pMultiCB, * m_pDrawActorCB, * m_pAbstractCB, * m_pDeconCB; @@ -95,7 +95,10 @@ UMLArtifactTypeWidget *m_artifactTypeWidget; VisibilityEnumWidget *m_visibilityEnumWidget; - void insertStereotypesSorted(const QString& type); + bool canApplyToUMLObject() const; + void setUMLObjectName(const QString& name); + bool canApplyToUMLWidget() const; + void setWidgetName(const QString& name) const; public slots: diff --git a/umbrello/dialogs/pages/classgeneralpage.cpp b/umbrello/dialogs/pages/classgeneralpage.cpp --- a/umbrello/dialogs/pages/classgeneralpage.cpp +++ b/umbrello/dialogs/pages/classgeneralpage.cpp @@ -47,19 +47,14 @@ // qt includes #include #include -#include -#include #include -#include -#include -#include ClassGeneralPage::ClassGeneralPage(UMLDoc* d, QWidget* parent, UMLObject* o) : DialogPageBase(parent), - m_pObject(o), - m_pWidget(0), - m_pInstanceWidget(0), - m_pUmldoc(d), + m_pUMLObject(o), + m_pObjectWidget(0), + m_pUMLWidget(0), + m_pUMLDoc(d), m_pInstanceL(0), m_pStereoTypeL(0), m_pMultiCB(0), @@ -75,7 +70,7 @@ m_artifactTypeWidget(0), m_visibilityEnumWidget(0) { - if (!m_pObject) { + if (!m_pUMLObject) { uWarning() << "Given UMLObject is NULL."; return; } @@ -85,28 +80,28 @@ topLayout->setSpacing(6); // setup name - UMLObject::ObjectType t = m_pObject->baseType(); + UMLObject::ObjectType t = m_pUMLObject->baseType(); QGridLayout * m_pNameLayout = new QGridLayout(); m_pNameLayout->setSpacing(6); topLayout->addLayout(m_pNameLayout, 4); if( t == UMLObject::ot_Instance) { - Q_ASSERT(m_pObject->asUMLInstance()); + Q_ASSERT(m_pUMLObject->asUMLInstance()); QString name = UMLObject::toI18nString(t); - m_instanceNameWidget = new UMLObjectNameWidget(name, m_pObject->name()); + m_instanceNameWidget = new UMLObjectNameWidget(name, m_pUMLObject->name()); m_instanceNameWidget->addToLayout(m_pNameLayout, 0); QString className = UMLObject::toI18nString(UMLObject::ot_Class); - m_nameWidget = new UMLObjectNameWidget(className, m_pObject->asUMLInstance()->classifier()->name()); + m_nameWidget = new UMLObjectNameWidget(className, m_pUMLObject->asUMLInstance()->classifier()->name()); m_nameWidget->addToLayout(m_pNameLayout, 1); } else { QString name = UMLObject::toI18nString(t); - m_nameWidget = new UMLObjectNameWidget(name, m_pObject->name()); + m_nameWidget = new UMLObjectNameWidget(name, m_pUMLObject->name()); m_nameWidget->addToLayout(m_pNameLayout, 0); } if (t != UMLObject::ot_Stereotype && t!= UMLObject::ot_Instance) { - m_stereotypeWidget = new UMLStereotypeWidget(m_pObject); + m_stereotypeWidget = new UMLStereotypeWidget(m_pUMLObject); if (t == UMLObject::ot_Interface || t == UMLObject::ot_Datatype || t == UMLObject::ot_Enum) { m_stereotypeWidget->setEditable(false); } @@ -114,8 +109,8 @@ } int row = 2; - if (m_pObject->isUMLDatatype()) { - UMLDatatype *d = m_pObject->asUMLDatatype(); + if (m_pUMLObject->isUMLDatatype()) { + UMLDatatype *d = m_pUMLObject->asUMLDatatype(); if (d && d->isReference() && d->originType()) { QLabel *label = new QLabel(i18n("Reference:"), this); m_pNameLayout->addWidget(label, row, 0); @@ -126,7 +121,7 @@ } if (t == UMLObject::ot_Class || t == UMLObject::ot_Interface || t == UMLObject::ot_Enum) { - m_packageWidget = new UMLPackageWidget(m_pObject); + m_packageWidget = new UMLPackageWidget(m_pUMLObject); m_packageWidget->addToLayout(m_pNameLayout, row); ++row; } @@ -139,7 +134,7 @@ abstractCaption = i18n("A&bstract use case"); } m_pAbstractCB = new QCheckBox(abstractCaption, this); - m_pAbstractCB->setChecked(m_pObject->isAbstract()); + m_pAbstractCB->setChecked(m_pUMLObject->isAbstract()); m_pNameLayout->addWidget(m_pAbstractCB, row, 0); ++row; } @@ -158,20 +153,20 @@ // setup scope if (t != UMLObject::ot_Stereotype && t!= UMLObject::ot_Instance) { - m_visibilityEnumWidget = new VisibilityEnumWidget(m_pObject, this); + m_visibilityEnumWidget = new VisibilityEnumWidget(m_pUMLObject, this); m_visibilityEnumWidget->addToLayout(topLayout); } - m_docWidget = new DocumentationWidget(m_pObject, this); + m_docWidget = new DocumentationWidget(m_pUMLObject, this); topLayout->addWidget(m_docWidget); } ClassGeneralPage::ClassGeneralPage(UMLDoc* d, QWidget* parent, ObjectWidget* o) : DialogPageBase(parent), - m_pObject(0), - m_pWidget(o), - m_pInstanceWidget(0), - m_pUmldoc(d), + m_pUMLObject(0), + m_pObjectWidget(o), + m_pUMLWidget(0), + m_pUMLDoc(d), m_pInstanceL(0), m_pStereoTypeL(0), m_pMultiCB(0), @@ -187,7 +182,7 @@ m_artifactTypeWidget(0), m_visibilityEnumWidget(0) { - if (!m_pWidget) { + if (!m_pObjectWidget) { uWarning() << "Given ObjectWidget is NULL."; return; } @@ -202,31 +197,31 @@ topLayout->addLayout(m_pNameLayout, 4); QString name = UMLObject::toI18nString(UMLObject::ot_Instance); - m_instanceNameWidget = new UMLObjectNameWidget(name , m_pWidget->instanceName()); + m_instanceNameWidget = new UMLObjectNameWidget(name , m_pObjectWidget->instanceName()); m_instanceNameWidget->addToLayout(m_pNameLayout, 0); QString className = UMLObject::toI18nString(UMLObject::ot_Class); - m_nameWidget = new UMLObjectNameWidget(className, m_pWidget->name()); + m_nameWidget = new UMLObjectNameWidget(className, m_pObjectWidget->name()); m_nameWidget->addToLayout(m_pNameLayout, 1); UMLView *view = UMLApp::app()->currentView(); m_pDrawActorCB = new QCheckBox(i18n("Draw as actor"), this); - m_pDrawActorCB->setChecked(m_pWidget->drawAsActor()); + m_pDrawActorCB->setChecked(m_pObjectWidget->drawAsActor()); m_pNameLayout->addWidget(m_pDrawActorCB, 2, 0); if (view->umlScene()->type() == Uml::DiagramType::Collaboration) { m_pMultiCB = new QCheckBox(i18n("Multiple instance"), this); - m_pMultiCB->setChecked(m_pWidget->multipleInstance()); + m_pMultiCB->setChecked(m_pObjectWidget->multipleInstance()); m_pNameLayout->addWidget(m_pMultiCB, 2, 1); if (m_pDrawActorCB->isChecked()) m_pMultiCB->setEnabled(false); } else { // sequence diagram m_pDeconCB = new QCheckBox(i18n("Show destruction"), this); - m_pDeconCB->setChecked(m_pWidget->showDestruction()); + m_pDeconCB->setChecked(m_pObjectWidget->showDestruction()); m_pNameLayout->addWidget(m_pDeconCB, 2, 1); } - m_docWidget = new DocumentationWidget(m_pWidget, this); + m_docWidget = new DocumentationWidget(m_pObjectWidget, this); topLayout->addWidget(m_docWidget); if (m_pMultiCB) { @@ -236,10 +231,10 @@ ClassGeneralPage::ClassGeneralPage(UMLDoc* d, QWidget* parent, UMLWidget* widget) : DialogPageBase(parent), - m_pObject(0), - m_pWidget(0), - m_pInstanceWidget(widget), - m_pUmldoc(d), + m_pUMLObject(0), + m_pObjectWidget(0), + m_pUMLWidget(widget), + m_pUMLDoc(d), m_pInstanceL(0), m_pStereoTypeL(0), m_pMultiCB(0), @@ -298,30 +293,30 @@ m_stereotypeWidget->apply(); } - if (m_pObject) { - UMLObject::ObjectType t = m_pObject->baseType(); + if (m_pUMLObject) { + UMLObject::ObjectType t = m_pUMLObject->baseType(); if (t == UMLObject::ot_Class || t == UMLObject::ot_Interface || t == UMLObject::ot_Enum) { m_packageWidget->apply(); } if (m_pAbstractCB) { - m_pObject->setAbstract(m_pAbstractCB->isChecked()); + m_pUMLObject->setAbstract(m_pAbstractCB->isChecked()); } - if(m_instanceNameWidget && m_pObject->isUMLInstance()) { - m_pObject->asUMLInstance()->setName(m_instanceNameWidget->text()); - m_pObject->asUMLInstance()->setClassifierName(m_nameWidget->text()); + if(m_instanceNameWidget && m_pUMLObject->isUMLInstance()) { + m_pUMLObject->asUMLInstance()->setName(m_instanceNameWidget->text()); + m_pUMLObject->asUMLInstance()->setClassifierName(m_nameWidget->text()); } //make sure unique name - if(m_pObject->baseType() != UMLObject::ot_Instance) { - UMLObject *o = m_pUmldoc->findUMLObject(name); - if (o && m_pObject != o) { + if(m_pUMLObject->baseType() != UMLObject::ot_Instance) { + UMLObject *o = m_pUMLDoc->findUMLObject(name); + if (o && m_pUMLObject != o) { KMessageBox::sorry(this, i18n("The name you have chosen\nis already being used.\nThe name has been reset."), i18n("Name is Not Unique"), 0); m_nameWidget->reset(); } else { - m_pObject->setName(name); + m_pUMLObject->setName(name); } } @@ -330,30 +325,30 @@ m_visibilityEnumWidget->apply(); } - if (m_pObject->baseType() == UMLObject::ot_Component) { - (m_pObject->asUMLComponent())->setExecutable(m_pExecutableCB->isChecked()); + if (m_pUMLObject->baseType() == UMLObject::ot_Component) { + (m_pUMLObject->asUMLComponent())->setExecutable(m_pExecutableCB->isChecked()); } - if (m_pObject->baseType() == UMLObject::ot_Artifact) { + if (m_pUMLObject->baseType() == UMLObject::ot_Artifact) { m_artifactTypeWidget->apply(); - m_pObject->emitModified(); + m_pUMLObject->emitModified(); } - } // end if m_pObject - else if (m_pWidget) { - m_pWidget->setInstanceName(m_instanceNameWidget->text()); + } // end if m_pUMLObject + else if (m_pObjectWidget) { + m_pObjectWidget->setInstanceName(m_instanceNameWidget->text()); if (m_pMultiCB) { - m_pWidget->setMultipleInstance(m_pMultiCB->isChecked()); + m_pObjectWidget->setMultipleInstance(m_pMultiCB->isChecked()); } - m_pWidget->setDrawAsActor(m_pDrawActorCB->isChecked()); + m_pObjectWidget->setDrawAsActor(m_pDrawActorCB->isChecked()); if (m_pDeconCB) { - m_pWidget->setShowDestruction(m_pDeconCB->isChecked()); + m_pObjectWidget->setShowDestruction(m_pDeconCB->isChecked()); } - UMLObject * o = m_pWidget->umlObject(); + UMLObject * o = m_pObjectWidget->umlObject(); if (!o) { uError() << "UML object of widget is zero."; return; } - UMLObject * old = m_pUmldoc->findUMLObject(name); + UMLObject * old = m_pUMLDoc->findUMLObject(name); if (old && o != old) { KMessageBox::sorry(this, i18n("The name you have chosen\nis already being used.\nThe name has been reset."), i18n("Name is Not Unique"), 0); @@ -361,24 +356,63 @@ } else { o->setName(name); } - } // end if m_pWidget - else if (m_pInstanceWidget) { - m_pInstanceWidget->setInstanceName(m_instanceNameWidget->text()); - UMLObject* o = m_pInstanceWidget->umlObject(); - if (!o) { - uError() << "UML object of instance widget is zero."; - return; + } // end if m_pObjectWidget + else if (m_pUMLWidget) { + m_pUMLWidget->setInstanceName(m_instanceNameWidget->text()); + if (canApplyToUMLObject()) { + setUMLObjectName(name); + } else if (canApplyToUMLWidget()) { + setWidgetName(name); } + } // end if m_pUMLWidget +} - UMLObject* old = m_pUmldoc->findUMLObject(name); - if (old && o != old) { - KMessageBox::sorry(this, i18n("The name you have chosen\nis already being used.\nThe name has been reset."), - i18n("Name is Not Unique"), 0); - m_nameWidget->reset(); - } else { - o->setName(name); - } - } // end if m_pInstanceWidget +/** + * @return True if the UML widget accepts changes in the text field + */ +bool ClassGeneralPage::canApplyToUMLWidget() const +{ + return m_pUMLWidget->isCombinedFragmentWidget() || m_pUMLWidget->isFloatingDashLineWidget(); +} + +/** + * Sets the widget text + * @param name The name of the widget + */ +void ClassGeneralPage::setWidgetName(const QString& name) const +{ + m_pUMLWidget->setName(name); +} + +/** + * @return True if the widget has a uml object to which the name should be changed + */ +bool ClassGeneralPage::canApplyToUMLObject() const +{ + UMLObject *pUMLObject = m_pUMLWidget->umlObject(); + if (!pUMLObject) { + uError() << "UML object of instance widget is zero."; + return false; + } + return true; +} + +/** + * Changes the name of the associated UML object, if present and if the + * name is not already assigned. + * @param name New name of the UML object + */ +void ClassGeneralPage::setUMLObjectName(const QString& name) +{ + UMLObject *pUMLObject = m_pUMLWidget->umlObject(); + UMLObject *pDocUMLObject = m_pUMLDoc->findUMLObject(name); + if (pDocUMLObject && pUMLObject != pDocUMLObject) { + KMessageBox::sorry(this, i18n("The name you have chosen\nis already being used.\nThe name has been reset."), + i18n("Name is Not Unique"), 0); + m_nameWidget->reset(); + } else { + pUMLObject->setName(name); + } } /**