Skip to content

Commit

Permalink
Allow setting modifiers of redeclared classes (#10646)
Browse files Browse the repository at this point in the history
Fixes #7826 and fixes #10584
  • Loading branch information
adeas31 committed May 4, 2023
1 parent 4a0f29c commit 02d3de0
Show file tree
Hide file tree
Showing 9 changed files with 147 additions and 88 deletions.
2 changes: 1 addition & 1 deletion OMEdit/OMEditLIB/Element/Element.cpp
Expand Up @@ -3780,7 +3780,7 @@ void Element::showParameters()
if (MainWindow::instance()->isNewApi()) {
pMainWindow->getProgressBar()->setRange(0, 0);
pMainWindow->showProgressBar();
ElementParameters *pElementParameters = new ElementParameters(mpModelComponent, mpGraphicsView, isInheritedElement(), false, pMainWindow);
ElementParameters *pElementParameters = new ElementParameters(mpModelComponent, mpGraphicsView, isInheritedElement(), false, true, pMainWindow);
pMainWindow->hideProgressBar();
pMainWindow->getStatusBar()->clearMessage();
pElementParameters->exec();
Expand Down
152 changes: 99 additions & 53 deletions OMEdit/OMEditLIB/Element/ElementProperties.cpp

Large diffs are not rendered by default.

3 changes: 2 additions & 1 deletion OMEdit/OMEditLIB/Element/ElementProperties.h
Expand Up @@ -186,7 +186,7 @@ class ElementParameters : public QDialog
{
Q_OBJECT
public:
ElementParameters(ModelInstance::Element *pElement, GraphicsView *pGraphicsView, bool inherited, bool nested, QWidget *pParent = 0);
ElementParameters(ModelInstance::Element *pElement, GraphicsView *pGraphicsView, bool inherited, bool nested, bool defaultModifier, QWidget *pParent = 0);
~ElementParameters();
QString getElementParentClassName() const;
GraphicsView *getGraphicsView() const {return mpGraphicsView;}
Expand All @@ -199,6 +199,7 @@ class ElementParameters : public QDialog
GraphicsView *mpGraphicsView;
bool mInherited;
bool mNested;
bool mDefaultModifier;
QString mModification;
Label *mpParametersHeading;
QFrame *mHorizontalLine;
Expand Down
30 changes: 20 additions & 10 deletions OMEdit/OMEditLIB/FlatModelica/Parser.cpp
Expand Up @@ -72,41 +72,51 @@ QString FlatModelica::Parser::getModelicaComment(QString element)
/*!
* \brief FlatModelica::Parser::getTypeFromElementRedeclaration
* \param elmentRedeclaration
* \param type
* \param modifier
* \param comment
* Parses the code like,
* redeclare ClassA classA "A"
* and returns ClassA, the type of the component.
* \return
* and returns ClassA, the type of the component and modifier if any and comment.
*/
QString FlatModelica::Parser::getTypeFromElementRedeclaration(const QString &elmentRedeclaration)
void FlatModelica::Parser::getTypeFromElementRedeclaration(const QString &elmentRedeclaration, QString &type, QString &modifier, QString &comment)
{
antlr4::ANTLRInputStream input(elmentRedeclaration.toStdString());
openmodelica::modelicaLexer lexer(&input);
antlr4::CommonTokenStream tokens(&lexer);
openmodelica::modelicaParser parser(&tokens);
openmodelica::modelicaParser::Element_redeclarationContext *pElement_redeclarationContext = parser.element_redeclaration();
if (pElement_redeclarationContext && pElement_redeclarationContext->component_clause1()) {
return QString::fromStdString(pElement_redeclarationContext->component_clause1()->type_specifier()->getText());
type = QString::fromStdString(pElement_redeclarationContext->component_clause1()->type_specifier()->getText());
if (pElement_redeclarationContext->component_clause1()->component_declaration1()->declaration()->modification()) {
modifier = QString::fromStdString(pElement_redeclarationContext->component_clause1()->component_declaration1()->declaration()->modification()->getText());
}
comment = QString::fromStdString(pElement_redeclarationContext->component_clause1()->component_declaration1()->comment()->getText());
}
return "";
}

/*!
* \brief FlatModelica::Parser::getShortClassTypeFromElementRedeclaration
* \param elmentRedeclaration
* \param type
* \param modifier
* \param comment
* Parses the code like,
* redeclare model M = C
* and returns M, the type of the short class specifier.
* \return
* and returns M, the type of the short class specifier and modification if any and comment.
*/
QString FlatModelica::Parser::getShortClassTypeFromElementRedeclaration(const QString &elmentRedeclaration)
void FlatModelica::Parser::getShortClassTypeFromElementRedeclaration(const QString &elmentRedeclaration, QString &type, QString &modifier, QString &comment)
{
antlr4::ANTLRInputStream input(elmentRedeclaration.toStdString());
openmodelica::modelicaLexer lexer(&input);
antlr4::CommonTokenStream tokens(&lexer);
openmodelica::modelicaParser parser(&tokens);
openmodelica::modelicaParser::Element_redeclarationContext *pElement_redeclarationContext = parser.element_redeclaration();
if (pElement_redeclarationContext && pElement_redeclarationContext->short_class_definition()) {
return QString::fromStdString(pElement_redeclarationContext->short_class_definition()->short_class_specifier()->type_specifier()->getText());
type = QString::fromStdString(pElement_redeclarationContext->short_class_definition()->short_class_specifier()->type_specifier()->getText());
if (pElement_redeclarationContext->short_class_definition()->short_class_specifier()->class_modification()) {
modifier = QString::fromStdString(pElement_redeclarationContext->short_class_definition()->short_class_specifier()->class_modification()->getText());
}
comment = QString::fromStdString(pElement_redeclarationContext->short_class_definition()->short_class_specifier()->comment()->getText());
}
return "";
}
4 changes: 2 additions & 2 deletions OMEdit/OMEditLIB/FlatModelica/Parser.h
Expand Up @@ -39,8 +39,8 @@ namespace FlatModelica
{
namespace Parser {
QString getModelicaComment(QString element);
QString getTypeFromElementRedeclaration(const QString &elmentRedeclaration);
QString getShortClassTypeFromElementRedeclaration(const QString &elmentRedeclaration);
void getTypeFromElementRedeclaration(const QString &elmentRedeclaration, QString &type, QString &modifier, QString &comment);
void getShortClassTypeFromElementRedeclaration(const QString &elmentRedeclaration, QString &type, QString &modifier, QString &comment);
} // namespace Utilities
} // namespace FlatModelica

Expand Down
8 changes: 0 additions & 8 deletions OMEdit/OMEditLIB/Modeling/Model.cpp
Expand Up @@ -1378,14 +1378,6 @@ namespace ModelInstance
return choices;
}

QString Choices::getType(int index) const
{
if (0 <= index && index < mChoices.size()) {
return mChoices.at(index).second;
}
return "";
}

Element::Element(Model *pParentModel)
{
mpParentModel = pParentModel;
Expand Down
1 change: 0 additions & 1 deletion OMEdit/OMEditLIB/Modeling/Model.h
Expand Up @@ -363,7 +363,6 @@ namespace ModelInstance
bool isCheckBox() const {return mCheckBox;}
bool isDymolaCheckBox() const {return mDymolaCheckBox;}
QStringList getChoices() const;
QString getType(int index) const;
private:
BooleanAnnotation mCheckBox;
BooleanAnnotation mDymolaCheckBox;
Expand Down
34 changes: 22 additions & 12 deletions OMEdit/OMEditLIB/OMC/OMCProxy.cpp
Expand Up @@ -1080,16 +1080,14 @@ QString OMCProxy::getElementModifierValue(QString className, QString name)
*/
bool OMCProxy::setElementModifierValue(QString className, QString modifierName, QString modifierValue)
{
QString expression, sapi = QString("setElementModifierValue");

const QString sapi = QString("setElementModifierValue");
QString expression;
if (modifierValue.isEmpty()) {
expression = QString("%1(%2, %3, $Code(()))").arg(sapi).arg(className).arg(modifierName);
} else if (modifierValue.startsWith("redeclare")) {
expression = QString("%1(%2, %3, $Code((%4)))").arg(sapi).arg(className).arg(modifierName).arg(modifierValue);
} else if (modifierValue.startsWith("(") && modifierValue.contains("=")) {
} else if (modifierValue.startsWith("=")) {
expression = QString("%1(%2, %3, $Code(%4))").arg(sapi).arg(className).arg(modifierName).arg(modifierValue);
} else {
expression = QString("%1(%2, %3, $Code(=%4))").arg(sapi).arg(className).arg(modifierName).arg(modifierValue);
expression = QString("%1(%2, %3, $Code((%4)))").arg(sapi).arg(className).arg(modifierName).arg(modifierValue);
}
sendCommand(expression);
if (StringHandler::unparseBool(getResult())) {
Expand Down Expand Up @@ -1152,15 +1150,14 @@ QString OMCProxy::getExtendsModifierValue(QString className, QString extendsClas

bool OMCProxy::setExtendsModifierValue(QString className, QString extendsClassName, QString modifierName, QString modifierValue)
{
const QString sapi = QString("setExtendsModifierValue");
QString expression;
if (modifierValue.isEmpty()) {
expression = QString("setExtendsModifierValue(%1, %2, %3, $Code(()))").arg(className).arg(extendsClassName).arg(modifierName);
} else if (modifierValue.startsWith("(")) {
expression = QString("setExtendsModifierValue(%1, %2, %3, $Code(%4))").arg(className).arg(extendsClassName).arg(modifierName)
.arg(modifierValue);
expression = QString("%1(%2, %3, %4, $Code(()))").arg(sapi, className, extendsClassName, modifierName);
} else if (modifierValue.startsWith("=")) {
expression = QString("%1(%2, %3, %4, $Code(%5))").arg(sapi, className, extendsClassName, modifierName, modifierValue);
} else {
expression = QString("setExtendsModifierValue(%1, %2, %3, $Code(=%4))").arg(className).arg(extendsClassName).arg(modifierName)
.arg(modifierValue);
expression = QString("%1(%2, %3, %4, $Code((%5)))").arg(sapi, className, extendsClassName, modifierName, modifierValue);
}
sendCommand(expression);
if (getResult().toLower().compare("ok") == 0) {
Expand Down Expand Up @@ -1198,6 +1195,19 @@ bool OMCProxy::removeExtendsModifiers(QString className, QString extendsClassNam
return mpOMCInterface->removeExtendsModifiers(className, extendsClassName, true);
}

/*!
* \brief OMCProxy::qualifyPath
* \param classPath
* \param path
* \return
*/
QString OMCProxy::qualifyPath(const QString &classPath, const QString &path)
{
QString result = mpOMCInterface->qualifyPath(classPath, path);
printMessagesStringInternal();
return result;
}

/*!
Gets the Icon Annotation of a specified class from OMC.
\param className - is the name of the class.
Expand Down
1 change: 1 addition & 0 deletions OMEdit/OMEditLIB/OMC/OMCProxy.h
Expand Up @@ -141,6 +141,7 @@ class OMCProxy : public QObject
bool setExtendsModifierValue(QString className, QString extendsClassName, QString modifierName, QString modifierValue);
bool isExtendsModifierFinal(QString className, QString extendsClassName, QString modifierName);
bool removeExtendsModifiers(QString className, QString extendsClassName);
QString qualifyPath(const QString &classPath, const QString &path);
QString getIconAnnotation(QString className);
QString getDiagramAnnotation(QString className);
int getConnectionCount(QString className);
Expand Down

0 comments on commit 02d3de0

Please sign in to comment.