Skip to content

Commit 5e1e3ae

Browse files
authored
Add more units to parameters unit drop down (#9007)
Fixes #8758 Added Wh unit for J in unit parser
1 parent dfa336d commit 5e1e3ae

File tree

5 files changed

+54
-16
lines changed

5 files changed

+54
-16
lines changed

OMCompiler/Compiler/runtime/unitparser.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1179,6 +1179,9 @@ void UnitParser::initSIUnits() {
11791179
Rational(3141592, 30000000), Rational(0), true);
11801180
#endif
11811181

1182+
addDerived("Energy", "watt hour", "Wh", "J",Rational(0),
1183+
Rational(3600), Rational(0), true);
1184+
11821185
addDerived("velocity", "knot", "kn", "m/s", Rational(0),
11831186
Rational(1852, 3600), Rational(0), true);
11841187

OMEdit/OMEditLIB/Element/ElementProperties.cpp

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
#include "Modeling/MessagesWidget.h"
3838
#include "Modeling/Commands.h"
3939
#include "Options/OptionsDialog.h"
40+
#include "OMPlot.h"
4041

4142
#include <QApplication>
4243
#include <QMenu>
@@ -101,23 +102,41 @@ Parameter::Parameter(Element *pComponent, bool showStartAttribute, QString tab,
101102
setSaveSelectorCaption("-");
102103
createValueWidget();
103104
// Get unit value
104-
QString unit = mpComponent->getDerivedClassModifierValue("unit");
105-
mUnit = unit;
105+
mUnit = mpComponent->getDerivedClassModifierValue("unit");;
106106
// Get displayUnit value
107107
QString displayUnit = mpComponent->getDerivedClassModifierValue("displayUnit");
108108
if (displayUnit.isEmpty()) {
109-
displayUnit = unit;
109+
displayUnit = mUnit;
110110
}
111111
mDisplayUnit = StringHandler::removeFirstLastQuotes(displayUnit);
112112
mPreviousUnit = mDisplayUnit;
113-
mpUnitComboBox = new QComboBox;
113+
QStringList units;
114114
if (!mUnit.isEmpty()) {
115-
mpUnitComboBox->addItem(Utilities::convertUnitToSymbol(mUnit), mUnit);
115+
units << mUnit;
116116
if (mDisplayUnit.compare(mUnit) != 0) {
117-
mpUnitComboBox->addItem(Utilities::convertUnitToSymbol(mDisplayUnit), mDisplayUnit);
118-
mpUnitComboBox->setCurrentIndex(1);
117+
units << mDisplayUnit;
118+
}
119+
Utilities::addDefaultDisplayUnit(mUnit, units);
120+
// add unit prefixes
121+
if (OMPlot::Plot::prefixableUnit(mUnit)) {
122+
units << QString("k%1").arg(mUnit)
123+
<< QString("M%1").arg(mUnit)
124+
<< QString("G%1").arg(mUnit)
125+
<< QString("T%1").arg(mUnit)
126+
<< QString("m%1").arg(mUnit)
127+
<< QString("u%1").arg(mUnit)
128+
<< QString("n%1").arg(mUnit)
129+
<< QString("p%1").arg(mUnit);
119130
}
120131
}
132+
mpUnitComboBox = new QComboBox;
133+
units.removeDuplicates();
134+
foreach (QString unit, units) {
135+
mpUnitComboBox->addItem(Utilities::convertUnitToSymbol(unit), unit);
136+
}
137+
if (mDisplayUnit.compare(mUnit) != 0) {
138+
mpUnitComboBox->setCurrentIndex(1);
139+
}
121140
connect(mpUnitComboBox, SIGNAL(currentIndexChanged(int)), SLOT(unitComboBoxChanged(int)));
122141
mpCommentLabel = new Label(mpComponent->getComponentInfo()->getComment());
123142
}

OMEdit/OMEditLIB/Plotting/VariablesWidget.cpp

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -930,15 +930,7 @@ bool VariablesTreeModel::insertVariablesItems(QString fileName, QString filePath
930930
} else { /* use unit as displayUnit */
931931
variableData[VariableItemData::DISPLAYUNIT] = unit;
932932
}
933-
/* Issue #5447
934-
* For angular speeds always add in the menu in the unit column, in addition to the standard "rad/s" also "rpm"
935-
* For energies always add in the menu in the Display Unit column, in addition to standard "J", also "Wh" (prefixes such as kWh, MWh, GWh will be obtained automatically)
936-
*/
937-
if (unit.compare(QStringLiteral("rad/s")) == 0) {
938-
displayUnitOptions << "rpm";
939-
} else if (unit.compare(QStringLiteral("J")) == 0) {
940-
displayUnitOptions << "Wh";
941-
}
933+
Utilities::addDefaultDisplayUnit(unit, displayUnitOptions);
942934
displayUnitOptions.removeDuplicates();
943935
displayUnits << displayUnitOptions;
944936
variableData << displayUnits;

OMEdit/OMEditLIB/Util/Utilities.cpp

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1262,6 +1262,29 @@ QStringList Utilities::variantListToStringList(const QVariantList lst)
12621262
return strs;
12631263
}
12641264

1265+
/*!
1266+
* \brief Utilities::addDefaultDisplayUnit
1267+
* \param unit
1268+
* \param displayUnit
1269+
*/
1270+
void Utilities::addDefaultDisplayUnit(const QString &unit, QStringList &displayUnit)
1271+
{
1272+
/* Issue #5447
1273+
* For angular speeds always add in the menu in the unit column, in addition to the standard "rad/s" also "rpm"
1274+
* For energies always add in the menu in the Display Unit column, in addition to standard "J", also "Wh" (prefixes such as kWh, MWh, GWh will be obtained automatically)
1275+
*/
1276+
/* Issue #8758
1277+
* Whenever unit = "K", we also add "degC" even if it is not defined as displayUnits.
1278+
*/
1279+
if (unit.compare(QStringLiteral("rad/s")) == 0) {
1280+
displayUnit << "rpm";
1281+
} else if (unit.compare(QStringLiteral("J")) == 0) {
1282+
displayUnit << "Wh";
1283+
} else if (unit.compare(QStringLiteral("K")) == 0) {
1284+
displayUnit << "degC";
1285+
}
1286+
}
1287+
12651288
/*!
12661289
* \brief Utilities::convertUnitToSymbol
12671290
* Converts the unit to a symbol.

OMEdit/OMEditLIB/Util/Utilities.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -542,6 +542,7 @@ namespace Utilities {
542542
void removeDirectoryRecursivly(QString path);
543543
qreal mapToCoOrdinateSystem(qreal value, qreal startA, qreal endA, qreal startB, qreal endB);
544544
QStringList variantListToStringList(const QVariantList lst);
545+
void addDefaultDisplayUnit(const QString &unit, QStringList &displayUnit);
545546
QString convertUnitToSymbol(const QString displayUnit);
546547
QString convertSymbolToUnit(const QString symbol);
547548
QRectF adjustSceneRectangle(const QRectF sceneRectangle, const qreal factor);

0 commit comments

Comments
 (0)