Skip to content

Commit

Permalink
Only fetch the Component modifier when needed.
Browse files Browse the repository at this point in the history
  • Loading branch information
adeas31 committed Nov 28, 2015
1 parent f26330a commit d064c0a
Show file tree
Hide file tree
Showing 5 changed files with 70 additions and 21 deletions.
57 changes: 49 additions & 8 deletions OMEdit/OMEditGUI/Component/Component.cpp
Expand Up @@ -72,7 +72,9 @@ ComponentInfo::ComponentInfo(QObject *pParent)
mCasuality = "";
mArrayIndex = "";
mIsArray = false;
mModifiersLoaded = false;
mModifiersMap.clear();
mParameterValueLoaded = false;
mParameterValue = "";
}

Expand Down Expand Up @@ -111,8 +113,10 @@ void ComponentInfo::updateComponentInfo(const ComponentInfo *pComponentInfo)
mArrayIndex = pComponentInfo->getArrayIndex();
mIsArray = pComponentInfo->isArray();
mModifiersMap.clear();
mModifiersMap = pComponentInfo->getModifiersMap();
mParameterValue = pComponentInfo->getParameterValue();
mModifiersLoaded = pComponentInfo->isModifiersLoaded();
mModifiersMap = pComponentInfo->getModifiersMapWithoutFetching();
mParameterValueLoaded = pComponentInfo->isParameterValueLoaded();
mParameterValue = pComponentInfo->getParameterValueWithoutFetching();
}

/*!
Expand Down Expand Up @@ -250,6 +254,38 @@ void ComponentInfo::setArrayIndex(QString arrayIndex)
}
}

/*!
* \brief ComponentInfo::getModifiersMap
* Fetches the Component modifiers if needed and return them.
* \param pOMCProxy
* \param className
* \return
*/
QMap<QString, QString> ComponentInfo::getModifiersMap(OMCProxy *pOMCProxy, QString className)
{
if (!mModifiersLoaded) {
fetchModifiers(pOMCProxy, className);
mModifiersLoaded = true;
}
return mModifiersMap;
}

/*!
* \brief ComponentInfo::getParameterValue
* Fetches the parameters value if needed and return it.
* \param pOMCProxy
* \param className
* \return
*/
QString ComponentInfo::getParameterValue(OMCProxy *pOMCProxy, QString className)
{
if (!mParameterValueLoaded) {
fetchParameterValue(pOMCProxy, className);
mParameterValueLoaded = true;
}
return mParameterValue;
}

