Skip to content

Commit

Permalink
Adapted to new connection APIs
Browse files Browse the repository at this point in the history
  • Loading branch information
adeas31 committed Mar 2, 2018
1 parent 7cec36a commit 0731b2d
Show file tree
Hide file tree
Showing 6 changed files with 108 additions and 44 deletions.
47 changes: 36 additions & 11 deletions OMEdit/OMEditGUI/Annotations/LineAnnotation.cpp
Expand Up @@ -1022,6 +1022,41 @@ void LineAnnotation::setAligned(bool aligned)
update();
}

/*!
* \brief LineAnnotation::updateOMSConnection
* Updates the OMSimulator model connection
*/
void LineAnnotation::updateOMSConnection()
{
// connection geometry
ssd_connection_geometry_t* pConnectionGeometry = new ssd_connection_geometry_t;
pConnectionGeometry->n = mPoints.size();
pConnectionGeometry->pointsX = new double[mPoints.size()];
pConnectionGeometry->pointsY = new double[mPoints.size()];
for (int i = 0 ; i < mPoints.size() ; i++) {
pConnectionGeometry->pointsX[i] = mPoints.at(i).x();
pConnectionGeometry->pointsY[i] = mPoints.at(i).y();
}
// connection
oms_connection_t connection;
connection.type = oms_connection_fmi;
connection.parent = new char[mpGraphicsView->getModelWidget()->getLibraryTreeItem()->getNameStructure().toStdString().size() + 1];
strcpy(connection.parent, mpGraphicsView->getModelWidget()->getLibraryTreeItem()->getNameStructure().toStdString().c_str());
connection.conA = new char[getStartComponentName().toStdString().size() + 1];
strcpy(connection.conA, getStartComponentName().toStdString().c_str());
connection.conB = new char[getEndComponentName().toStdString().size() + 1];
strcpy(connection.conB, getEndComponentName().toStdString().c_str());
connection.geometry = pConnectionGeometry;
OMSProxy::instance()->updateConnection(mpGraphicsView->getModelWidget()->getLibraryTreeItem()->getNameStructure(),
getStartComponentName(), getEndComponentName(), &connection);
delete[] connection.parent;
delete[] connection.conA;
delete[] connection.conB;
delete[] pConnectionGeometry->pointsX;
delete[] pConnectionGeometry->pointsY;
delete pConnectionGeometry;
}

