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)
: 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<BindingModel *>(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<BindingModel *>(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<BindingModel *>(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);

View File

@@ -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;

View File

@@ -25,7 +25,7 @@ namespace QmlDesigner {
DynamicPropertiesModel::DynamicPropertiesModel(bool exSelection, AbstractView *view)
: m_view(view)
, m_delegate(std::make_unique<DynamicPropertiesModelBackendDelegate>())
, m_delegate(std::make_unique<DynamicPropertiesModelBackendDelegate>(*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<DynamicPropertiesModel *>(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<DynamicPropertiesModel *>(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<DynamicPropertiesModel *>(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

View File

@@ -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<int> m_internalNodeId;
StudioQmlComboBoxBackend m_type;
StudioQmlTextBackend m_name;