diff options
author | Aleksei German <aleksei.german@qt.io> | 2019-12-11 11:25:13 +0100 |
---|---|---|
committer | Aleksei German <aleksei.german@qt.io> | 2019-12-16 09:16:07 +0000 |
commit | ec43ac04812629b2e76f181a3378cdc382d431cd (patch) | |
tree | 7049f065c4f5796377aa7127f0cdfbae8e8af239 | |
parent | f265257d556a3cd8c973751a0dffcba5c8bd578c (diff) | |
download | qt-creator-ec43ac04812629b2e76f181a3378cdc382d431cd.tar.gz |
QmlDesigner Connection View signals fixes
Bug: QDS-1333
Change-Id: Ic0d4206888bd8c5bd3d5cef29225441f19efa59d
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
8 files changed, 46 insertions, 4 deletions
diff --git a/src/plugins/qmldesigner/components/bindingeditor/actioneditor.cpp b/src/plugins/qmldesigner/components/bindingeditor/actioneditor.cpp index e21000a171..65866ad324 100644 --- a/src/plugins/qmldesigner/components/bindingeditor/actioneditor.cpp +++ b/src/plugins/qmldesigner/components/bindingeditor/actioneditor.cpp @@ -123,7 +123,7 @@ void ActionEditor::updateWindowName() { if (!m_dialog.isNull()) { - m_dialog->setWindowTitle(tr("Action Editor")); + m_dialog->setWindowTitle(tr("Connection Editor")); m_dialog->raise(); } } diff --git a/src/plugins/qmldesigner/components/connectioneditor/connectionmodel.cpp b/src/plugins/qmldesigner/components/connectioneditor/connectionmodel.cpp index 87de1e5074..1347c76045 100644 --- a/src/plugins/qmldesigner/components/connectioneditor/connectionmodel.cpp +++ b/src/plugins/qmldesigner/components/connectioneditor/connectionmodel.cpp @@ -290,7 +290,28 @@ void ConnectionModel::abstractPropertyChanged(const AbstractProperty &abstractPr void ConnectionModel::deleteConnectionByRow(int currentRow) { - signalHandlerPropertyForRow(currentRow).parentModelNode().destroy(); + SignalHandlerProperty targetSignal = signalHandlerPropertyForRow(currentRow); + QmlDesigner::ModelNode node = targetSignal.parentModelNode(); + QList<SignalHandlerProperty> allSignals = node.signalProperties(); + if (allSignals.size() > 1) { + if (allSignals.contains(targetSignal)) + node.removeProperty(targetSignal.name()); + } + else { + node.destroy(); + } +} + +void ConnectionModel::removeRowFromTable(const SignalHandlerProperty &property) +{ + for (int currentRow = 0; currentRow < rowCount(); currentRow++) { + SignalHandlerProperty targetSignal = signalHandlerPropertyForRow(currentRow); + + if (targetSignal == property) { + removeRow(currentRow); + break; + } + } } void ConnectionModel::handleException() diff --git a/src/plugins/qmldesigner/components/connectioneditor/connectionmodel.h b/src/plugins/qmldesigner/components/connectioneditor/connectionmodel.h index 1ae3aa2a25..b60275f6da 100644 --- a/src/plugins/qmldesigner/components/connectioneditor/connectionmodel.h +++ b/src/plugins/qmldesigner/components/connectioneditor/connectionmodel.h @@ -63,6 +63,7 @@ public: void abstractPropertyChanged(const AbstractProperty &abstractProperty); void deleteConnectionByRow(int currentRow); + void removeRowFromTable(const SignalHandlerProperty &property); protected: void addModelNode(const ModelNode &modelNode); diff --git a/src/plugins/qmldesigner/components/connectioneditor/connectionview.cpp b/src/plugins/qmldesigner/components/connectioneditor/connectionview.cpp index 08be13d7d5..0410ccf908 100644 --- a/src/plugins/qmldesigner/components/connectioneditor/connectionview.cpp +++ b/src/plugins/qmldesigner/components/connectioneditor/connectionview.cpp @@ -108,6 +108,8 @@ void ConnectionView::propertiesAboutToBeRemoved(const QList<AbstractProperty> & dynamicPropertiesModel()->bindingRemoved(property.toBindingProperty()); } else if (property.isVariantProperty()) { //### dynamicPropertiesModel->bindingRemoved(property.toVariantProperty()); + } else if (property.isSignalHandlerProperty()) { + connectionModel()->removeRowFromTable(property.toSignalHandlerProperty()); } } } @@ -180,6 +182,11 @@ bool ConnectionView::hasWidget() const return true; } +bool ConnectionView::isWidgetEnabled() +{ + return widgetInfo().widget->isEnabled(); +} + QTableView *ConnectionView::connectionTableView() const { return connectionViewWidget()->connectionTableView(); diff --git a/src/plugins/qmldesigner/components/connectioneditor/connectionview.h b/src/plugins/qmldesigner/components/connectioneditor/connectionview.h index 09b653072e..905fa02a58 100644 --- a/src/plugins/qmldesigner/components/connectioneditor/connectionview.h +++ b/src/plugins/qmldesigner/components/connectioneditor/connectionview.h @@ -74,6 +74,7 @@ public: WidgetInfo widgetInfo() override; bool hasWidget() const override; + bool isWidgetEnabled(); QTableView *connectionTableView() const; QTableView *bindingTableView() const; diff --git a/src/plugins/qmldesigner/components/connectioneditor/connectionviewwidget.cpp b/src/plugins/qmldesigner/components/connectioneditor/connectionviewwidget.cpp index d0aa6bbbc7..3777de7291 100644 --- a/src/plugins/qmldesigner/components/connectioneditor/connectionviewwidget.cpp +++ b/src/plugins/qmldesigner/components/connectioneditor/connectionviewwidget.cpp @@ -63,7 +63,8 @@ ConnectionViewWidget::ConnectionViewWidget(QWidget *parent) : [&]() { if (m_actionEditor->hasModelIndex()) { ConnectionModel *connectionModel = qobject_cast<ConnectionModel *>(ui->connectionView->model()); - if (connectionModel->rowCount() > m_actionEditor->modelIndex().row()) + if (connectionModel->connectionView()->isWidgetEnabled() + && (connectionModel->rowCount() > m_actionEditor->modelIndex().row())) { SignalHandlerProperty signalHandler = connectionModel->signalHandlerPropertyForRow(m_actionEditor->modelIndex().row()); @@ -166,7 +167,7 @@ void ConnectionViewWidget::contextMenuEvent(QContextMenuEvent *event) QMenu menu(this); - menu.addAction(tr("Open Action Editor"), [&]() { + menu.addAction(tr("Open Connection Editor"), [&]() { if (index.isValid()) { m_actionEditor->showWidget(mapToGlobal(event->pos()).x(), mapToGlobal(event->pos()).y()); m_actionEditor->setBindingValue(index.data().toString()); diff --git a/src/plugins/qmldesigner/designercore/include/modelnode.h b/src/plugins/qmldesigner/designercore/include/modelnode.h index 7f943dddd1..1399e13e2d 100644 --- a/src/plugins/qmldesigner/designercore/include/modelnode.h +++ b/src/plugins/qmldesigner/designercore/include/modelnode.h @@ -133,6 +133,7 @@ public: QList<NodeProperty> nodeProperties() const; QList<NodeListProperty> nodeListProperties() const; QList<BindingProperty> bindingProperties() const; + QList<SignalHandlerProperty> signalProperties() const; PropertyNameList propertyNames() const; bool hasProperties() const; diff --git a/src/plugins/qmldesigner/designercore/model/modelnode.cpp b/src/plugins/qmldesigner/designercore/model/modelnode.cpp index 1fdc29aaa0..ab4bf9cca0 100644 --- a/src/plugins/qmldesigner/designercore/model/modelnode.cpp +++ b/src/plugins/qmldesigner/designercore/model/modelnode.cpp @@ -644,6 +644,16 @@ QList<BindingProperty> ModelNode::bindingProperties() const return propertyList; } +QList<SignalHandlerProperty> ModelNode::signalProperties() const +{ + QList<SignalHandlerProperty> propertyList; + + foreach (const AbstractProperty &property, properties()) + if (property.isSignalHandlerProperty()) + propertyList.append(property.toSignalHandlerProperty()); + return propertyList; +} + /*! \brief removes a property from this node \param name name of the property |