Skip to content

Commit 3ea3db0

Browse files
committed
ticket:5537 Handle multiple parameter values in a TextAnnotation
Display the unit of the parameter if available. The unit is only shown if parameter has some value.
1 parent e0b417b commit 3ea3db0

File tree

9 files changed

+169
-78
lines changed

9 files changed

+169
-78
lines changed

OMEdit/OMEdit/OMEditGUI/Annotations/TextAnnotation.cpp

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -538,21 +538,31 @@ void TextAnnotation::updateTextStringHelper(QRegExp regExp)
538538
/* Ticket:4204
539539
* If we have extend component then call Component::getParameterDisplayString from root component.
540540
*/
541-
if (mpComponent->getComponentType() == Component::Extend) {
542-
textValue = mpComponent->getRootParentComponent()->getParameterDisplayString(variable);
543-
} else {
544-
textValue = mpComponent->getRootParentComponent()->getParameterDisplayString(variable);
545-
}
541+
textValue = mpComponent->getRootParentComponent()->getParameterDisplayString(variable);
546542
if (!textValue.isEmpty()) {
547-
mTextString.replace(pos, regExp.matchedLength(), textValue);
543+
QString unit = "";
544+
QString displaytUnit = "";
545+
Component *pComponent = mpComponent->getRootParentComponent()->getComponentByName(variable);
546+
if (pComponent) {
547+
displaytUnit = pComponent->getDerivedClassModifierValue("displaytUnit");
548+
if (displaytUnit.isEmpty()) {
549+
unit = pComponent->getDerivedClassModifierValue("unit");
550+
displaytUnit = unit;
551+
}
552+
}
553+
if (displaytUnit.isEmpty()) {
554+
mTextString.replace(pos, regExp.matchedLength(), textValue);
555+
} else {
556+
mTextString.replace(pos, regExp.matchedLength(), QString("%1 %2").arg(textValue, displaytUnit));
557+
}
548558
} else { /* if the value of %\\W* is empty then remove the % sign. */
549559
mTextString.replace(pos, 1, "");
550560
}
551561
} else { /* if there is just alone % then remove it. Because if you want to print % then use %%. */
552562
mTextString.replace(pos, 1, "");
553563
}
554564
}
555-
pos += regExp.matchedLength();
565+
pos = 0;
556566
}
557567
}
558568

OMEdit/OMEdit/OMEditGUI/Component/Component.cpp

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1297,6 +1297,78 @@ QString Component::getParameterDisplayString(QString parameterName)
12971297
return displayString;
12981298
}
12991299

