diff --git a/OMEdit/OMEditLIB/Modeling/ModelWidgetContainer.cpp b/OMEdit/OMEditLIB/Modeling/ModelWidgetContainer.cpp index e97552bfc2a..ec4b786eeeb 100644 --- a/OMEdit/OMEditLIB/Modeling/ModelWidgetContainer.cpp +++ b/OMEdit/OMEditLIB/Modeling/ModelWidgetContainer.cpp @@ -96,7 +96,8 @@ GraphicsScene::GraphicsScene(StringHandler::ViewType viewType, ModelWidget *pMod * \param visualizationView */ GraphicsView::GraphicsView(StringHandler::ViewType viewType, ModelWidget *pModelWidget, bool visualizationView) - : QGraphicsView(pModelWidget), mViewType(viewType), mVisualizationView(visualizationView), mSkipBackground(false), mContextMenuStartPosition(QPointF(0, 0)) + : QGraphicsView(pModelWidget), mViewType(viewType), mVisualizationView(visualizationView), mSkipBackground(false), mContextMenuStartPosition(QPointF(0, 0)), + mContextMenuStartPositionValid(false) { /* Ticket #3275 * Set the scroll bars policy to always on to avoid unnecessary resize events. @@ -3885,6 +3886,7 @@ void GraphicsView::contextMenuEvent(QContextMenuEvent *event) if (!itemAt(event->pos())) { QMenu menu; mContextMenuStartPosition = mapToScene(mapFromGlobal(QCursor::pos())); + mContextMenuStartPositionValid = true; if (mpModelWidget->getLibraryTreeItem()->getLibraryType() == LibraryTreeItem::Modelica) { modelicaGraphicsViewContextMenu(&menu); } else if (mpModelWidget->getLibraryTreeItem()->getLibraryType() == LibraryTreeItem::CompositeModel) { @@ -3894,6 +3896,7 @@ void GraphicsView::contextMenuEvent(QContextMenuEvent *event) } menu.exec(event->globalPos()); mContextMenuStartPosition = QPointF(0, 0); + mContextMenuStartPositionValid = false; return; // return from it because at a time we only want one context menu. } else { // if we click on some item. bool oneShapeSelected = false; diff --git a/OMEdit/OMEditLIB/Modeling/ModelWidgetContainer.h b/OMEdit/OMEditLIB/Modeling/ModelWidgetContainer.h index 0c4451351dc..2a10f5430be 100644 --- a/OMEdit/OMEditLIB/Modeling/ModelWidgetContainer.h +++ b/OMEdit/OMEditLIB/Modeling/ModelWidgetContainer.h @@ -159,6 +159,7 @@ class GraphicsView : public QGraphicsView GraphicsView(StringHandler::ViewType viewType, ModelWidget *pModelWidget, bool visualizationView = false); bool mSkipBackground; /* Do not draw the background rectangle */ QPointF mContextMenuStartPosition; + bool mContextMenuStartPositionValid; StringHandler::ViewType getViewType() {return mViewType;} ModelWidget* getModelWidget() {return mpModelWidget;} bool isVisualizationView() {return mVisualizationView;} diff --git a/OMEdit/OMEditLIB/OMS/BusDialog.cpp b/OMEdit/OMEditLIB/OMS/BusDialog.cpp index 3c39776cca2..c3b29fdbe67 100644 --- a/OMEdit/OMEditLIB/OMS/BusDialog.cpp +++ b/OMEdit/OMEditLIB/OMS/BusDialog.cpp @@ -576,6 +576,12 @@ void AddBusDialog::addBus() accept(); } else { // add case if (OMSProxy::instance()->addBus(bus)) { + if (mpGraphicsView->mContextMenuStartPositionValid) { + ssd_connector_geometry_t connectorGeometry; + connectorGeometry.x = Utilities::mapToCoOrdinateSystem(mpGraphicsView->mContextMenuStartPosition.x(), -100, 100, 0, 1); + connectorGeometry.y = Utilities::mapToCoOrdinateSystem(mpGraphicsView->mContextMenuStartPosition.y(), -100, 100, 0, 1); + OMSProxy::instance()->setBusGeometry(bus, &connectorGeometry); + } foreach (QString connector, connectors) { OMSProxy::instance()->addConnectorToBus(bus, connector); } @@ -869,6 +875,12 @@ void AddTLMBusDialog::addTLMBus() } else { // add case if (OMSProxy::instance()->addTLMBus(tlmBus, (oms_tlm_domain_t)mpDomainComboBox->itemData(mpDomainComboBox->currentIndex()).toInt(), mpDimensionSpinBox->value(), (oms_tlm_interpolation_t)mpInterpolationComboBox->itemData(mpInterpolationComboBox->currentIndex()).toInt())) { + if (mpGraphicsView->mContextMenuStartPositionValid) { + ssd_connector_geometry_t connectorGeometry; + connectorGeometry.x = Utilities::mapToCoOrdinateSystem(mpGraphicsView->mContextMenuStartPosition.x(), -100, 100, 0, 1); + connectorGeometry.y = Utilities::mapToCoOrdinateSystem(mpGraphicsView->mContextMenuStartPosition.y(), -100, 100, 0, 1); + OMSProxy::instance()->setTLMBusGeometry(tlmBus, &connectorGeometry); + } // add connectors to the bus QPair connector; foreach (connector, connectors) { diff --git a/OMEdit/OMEditLIB/OMS/ModelDialog.cpp b/OMEdit/OMEditLIB/OMS/ModelDialog.cpp index 2b851d76422..2fa016fe62b 100644 --- a/OMEdit/OMEditLIB/OMS/ModelDialog.cpp +++ b/OMEdit/OMEditLIB/OMS/ModelDialog.cpp @@ -251,6 +251,9 @@ void AddSystemDialog::addSystem() oms_system_enu_t systemType = (oms_system_enu_t)mpSystemWidget->getTypeComboBox()->itemData(mpSystemWidget->getTypeComboBox()->currentIndex()).toInt(); QString nameStructure = QString("%1.%2").arg(pParentLibraryTreeItem->getNameStructure()).arg(mpSystemWidget->getNameTextBox()->text()); if (OMSProxy::instance()->addSystem(nameStructure, systemType)) { + if (mpGraphicsView->mContextMenuStartPositionValid) { + OMSProxy::instance()->createElementGeometryUsingPosition(nameStructure, mpGraphicsView->mContextMenuStartPosition); + } mpGraphicsView->getModelWidget()->createOMSimulatorUndoCommand(QString("Add system %1").arg(nameStructure)); mpGraphicsView->getModelWidget()->updateModelText(); accept(); @@ -346,29 +349,6 @@ QString AddSubModelDialog::browseSubModelPath(GraphicsView *pGraphicsView, QStri return path; } -/*! - * \brief AddSubModelDialog::setSubModelGeometry - * Sets the submodel geometry. - * \param nameStructure - */ -void AddSubModelDialog::setSubModelGeometry(const QString &nameStructure) -{ - qreal x = mpGraphicsView->mContextMenuStartPosition.x(); - qreal y = mpGraphicsView->mContextMenuStartPosition.y(); - - ssd_element_geometry_t elementGeometry; - elementGeometry.x1 = x - 10.0; - elementGeometry.y1 = y - 10.0; - elementGeometry.x2 = x + 10.0; - elementGeometry.y2 = y + 10.0; - elementGeometry.rotation = 0.0; - elementGeometry.iconSource = NULL; - elementGeometry.iconRotation = 0.0; - elementGeometry.iconFlip = false; - elementGeometry.iconFixedAspectRatio = false; - OMSProxy::instance()->setElementGeometry(nameStructure, &elementGeometry); -} - /*! * \brief AddSubModelDialog::browseSubModelPath * Slot activated when mpBrowsePathButton clicked signal is raised. @@ -432,7 +412,9 @@ void AddSubModelDialog::addSubModel() QString nameStructure = QString("%1.%2").arg(pParentLibraryTreeItem->getNameStructure()).arg(mpNameTextBox->text()); if (mpStartScriptTextBox->text().isEmpty()) { if (OMSProxy::instance()->addSubModel(nameStructure, fileInfo.absoluteFilePath())) { - setSubModelGeometry(nameStructure); + if (mpGraphicsView->mContextMenuStartPositionValid) { + OMSProxy::instance()->createElementGeometryUsingPosition(nameStructure, mpGraphicsView->mContextMenuStartPosition); + } mpGraphicsView->getModelWidget()->createOMSimulatorUndoCommand(QString("Add submodel %1").arg(nameStructure)); mpGraphicsView->getModelWidget()->updateModelText(); accept(); @@ -441,7 +423,9 @@ void AddSubModelDialog::addSubModel() } } else { if (OMSProxy::instance()->addExternalTLMModel(nameStructure, mpStartScriptTextBox->text(), fileInfo.absoluteFilePath())) { - setSubModelGeometry(nameStructure); + if (mpGraphicsView->mContextMenuStartPositionValid) { + OMSProxy::instance()->createElementGeometryUsingPosition(nameStructure, mpGraphicsView->mContextMenuStartPosition); + } mpGraphicsView->getModelWidget()->createOMSimulatorUndoCommand(QString("Add external tlm model %1").arg(nameStructure)); mpGraphicsView->getModelWidget()->updateModelText(); accept(); @@ -636,6 +620,12 @@ void AddConnectorDialog::addConnector() oms_causality_enu_t causality = (oms_causality_enu_t)mpCausalityComboBox->itemData(mpCausalityComboBox->currentIndex()).toInt(); oms_signal_type_enu_t signalType = (oms_signal_type_enu_t)mpTypeComboBox->itemData(mpTypeComboBox->currentIndex()).toInt(); if (OMSProxy::instance()->addConnector(nameStructure, causality, signalType)) { + if (mpGraphicsView->mContextMenuStartPositionValid) { + ssd_connector_geometry_t connectorGeometry; + connectorGeometry.x = Utilities::mapToCoOrdinateSystem(mpGraphicsView->mContextMenuStartPosition.x(), -100, 100, 0, 1); + connectorGeometry.y = Utilities::mapToCoOrdinateSystem(mpGraphicsView->mContextMenuStartPosition.y(), -100, 100, 0, 1); + OMSProxy::instance()->setConnectorGeometry(nameStructure, &connectorGeometry); + } mpGraphicsView->getModelWidget()->createOMSimulatorUndoCommand(QString("Add connector %1").arg(nameStructure)); mpGraphicsView->getModelWidget()->updateModelText(); accept(); diff --git a/OMEdit/OMEditLIB/OMS/ModelDialog.h b/OMEdit/OMEditLIB/OMS/ModelDialog.h index da5fdd91c6a..2aa416c2d06 100644 --- a/OMEdit/OMEditLIB/OMS/ModelDialog.h +++ b/OMEdit/OMEditLIB/OMS/ModelDialog.h @@ -116,7 +116,6 @@ class AddSubModelDialog : public QDialog QPushButton *mpOkButton; QPushButton *mpCancelButton; QDialogButtonBox *mpButtonBox; - void setSubModelGeometry(const QString &nameStructure); private slots: void browseSubModelPath(); void browseStartScript(); diff --git a/OMEdit/OMEditLIB/OMS/OMSProxy.cpp b/OMEdit/OMEditLIB/OMS/OMSProxy.cpp index 8add937dd8d..562b4a1ded2 100644 --- a/OMEdit/OMEditLIB/OMS/OMSProxy.cpp +++ b/OMEdit/OMEditLIB/OMS/OMSProxy.cpp @@ -437,6 +437,30 @@ bool OMSProxy::addSubModel(QString cref, QString fmuPath) return statusToBool(status); } +/*! + * \brief OMSProxy::createElementGeometryUsingPosition + * Creates the element geometry using position. + * \param cref + * \param position + */ +void OMSProxy::createElementGeometryUsingPosition(const QString &cref, QPointF position) +{ + qreal x = position.x(); + qreal y = position.y(); + + ssd_element_geometry_t elementGeometry; + elementGeometry.x1 = x - 10.0; + elementGeometry.y1 = y - 10.0; + elementGeometry.x2 = x + 10.0; + elementGeometry.y2 = y + 10.0; + elementGeometry.rotation = 0.0; + elementGeometry.iconSource = NULL; + elementGeometry.iconRotation = 0.0; + elementGeometry.iconFlip = false; + elementGeometry.iconFixedAspectRatio = false; + setElementGeometry(cref, &elementGeometry); +} + bool OMSProxy::addExternalTLMModel(QString cref, QString startScript, QString modelPath) { QString command = "oms_addExternalModel"; diff --git a/OMEdit/OMEditLIB/OMS/OMSProxy.h b/OMEdit/OMEditLIB/OMS/OMSProxy.h index d5579d0793b..2c555d79c5b 100644 --- a/OMEdit/OMEditLIB/OMS/OMSProxy.h +++ b/OMEdit/OMEditLIB/OMS/OMSProxy.h @@ -78,6 +78,7 @@ class OMSProxy : public QObject bool addConnectorToBus(QString busCref, QString connectorCref); bool addConnectorToTLMBus(QString busCref, QString connectorCref, QString type); bool addSubModel(QString cref, QString fmuPath); + void createElementGeometryUsingPosition(const QString &cref, QPointF position); bool addExternalTLMModel(QString cref, QString startScript, QString modelPath); bool addSystem(QString cref, oms_system_enu_t type); bool addTLMBus(QString cref, oms_tlm_domain_t domain, int dimensions, const oms_tlm_interpolation_t interpolation);