Skip to content

Commit

Permalink
ticket:4840 Handle the array unit conversion of array modifiers
Browse files Browse the repository at this point in the history
  • Loading branch information
adeas31 committed Jul 4, 2018
1 parent 991c06b commit 862a324
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 0 deletions.
8 changes: 8 additions & 0 deletions OMEdit/OMEditGUI/Component/ComponentProperties.cpp
Expand Up @@ -166,13 +166,16 @@ void Parameter::setValueWidget(QString value, bool defaultValue, QString fromUni
if (!fromUnit.isEmpty() && mpUnitComboBox->currentText().compare(fromUnit) != 0) {
bool ok = true;
qreal realValue = value.toDouble(&ok);
// if the modifier is a literal constant
if (ok) {
OMCProxy *pOMCProxy = MainWindow::instance()->getOMCProxy();
OMCInterface::convertUnits_res convertUnit = pOMCProxy->convertUnits(fromUnit, mpUnitComboBox->currentText());
if (convertUnit.unitsCompatible) {
realValue = Utilities::convertUnit(realValue, convertUnit.offset, convertUnit.scaleFactor);
value = QString::number(realValue);
}
} else { // if expression
value = Utilities::arrayExpressionUnitConversion(MainWindow::instance()->getOMCProxy(), value, fromUnit, mpUnitComboBox->currentText());
}
}
mDefaultValue = defaultValue;
Expand Down Expand Up @@ -1170,12 +1173,17 @@ void ComponentParameters::updateComponentParameters()
if (!pParameter->getUnit().isEmpty() && pParameter->getUnit().compare(pParameter->getUnitComboBox()->currentText()) != 0) {
bool ok = true;
qreal componentModifierRealValue = componentModifierValue.toDouble(&ok);
// if the modifier is a literal constant
if (ok) {
OMCInterface::convertUnits_res convertUnit = pOMCProxy->convertUnits(pParameter->getUnitComboBox()->currentText(), pParameter->getUnit());
if (convertUnit.unitsCompatible) {
componentModifierRealValue = Utilities::convertUnit(componentModifierRealValue, convertUnit.offset, convertUnit.scaleFactor);
componentModifierValue = QString::number(componentModifierRealValue);
}
} else { // if expression
componentModifierValue = Utilities::arrayExpressionUnitConversion(pOMCProxy, componentModifierValue,
pParameter->getUnitComboBox()->currentText(),
pParameter->getUnit());
}
}
if (pParameter->isValueModified()) {
Expand Down
34 changes: 34 additions & 0 deletions OMEdit/OMEditGUI/Util/Utilities.cpp
Expand Up @@ -496,6 +496,40 @@ qreal Utilities::convertUnit(qreal value, qreal offset, qreal scaleFactor)
return (value - offset) / scaleFactor;
}

/*!
* \brief Utilities::arrayExpressionUnitConversion
* If the expression is like an array of constants see ticket:4840
* \param pOMCProxy
* \param modifierValue
* \param fromUnit
* \param toUnit
* \return
*/
QString Utilities::arrayExpressionUnitConversion(OMCProxy *pOMCProxy, QString modifierValue, QString fromUnit, QString toUnit)
{
QStringList modifierValuesArray = StringHandler::removeFirstLastCurlBrackets(modifierValue).split(",");
QStringList modifierConvertedValuesArray;
OMCInterface::convertUnits_res convertUnit;
int i = 0;
bool ok = true;
foreach (QString modifierValueArrayElement, modifierValuesArray) {
qreal modifierRealValueArrayElement = modifierValueArrayElement.toDouble(&ok);
if (ok) {
if (i == 0) {
convertUnit = pOMCProxy->convertUnits(fromUnit, toUnit);
}
if (convertUnit.unitsCompatible) {
modifierRealValueArrayElement = Utilities::convertUnit(modifierRealValueArrayElement, convertUnit.offset, convertUnit.scaleFactor);
modifierConvertedValuesArray.append(QString::number(modifierRealValueArrayElement));
}
}
}
if (ok) {
modifierValue = QString("{%1}").arg(modifierConvertedValuesArray.join(","));
}
return modifierValue;
}

Label* Utilities::getHeadingLabel(QString heading)
{
Label *pHeadingLabel = new Label(heading);
Expand Down
3 changes: 3 additions & 0 deletions OMEdit/OMEditGUI/Util/Utilities.h
Expand Up @@ -67,6 +67,8 @@
#ifndef UTILITIES_H
#define UTILITIES_H

class OMCProxy;

class SplashScreen : public QSplashScreen
{
Q_OBJECT
Expand Down Expand Up @@ -434,6 +436,7 @@ namespace Utilities {
QSettings* getApplicationSettings();
void parseCompositeModelText(MessageHandler *pMessageHandler, QString contents);
qreal convertUnit(qreal value, qreal offset, qreal scaleFactor);
QString arrayExpressionUnitConversion(OMCProxy *pOMCProxy, QString modifierValue, QString fromUnit, QString toUnit);
Label* getHeadingLabel(QString heading);
QFrame* getHeadingLine();
bool detectBOM(QString fileName);
Expand Down

0 comments on commit 862a324

Please sign in to comment.