QmlDesigner: Fix wild casts

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 <henning.gruendl@qt.io>
(cherry picked from commit 72df0a9ced)
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
Marco Bubke
2024-05-28 11:53:35 +02:00
committed by Thomas Hartmann
parent a965b6630f
commit edc644ba82
4 changed files with 24 additions and 41 deletions

View File

@@ -22,6 +22,7 @@ namespace QmlDesigner {
BindingModel::BindingModel(ConnectionView *view) BindingModel::BindingModel(ConnectionView *view)
: m_connectionView(view) : m_connectionView(view)
, m_delegate(*this)
{ {
setHorizontalHeaderLabels(BindingModelItem::headerLabels()); setHorizontalHeaderLabels(BindingModelItem::headerLabels());
} }
@@ -246,11 +247,8 @@ void BindingModel::addModelNode(const ModelNode &node)
appendRow(new BindingModelItem(property)); appendRow(new BindingModelItem(property));
} }
BindingModelBackendDelegate::BindingModelBackendDelegate() BindingModelBackendDelegate::BindingModelBackendDelegate(BindingModel &model)
: m_targetNode() : m_model{model}
, m_property()
, m_sourceNode()
, m_sourceNodeProperty()
{ {
connect(&m_sourceNode, &StudioQmlComboBoxBackend::activated, this, [this] { connect(&m_sourceNode, &StudioQmlComboBoxBackend::activated, this, [this] {
sourceNodeChanged(); sourceNodeChanged();
@@ -322,17 +320,14 @@ StudioQmlComboBoxBackend *BindingModelBackendDelegate::sourceProperty()
void BindingModelBackendDelegate::sourceNodeChanged() void BindingModelBackendDelegate::sourceNodeChanged()
{ {
BindingModel *model = qobject_cast<BindingModel *>(parent()); ConnectionView *view = m_model.connectionView();
QTC_ASSERT(model, return);
ConnectionView *view = model->connectionView();
QTC_ASSERT(view, return); QTC_ASSERT(view, return);
QTC_ASSERT(view->isAttached(), return ); QTC_ASSERT(view->isAttached(), return );
const QString sourceNode = m_sourceNode.currentText(); const QString sourceNode = m_sourceNode.currentText();
const QString sourceProperty = m_sourceNodeProperty.currentText(); const QString sourceProperty = m_sourceNodeProperty.currentText();
BindingProperty targetProperty = model->currentProperty(); BindingProperty targetProperty = m_model.currentProperty();
QStringList properties = availableSourceProperties(sourceNode, targetProperty, view); QStringList properties = availableSourceProperties(sourceNode, targetProperty, view);
if (!properties.contains(sourceProperty)) { if (!properties.contains(sourceProperty)) {
@@ -351,9 +346,6 @@ void BindingModelBackendDelegate::sourcePropertyNameChanged() const
return; return;
auto commit = [this, sourceProperty]() { auto commit = [this, sourceProperty]() {
BindingModel *model = qobject_cast<BindingModel *>(parent());
QTC_ASSERT(model, return);
const QString sourceNode = m_sourceNode.currentText(); const QString sourceNode = m_sourceNode.currentText();
QString expression; QString expression;
if (sourceProperty.isEmpty()) if (sourceProperty.isEmpty())
@@ -361,8 +353,8 @@ void BindingModelBackendDelegate::sourcePropertyNameChanged() const
else else
expression = sourceNode + QLatin1String(".") + sourceProperty; expression = sourceNode + QLatin1String(".") + sourceProperty;
int row = model->currentIndex(); int row = m_model.currentIndex();
model->commitExpression(row, expression); m_model.commitExpression(row, expression);
}; };
callLater(commit); callLater(commit);
@@ -371,11 +363,9 @@ void BindingModelBackendDelegate::sourcePropertyNameChanged() const
void BindingModelBackendDelegate::targetPropertyNameChanged() const void BindingModelBackendDelegate::targetPropertyNameChanged() const
{ {
auto commit = [this] { auto commit = [this] {
BindingModel *model = qobject_cast<BindingModel *>(parent());
QTC_ASSERT(model, return);
const PropertyName propertyName = m_property.currentText().toUtf8(); const PropertyName propertyName = m_property.currentText().toUtf8();
int row = model->currentIndex(); int row = m_model.currentIndex();
model->commitPropertyName(row, propertyName); m_model.commitPropertyName(row, propertyName);
}; };
callLater(commit); callLater(commit);

View File

@@ -30,7 +30,7 @@ signals:
void targetNodeChanged(); void targetNodeChanged();
public: public:
BindingModelBackendDelegate(); BindingModelBackendDelegate(class BindingModel &model);
void update(const BindingProperty &property, AbstractView *view); void update(const BindingProperty &property, AbstractView *view);
@@ -44,6 +44,7 @@ private:
StudioQmlComboBoxBackend *sourceNode(); StudioQmlComboBoxBackend *sourceNode();
StudioQmlComboBoxBackend *sourceProperty(); StudioQmlComboBoxBackend *sourceProperty();
BindingModel &m_model;
QString m_targetNode; QString m_targetNode;
StudioQmlComboBoxBackend m_property; StudioQmlComboBoxBackend m_property;
StudioQmlComboBoxBackend m_sourceNode; StudioQmlComboBoxBackend m_sourceNode;

View File

@@ -25,7 +25,7 @@ namespace QmlDesigner {
DynamicPropertiesModel::DynamicPropertiesModel(bool exSelection, AbstractView *view) DynamicPropertiesModel::DynamicPropertiesModel(bool exSelection, AbstractView *view)
: m_view(view) : m_view(view)
, m_delegate(std::make_unique<DynamicPropertiesModelBackendDelegate>()) , m_delegate(std::make_unique<DynamicPropertiesModelBackendDelegate>(*this))
, m_explicitSelection(exSelection) , m_explicitSelection(exSelection)
{ {
setHorizontalHeaderLabels(DynamicPropertiesItem::headerLabels()); setHorizontalHeaderLabels(DynamicPropertiesItem::headerLabels());
@@ -382,8 +382,8 @@ void DynamicPropertiesModel::setSelectedNode(const ModelNode &node)
reset(); reset();
} }
DynamicPropertiesModelBackendDelegate::DynamicPropertiesModelBackendDelegate() DynamicPropertiesModelBackendDelegate::DynamicPropertiesModelBackendDelegate(DynamicPropertiesModel &model)
: m_internalNodeId(std::nullopt) : m_model(model)
{ {
m_type.setModel({"int", "bool", "var", "real", "string", "url", "color"}); m_type.setModel({"int", "bool", "var", "real", "string", "url", "color"});
connect(&m_type, &StudioQmlComboBoxBackend::activated, this, [this] { handleTypeChanged(); }); connect(&m_type, &StudioQmlComboBoxBackend::activated, this, [this] { handleTypeChanged(); });
@@ -411,32 +411,26 @@ void DynamicPropertiesModelBackendDelegate::update(const AbstractProperty &prope
void DynamicPropertiesModelBackendDelegate::handleTypeChanged() void DynamicPropertiesModelBackendDelegate::handleTypeChanged()
{ {
DynamicPropertiesModel *model = qobject_cast<DynamicPropertiesModel *>(parent());
QTC_ASSERT(model, return);
const PropertyName name = m_name.text().toUtf8(); const PropertyName name = m_name.text().toUtf8();
int current = model->currentIndex(); int current = m_model.currentIndex();
const TypeName type = m_type.currentText().toUtf8(); const TypeName type = m_type.currentText().toUtf8();
model->commitPropertyType(current, type); m_model.commitPropertyType(current, type);
// The order might have changed! // 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() void DynamicPropertiesModelBackendDelegate::handleNameChanged()
{ {
DynamicPropertiesModel *model = qobject_cast<DynamicPropertiesModel *>(parent());
QTC_ASSERT(model, return);
const PropertyName name = m_name.text().toUtf8(); const PropertyName name = m_name.text().toUtf8();
QTC_ASSERT(!name.isEmpty(), return); QTC_ASSERT(!name.isEmpty(), return);
int current = model->currentIndex(); int current = m_model.currentIndex();
model->commitPropertyName(current, name); m_model.commitPropertyName(current, name);
// The order might have changed! // 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? // TODO: Maybe replace with utils typeConvertVariant?
@@ -456,12 +450,9 @@ QVariant valueFromText(const QString &value, const QString &type)
void DynamicPropertiesModelBackendDelegate::handleValueChanged() void DynamicPropertiesModelBackendDelegate::handleValueChanged()
{ {
DynamicPropertiesModel *model = qobject_cast<DynamicPropertiesModel *>(parent()); int current = m_model.currentIndex();
QTC_ASSERT(model, return);
int current = model->currentIndex();
QVariant value = valueFromText(m_value.text(), m_type.currentText()); QVariant value = valueFromText(m_value.text(), m_type.currentText());
model->commitPropertyValue(current, value); m_model.commitPropertyValue(current, value);
} }
QString DynamicPropertiesModelBackendDelegate::targetNode() const QString DynamicPropertiesModelBackendDelegate::targetNode() const

View File

@@ -97,7 +97,7 @@ class DynamicPropertiesModelBackendDelegate : public QObject
Q_PROPERTY(StudioQmlTextBackend *value READ value CONSTANT) Q_PROPERTY(StudioQmlTextBackend *value READ value CONSTANT)
public: public:
DynamicPropertiesModelBackendDelegate(); DynamicPropertiesModelBackendDelegate(DynamicPropertiesModel &model);
void update(const AbstractProperty &property); void update(const AbstractProperty &property);
@@ -116,6 +116,7 @@ private:
StudioQmlTextBackend *value(); StudioQmlTextBackend *value();
QString targetNode() const; QString targetNode() const;
DynamicPropertiesModel &m_model;
std::optional<int> m_internalNodeId; std::optional<int> m_internalNodeId;
StudioQmlComboBoxBackend m_type; StudioQmlComboBoxBackend m_type;
StudioQmlTextBackend m_name; StudioQmlTextBackend m_name;