Cleanup ConnectionEditor models

Simplified interface for the BindingModel and DynamicPropertiesModel.

Change-Id: I772f31be704afe2a43c6368aefab1b026b85ec8b
Reviewed-by: Qt CI Patch Build Bot <ci_patchbuild_bot@qt.io>
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
Knud Dollereder
2023-08-23 12:12:07 +02:00
committed by Thomas Hartmann
parent e0c129d4b1
commit 759b560bab
24 changed files with 1330 additions and 3389 deletions

View File

@@ -2,7 +2,6 @@
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "connectionview.h"
#include "connectionviewwidget.h"
#include "backendmodel.h"
#include "bindingmodel.h"
@@ -70,9 +69,13 @@ public:
"ConnectionsEditorEditorBackend", 1);
map->setProperties(
{{"connectionModel", QVariant::fromValue(m_connectionEditorView->connectionModel())},
{"bindingModel", QVariant::fromValue(m_connectionEditorView->bindingModel())},
{"dynamicPropertiesModel",
{{"connectionModel", QVariant::fromValue(m_connectionEditorView->connectionModel())}});
map->setProperties(
{{"bindingModel", QVariant::fromValue(m_connectionEditorView->bindingModel())}});
map->setProperties(
{{"dynamicPropertiesModel",
QVariant::fromValue(m_connectionEditorView->dynamicPropertiesModel())}});
qmlRegisterType<ConnectionModelBackendDelegate>("ConnectionsEditorEditorBackend",
@@ -98,7 +101,6 @@ public:
// init the first load of the QML UI elements
reloadQmlSource();
}
~ConnectionViewQuickWidget() = default;
static QString qmlSourcesPath()
@@ -136,17 +138,13 @@ private:
};
ConnectionView::ConnectionView(ExternalDependenciesInterface &externalDependencies)
: AbstractView{externalDependencies}, m_connectionViewWidget(new ConnectionViewWidget()),
m_connectionModel(new ConnectionModel(this)), m_bindingModel(new BindingModel(this)),
m_dynamicPropertiesModel(new DynamicPropertiesModel(false, this)),
m_backendModel(new BackendModel(this)),
m_connectionViewQuickWidget(new ConnectionViewQuickWidget(this))
{
connectionViewWidget()->setBindingModel(m_bindingModel);
connectionViewWidget()->setConnectionModel(m_connectionModel);
connectionViewWidget()->setDynamicPropertiesModel(m_dynamicPropertiesModel);
connectionViewWidget()->setBackendModel(m_backendModel);
}
: AbstractView{externalDependencies}
, m_connectionModel(new ConnectionModel(this))
, m_bindingModel(new BindingModel(this))
, m_dynamicPropertiesModel(new DynamicPropertiesModel(false, this))
, m_backendModel(new BackendModel(this))
, m_connectionViewQuickWidget(new ConnectionViewQuickWidget(this))
{}
ConnectionView::~ConnectionView()
{
@@ -156,25 +154,22 @@ ConnectionView::~ConnectionView()
void ConnectionView::modelAttached(Model *model)
{
AbstractView::modelAttached(model);
bindingModel()->selectionChanged(QList<ModelNode>());
bindingModel()->reset();
dynamicPropertiesModel()->reset();
connectionModel()->resetModel();
connectionViewWidget()->resetItemViews();
backendModel()->resetModel();
}
void ConnectionView::modelAboutToBeDetached(Model *model)
{
AbstractView::modelAboutToBeDetached(model);
bindingModel()->selectionChanged(QList<ModelNode>());
bindingModel()->reset();
dynamicPropertiesModel()->reset();
connectionModel()->resetModel();
connectionViewWidget()->resetItemViews();
}
void ConnectionView::nodeCreated(const ModelNode & /*createdNode*/)
{
//bindings
connectionModel()->resetModel();
}
@@ -194,8 +189,8 @@ void ConnectionView::nodeReparented(const ModelNode & /*node*/, const NodeAbstra
void ConnectionView::nodeIdChanged(const ModelNode & /*node*/, const QString & /*newId*/, const QString & /*oldId*/)
{
connectionModel()->resetModel();
bindingModel()->resetModel();
dynamicPropertiesModel()->resetModel();
bindingModel()->reset();
dynamicPropertiesModel()->reset();
}
void ConnectionView::propertiesRemoved(const QList<AbstractProperty> &propertyList)
@@ -212,10 +207,10 @@ void ConnectionView::propertiesAboutToBeRemoved(const QList<AbstractProperty> &p
{
for (const AbstractProperty &property : propertyList) {
if (property.isBindingProperty()) {
bindingModel()->bindingRemoved(property.toBindingProperty());
dynamicPropertiesModel()->bindingRemoved(property.toBindingProperty());
bindingModel()->removeItem(property);
dynamicPropertiesModel()->removeItem(property);
} else if (property.isVariantProperty()) {
dynamicPropertiesModel()->variantRemoved(property.toVariantProperty());
dynamicPropertiesModel()->removeItem(property);
} else if (property.isSignalHandlerProperty()) {
connectionModel()->removeRowFromTable(property.toSignalHandlerProperty());
}
@@ -227,7 +222,7 @@ void ConnectionView::variantPropertiesChanged(const QList<VariantProperty> &prop
{
for (const VariantProperty &variantProperty : propertyList) {
if (variantProperty.isDynamic())
dynamicPropertiesModel()->variantPropertyChanged(variantProperty);
dynamicPropertiesModel()->updateItem(variantProperty);
if (variantProperty.isDynamic() && variantProperty.parentModelNode().isRootNode())
backendModel()->resetModel();
@@ -241,9 +236,9 @@ void ConnectionView::bindingPropertiesChanged(const QList<BindingProperty> &prop
AbstractView::PropertyChangeFlags /*propertyChange*/)
{
for (const BindingProperty &bindingProperty : propertyList) {
bindingModel()->bindingChanged(bindingProperty);
bindingModel()->updateItem(bindingProperty);
if (bindingProperty.isDynamic())
dynamicPropertiesModel()->bindingPropertyChanged(bindingProperty);
dynamicPropertiesModel()->updateItem(bindingProperty);
if (bindingProperty.isDynamic() && bindingProperty.parentModelNode().isRootNode())
backendModel()->resetModel();
@@ -263,39 +258,8 @@ void ConnectionView::signalHandlerPropertiesChanged(const QVector<SignalHandlerP
void ConnectionView::selectedNodesChanged(const QList<ModelNode> & selectedNodeList,
const QList<ModelNode> & /*lastSelectedNodeList*/)
{
bindingModel()->selectionChanged(selectedNodeList);
bindingModel()->reset(selectedNodeList);
dynamicPropertiesModel()->reset();
connectionViewWidget()->bindingTableViewSelectionChanged(QModelIndex(), QModelIndex());
connectionViewWidget()->dynamicPropertiesTableViewSelectionChanged(QModelIndex(), QModelIndex());
if (connectionViewWidget()->currentTab() == ConnectionViewWidget::BindingTab
|| connectionViewWidget()->currentTab() == ConnectionViewWidget::DynamicPropertiesTab)
emit connectionViewWidget()->setEnabledAddButton(selectedNodeList.size() == 1);
}
void ConnectionView::auxiliaryDataChanged([[maybe_unused]] const ModelNode &node,
AuxiliaryDataKeyView key,
const QVariant &data)
{
// Check if the auxiliary data is actually the locked property or if it is unlocked
if (key != lockedProperty || !data.toBool())
return;
QItemSelectionModel *selectionModel = connectionTableView()->selectionModel();
if (!selectionModel->hasSelection())
return;
QModelIndex modelIndex = selectionModel->currentIndex();
if (!modelIndex.isValid() || !model())
return;
const int internalId = connectionModel()->data(connectionModel()->index(modelIndex.row(),
ConnectionModel::TargetModelNodeRow),
ConnectionModel::UserRoles::InternalIdRole).toInt();
ModelNode modelNode = modelNodeForInternalId(internalId);
if (modelNode.isValid() && ModelNode::isThisOrAncestorLocked(modelNode))
selectionModel->clearSelection();
}
void ConnectionView::importsChanged(const Imports & /*addedImports*/, const Imports & /*removedImports*/)
@@ -310,14 +274,7 @@ void ConnectionView::currentStateChanged(const ModelNode &)
WidgetInfo ConnectionView::widgetInfo()
{
/* Enable new connection editor here */
const bool newEditor = true;
QWidget *widget = m_connectionViewWidget.data();
if (newEditor)
widget = m_connectionViewQuickWidget.data();
return createWidgetInfo(widget,
return createWidgetInfo(m_connectionViewQuickWidget.data(),
QLatin1String("ConnectionView"),
WidgetInfo::LeftPane,
0,
@@ -334,31 +291,6 @@ bool ConnectionView::isWidgetEnabled()
return widgetInfo().widget->isEnabled();
}
QTableView *ConnectionView::connectionTableView() const
{
return connectionViewWidget()->connectionTableView();
}
QTableView *ConnectionView::bindingTableView() const
{
return connectionViewWidget()->bindingTableView();
}
QTableView *ConnectionView::dynamicPropertiesTableView() const
{
return connectionViewWidget()->dynamicPropertiesTableView();
}
QTableView *ConnectionView::backendView() const
{
return connectionViewWidget()->backendView();
}
ConnectionViewWidget *ConnectionView::connectionViewWidget() const
{
return m_connectionViewWidget.data();
}
ConnectionModel *ConnectionView::connectionModel() const
{
return m_connectionModel;