forked from qt-creator/qt-creator
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>
This commit is contained in:
@@ -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);
|
||||
|
@@ -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;
|
||||
|
@@ -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
|
||||
|
@@ -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;
|
||||
|
Reference in New Issue
Block a user