/*!
* \brief ComponentInfo::operator ==
* \param componentInfo
Expand All @@ -264,8 +300,9 @@ bool ComponentInfo::operator==(const ComponentInfo &componentInfo) const
(componentInfo.getStream() == this->getStream()) && (componentInfo.getReplaceable() == this->getReplaceable()) &&
(componentInfo.getVariablity() == this->getVariablity()) && (componentInfo.getInner() == this->getInner()) &&
(componentInfo.getOuter() == this->getOuter()) && (componentInfo.getCausality() == this->getCausality()) &&
(componentInfo.getArrayIndex() == this->getArrayIndex()) && (componentInfo.getModifiersMap() == this->getModifiersMap()) &&
(componentInfo.getParameterValue() == this->getParameterValue());
(componentInfo.getArrayIndex() == this->getArrayIndex()) &&
(componentInfo.getModifiersMapWithoutFetching() == this->getModifiersMapWithoutFetching()) &&
(componentInfo.getParameterValueWithoutFetching() == this->getParameterValueWithoutFetching());
}

/*!
Expand Down Expand Up @@ -800,15 +837,17 @@ QString Component::getParameterDisplayString(QString parameterName)
* 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.
*/
OMCProxy *pOMCProxy = mpGraphicsView->getModelWidget()->getModelWidgetContainer()->getMainWindow()->getOMCProxy();
QString className = mpGraphicsView->getModelWidget()->getLibraryTreeItem()->getNameStructure();
QString displayString = "";
/* case 1 */
displayString = mpComponentInfo->getModifiersMap().value(parameterName, "");
displayString = mpComponentInfo->getModifiersMap(pOMCProxy, className).value(parameterName, "");
/* case 2 */
if (displayString.isEmpty()) {
if (mpLibraryTreeItem) {
foreach (Component *pComponent, mpLibraryTreeItem->getModelWidget()->getDiagramGraphicsView()->getComponentsList()) {
if (pComponent->getComponentInfo()->getName().compare(parameterName) == 0) {
displayString = pComponent->getComponentInfo()->getParameterValue();
displayString = pComponent->getComponentInfo()->getParameterValue(pOMCProxy, className);
break;
}
}
Expand All @@ -820,7 +859,7 @@ QString Component::getParameterDisplayString(QString parameterName)
}
/* case 4 */
if (displayString.isEmpty()) {
displayString = getParameterDisplayStringFromExtendsModifiers(parameterName);
displayString = getParameterDisplayStringFromExtendsParameters(parameterName);
}
return displayString;
}
Expand Down Expand Up @@ -1333,7 +1372,9 @@ QString Component::getParameterDisplayStringFromExtendsParameters(QString parame
if (pInheritedComponent->getLibraryTreeItem()) {
foreach (Component *pComponent, pInheritedComponent->getLibraryTreeItem()->getModelWidget()->getDiagramGraphicsView()->getComponentsList()) {
if (pComponent->getComponentInfo()->getName().compare(parameterName) == 0) {
displayString = pComponent->getComponentInfo()->getParameterValue();
OMCProxy *pOMCProxy = pComponent->getGraphicsView()->getModelWidget()->getModelWidgetContainer()->getMainWindow()->getOMCProxy();
QString className = pComponent->getGraphicsView()->getModelWidget()->getLibraryTreeItem()->getNameStructure();
displayString = pComponent->getComponentInfo()->getParameterValue(pOMCProxy, className);
if (!displayString.isEmpty()) {
return displayString;
}
Expand Down
10 changes: 8 additions & 2 deletions OMEdit/OMEditGUI/Component/Component.h
Expand Up @@ -99,10 +99,14 @@ class ComponentInfo : public QObject
void setArrayIndex(QString arrayIndex);
QString getArrayIndex() const {return mArrayIndex;}
bool isArray() const {return mIsArray;}
bool isModifiersLoaded() const {return mModifiersLoaded;}
void setModifiersMap(QMap<QString, QString> modifiersMap) {mModifiersMap = modifiersMap;}
QMap<QString, QString> getModifiersMap() const {return mModifiersMap;}
QMap<QString, QString> getModifiersMapWithoutFetching() const {return mModifiersMap;}
QMap<QString, QString> getModifiersMap(OMCProxy *pOMCProxy, QString className);
bool isParameterValueLoaded() const {return mParameterValueLoaded;}
void setParameterValue(QString parameterValue) {mParameterValue = parameterValue;}
QString getParameterValue() const {return mParameterValue;}
QString getParameterValueWithoutFetching() const {return mParameterValue;}
QString getParameterValue(OMCProxy *pOMCProxy, QString className);
bool operator==(const ComponentInfo &componentInfo) const;
bool operator!=(const ComponentInfo &componentInfo) const;
private:
Expand All @@ -122,7 +126,9 @@ class ComponentInfo : public QObject
QString mCasuality;
QString mArrayIndex;
bool mIsArray;
bool mModifiersLoaded;
QMap<QString, QString> mModifiersMap;
bool mParameterValueLoaded;
QString mParameterValue;
};

Expand Down
17 changes: 12 additions & 5 deletions OMEdit/OMEditGUI/Component/ComponentProperties.cpp
Expand Up @@ -79,7 +79,8 @@ Parameter::Parameter(Component *pComponent, bool showStartAttribute, QString tab
* If no unit is found then check it in the derived class modifier value.
* A derived class can be inherited, so look recursively.
*/
QString unit = mpComponent->getComponentInfo()->getModifiersMap().value("unit");
QString className = mpComponent->getGraphicsView()->getModelWidget()->getLibraryTreeItem()->getNameStructure();
QString unit = mpComponent->getComponentInfo()->getModifiersMap(pOMCProxy, className).value("unit");
if (unit.isEmpty()) {
if (!pOMCProxy->isBuiltinType(mpComponent->getComponentInfo()->getClassName())) {
unit = getUnitFromDerivedClass(mpComponent);
Expand Down Expand Up @@ -638,7 +639,9 @@ void ComponentParameters::createTabsGroupBoxesAndParametersHelper(LibraryTreeIte
bool isParameter = (pComponent->getComponentInfo()->getVariablity().compare("parameter") == 0);
// If not a parameter then check for start and fixed bindings. See Modelica.Electrical.Analog.Basic.Resistor parameter R.
if (!isParameter) {
QMap<QString, QString> modifiers = pComponent->getComponentInfo()->getModifiersMap();
OMCProxy *pOMCProxy = pComponent->getGraphicsView()->getModelWidget()->getModelWidgetContainer()->getMainWindow()->getOMCProxy();
QString className = pComponent->getGraphicsView()->getModelWidget()->getLibraryTreeItem()->getNameStructure();
QMap<QString, QString> modifiers = pComponent->getComponentInfo()->getModifiersMap(pOMCProxy, className);
QMap<QString, QString>::iterator modifiersIterator;
for (modifiersIterator = modifiers.begin(); modifiersIterator != modifiers.end(); ++modifiersIterator) {
if (modifiersIterator.key().compare("start") == 0) {
Expand Down Expand Up @@ -722,7 +725,9 @@ void ComponentParameters::fetchComponentModifiers()
if (mpComponent->getReferenceComponent()) {
pComponent = mpComponent->getReferenceComponent();
}
QMap<QString, QString> modifiers = pComponent->getComponentInfo()->getModifiersMap();
OMCProxy *pOMCProxy = pComponent->getGraphicsView()->getModelWidget()->getModelWidgetContainer()->getMainWindow()->getOMCProxy();
QString className = pComponent->getGraphicsView()->getModelWidget()->getLibraryTreeItem()->getNameStructure();
QMap<QString, QString> modifiers = pComponent->getComponentInfo()->getModifiersMap(pOMCProxy, className);
QMap<QString, QString>::iterator modifiersIterator;
for (modifiersIterator = modifiers.begin(); modifiersIterator != modifiers.end(); ++modifiersIterator) {
QString parameterName = StringHandler::getFirstWordBeforeDot(modifiersIterator.key());
Expand Down Expand Up @@ -830,11 +835,13 @@ Parameter* ComponentParameters::findParameter(const QString &parameter, Qt::Case
*/
void ComponentParameters::updateComponentParameters()
{
OMCProxy *pOMCProxy = mpComponent->getGraphicsView()->getModelWidget()->getModelWidgetContainer()->getMainWindow()->getOMCProxy();
QString className = mpComponent->getGraphicsView()->getModelWidget()->getLibraryTreeItem()->getNameStructure();
bool valueChanged = false;
// save the Component modifiers
QMap<QString, QString> oldComponentModifiersMap = mpComponent->getComponentInfo()->getModifiersMap();
QMap<QString, QString> oldComponentModifiersMap = mpComponent->getComponentInfo()->getModifiersMap(pOMCProxy, className);
// new Component modifiers
QMap<QString, QString> newComponentModifiersMap = mpComponent->getComponentInfo()->getModifiersMap();
QMap<QString, QString> newComponentModifiersMap = mpComponent->getComponentInfo()->getModifiersMap(pOMCProxy, className);
QMap<QString, QString> newComponentExtendsModifiersMap;
// any parameter changed
foreach (Parameter *pParameter, mParametersList) {
Expand Down
2 changes: 1 addition & 1 deletion OMEdit/OMEditGUI/Modeling/Commands.cpp
Expand Up @@ -422,7 +422,7 @@ void UpdateComponentAttributesCommand::redo()
// apply Component modifiers if duplicate case
if (mDuplicate) {
bool modifierValueChanged = false;
QMap<QString, QString> modifiers = mNewComponentInfo.getModifiersMap();
QMap<QString, QString> modifiers = mNewComponentInfo.getModifiersMapWithoutFetching();
QMap<QString, QString>::iterator modifiersIterator;
for (modifiersIterator = modifiers.begin(); modifiersIterator != modifiers.end(); ++modifiersIterator) {
QString modifierName = QString(mpComponent->getName()).append(".").append(modifiersIterator.key());
Expand Down
5 changes: 0 additions & 5 deletions OMEdit/OMEditGUI/Modeling/ModelWidgetContainer.cpp
Expand Up @@ -3099,11 +3099,6 @@ void ModelWidget::getModelComponents()
MainWindow *pMainWindow = mpModelWidgetContainer->getMainWindow();
// get the components
mComponentsList = pMainWindow->getOMCProxy()->getComponents(mpLibraryTreeItem->getNameStructure());
// get the component modifiers
foreach (ComponentInfo *pComponentInfo, mComponentsList) {
pComponentInfo->fetchModifiers(pMainWindow->getOMCProxy(), mpLibraryTreeItem->getNameStructure());
pComponentInfo->fetchParameterValue(pMainWindow->getOMCProxy(), mpLibraryTreeItem->getNameStructure());
}
// get the components annotations
if (!mComponentsList.isEmpty()) {
mComponentsAnnotationsList = pMainWindow->getOMCProxy()->getComponentAnnotations(mpLibraryTreeItem->getNameStructure());
Expand Down

0 comments on commit d064c0a

Please sign in to comment.