1300+
/*!
1301+
* \brief Component::getDerivedClassModifierValue
1302+
* Used to fetch the values of unit and displayUnit.
1303+
* \param modifierName
1304+
* \return
1305+
*/
1306+
QString Component::getDerivedClassModifierValue(QString modifierName)
1307+
{
1308+
/* Get unit value
1309+
* First check if unit is defined with in the component modifier.
1310+
* If no unit is found then check it in the derived class modifier value.
1311+
* A derived class can be inherited, so look recursively.
1312+
*/
1313+
OMCProxy *pOMCProxy = MainWindow::instance()->getOMCProxy();
1314+
QString className = mpGraphicsView->getModelWidget()->getLibraryTreeItem()->getNameStructure();
1315+
QString modifierValue = mpComponentInfo->getModifiersMap(pOMCProxy, className, this).value(modifierName);
1316+
if (modifierValue.isEmpty()) {
1317+
if (!pOMCProxy->isBuiltinType(mpComponentInfo->getClassName())) {
1318+
if (mpLibraryTreeItem) {
1319+
if (!mpLibraryTreeItem->getModelWidget()) {
1320+
MainWindow::instance()->getLibraryWidget()->getLibraryTreeModel()->showModelWidget(mpLibraryTreeItem, false);
1321+
}
1322+
modifierValue = mpLibraryTreeItem->getModelWidget()->getDerivedClassModifiersMap().value(modifierName);
1323+
}
1324+
if (modifierValue.isEmpty()) {
1325+
modifierValue = getInheritedDerivedClassModifierValue(this, modifierName);
1326+
}
1327+
}
1328+
}
1329+
return StringHandler::removeFirstLastQuotes(modifierValue);
1330+
}
1331+
1332+
/*!
1333+
* \brief Component::getInheritedDerivedClassModifierValue
1334+
* Helper function for Component::getDerivedClassModifierValue()
1335+
* \param pComponent
1336+
* \param modifierName
1337+
* \return
1338+
*/
1339+
QString Component::getInheritedDerivedClassModifierValue(Component *pComponent, QString modifierName)
1340+
{
1341+
MainWindow *pMainWindow = MainWindow::instance();
1342+
OMCProxy *pOMCProxy = pMainWindow->getOMCProxy();
1343+
QString modifierValue = "";
1344+
if (!pComponent->getLibraryTreeItem()->getModelWidget()) {
1345+
pMainWindow->getLibraryWidget()->getLibraryTreeModel()->showModelWidget(pComponent->getLibraryTreeItem(), false);
1346+
}
1347+
foreach (Component *pInheritedComponent, pComponent->getInheritedComponentsList()) {
1348+
/* Ticket #4031
1349+
* Since we use the parent ComponentInfo for inherited classes so we should not use
1350+
* pInheritedComponent->getComponentInfo()->getClassName() to get the name instead we should use
1351+
* pInheritedComponent->getLibraryTreeItem()->getNameStructure() to get the correct name of inherited class.
1352+
* Also don't just return after reading from first inherited class. Check recursively.
1353+
*/
1354+
if (!pOMCProxy->isBuiltinType(pInheritedComponent->getLibraryTreeItem()->getNameStructure())) {
1355+
if (pInheritedComponent->getLibraryTreeItem()) {
1356+
if (!pInheritedComponent->getLibraryTreeItem()->getModelWidget()) {
1357+
pMainWindow->getLibraryWidget()->getLibraryTreeModel()->showModelWidget(pInheritedComponent->getLibraryTreeItem(), false);
1358+
}
1359+
modifierValue = pInheritedComponent->getLibraryTreeItem()->getModelWidget()->getDerivedClassModifiersMap().value(modifierName);
1360+
}
1361+
if (modifierValue.isEmpty()) {
1362+
modifierValue = getInheritedDerivedClassModifierValue(pInheritedComponent, modifierName);
1363+
}
1364+
if (!modifierValue.isEmpty()) {
1365+
return StringHandler::removeFirstLastQuotes(modifierValue);
1366+
}
1367+
}
1368+
}
1369+
return "";
1370+
}
1371+
13001372
/*!
13011373
* \brief Component::shapeAdded
13021374
* Called when a reference shape is added in its actual class.
@@ -1478,6 +1550,31 @@ void Component::setBusComponent(Component *pBusComponent)
14781550
setVisible(!isInBus());
14791551
}
14801552

1553+
/*!
1554+
* \brief Component::getComponentByName
1555+
* Finds the component by name.
1556+
* \param componentName
1557+
* \return
1558+
*/
1559+
Component *Component::getComponentByName(const QString &componentName)
1560+
{
1561+
Component *pComponentFound = 0;
1562+
foreach (Component *pComponent, getComponentsList()) {
1563+
if (pComponent->getComponentInfo() && pComponent->getName().compare(componentName) == 0) {
1564+
pComponentFound = pComponent;
1565+
return pComponentFound;
1566+
}
1567+
}
1568+
/* if is not found in components list then look into the inherited components list. */
1569+
foreach (Component *pInheritedComponent, getInheritedComponentsList()) {
1570+
pComponentFound = pInheritedComponent->getComponentByName(componentName);
1571+
if (pComponentFound) {
1572+
return pComponentFound;
1573+
}
1574+
}
1575+
return pComponentFound;
1576+
}
1577+
14811578
/*!
14821579
* \brief Component::createNonExistingComponent
14831580
* Creates a non-existing component.

OMEdit/OMEdit/OMEditGUI/Component/Component.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,8 @@ class Component : public QObject, public QGraphicsItem
239239
void emitDeleted();
240240
void componentParameterHasChanged();
241241
QString getParameterDisplayString(QString parameterName);
242+
QString getDerivedClassModifierValue(QString modifierName);
243+
QString getInheritedDerivedClassModifierValue(Component *pComponent, QString modifierName);
242244
void shapeAdded();
243245
void shapeUpdated();
244246
void shapeDeleted();
@@ -251,6 +253,7 @@ class Component : public QObject, public QGraphicsItem
251253
bool isInBus() {return mpBusComponent != 0;}
252254
void setBusComponent(Component *pBusComponent);
253255
Component* getBusComponent() {return mpBusComponent;}
256+
Component* getComponentByName(const QString &componentName);
254257

255258
Transformation mTransformation;
256259
Transformation mOldTransformation;

OMEdit/OMEdit/OMEditGUI/Component/ComponentProperties.cpp

Lines changed: 5 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -95,36 +95,11 @@ Parameter::Parameter(Component *pComponent, bool showStartAttribute, QString tab
9595
setSaveSelectorFilter("-");
9696
setSaveSelectorCaption("-");
9797
createValueWidget();
98-
/* Get unit value
99-
* First check if unit is defined with in the component modifier.
100-
* If no unit is found then check it in the derived class modifier value.
101-
* A derived class can be inherited, so look recursively.
102-
*/
103-
QString className = mpComponent->getGraphicsView()->getModelWidget()->getLibraryTreeItem()->getNameStructure();
104-
QString unit = mpComponent->getComponentInfo()->getModifiersMap(pOMCProxy, className, mpComponent).value("unit");
105-
if (unit.isEmpty()) {
106-
if (!pOMCProxy->isBuiltinType(mpComponent->getComponentInfo()->getClassName())) {
107-
unit = pOMCProxy->getDerivedClassModifierValue(mpComponent->getComponentInfo()->getClassName(), "unit");
108-
if (unit.isEmpty()) {
109-
unit = getModifierValueFromDerivedClass(mpComponent, "unit");
110-
}
111-
}
112-
}
113-
mUnit = StringHandler::removeFirstLastQuotes(unit);
114-
/* Get displayUnit value
115-
* First check if displayUnit is defined with in the component modifier.
116-
* If no displayUnit is found then check it in the derived class modifier value.
117-
* A derived class can be inherited, so look recursively.
118-
*/
119-
QString displayUnit = mpComponent->getComponentInfo()->getModifiersMap(pOMCProxy, className, mpComponent).value("displayUnit");
120-
if (displayUnit.isEmpty()) {
121-
if (!pOMCProxy->isBuiltinType(mpComponent->getComponentInfo()->getClassName())) {
122-
displayUnit = pOMCProxy->getDerivedClassModifierValue(mpComponent->getComponentInfo()->getClassName(), "displayUnit");
123-
if (displayUnit.isEmpty()) {
124-
displayUnit = getModifierValueFromDerivedClass(mpComponent, "displayUnit");
125-
}
126-
}
127-
}
98+
// Get unit value
99+
QString unit = mpComponent->getDerivedClassModifierValue("unit");
100+
mUnit = unit;
101+
// Get displayUnit value
102+
QString displayUnit = mpComponent->getDerivedClassModifierValue("displayUnit");
128103
if (displayUnit.isEmpty()) {
129104
displayUnit = unit;
130105
}
@@ -293,43 +268,6 @@ QString Parameter::getFixedState()
293268
return mpFixedCheckBox->tickStateString();
294269
}
295270

