diff --git a/OMEdit/OMEditLIB/Modeling/ModelWidgetContainer.cpp b/OMEdit/OMEditLIB/Modeling/ModelWidgetContainer.cpp
index 685bff30207..b10b814d224 100644
--- a/OMEdit/OMEditLIB/Modeling/ModelWidgetContainer.cpp
+++ b/OMEdit/OMEditLIB/Modeling/ModelWidgetContainer.cpp
@@ -3160,8 +3160,9 @@ Element* GraphicsView::getConnectorElement(ModelInstance::Connector *pConnector)
* \brief GraphicsView::addConnection
* Adds the connection to GraphicsView.
* \param pElement
+ * \param createConnector true when function is called from GraphicsView::createConnector
*/
-void GraphicsView::addConnection(Element *pElement)
+void GraphicsView::addConnection(Element *pElement, bool createConnector)
{
// When clicking the start element
if (!isCreatingConnection()) {
@@ -3315,7 +3316,11 @@ void GraphicsView::addConnection(Element *pElement)
} else {
if (mpModelWidget->isNewApi()) {
if (!connectionExists(startElementName, endElementName, false)) {
- if (mpModelWidget->getModelInstance()->isValidConnection(startElementName, endElementName)) {
+ /* Issue #12163. Do not check conneciton validity when called from GraphicsView::createConnector
+ * GraphicsView::createConnector creates an incomplete connector. We do this for performance reasons. Avoid calling getModelInstance API.
+ * We know for sure that both connectors are compatible in this case so its okay not to check for validity.
+ */
+ if (createConnector || mpModelWidget->getModelInstance()->isValidConnection(startElementName, endElementName)) {
mpConnectionLineAnnotation->setLine(new ModelInstance::Line(mpModelWidget->getModelInstance()));
mpConnectionLineAnnotation->updateLine();
mpConnectionLineAnnotation->drawCornerItems();
@@ -3323,9 +3328,11 @@ void GraphicsView::addConnection(Element *pElement)
ModelInfo oldModelInfo = mpModelWidget->createModelInfo();
addConnectionToView(mpConnectionLineAnnotation, false);
addConnectionToClass(mpConnectionLineAnnotation);
- ModelInfo newModelInfo = mpModelWidget->createModelInfo();
- mpModelWidget->getUndoStack()->push(new OMCUndoCommand(mpModelWidget->getLibraryTreeItem(), oldModelInfo, newModelInfo, "Add Connection"));
- mpModelWidget->updateModelText();
+ if (!createConnector) {
+ ModelInfo newModelInfo = mpModelWidget->createModelInfo();
+ mpModelWidget->getUndoStack()->push(new OMCUndoCommand(mpModelWidget->getLibraryTreeItem(), oldModelInfo, newModelInfo, "Add Connection"));
+ mpModelWidget->updateModelText();
+ }
} else {
QMessageBox::critical(MainWindow::instance(), QString("%1 - %2").arg(Helper::applicationName, Helper::error),
GUIMessages::getMessage(GUIMessages::MISMATCHED_CONNECTORS_IN_CONNECT).arg(startElementName, endElementName), Helper::ok);
@@ -4381,7 +4388,18 @@ void GraphicsView::createConnector()
{
if (mpConnectionLineAnnotation && mpConnectionLineAnnotation->getStartElement()) {
Element *pConnectorElement = mpConnectionLineAnnotation->getStartElement();
- if (pConnectorElement->getLibraryTreeItem()) {
+ if (mpModelWidget->isNewApi()) {
+ QString defaultName;
+ QString name = getUniqueElementName(pConnectorElement->getClassName(), pConnectorElement->getName(), &defaultName);
+ ModelInfo oldModelInfo = mpModelWidget->createModelInfo();
+ bool connector = pConnectorElement->getModel() ? pConnectorElement->getModel()->isConnector() : false;
+ ModelInstance::Component *pComponent = GraphicsView::createModelInstanceComponent(mpModelWidget->getModelInstance(), name, pConnectorElement->getClassName(), connector);
+ addElementToView(pComponent, false, true, true, mapToScene(mapFromGlobal(QCursor::pos())), "", true);
+ addConnection(mElementsList.last(), true);
+ ModelInfo newModelInfo = mpModelWidget->createModelInfo();
+ mpModelWidget->getUndoStack()->push(new OMCUndoCommand(mpModelWidget->getLibraryTreeItem(), oldModelInfo, newModelInfo, "Add connector"));
+ mpModelWidget->updateModelText();
+ } else if (pConnectorElement->getLibraryTreeItem()) {
mpModelWidget->beginMacro("Add connector");
QString defaultName;
QString name = getUniqueElementName(pConnectorElement->getLibraryTreeItem()->getNameStructure(), pConnectorElement->getLibraryTreeItem()->getName(), &defaultName);
@@ -4389,6 +4407,8 @@ void GraphicsView::createConnector()
addComponentToView(name, pConnectorElement->getLibraryTreeItem(), "", mapToScene(mapFromGlobal(QCursor::pos())), pElementInfo, true, true, true);
addConnection(mElementsList.last());
mpModelWidget->endMacro();
+ } else {
+ qDebug() << "GraphicsView::createConnector() should never be reached.";
}
}
}
diff --git a/OMEdit/OMEditLIB/Modeling/ModelWidgetContainer.h b/OMEdit/OMEditLIB/Modeling/ModelWidgetContainer.h
index 7167ad8a42c..61c7476c3be 100644
--- a/OMEdit/OMEditLIB/Modeling/ModelWidgetContainer.h
+++ b/OMEdit/OMEditLIB/Modeling/ModelWidgetContainer.h
@@ -423,7 +423,7 @@ class GraphicsView : public QGraphicsView
void updateDynamicSelect(double time);
void resetDynamicSelect();
public slots:
- void addConnection(Element *pComponent);
+ void addConnection(Element *pComponent, bool createConnector = false);
void removeCurrentConnection();
void deleteConnection(LineAnnotation *pConnectionLineAnnotation);
void addTransition(Element *pComponent);
diff --git a/OMEdit/OMEditLIB/Util/Helper.cpp b/OMEdit/OMEditLIB/Util/Helper.cpp
index 9ec7d61cd2c..cb5ff950c02 100644
--- a/OMEdit/OMEditLIB/Util/Helper.cpp
+++ b/OMEdit/OMEditLIB/Util/Helper.cpp
@@ -757,7 +757,7 @@ QString GUIMessages::getMessage(int type)
case SAME_COMPONENT_NAME:
return tr("A component with the name %1 already exists or is a Modelica keyword. Please choose another name.");
case MISMATCHED_CONNECTORS_IN_CONNECT:
- return tr("Connectors %1 and %2 are not compatible.");
+ return tr("Connectors %1 and %2 are not compatible.");
case SAME_COMPONENT_CONNECT:
return tr("You cannot connect a component to itself.");
case NO_MODELICA_CLASS_OPEN: