diff --git a/OMEdit/OMEditGUI/Component/Component.cpp b/OMEdit/OMEditGUI/Component/Component.cpp index fe9d8614577..b5c0c572cdf 100644 --- a/OMEdit/OMEditGUI/Component/Component.cpp +++ b/OMEdit/OMEditGUI/Component/Component.cpp @@ -225,20 +225,6 @@ void ComponentInfo::setArrayIndex(QString arrayIndex) */ bool ComponentInfo::operator==(const ComponentInfo &componentInfo) const { - qDebug() << (componentInfo.getClassName() == this->getClassName()); - qDebug() << (componentInfo.getName() == this->getName()); - qDebug() << (componentInfo.getComment() == this->getComment()); - qDebug() << (componentInfo.getProtected() == this->getProtected()); - qDebug() << (componentInfo.getFinal() == this->getFinal()); - qDebug() << (componentInfo.getFlow() == this->getFlow()); - qDebug() << (componentInfo.getStream() == this->getStream()); - qDebug() << (componentInfo.getReplaceable() == this->getReplaceable()); - qDebug() << (componentInfo.getVariablity() == this->getVariablity()); - qDebug() << (componentInfo.getInner() == this->getInner()); - qDebug() << (componentInfo.getOuter() == this->getOuter()); - qDebug() << (componentInfo.getCausality() == this->getCausality()); - qDebug() << (componentInfo.getArrayIndex() == this->getArrayIndex()); - return (componentInfo.getClassName() == this->getClassName()) && (componentInfo.getName() == this->getName()) && (componentInfo.getComment() == this->getComment()) && (componentInfo.getProtected() == this->getProtected()) && (componentInfo.getFinal() == this->getFinal()) && (componentInfo.getFlow() == this->getFlow()) && @@ -1432,8 +1418,17 @@ void Component::duplicate() ComponentInfo *pComponentInfo = new ComponentInfo(mpComponentInfo); pComponentInfo->setName(name); mpGraphicsView->addComponentToView(name, mpLibraryTreeItem, transformationString, QPointF(0, 0), dialogAnnotation, pComponentInfo, true, true); - // set component attributes for Diagram Layer component. + // set component modifiers and attributes for Diagram Layer component. Component *pDiagramComponent = mpGraphicsView->getModelWidget()->getDiagramGraphicsView()->getComponentsList().last(); + // save the Component modifiers + QString className = mpGraphicsView->getModelWidget()->getLibraryTreeItem()->getNameStructure(); + QMap componentModifiersMap; + QStringList componentModifiersList = pMainWindow->getOMCProxy()->getComponentModifierNames(className, mpComponentInfo->getName()); + foreach (QString componentModifier, componentModifiersList) { + QString originalModifierName = QString(mpComponentInfo->getName()).append(".").append(componentModifier); + QString componentModifierValue = pMainWindow->getOMCProxy()->getComponentModifierValue(className, originalModifierName); + componentModifiersMap.insert(componentModifier, componentModifierValue); + } // save the old ComponentInfo ComponentInfo oldDiagramComponentInfo(pDiagramComponent->getComponentInfo()); // Create a new ComponentInfo @@ -1441,28 +1436,14 @@ void Component::duplicate() newDiagramComponentInfo.setName(oldDiagramComponentInfo.getName()); UpdateComponentAttributesCommand *pUpdateDiagramComponentAttributesCommand; pUpdateDiagramComponentAttributesCommand = new UpdateComponentAttributesCommand(pDiagramComponent, oldDiagramComponentInfo, - newDiagramComponentInfo, true); + newDiagramComponentInfo, true, componentModifiersMap); mpGraphicsView->getModelWidget()->getUndoStack()->push(pUpdateDiagramComponentAttributesCommand); setSelected(false); if (mpGraphicsView->getViewType() == StringHandler::Diagram) { pDiagramComponent->setSelected(true); - } - // if component is connector then set component attributes for Icon Layer component. - if (mpLibraryTreeItem && mpLibraryTreeItem->isConnector()) { + } else { Component *pIconComponent = mpGraphicsView->getModelWidget()->getIconGraphicsView()->getComponentsList().last(); - // save the old ComponentInfo - ComponentInfo oldIconComponentInfo(pIconComponent->getComponentInfo()); - // Create a new ComponentInfo - ComponentInfo newIconComponentInfo(mpComponentInfo); - newIconComponentInfo.setName(oldIconComponentInfo.getName()); - UpdateComponentAttributesCommand *pUpdateIconComponentAttributesCommand; - pUpdateIconComponentAttributesCommand = new UpdateComponentAttributesCommand(pIconComponent, oldIconComponentInfo, - newIconComponentInfo, true); - - mpGraphicsView->getModelWidget()->getUndoStack()->push(pUpdateIconComponentAttributesCommand); - if (mpGraphicsView->getViewType() == StringHandler::Icon) { - pIconComponent->setSelected(true); - } + pIconComponent->setSelected(true); } } diff --git a/OMEdit/OMEditGUI/Component/ComponentProperties.cpp b/OMEdit/OMEditGUI/Component/ComponentProperties.cpp index 898e2942088..ece2949a010 100644 --- a/OMEdit/OMEditGUI/Component/ComponentProperties.cpp +++ b/OMEdit/OMEditGUI/Component/ComponentProperties.cpp @@ -1063,7 +1063,7 @@ void ComponentAttributes::updateComponentAttributes() */ if (oldComponentInfo != newComponentInfo) { UpdateComponentAttributesCommand *pUpdateComponentAttributesCommand = new UpdateComponentAttributesCommand(mpComponent, oldComponentInfo, - newComponentInfo, false); + newComponentInfo); pModelWidget->getUndoStack()->push(pUpdateComponentAttributesCommand); pModelWidget->updateModelicaText(); } diff --git a/OMEdit/OMEditGUI/Modeling/Commands.cpp b/OMEdit/OMEditGUI/Modeling/Commands.cpp index d1b7f7a13b6..e0a51159e8f 100644 --- a/OMEdit/OMEditGUI/Modeling/Commands.cpp +++ b/OMEdit/OMEditGUI/Modeling/Commands.cpp @@ -312,13 +312,14 @@ void UpdateComponentTransformationsCommand::undo() UpdateComponentAttributesCommand::UpdateComponentAttributesCommand(Component *pComponent, const ComponentInfo &oldComponentInfo, const ComponentInfo &newComponentInfo, bool duplicate, - QUndoCommand *pParent) + QMap componentModifiersMap, QUndoCommand *pParent) : QUndoCommand(pParent) { mpComponent = pComponent; mOldComponentInfo.updateComponentInfo(&oldComponentInfo); mNewComponentInfo.updateComponentInfo(&newComponentInfo); mDuplicate = duplicate; + mComponentModifiersMap = componentModifiersMap; setText(QString("Update Component %1 Attributes").arg(mpComponent->getName())); } @@ -424,6 +425,21 @@ void UpdateComponentAttributesCommand::redo() pOMCProxy->printMessagesStringInternal(); } } + // apply Component modifiers if duplicate case + if (mDuplicate) { + bool modifierValueChanged = false; + QMap::iterator componentModifier; + for (componentModifier = mComponentModifiersMap.begin(); componentModifier != mComponentModifiersMap.end(); ++componentModifier) { + QString modifierName = QString(mpComponent->getName()).append(".").append(componentModifier.key()); + QString modifierValue = componentModifier.value(); + if (pOMCProxy->setComponentModifierValue(modelName, modifierName, modifierValue.prepend("="))) { + modifierValueChanged = true; + } + } + if (modifierValueChanged) { + mpComponent->componentParameterHasChanged(); + } + } } /*! diff --git a/OMEdit/OMEditGUI/Modeling/Commands.h b/OMEdit/OMEditGUI/Modeling/Commands.h index 1f79fc7f73c..2b57be2ae9c 100644 --- a/OMEdit/OMEditGUI/Modeling/Commands.h +++ b/OMEdit/OMEditGUI/Modeling/Commands.h @@ -105,7 +105,8 @@ class UpdateComponentAttributesCommand : public QUndoCommand { public: UpdateComponentAttributesCommand(Component *pComponent, const ComponentInfo &oldComponentInfo, const ComponentInfo &newComponentInfo, - bool duplicate, QUndoCommand *pParent = 0); + bool duplicate = false, QMap componentModifiersMap = QMap(), + QUndoCommand *pParent = 0); void redo(); void undo(); private: @@ -113,6 +114,7 @@ class UpdateComponentAttributesCommand : public QUndoCommand ComponentInfo mOldComponentInfo; ComponentInfo mNewComponentInfo; bool mDuplicate; + QMap mComponentModifiersMap; }; class DeleteComponentCommand : public QUndoCommand