296-
/*!
297-
* \brief Parameter::getModifierValueFromDerivedClass
298-
* Returns the modifier value by reading the derived classes.
299-
* \param pComponent
300-
* \param modifierName
301-
* \return the modifier value.
302-
*/
303-
QString Parameter::getModifierValueFromDerivedClass(Component *pComponent, QString modifierName)
304-
{
305-
MainWindow *pMainWindow = MainWindow::instance();
306-
OMCProxy *pOMCProxy = pMainWindow->getOMCProxy();
307-
QString modifierValue = "";
308-
if (!pComponent->getLibraryTreeItem()->getModelWidget()) {
309-
pMainWindow->getLibraryWidget()->getLibraryTreeModel()->showModelWidget(pComponent->getLibraryTreeItem(), false);
310-
}
311-
foreach (Component *pInheritedComponent, pComponent->getInheritedComponentsList()) {
312-
/* Ticket #4031
313-
* Since we use the parent ComponentInfo for inherited classes so we should not use
314-
* pInheritedComponent->getComponentInfo()->getClassName() to get the name instead we should use
315-
* pInheritedComponent->getLibraryTreeItem()->getNameStructure() to get the correct name of inherited class.
316-
* Also don't just return after reading from first inherited class. Check recursively.
317-
*/
318-
if (pInheritedComponent->getLibraryTreeItem() &&
319-
!pOMCProxy->isBuiltinType(pInheritedComponent->getLibraryTreeItem()->getNameStructure())) {
320-
modifierValue = pOMCProxy->getDerivedClassModifierValue(pInheritedComponent->getLibraryTreeItem()->getNameStructure(),
321-
modifierName);
322-
if (modifierValue.isEmpty()) {
323-
modifierValue = getModifierValueFromDerivedClass(pInheritedComponent, modifierName);
324-
}
325-
if (!modifierValue.isEmpty()) {
326-
return modifierValue;
327-
}
328-
}
329-
}
330-
return "";
331-
}
332-
333271
/*!
334272
Sets the input field of the parameter enable/disable.
335273
\param enable

OMEdit/OMEdit/OMEditGUI/Component/ComponentProperties.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,6 @@ class Parameter : public QObject
8484
Label* getCommentLabel() {return mpCommentLabel;}
8585
void setFixedState(QString fixed, bool defaultValue);
8686
QString getFixedState();
87-
QString getModifierValueFromDerivedClass(Component *pComponent, QString modifierName);
8887
void setEnabled(bool enable);
8988
private:
9089
Component *mpComponent;

OMEdit/OMEdit/OMEditGUI/Modeling/ModelWidgetContainer.cpp

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1778,7 +1778,11 @@ bool GraphicsView::isParameterConnectorSizing(Component *pComponent, QString par
17781778
}
17791779
// Look in class inherited components
17801780
foreach (Component *pInheritedComponent, pComponent->getInheritedComponentsList()) {
1781-
if (pInheritedComponent->getComponentInfo() && pInheritedComponent->getName().compare(parameter) == 0) {
1781+
/* Since we use the parent ComponentInfo for inherited classes so we should not use
1782+
* pInheritedComponent->getComponentInfo()->getClassName() to get the name instead we should use
1783+
* pInheritedComponent->getLibraryTreeItem()->getNameStructure() to get the correct name of inherited class.
1784+
*/
1785+
if (pInheritedComponent->getLibraryTreeItem() && pInheritedComponent->getLibraryTreeItem()->getName().compare(parameter) == 0) {
17821786
return (pInheritedComponent->getDialogAnnotation().size() > 10) && (pInheritedComponent->getDialogAnnotation().at(10).compare("true") == 0);
17831787
}
17841788
result = isParameterConnectorSizing(pInheritedComponent, parameter);
@@ -3532,9 +3536,8 @@ void UndoStack::push(UndoCommand *cmd)
35323536
ModelWidget::ModelWidget(LibraryTreeItem* pLibraryTreeItem, ModelWidgetContainer *pModelWidgetContainer)
35333537
: QWidget(pModelWidgetContainer), mpModelWidgetContainer(pModelWidgetContainer), mpLibraryTreeItem(pLibraryTreeItem),
35343538
mComponentsLoaded(false), mDiagramViewLoaded(false), mConnectionsLoaded(false), mCreateModelWidgetComponents(false),
3535-
mExtendsModifiersLoaded(false)
3539+
mExtendsModifiersLoaded(false), mDerivedClassModifiersLoaded(false)
35363540
{
3537-
mExtendsModifiersMap.clear();
35383541
// create widgets based on library type
35393542
if (mpLibraryTreeItem->getLibraryType() == LibraryTreeItem::Modelica) {
35403543
// icon graphics framework
@@ -3641,13 +3644,38 @@ QMap<QString, QString> ModelWidget::getExtendsModifiersMap(QString extendsClass)
36413644
return mExtendsModifiersMap.value(extendsClass);
36423645
}
36433646

3647+
/*!
3648+
* \brief ModelWidget::getDerivedClassModifiersMap
3649+
* Returns a derived class modifiers map
3650+
* \param derivedClass
3651+
* \return
3652+
*/
3653+
QMap<QString, QString> ModelWidget::getDerivedClassModifiersMap()
3654+
{
3655+
if (!mDerivedClassModifiersLoaded) {
3656+
mDerivedClassModifiersMap.clear();
3657+
OMCProxy *pOMCProxy = MainWindow::instance()->getOMCProxy();
3658+
QStringList derivedClassModifierNames = pOMCProxy->getDerivedClassModifierNames(mpLibraryTreeItem->getNameStructure());
3659+
foreach (QString derivedClassModifierName, derivedClassModifierNames) {
3660+
// if we have already read the record modifier then continue
3661+
if (mDerivedClassModifiersMap.contains(derivedClassModifierName)) {
3662+
continue;
3663+
}
3664+
mDerivedClassModifiersMap.insert(derivedClassModifierName, pOMCProxy->getDerivedClassModifierValue(mpLibraryTreeItem->getNameStructure(), derivedClassModifierName));
3665+
}
3666+
mDerivedClassModifiersLoaded = true;
3667+
}
3668+
return mDerivedClassModifiersMap;
3669+
}
3670+
36443671
/*!
36453672
* \brief ModelWidget::fetchExtendsModifiers
36463673
* Gets the extends modifiers and their values.
36473674
* \param extendsClass
36483675
*/
36493676
void ModelWidget::fetchExtendsModifiers(QString extendsClass)
36503677
{
3678+
mExtendsModifiersMap.clear();
36513679
OMCProxy *pOMCProxy = MainWindow::instance()->getOMCProxy();
36523680
QStringList extendsModifiersList = pOMCProxy->getExtendsModifierNames(mpLibraryTreeItem->getNameStructure(), extendsClass);
36533681
QMap<QString, QString> extendsModifiersMap;
@@ -4401,6 +4429,7 @@ void ModelWidget::reDrawModelWidget()
44014429
} else {
44024430
// Draw icon view
44034431
mExtendsModifiersLoaded = false;
4432+
mDerivedClassModifiersLoaded = false;
44044433
// remove saved inherited classes
44054434
clearInheritedClasses();
44064435
// get inherited classes

OMEdit/OMEdit/OMEditGUI/Modeling/ModelWidgetContainer.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -429,6 +429,7 @@ class ModelWidget : public QWidget
429429
QList<LibraryTreeItem*> getInheritedClassesList() {return mInheritedClassesList;}
430430
const QList<ComponentInfo*> &getComponentsList() {return mComponentsList;}
431431
QMap<QString, QString> getExtendsModifiersMap(QString extendsClass);
432+
QMap<QString, QString> getDerivedClassModifiersMap();
432433
void fetchExtendsModifiers(QString extendsClass);
433434
void reDrawModelWidgetInheritedClasses();
434435
void drawBaseCoOrdinateSystem(ModelWidget *pModelWidget, GraphicsView *pGraphicsView);
@@ -490,6 +491,8 @@ class ModelWidget : public QWidget
490491
bool mCreateModelWidgetComponents;
491492
bool mExtendsModifiersLoaded;
492493
QMap<QString, QMap<QString, QString> > mExtendsModifiersMap;
494+
bool mDerivedClassModifiersLoaded;
495+
QMap<QString, QString> mDerivedClassModifiersMap;
493496
QList<LibraryTreeItem*> mInheritedClassesList;
494497
QList<ComponentInfo*> mComponentsList;
495498
QStringList mComponentsAnnotationsList;

OMEdit/OMEdit/OMEditGUI/OMC/OMCProxy.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2648,6 +2648,17 @@ QStringList OMCProxy::getAvailableLibraries()
26482648
return mpOMCInterface->getAvailableLibraries();
26492649
}
26502650

2651+
/*!
2652+
* \brief OMCProxy::getDerivedClassModifierNames
2653+
* Gets the derived class modifier names.
2654+
* \param className
2655+
* \return
2656+
*/
2657+
QStringList OMCProxy::getDerivedClassModifierNames(QString className)
2658+
{
2659+
return mpOMCInterface->getDerivedClassModifierNames(className);
2660+
}
2661+
26512662
/*!
26522663
* \brief OMCProxy::getDerivedClassModifierValue
26532664
* Gets the derived class modifier value.

OMEdit/OMEdit/OMEditGUI/OMC/OMCProxy.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,7 @@ class OMCProxy : public QObject
226226
QString uriToFilename(QString uri);
227227
QString getModelicaPath();
228228
QStringList getAvailableLibraries();
229+
QStringList getDerivedClassModifierNames(QString className);
229230
QString getDerivedClassModifierValue(QString className, QString modifierName);
230231
OMCInterface::convertUnits_res convertUnits(QString from, QString to);
231232
QList<QString> getDerivedUnits(QString baseUnit);

0 commit comments

Comments
 (0)