summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksei German <aleksei.german@qt.io>2019-12-11 11:25:13 +0100
committerAleksei German <aleksei.german@qt.io>2019-12-16 09:16:07 +0000
commitec43ac04812629b2e76f181a3378cdc382d431cd (patch)
tree7049f065c4f5796377aa7127f0cdfbae8e8af239
parentf265257d556a3cd8c973751a0dffcba5c8bd578c (diff)
downloadqt-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>
-rw-r--r--src/plugins/qmldesigner/components/bindingeditor/actioneditor.cpp2
-rw-r--r--src/plugins/qmldesigner/components/connectioneditor/connectionmodel.cpp23
-rw-r--r--src/plugins/qmldesigner/components/connectioneditor/connectionmodel.h1
-rw-r--r--src/plugins/qmldesigner/components/connectioneditor/connectionview.cpp7
-rw-r--r--src/plugins/qmldesigner/components/connectioneditor/connectionview.h1
-rw-r--r--src/plugins/qmldesigner/components/connectioneditor/connectionviewwidget.cpp5
-rw-r--r--src/plugins/qmldesigner/designercore/include/modelnode.h1
-rw-r--r--src/plugins/qmldesigner/designercore/model/modelnode.cpp10
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