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>
(cherry picked from commit 72df0a9ced
)
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
committed by
Thomas Hartmann
parent
a965b6630f
commit
edc644ba82
@@ -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);
|
||||||
|
@@ -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;
|
||||||
|
@@ -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
|
||||||
|
@@ -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;
|
||||||
|
Reference in New Issue
Block a user