forked from qt-creator/qt-creator
QmlDesigner: Take property types into account
A boolean property should only take a boolean, number only a number and so on... Change-Id: Ibc327390262c93bf262570a0c749cd826d06a678 Reviewed-by: Henning Gründl <henning.gruendl@qt.io>
This commit is contained in:
@@ -1168,6 +1168,8 @@ void ConnectionModelStatementDelegate::handleRhsAssignmentChanged()
|
|||||||
assignmentStatement.rhs.nodeId = m_rhsAssignmentDelegate.id();
|
assignmentStatement.rhs.nodeId = m_rhsAssignmentDelegate.id();
|
||||||
assignmentStatement.rhs.propertyName = m_rhsAssignmentDelegate.name();
|
assignmentStatement.rhs.propertyName = m_rhsAssignmentDelegate.name();
|
||||||
|
|
||||||
|
setupPropertyType();
|
||||||
|
|
||||||
emit statementChanged();
|
emit statementChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1305,6 +1307,7 @@ void ConnectionModelStatementDelegate::setupAssignment()
|
|||||||
const auto assignment = std::get<ConnectionEditorStatements::Assignment>(m_statement);
|
const auto assignment = std::get<ConnectionEditorStatements::Assignment>(m_statement);
|
||||||
m_lhsDelegate.setup(assignment.lhs.nodeId, assignment.lhs.propertyName);
|
m_lhsDelegate.setup(assignment.lhs.nodeId, assignment.lhs.propertyName);
|
||||||
m_rhsAssignmentDelegate.setup(assignment.rhs.nodeId, assignment.rhs.propertyName);
|
m_rhsAssignmentDelegate.setup(assignment.rhs.nodeId, assignment.rhs.propertyName);
|
||||||
|
setupPropertyType();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConnectionModelStatementDelegate::setupSetProperty()
|
void ConnectionModelStatementDelegate::setupSetProperty()
|
||||||
@@ -1420,6 +1423,26 @@ void ConnectionModelStatementDelegate::setupPrintMessage()
|
|||||||
m_stringArgument.setText(ConnectionEditorStatements::toString(consoleLog.argument));
|
m_stringArgument.setText(ConnectionEditorStatements::toString(consoleLog.argument));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ConnectionModelStatementDelegate::setupPropertyType()
|
||||||
|
{
|
||||||
|
PropertyTreeModel::PropertyTypes type = PropertyTreeModel::AllTypes;
|
||||||
|
|
||||||
|
const NodeMetaInfo metaInfo = m_rhsAssignmentDelegate.propertyMetaInfo();
|
||||||
|
|
||||||
|
if (metaInfo.isBool())
|
||||||
|
type = PropertyTreeModel::BoolType;
|
||||||
|
else if (metaInfo.isNumber())
|
||||||
|
type = PropertyTreeModel::NumberType;
|
||||||
|
else if (metaInfo.isColor())
|
||||||
|
type = PropertyTreeModel::ColorType;
|
||||||
|
else if (metaInfo.isString())
|
||||||
|
type = PropertyTreeModel::StringType;
|
||||||
|
else if (metaInfo.isUrl())
|
||||||
|
type = PropertyTreeModel::UrlType;
|
||||||
|
|
||||||
|
m_lhsDelegate.setPropertyType(type);
|
||||||
|
}
|
||||||
|
|
||||||
QString ConnectionModelStatementDelegate::baseStateName() const
|
QString ConnectionModelStatementDelegate::baseStateName() const
|
||||||
{
|
{
|
||||||
return tr("Base State");
|
return tr("Base State");
|
||||||
|
@@ -216,6 +216,7 @@ private:
|
|||||||
void setupChangeState();
|
void setupChangeState();
|
||||||
void setupStates();
|
void setupStates();
|
||||||
void setupPrintMessage();
|
void setupPrintMessage();
|
||||||
|
void setupPropertyType();
|
||||||
QString baseStateName() const;
|
QString baseStateName() const;
|
||||||
|
|
||||||
ActionType m_actionType;
|
ActionType m_actionType;
|
||||||
|
@@ -833,6 +833,7 @@ PropertyTreeModelDelegate::PropertyTreeModelDelegate(ConnectionView *parent) : m
|
|||||||
void PropertyTreeModelDelegate::setPropertyType(PropertyTreeModel::PropertyTypes type)
|
void PropertyTreeModelDelegate::setPropertyType(PropertyTreeModel::PropertyTypes type)
|
||||||
{
|
{
|
||||||
m_model.setPropertyType(type);
|
m_model.setPropertyType(type);
|
||||||
|
setupNameComboBox(m_idCombboBox.currentText(), m_nameCombboBox.currentText(), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PropertyTreeModelDelegate::setup(const QString &id, const QString &name, bool *nameExists)
|
void PropertyTreeModelDelegate::setup(const QString &id, const QString &name, bool *nameExists)
|
||||||
@@ -846,7 +847,13 @@ void PropertyTreeModelDelegate::setup(const QString &id, const QString &name, bo
|
|||||||
|
|
||||||
m_idCombboBox.setModel(idLists);
|
m_idCombboBox.setModel(idLists);
|
||||||
m_idCombboBox.setCurrentText(id);
|
m_idCombboBox.setCurrentText(id);
|
||||||
|
setupNameComboBox(id, name, nameExists);
|
||||||
|
}
|
||||||
|
|
||||||
|
void PropertyTreeModelDelegate::setupNameComboBox(const QString &id,
|
||||||
|
const QString &name,
|
||||||
|
bool *nameExists)
|
||||||
|
{
|
||||||
const auto modelNode = m_model.getModelNodeForId(id);
|
const auto modelNode = m_model.getModelNodeForId(id);
|
||||||
//m_nameCombboBox
|
//m_nameCombboBox
|
||||||
std::vector<QString> nameVector = Utils::transform(m_model.getProperties(modelNode),
|
std::vector<QString> nameVector = Utils::transform(m_model.getProperties(modelNode),
|
||||||
@@ -889,6 +896,14 @@ void PropertyTreeModelDelegate::handleNameChanged()
|
|||||||
// commit data
|
// commit data
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NodeMetaInfo PropertyTreeModelDelegate::propertyMetaInfo() const
|
||||||
|
{
|
||||||
|
const auto modelNode = m_model.getModelNodeForId(m_idCombboBox.currentText());
|
||||||
|
if (modelNode.isValid())
|
||||||
|
return modelNode.metaInfo().property(m_nameCombboBox.currentText().toUtf8()).propertyType();
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
void PropertyTreeModelDelegate::handleIdChanged()
|
void PropertyTreeModelDelegate::handleIdChanged()
|
||||||
{
|
{
|
||||||
const auto id = m_idCombboBox.currentText();
|
const auto id = m_idCombboBox.currentText();
|
||||||
|
@@ -164,8 +164,10 @@ public:
|
|||||||
explicit PropertyTreeModelDelegate(ConnectionView *parent = nullptr);
|
explicit PropertyTreeModelDelegate(ConnectionView *parent = nullptr);
|
||||||
void setPropertyType(PropertyTreeModel::PropertyTypes type);
|
void setPropertyType(PropertyTreeModel::PropertyTypes type);
|
||||||
void setup(const QString &id, const QString &name, bool *nameExists = nullptr);
|
void setup(const QString &id, const QString &name, bool *nameExists = nullptr);
|
||||||
|
void setupNameComboBox(const QString &id, const QString &name, bool *nameExists);
|
||||||
QString id() const;
|
QString id() const;
|
||||||
QString name() const;
|
QString name() const;
|
||||||
|
NodeMetaInfo propertyMetaInfo() const;
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void commitData();
|
void commitData();
|
||||||
|
Reference in New Issue
Block a user