From c183a88ca81aad28eaf999660d83ff2b918ff81c Mon Sep 17 00:00:00 2001 From: Adeel Asghar Date: Wed, 5 Aug 2015 13:12:42 +0200 Subject: [PATCH] Fix #3380: Properly save the replaceable nested classes. --- OMEdit/OMEditGUI/Modeling/LibraryTreeWidget.cpp | 11 ++++++++++- OMEdit/OMEditGUI/OMC/OMCProxy.cpp | 13 +++++++++++++ OMEdit/OMEditGUI/OMC/OMCProxy.h | 1 + 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/OMEdit/OMEditGUI/Modeling/LibraryTreeWidget.cpp b/OMEdit/OMEditGUI/Modeling/LibraryTreeWidget.cpp index 459e8200bd4..2a2f77b0616 100644 --- a/OMEdit/OMEditGUI/Modeling/LibraryTreeWidget.cpp +++ b/OMEdit/OMEditGUI/Modeling/LibraryTreeWidget.cpp @@ -1498,7 +1498,16 @@ bool LibraryTreeWidget::saveSubModelsFolderHelper(LibraryTreeNode *pLibraryTreeN directory = directoryName; mpMainWindow->getStatusBar()->showMessage(QString(tr("Saving")).append(" ").append(pChildLibraryTreeNode->getNameStructure())); QString fileName = QString(directory).append("/").append(pChildLibraryTreeNode->getName()).append(".mo"); - mpMainWindow->getOMCProxy()->setSourceFile(pChildLibraryTreeNode->getNameStructure(), fileName); + /* Ticket #3380 + * Only create new file for nested classes if they are nested inside a package. + * If the nested class is replaceable then save it in the parent class. + */ + if ((pLibraryTreeNode->getClassInformation().restriction.toLower().compare("package") != 0) || + mpMainWindow->getOMCProxy()->isReplaceable(pChildLibraryTreeNode->getParentName(), pChildLibraryTreeNode->getName())) { + mpMainWindow->getOMCProxy()->setSourceFile(pChildLibraryTreeNode->getNameStructure(), pLibraryTreeNode->getFileName()); + } else { + mpMainWindow->getOMCProxy()->setSourceFile(pChildLibraryTreeNode->getNameStructure(), fileName); + } if (mpMainWindow->getOMCProxy()->save(pChildLibraryTreeNode->getNameStructure())) { pChildLibraryTreeNode->setIsSaved(true); pChildLibraryTreeNode->setFileName(fileName); diff --git a/OMEdit/OMEditGUI/OMC/OMCProxy.cpp b/OMEdit/OMEditGUI/OMC/OMCProxy.cpp index 361ecc38267..142f56f2801 100644 --- a/OMEdit/OMEditGUI/OMC/OMCProxy.cpp +++ b/OMEdit/OMEditGUI/OMC/OMCProxy.cpp @@ -944,6 +944,19 @@ bool OMCProxy::isPartial(QString className) return mpOMCInterface->isPartial(className); } +/*! + * \brief OMCProxy::isReplaceable + * Returns true if the className is replaceable in parentClassName. + * \param parentClassName + * \param className + * \return + */ +bool OMCProxy::isReplaceable(QString parentClassName, QString className) +{ + sendCommand("isReplaceable(" + parentClassName + ", \"" + className + "\")"); + return StringHandler::unparseBool(getResult()); +} + /*! Gets the class type. \param className - is the name of the class to check. diff --git a/OMEdit/OMEditGUI/OMC/OMCProxy.h b/OMEdit/OMEditGUI/OMC/OMCProxy.h index af8ff7bc4bb..8740e0b8b38 100644 --- a/OMEdit/OMEditGUI/OMC/OMCProxy.h +++ b/OMEdit/OMEditGUI/OMC/OMCProxy.h @@ -121,6 +121,7 @@ class OMCProxy : public QObject bool isWhat(StringHandler::ModelicaClasses type, QString className); bool isProtectedClass(QString className, QString nestedClassName); bool isPartial(QString className); + bool isReplaceable(QString parentClassName, QString className); StringHandler::ModelicaClasses getClassRestriction(QString className); QString getParameterValue(QString className, QString parameter); QStringList getComponentModifierNames(QString className, QString name);