Skip to content

Commit

Permalink
[NewAPI] Fix display of text annotations for modifiers, parameters et…
Browse files Browse the repository at this point in the history
…c. (#9613)
  • Loading branch information
adeas31 committed Oct 28, 2022
1 parent 175a408 commit a0c426c
Show file tree
Hide file tree
Showing 5 changed files with 129 additions and 44 deletions.
14 changes: 4 additions & 10 deletions OMEdit/OMEditLIB/Annotations/TextAnnotation.cpp
Expand Up @@ -689,17 +689,11 @@ void TextAnnotation::updateTextString()
if (!mTextString.contains("%")) {
return;
}
if (MainWindow::instance()->isNewApi()) {
if (mTextString.toLower().contains("%name")) {
mTextString.replace(QRegExp("%name"), mpElement->getModelElement()->getName());
}
} else {
if (mTextString.toLower().contains("%name")) {
mTextString.replace(QRegExp("%name"), mpElement->getName());
}
if (mTextString.toLower().contains("%name")) {
mTextString.replace(QRegExp("%name"), mpElement->getName());
}
if (mTextString.toLower().contains("%class") && mpElement->getLibraryTreeItem()) {
mTextString.replace(QRegExp("%class"), mpElement->getLibraryTreeItem()->getNameStructure());
if (mTextString.toLower().contains("%class")) {
mTextString.replace(QRegExp("%class"), mpElement->getClassName());
}
if (!mTextString.contains("%")) {
return;
Expand Down
108 changes: 76 additions & 32 deletions OMEdit/OMEditLIB/Element/Element.cpp
Expand Up @@ -1872,8 +1872,7 @@ QString Element::getParameterDisplayString(QString parameterName)
/* How to get the display value,
* 0. If the component is inherited component then check if the value is available in the class extends modifiers.
* 1. Check if the value is available in component modifier.
* 2. Check if the value is available in the component's containing class as a parameter or variable.
* 2.1 Check if the value is available in the component's class as a parameter or variable.
* 2 Check if the value is available in the component's class as a parameter or variable.
* 3. Find the value in extends classes and check if the value is present in extends modifier.
* 4. If there is no extends modifier then finally check if value is present in extends classes.
*/
Expand All @@ -1885,9 +1884,13 @@ QString Element::getParameterDisplayString(QString parameterName)
* Handle parameters display of inherited components.
*/
/* case 0 */
if (isInheritedElement() && mpReferenceElement) {
QString extendsClass = mpReferenceElement->getGraphicsView()->getModelWidget()->getLibraryTreeItem()->getNameStructure();
displayString = mpGraphicsView->getModelWidget()->getExtendsModifiersMap(extendsClass).value(QString("%1.%2").arg(getName()).arg(parameterName), "");
if (isInheritedElement()) {
if (mpGraphicsView->getModelWidget()->isNewApi()) {
displayString = mpModel->getParameterValueFromExtendsModifiers(parameterName);
} else if (mpReferenceElement) {
QString extendsClass = mpReferenceElement->getGraphicsView()->getModelWidget()->getLibraryTreeItem()->getNameStructure();
displayString = mpGraphicsView->getModelWidget()->getExtendsModifiersMap(extendsClass).value(QString("%1.%2").arg(getName()).arg(parameterName), "");
}
}
/* case 1 */
if (displayString.isEmpty()) {
Expand All @@ -1899,22 +1902,26 @@ QString Element::getParameterDisplayString(QString parameterName)
}
/* case 2 or check for enumeration type if case 1 */
if (displayString.isEmpty() || typeName.isEmpty()) {
if (mpLibraryTreeItem) {
if (mpGraphicsView->getModelWidget()->isNewApi()) {
QString value = mpModel->getParameterValue(parameterName, typeName);
if (displayString.isEmpty()) {
displayString = value;
}
Element::checkEnumerationDisplayString(displayString, typeName);
} else if (mpLibraryTreeItem) {
mpLibraryTreeItem->getModelWidget()->loadDiagramView();
foreach (Element *pElement, mpLibraryTreeItem->getModelWidget()->getDiagramGraphicsView()->getElementsList()) {
if (pElement->getElementInfo()->getName().compare(StringHandler::getFirstWordBeforeDot(parameterName)) == 0) {
if (displayString.isEmpty()) {
displayString = pElement->getElementInfo()->getParameterValue(pOMCProxy, mpLibraryTreeItem->getNameStructure());
}
/* case 2.1
* Fixes issue #7493. Handles the case where value is from instance name e.g., %instanceName.parameterName
*/
// Fixes issue #7493. Handles the case where value is from instance name e.g., %instanceName.parameterName
if (displayString.isEmpty()) {
displayString = pOMCProxy->getParameterValue(pElement->getElementInfo()->getClassName(), StringHandler::getLastWordAfterDot(parameterName));
}

typeName = pElement->getElementInfo()->getClassName();
checkEnumerationDisplayString(displayString, typeName);
Element::checkEnumerationDisplayString(displayString, typeName);
break;
}
}
Expand Down Expand Up @@ -2935,7 +2942,9 @@ QString Element::getParameterDisplayStringFromExtendsModifiers(QString parameter
/* Ticket:4204
* Get the extends modifiers of the class not the inherited class.
*/
if (mpLibraryTreeItem) {
if (mpGraphicsView->getModelWidget()->isNewApi()) {
displayString = mpModel->getParameterValueFromExtendsModifiers(parameterName);
} else if (mpLibraryTreeItem) {
foreach (Element *pElement, mInheritedElementsList) {
if (pElement->getLibraryTreeItem()) {
QMap<QString, QString> extendsModifiersMap = mpLibraryTreeItem->getModelWidget()->getExtendsModifiersMap(pElement->getLibraryTreeItem()->getNameStructure());
Expand Down Expand Up @@ -2964,32 +2973,67 @@ QString Element::getParameterDisplayStringFromExtendsParameters(QString paramete
{
QString displayString = modifierString;
QString typeName = "";
foreach (Element *pInheritedElement, mInheritedElementsList) {
if (pInheritedElement->getLibraryTreeItem()) {
if (!pInheritedElement->getLibraryTreeItem()->getModelWidget()) {
MainWindow::instance()->getLibraryWidget()->getLibraryTreeModel()->showModelWidget(pInheritedElement->getLibraryTreeItem(), false);
}
pInheritedElement->getLibraryTreeItem()->getModelWidget()->loadDiagramView();
foreach (Element *pElement, pInheritedElement->getLibraryTreeItem()->getModelWidget()->getDiagramGraphicsView()->getElementsList()) {
if (pElement->getElementInfo()->getName().compare(parameterName) == 0) {
OMCProxy *pOMCProxy = MainWindow::instance()->getOMCProxy();
/* Ticket:4204
* Look for the parameter value in the parameter containing class not in the parameter class.
*/
if (pInheritedElement->getLibraryTreeItem()) {
if (displayString.isEmpty()) {
displayString = pElement->getElementInfo()->getParameterValue(pOMCProxy, pInheritedElement->getLibraryTreeItem()->getNameStructure());
}
typeName = pElement->getElementInfo()->getClassName();
checkEnumerationDisplayString(displayString, typeName);
if (!(displayString.isEmpty() || typeName.isEmpty())) {
return displayString;
if (mpGraphicsView->getModelWidget()->isNewApi()) {
displayString = Element::getParameterDisplayStringFromExtendsParameters(mpModel, parameterName, modifierString);
} else {
foreach (Element *pInheritedElement, mInheritedElementsList) {
if (pInheritedElement->getLibraryTreeItem()) {
if (!pInheritedElement->getLibraryTreeItem()->getModelWidget()) {
MainWindow::instance()->getLibraryWidget()->getLibraryTreeModel()->showModelWidget(pInheritedElement->getLibraryTreeItem(), false);
}
pInheritedElement->getLibraryTreeItem()->getModelWidget()->loadDiagramView();
foreach (Element *pElement, pInheritedElement->getLibraryTreeItem()->getModelWidget()->getDiagramGraphicsView()->getElementsList()) {
if (pElement->getElementInfo()->getName().compare(parameterName) == 0) {
OMCProxy *pOMCProxy = MainWindow::instance()->getOMCProxy();
/* Ticket:4204
* Look for the parameter value in the parameter containing class not in the parameter class.
*/
if (pInheritedElement->getLibraryTreeItem()) {
if (displayString.isEmpty()) {
displayString = pElement->getElementInfo()->getParameterValue(pOMCProxy, pInheritedElement->getLibraryTreeItem()->getNameStructure());
}
typeName = pElement->getElementInfo()->getClassName();
Element::checkEnumerationDisplayString(displayString, typeName);
if (!(displayString.isEmpty() || typeName.isEmpty())) {
return displayString;
}
}
}
}
}
displayString = pInheritedElement->getParameterDisplayStringFromExtendsParameters(parameterName, displayString);
if (!(displayString.isEmpty() || typeName.isEmpty())) {
return displayString;
}
}
}
return displayString;
}

/*!
* \brief Element::getParameterDisplayStringFromExtendsParameters
* Gets the display string for components from extends parameters.
* \param pModel
* \param parameterName
* \param modifierString
* \return
*/
QString Element::getParameterDisplayStringFromExtendsParameters(ModelInstance::Model *pModel, QString parameterName, QString modifierString)
{
QString displayString = modifierString;
QString typeName = "";

QList<ModelInstance::Extend*> extends = pModel->getExtends();
foreach (auto pExtend, extends) {
QString value = pExtend->getParameterValue(parameterName, typeName);
if (displayString.isEmpty()) {
displayString = value;
}
Element::checkEnumerationDisplayString(displayString, typeName);
if (!(displayString.isEmpty() || typeName.isEmpty())) {
return displayString;
}
displayString = pInheritedElement->getParameterDisplayStringFromExtendsParameters(parameterName, displayString);
displayString = Element::getParameterDisplayStringFromExtendsParameters(pExtend, parameterName, displayString);
if (!(displayString.isEmpty() || typeName.isEmpty())) {
return displayString;
}
Expand Down
3 changes: 2 additions & 1 deletion OMEdit/OMEditLIB/Element/Element.h
Expand Up @@ -379,7 +379,8 @@ class Element : public QObject, public QGraphicsItem
void updateConnections();
QString getParameterDisplayStringFromExtendsModifiers(QString parameterName);
QString getParameterDisplayStringFromExtendsParameters(QString parameterName, QString modifierString);
bool checkEnumerationDisplayString(QString &displayString, const QString &typeName);
static QString getParameterDisplayStringFromExtendsParameters(ModelInstance::Model *pModel, QString parameterName, QString modifierString);
static bool checkEnumerationDisplayString(QString &displayString, const QString &typeName);
void updateToolTip();
signals:
void added();
Expand Down
44 changes: 44 additions & 0 deletions OMEdit/OMEditLIB/Modeling/Model.cpp
Expand Up @@ -1003,6 +1003,45 @@ namespace ModelInstance
return false;
}

QString Model::getParameterValue(const QString &parameter, QString &typeName)
{
QString value = "";
foreach (auto pElement, mElements) {
if (pElement->getName().compare(StringHandler::getFirstWordBeforeDot(parameter)) == 0) {
value = pElement->getModifier().getValue();
// Fixes issue #7493. Handles the case where value is from instance name e.g., %instanceName.parameterName
if (value.isEmpty() && pElement->getModel()) {
value = pElement->getModel()->getParameterValue(StringHandler::getLastWordAfterDot(parameter), typeName);
}
typeName = pElement->getType();
break;
}
}
return StringHandler::removeFirstLastQuotes(value);
}

QString Model::getParameterValueFromExtendsModifiers(const QString &parameter)
{
QString value = "";
foreach (auto pExtend, mExtends) {
value = pExtend->getExtendsModifier().getModifierValue(QStringList() << parameter);
if (!value.isEmpty()) {
return value;
}
}

if (value.isEmpty()) {
foreach (auto pExtend, mExtends) {
value = pExtend->getParameterValueFromExtendsModifiers(parameter);
if (!value.isEmpty()) {
return value;
}
}
}

return value;
}

void Model::initialize()
{
mModelJson = QJsonObject();
Expand Down Expand Up @@ -1197,6 +1236,11 @@ namespace ModelInstance
}
}

QString Modifier::getValue() const
{
return StringHandler::removeFirstLastQuotes(mValue);
}

QString Modifier::getModifierValue(QStringList qualifiedModifierName)
{
if (qualifiedModifierName.isEmpty()) {
Expand Down
4 changes: 3 additions & 1 deletion OMEdit/OMEditLIB/Modeling/Model.h
Expand Up @@ -322,7 +322,7 @@ namespace ModelInstance

QString getName() const {return mName;}
void setName(const QString &name) {mName = name;}
QString getValue() const {return mValue;}
QString getValue() const;
QList<Modifier> getModifiers() const {return mModifiers;}
bool isFinal() const {return mFinal;}
bool isEach() const {return mEach;}
Expand Down Expand Up @@ -393,6 +393,8 @@ namespace ModelInstance
QList<InitialState *> getInitialStates() const {return mInitialStates;}

bool isParameterConnectorSizing(const QString &parameter);
QString getParameterValue(const QString &parameter, QString &typeName);
QString getParameterValueFromExtendsModifiers(const QString &parameter);
private:
void initialize();

Expand Down

0 comments on commit a0c426c

Please sign in to comment.