From 72df0a9cededa4ddedc4a3fb3efd913e83728088 Mon Sep 17 00:00:00 2001 From: Marco Bubke Date: Tue, 28 May 2024 11:53:35 +0200 Subject: [PATCH] QmlDesigner: Fix wild casts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Never use a cast for a dependency injection. If it can not be null use a reference. Task-number: QDS-12883 Change-Id: Ie63a4968f264587a8781f04fa10048e1a7371e44 Reviewed-by: Henning Gründl --- .../connectioneditor/bindingmodel.cpp | 28 ++++++----------- .../connectioneditor/bindingmodel.h | 3 +- .../dynamicpropertiesmodel.cpp | 31 +++++++------------ .../connectioneditor/dynamicpropertiesmodel.h | 3 +- 4 files changed, 24 insertions(+), 41 deletions(-) diff --git a/src/plugins/qmldesigner/components/connectioneditor/bindingmodel.cpp b/src/plugins/qmldesigner/components/connectioneditor/bindingmodel.cpp index f871bae84b4..2cee7b0f977 100644 --- a/src/plugins/qmldesigner/components/connectioneditor/bindingmodel.cpp +++ b/src/plugins/qmldesigner/components/connectioneditor/bindingmodel.cpp @@ -22,6 +22,7 @@ namespace QmlDesigner { BindingModel::BindingModel(ConnectionView *view) : m_connectionView(view) + , m_delegate(*this) { setHorizontalHeaderLabels(BindingModelItem::headerLabels()); } @@ -246,11 +247,8 @@ void BindingModel::addModelNode(const ModelNode &node) appendRow(new BindingModelItem(property)); } -BindingModelBackendDelegate::BindingModelBackendDelegate() - : m_targetNode() - , m_property() - , m_sourceNode() - , m_sourceNodeProperty() +BindingModelBackendDelegate::BindingModelBackendDelegate(BindingModel &model) + : m_model{model} { connect(&m_sourceNode, &StudioQmlComboBoxBackend::activated, this, [this] { sourceNodeChanged(); @@ -322,17 +320,14 @@ StudioQmlComboBoxBackend *BindingModelBackendDelegate::sourceProperty() void BindingModelBackendDelegate::sourceNodeChanged() { - BindingModel *model = qobject_cast(parent()); - QTC_ASSERT(model, return); - - ConnectionView *view = model->connectionView(); + ConnectionView *view = m_model.connectionView(); QTC_ASSERT(view, return); QTC_ASSERT(view->isAttached(), return ); const QString sourceNode = m_sourceNode.currentText(); const QString sourceProperty = m_sourceNodeProperty.currentText(); - BindingProperty targetProperty = model->currentProperty(); + BindingProperty targetProperty = m_model.currentProperty(); QStringList properties = availableSourceProperties(sourceNode, targetProperty, view); if (!properties.contains(sourceProperty)) { @@ -351,9 +346,6 @@ void BindingModelBackendDelegate::sourcePropertyNameChanged() const return; auto commit = [this, sourceProperty]() { - BindingModel *model = qobject_cast(parent()); - QTC_ASSERT(model, return); - const QString sourceNode = m_sourceNode.currentText(); QString expression; if (sourceProperty.isEmpty()) @@ -361,8 +353,8 @@ void BindingModelBackendDelegate::sourcePropertyNameChanged() const else expression = sourceNode + QLatin1String(".") + sourceProperty; - int row = model->currentIndex(); - model->commitExpression(row, expression); + int row = m_model.currentIndex(); + m_model.commitExpression(row, expression); }; callLater(commit); @@ -371,11 +363,9 @@ void BindingModelBackendDelegate::sourcePropertyNameChanged() const void BindingModelBackendDelegate::targetPropertyNameChanged() const { auto commit = [this] { - BindingModel *model = qobject_cast(parent()); - QTC_ASSERT(model, return); const PropertyName propertyName = m_property.currentText().toUtf8(); - int row = model->currentIndex(); - model->commitPropertyName(row, propertyName); + int row = m_model.currentIndex(); + m_model.commitPropertyName(row, propertyName); }; callLater(commit); diff --git a/src/plugins/qmldesigner/components/connectioneditor/bindingmodel.h b/src/plugins/qmldesigner/components/connectioneditor/bindingmodel.h index b57cc5c9587..69b137e78a5 100644 --- a/src/plugins/qmldesigner/components/connectioneditor/bindingmodel.h +++ b/src/plugins/qmldesigner/components/connectioneditor/bindingmodel.h @@ -30,7 +30,7 @@ signals: void targetNodeChanged(); public: - BindingModelBackendDelegate(); + BindingModelBackendDelegate(class BindingModel &model); void update(const BindingProperty &property, AbstractView *view); @@ -44,6 +44,7 @@ private: StudioQmlComboBoxBackend *sourceNode(); StudioQmlComboBoxBackend *sourceProperty(); + BindingModel &m_model; QString m_targetNode; StudioQmlComboBoxBackend m_property; StudioQmlComboBoxBackend m_sourceNode; diff --git a/src/plugins/qmldesigner/components/connectioneditor/dynamicpropertiesmodel.cpp b/src/plugins/qmldesigner/components/connectioneditor/dynamicpropertiesmodel.cpp index 9fdd3daec31..fa29c6c8a1b 100644 --- a/src/plugins/qmldesigner/components/connectioneditor/dynamicpropertiesmodel.cpp +++ b/src/plugins/qmldesigner/components/connectioneditor/dynamicpropertiesmodel.cpp @@ -25,7 +25,7 @@ namespace QmlDesigner { DynamicPropertiesModel::DynamicPropertiesModel(bool exSelection, AbstractView *view) : m_view(view) - , m_delegate(std::make_unique()) + , m_delegate(std::make_unique(*this)) , m_explicitSelection(exSelection) { setHorizontalHeaderLabels(DynamicPropertiesItem::headerLabels()); @@ -382,8 +382,8 @@ void DynamicPropertiesModel::setSelectedNode(const ModelNode &node) reset(); } -DynamicPropertiesModelBackendDelegate::DynamicPropertiesModelBackendDelegate() - : m_internalNodeId(std::nullopt) +DynamicPropertiesModelBackendDelegate::DynamicPropertiesModelBackendDelegate(DynamicPropertiesModel &model) + : m_model(model) { m_type.setModel({"int", "bool", "var", "real", "string", "url", "color"}); connect(&m_type, &StudioQmlComboBoxBackend::activated, this, [this] { handleTypeChanged(); }); @@ -411,32 +411,26 @@ void DynamicPropertiesModelBackendDelegate::update(const AbstractProperty &prope void DynamicPropertiesModelBackendDelegate::handleTypeChanged() { - DynamicPropertiesModel *model = qobject_cast(parent()); - QTC_ASSERT(model, return); - const PropertyName name = m_name.text().toUtf8(); - int current = model->currentIndex(); + int current = m_model.currentIndex(); const TypeName type = m_type.currentText().toUtf8(); - model->commitPropertyType(current, type); + m_model.commitPropertyType(current, type); // The order might have changed! - model->setCurrent(m_internalNodeId.value_or(-1), name); + m_model.setCurrent(m_internalNodeId.value_or(-1), name); } void DynamicPropertiesModelBackendDelegate::handleNameChanged() { - DynamicPropertiesModel *model = qobject_cast(parent()); - QTC_ASSERT(model, return); - const PropertyName name = m_name.text().toUtf8(); QTC_ASSERT(!name.isEmpty(), return); - int current = model->currentIndex(); - model->commitPropertyName(current, name); + int current = m_model.currentIndex(); + m_model.commitPropertyName(current, name); // The order might have changed! - model->setCurrent(m_internalNodeId.value_or(-1), name); + m_model.setCurrent(m_internalNodeId.value_or(-1), name); } // TODO: Maybe replace with utils typeConvertVariant? @@ -456,12 +450,9 @@ QVariant valueFromText(const QString &value, const QString &type) void DynamicPropertiesModelBackendDelegate::handleValueChanged() { - DynamicPropertiesModel *model = qobject_cast(parent()); - QTC_ASSERT(model, return); - - int current = model->currentIndex(); + int current = m_model.currentIndex(); QVariant value = valueFromText(m_value.text(), m_type.currentText()); - model->commitPropertyValue(current, value); + m_model.commitPropertyValue(current, value); } QString DynamicPropertiesModelBackendDelegate::targetNode() const diff --git a/src/plugins/qmldesigner/components/connectioneditor/dynamicpropertiesmodel.h b/src/plugins/qmldesigner/components/connectioneditor/dynamicpropertiesmodel.h index c2beed87304..071c72bef81 100644 --- a/src/plugins/qmldesigner/components/connectioneditor/dynamicpropertiesmodel.h +++ b/src/plugins/qmldesigner/components/connectioneditor/dynamicpropertiesmodel.h @@ -97,7 +97,7 @@ class DynamicPropertiesModelBackendDelegate : public QObject Q_PROPERTY(StudioQmlTextBackend *value READ value CONSTANT) public: - DynamicPropertiesModelBackendDelegate(); + DynamicPropertiesModelBackendDelegate(DynamicPropertiesModel &model); void update(const AbstractProperty &property); @@ -116,6 +116,7 @@ private: StudioQmlTextBackend *value(); QString targetNode() const; + DynamicPropertiesModel &m_model; std::optional m_internalNodeId; StudioQmlComboBoxBackend m_type; StudioQmlTextBackend m_name;