QVariant LineAnnotation::itemChange(GraphicsItemChange change, const QVariant &value)
{
ShapeAnnotation::itemChange(change, value);
Expand Down Expand Up @@ -1115,17 +1150,7 @@ void LineAnnotation::updateConnectionAnnotation()
CompositeModelEditor *pCompositeModelEditor = dynamic_cast<CompositeModelEditor*>(mpGraphicsView->getModelWidget()->getEditor());
pCompositeModelEditor->updateConnection(this);
} else if (mpGraphicsView->getModelWidget()->getLibraryTreeItem()->getLibraryType()== LibraryTreeItem::OMS) {
ssd_connection_geometry_t connectionGeometry;
connectionGeometry.n = mPoints.size();
connectionGeometry.pointsX = new double[mPoints.size()];
connectionGeometry.pointsY = new double[mPoints.size()];
for (int i = 0 ; i < mPoints.size() ; i++) {
connectionGeometry.pointsX[i] = mPoints.at(i).x();
connectionGeometry.pointsY[i] = mPoints.at(i).y();
}
OMSProxy::instance()->setConnectionGeometry(getStartComponentName(), getEndComponentName(), &connectionGeometry);
delete[] connectionGeometry.pointsX;
delete[] connectionGeometry.pointsY;
updateOMSConnection();
} else {
// get the connection line annotation.
QString annotationString = QString("annotate=").append(getShapeAnnotation());
Expand Down
1 change: 1 addition & 0 deletions OMEdit/OMEditGUI/Annotations/LineAnnotation.h
Expand Up @@ -128,6 +128,7 @@ class LineAnnotation : public ShapeAnnotation
void setShapeFlags(bool enable);
void updateShape(ShapeAnnotation *pShapeAnnotation);
void setAligned(bool aligned);
void updateOMSConnection();
protected:
QVariant itemChange(GraphicsItemChange change, const QVariant &value);

Expand Down
3 changes: 2 additions & 1 deletion OMEdit/OMEditGUI/Component/Component.cpp
Expand Up @@ -868,7 +868,8 @@ void Component::paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
if (mTransformation.isValid()) {
setVisible(mTransformation.getVisible());
if (mpStateComponentRectangle) {
if (isVisible() && mpLibraryTreeItem && mpLibraryTreeItem->getLibraryType() == LibraryTreeItem::Modelica && mpLibraryTreeItem->isState()) {
if (isVisible() && mpLibraryTreeItem && mpLibraryTreeItem->getLibraryType() == LibraryTreeItem::Modelica &&
mpLibraryTreeItem->isState()) {
if (mHasTransition && mIsInitialState) {
mpStateComponentRectangle->setLinePattern(StringHandler::LineSolid);
mpStateComponentRectangle->setLineThickness(0.5);
Expand Down
50 changes: 35 additions & 15 deletions OMEdit/OMEditGUI/Modeling/ModelWidgetContainer.cpp
Expand Up @@ -589,6 +589,12 @@ void GraphicsView::addConnectionToClass(LineAnnotation *pConnectionLineAnnotatio
if (pCompositeModelEditor) {
pCompositeModelEditor->createConnection(pConnectionLineAnnotation);
}
} else if (mpModelWidget->getLibraryTreeItem()->getLibraryType()== LibraryTreeItem::OMS) {
if (OMSProxy::instance()->addConnection(mpModelWidget->getLibraryTreeItem()->getNameStructure(),
pConnectionLineAnnotation->getStartComponentName(),
pConnectionLineAnnotation->getEndComponentName())) {
pConnectionLineAnnotation->updateOMSConnection();
}
} else {
MainWindow *pMainWindow = MainWindow::instance();
if (pMainWindow->getOMCProxy()->addConnection(pConnectionLineAnnotation->getStartComponentName(),
Expand All @@ -614,6 +620,10 @@ void GraphicsView::deleteConnectionFromClass(LineAnnotation *pConnectionLineAnno
if (mpModelWidget->getLibraryTreeItem()->getLibraryType()== LibraryTreeItem::CompositeModel) {
CompositeModelEditor *pCompositeModelEditor = dynamic_cast<CompositeModelEditor*>(mpModelWidget->getEditor());
pCompositeModelEditor->deleteConnection(pConnectionLineAnnotation->getStartComponentName(), pConnectionLineAnnotation->getEndComponentName());
} else if (mpModelWidget->getLibraryTreeItem()->getLibraryType()== LibraryTreeItem::OMS) {
OMSProxy::instance()->deleteConnection(mpModelWidget->getLibraryTreeItem()->getNameStructure(),
pConnectionLineAnnotation->getStartComponentName(),
pConnectionLineAnnotation->getEndComponentName());
} else {
pMainWindow->getOMCProxy()->deleteConnection(pConnectionLineAnnotation->getStartComponentName(),
pConnectionLineAnnotation->getEndComponentName(),
Expand Down Expand Up @@ -1332,6 +1342,8 @@ Component* GraphicsView::connectorComponentAtPosition(QPoint position)
!mpModelWidget->getLibraryTreeItem()->isSystemLibrary() &&
((pComponent->getLibraryTreeItem() && pComponent->getLibraryTreeItem()->isConnector()) ||
(mpModelWidget->getLibraryTreeItem()->getLibraryType() == LibraryTreeItem::CompositeModel &&
pComponent->getComponentType() == Component::Port) ||
(mpModelWidget->getLibraryTreeItem()->getLibraryType() == LibraryTreeItem::OMS &&
pComponent->getComponentType() == Component::Port))) {
return pComponent;
}
Expand Down Expand Up @@ -1359,7 +1371,8 @@ Component* GraphicsView::stateComponentAtPosition(QPoint position)
if (pRootComponent && !pRootComponent->isSelected()) {
if (MainWindow::instance()->getTransitionModeAction()->isChecked() && mViewType == StringHandler::Diagram &&
!mpModelWidget->getLibraryTreeItem()->isSystemLibrary() &&
((pComponent->getLibraryTreeItem() && pComponent->getLibraryTreeItem()->isState()))) {
((pComponent->getLibraryTreeItem() && pComponent->getLibraryTreeItem()->getLibraryType() == LibraryTreeItem::Modelica &&
pComponent->getLibraryTreeItem()->isState()))) {
return pComponent;
}
}
Expand Down Expand Up @@ -1424,14 +1437,22 @@ void GraphicsView::addConnection(Component *pComponent)
removeCurrentConnection();
}
} else {
QString startComponentNameTemplate, endComponentNameTemplate;
if (mpModelWidget->getLibraryTreeItem()->getLibraryType() == LibraryTreeItem::OMS) {
startComponentNameTemplate = QString("%1:%2");
endComponentNameTemplate = QString("%1:%2");
} else {
startComponentNameTemplate = QString("%1.%2");
endComponentNameTemplate = QString("%1.%2");
}
QString startComponentName, endComponentName;
if (pStartComponent->getParentComponent()) {
startComponentName = QString(pStartComponent->getRootParentComponent()->getName()).append(".").append(pStartComponent->getName());
startComponentName = startComponentNameTemplate.arg(pStartComponent->getRootParentComponent()->getName()).arg(pStartComponent->getName());
} else {
startComponentName = pStartComponent->getName();
}
if (pComponent->getParentComponent()) {
endComponentName = QString(pComponent->getRootParentComponent()->getName()).append(".").append(pComponent->getName());
endComponentName = endComponentNameTemplate.arg(pComponent->getRootParentComponent()->getName()).arg(pComponent->getName());
} else {
endComponentName = pComponent->getName();
}
Expand Down Expand Up @@ -5395,15 +5416,15 @@ void ModelWidget::drawOMSModelConnections()
if (OMSProxy::instance()->getConnections(mpLibraryTreeItem->getNameStructure(), &pConnections)) {
for (int i = 0 ; pConnections[i] ; i++) {
// get start submodel
QStringList startConnectionList = StringHandler::getLastWordAfterDot(pConnections[i]->from).split(':', QString::SkipEmptyParts);
QStringList startConnectionList = QString(pConnections[i]->conA).split(':', QString::SkipEmptyParts);
if (startConnectionList.size() < 2) {
continue;
}
Component *pStartSubModelComponent = mpDiagramGraphicsView->getComponentObject(startConnectionList.at(0));
if (!pStartSubModelComponent) {
pMessagesWidget->addGUIMessage(MessageItem(MessageItem::Modelica, "", false, 0, 0, 0, 0,
GUIMessages::getMessage(GUIMessages::UNABLE_FIND_COMPONENT_IN_CONNECTION)
.arg(startConnectionList.at(0)).arg(pConnections[i]->from),
.arg(startConnectionList.at(0)).arg(pConnections[i]->conA),
Helper::scriptingKind, Helper::errorLevel));
continue;
}
Expand All @@ -5412,20 +5433,20 @@ void ModelWidget::drawOMSModelConnections()
if (!pStartInterfacePointComponent) {
pMessagesWidget->addGUIMessage(MessageItem(MessageItem::Modelica, "", false, 0, 0, 0, 0,
GUIMessages::getMessage(GUIMessages::UNABLE_FIND_COMPONENT_IN_CONNECTION)
.arg(startConnectionList.at(1)).arg(pConnections[i]->from),
.arg(startConnectionList.at(1)).arg(pConnections[i]->conA),
Helper::scriptingKind, Helper::errorLevel));
continue;
}
// get end submodel
QStringList endConnectionList = StringHandler::getLastWordAfterDot(pConnections[i]->to).split(':', QString::SkipEmptyParts);
QStringList endConnectionList = QString(pConnections[i]->conB).split(':', QString::SkipEmptyParts);
if (endConnectionList.size() < 2) {
continue;
}
Component *pEndSubModelComponent = mpDiagramGraphicsView->getComponentObject(endConnectionList.at(0));
if (!pEndSubModelComponent) {
pMessagesWidget->addGUIMessage(MessageItem(MessageItem::Modelica, "", false, 0, 0, 0, 0,
GUIMessages::getMessage(GUIMessages::UNABLE_FIND_COMPONENT_IN_CONNECTION)
.arg(endConnectionList.at(0)).arg(pConnections[i]->to),
.arg(endConnectionList.at(0)).arg(pConnections[i]->conB),
Helper::scriptingKind, Helper::errorLevel));
continue;
}
Expand All @@ -5434,19 +5455,18 @@ void ModelWidget::drawOMSModelConnections()
if (!pEndInterfacePointComponent) {
pMessagesWidget->addGUIMessage(MessageItem(MessageItem::Modelica, "", false, 0, 0, 0, 0,
GUIMessages::getMessage(GUIMessages::UNABLE_FIND_COMPONENT_IN_CONNECTION)
.arg(endConnectionList.at(1)).arg(pConnections[i]->to),
.arg(endConnectionList.at(1)).arg(pConnections[i]->conB),
Helper::scriptingKind, Helper::errorLevel));
continue;
}
// default connection annotation
QString annotation = QString("{Line(true,{0.0,0.0},0,%1,{0,0,0},LinePattern.Solid,0.25,{Arrow.None,Arrow.None},3,Smooth.None)}");
QStringList shapesList;
const ssd_connection_geometry_t *pConnectionGeometry;
QString point = QString("{%1,%2}");
QStringList points;
if (OMSProxy::instance()->getConnectionGeometry(pConnections[i]->from, pConnections[i]->to, &pConnectionGeometry)) {
for (unsigned int i = 0 ; i < pConnectionGeometry->n ; i++) {
points.append(point.arg(pConnectionGeometry->pointsX[i]).arg(pConnectionGeometry->pointsY[i]));
if (pConnections[i]->geometry && pConnections[i]->geometry->n > 0) {
for (unsigned int j = 0 ; j < pConnections[i]->geometry->n ; j++) {
points.append(point.arg(pConnections[i]->geometry->pointsX[j]).arg(pConnections[i]->geometry->pointsY[j]));
}
} else {
QPointF startPoint = pStartInterfacePointComponent->mapToScene(pStartInterfacePointComponent->boundingRect().center());
Expand All @@ -5467,8 +5487,8 @@ void ModelWidget::drawOMSModelConnections()
}
LineAnnotation *pConnectionLineAnnotation = new LineAnnotation(lineShape, pStartInterfacePointComponent, pEndInterfacePointComponent,
mpDiagramGraphicsView);
pConnectionLineAnnotation->setStartComponentName(pConnections[i]->from);
pConnectionLineAnnotation->setEndComponentName(pConnections[i]->to);
pConnectionLineAnnotation->setStartComponentName(pConnections[i]->conA);
pConnectionLineAnnotation->setEndComponentName(pConnections[i]->conB);

mpUndoStack->push(new AddConnectionCommand(pConnectionLineAnnotation, false));
}
Expand Down
46 changes: 31 additions & 15 deletions OMEdit/OMEditGUI/OMS/OMSProxy.cpp
Expand Up @@ -203,7 +203,7 @@ bool OMSProxy::unloadModel(QString ident)
*/
bool OMSProxy::renameModel(QString identOld, QString identNew)
{
oms_status_enu_t status = oms2_renameModel(identOld.toStdString().c_str(), identNew.toStdString().c_str());
oms_status_enu_t status = oms2_rename(identOld.toStdString().c_str(), identNew.toStdString().c_str());
return statusToBool(status);
}

Expand Down Expand Up @@ -301,29 +301,45 @@ bool OMSProxy::getConnections(QString cref, oms_connection_t*** pConnections)
}

/*!
* \brief OMSProxy::getConnectionGeometry
* Gets the connection geometry
* \param signalA
* \param signalB
* \param pGeometry
* \brief OMSProxy::addConnection
* Adds the connection
* \param cref
* \param conA
* \param conB
* \return
*/
bool OMSProxy::getConnectionGeometry(QString signalA, QString signalB, const ssd_connection_geometry_t** pGeometry)
bool OMSProxy::addConnection(QString cref, QString conA, QString conB)
{
oms_status_enu_t status = oms2_getConnectionGeometry(signalA.toStdString().c_str(), signalB.toStdString().c_str(), pGeometry);
oms_status_enu_t status = oms2_addConnection(cref.toStdString().c_str(), conA.toStdString().c_str(), conB.toStdString().c_str());
return statusToBool(status);
}

/*!
* \brief OMSProxy::setConnectionGeometry
* Sets the connection geometry
* \param signalA
* \param signalB
* \param pGeometry
* \brief OMSProxy::deleteConnection
* Deletes the connection
* \param cref
* \param conA
* \param conB
* \return
*/
bool OMSProxy::deleteConnection(QString cref, QString conA, QString conB)
{
oms_status_enu_t status = oms2_deleteConnection(cref.toStdString().c_str(), conA.toStdString().c_str(), conB.toStdString().c_str());
return statusToBool(status);
}

/*!
* \brief OMSProxy::updateConnection
* Updates the connection
* \param cref
* \param conA
* \param conB
* \param connection
* \return
*/
bool OMSProxy::setConnectionGeometry(QString signalA, QString signalB, const ssd_connection_geometry_t* pGeometry)
bool OMSProxy::updateConnection(QString cref, QString conA, QString conB, const oms_connection_t *connection)
{
oms_status_enu_t status = oms2_setConnectionGeometry(signalA.toStdString().c_str(), signalB.toStdString().c_str(), pGeometry);
oms_status_enu_t status = oms2_updateConnection(cref.toStdString().c_str(), conA.toStdString().c_str(),
conB.toStdString().c_str(), connection);
return statusToBool(status);
}
5 changes: 3 additions & 2 deletions OMEdit/OMEditGUI/OMS/OMSProxy.h
Expand Up @@ -68,8 +68,9 @@ class OMSProxy : public QObject
bool getElementGeometry(QString cref, const ssd_element_geometry_t** pGeometry);
bool setElementGeometry(QString cref, const ssd_element_geometry_t* pGeometry);
bool getConnections(QString cref, oms_connection_t*** pConnections);
bool setConnectionGeometry(QString signalA, QString signalB, const ssd_connection_geometry_t* pGeometry);
bool getConnectionGeometry(QString signalA, QString signalB, const ssd_connection_geometry_t** pGeometry);
bool addConnection(QString cref, QString conA, QString conB);
bool deleteConnection(QString cref, QString conA, QString conB);
bool updateConnection(QString cref, QString conA, QString conB, const oms_connection_t* connection);
};

#endif // OMSPROXY_H

0 comments on commit 0731b2d

Please sign in to comment.