forked from qt-creator/qt-creator
QmlOutline: Add support UiArrayBinding, UiObjectBinding
This commit is contained in:
@@ -211,6 +211,31 @@ private:
|
|||||||
m_model->leaveObjectDefiniton();
|
m_model->leaveObjectDefiniton();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool visit(AST::UiObjectBinding *objBinding)
|
||||||
|
{
|
||||||
|
QModelIndex index = m_model->enterObjectBinding(objBinding);
|
||||||
|
m_nodeToIndex.insert(objBinding, index);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void endVisit(AST::UiObjectBinding * /*objBinding*/)
|
||||||
|
{
|
||||||
|
m_model->leaveObjectBinding();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool visit(AST::UiArrayBinding *arrayBinding)
|
||||||
|
{
|
||||||
|
QModelIndex index = m_model->enterArrayBinding(arrayBinding);
|
||||||
|
m_nodeToIndex.insert(arrayBinding, index);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void endVisit(AST::UiArrayBinding * /*arrayBinding*/)
|
||||||
|
{
|
||||||
|
m_model->leaveArrayBinding();
|
||||||
|
}
|
||||||
|
|
||||||
bool visit(AST::UiScriptBinding *scriptBinding)
|
bool visit(AST::UiScriptBinding *scriptBinding)
|
||||||
{
|
{
|
||||||
QModelIndex index = m_model->enterScriptBinding(scriptBinding);
|
QModelIndex index = m_model->enterScriptBinding(scriptBinding);
|
||||||
@@ -373,9 +398,9 @@ QModelIndex QmlOutlineModel::enterObjectDefinition(AST::UiObjectDefinition *objD
|
|||||||
|
|
||||||
if (typeName.at(0).isUpper()) {
|
if (typeName.at(0).isUpper()) {
|
||||||
prototype.setText(typeName);
|
prototype.setText(typeName);
|
||||||
prototype.setAnnotation(getAnnotation(objDef));
|
prototype.setAnnotation(getAnnotation(objDef->initializer));
|
||||||
if (!m_typeToIcon.contains(typeName)) {
|
if (!m_typeToIcon.contains(typeName)) {
|
||||||
m_typeToIcon.insert(typeName, getIcon(objDef));
|
m_typeToIcon.insert(typeName, getIcon(objDef->qualifiedTypeNameId));
|
||||||
}
|
}
|
||||||
prototype.setIcon(m_typeToIcon.value(typeName));
|
prototype.setIcon(m_typeToIcon.value(typeName));
|
||||||
prototype.setData(ElementType, ItemTypeRole);
|
prototype.setData(ElementType, ItemTypeRole);
|
||||||
@@ -397,6 +422,65 @@ void QmlOutlineModel::leaveObjectDefiniton()
|
|||||||
leaveNode();
|
leaveNode();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QModelIndex QmlOutlineModel::enterObjectBinding(AST::UiObjectBinding *objBinding)
|
||||||
|
{
|
||||||
|
QmlOutlineItem bindingPrototype(this);
|
||||||
|
|
||||||
|
bindingPrototype.setText(asString(objBinding->qualifiedId));
|
||||||
|
bindingPrototype.setIcon(m_icons->scriptBindingIcon());
|
||||||
|
bindingPrototype.setData(PropertyType, ItemTypeRole);
|
||||||
|
bindingPrototype.setNode(objBinding);
|
||||||
|
bindingPrototype.setSourceLocation(getLocation(objBinding));
|
||||||
|
bindingPrototype.setIdNode(objBinding->qualifiedId);
|
||||||
|
|
||||||
|
enterNode(bindingPrototype);
|
||||||
|
|
||||||
|
QmlOutlineItem objectPrototype(this);
|
||||||
|
|
||||||
|
const QString typeName = asString(objBinding->qualifiedTypeNameId);
|
||||||
|
objectPrototype.setText(typeName);
|
||||||
|
objectPrototype.setAnnotation(getAnnotation(objBinding->initializer));
|
||||||
|
if (!m_typeToIcon.contains(typeName)) {
|
||||||
|
m_typeToIcon.insert(typeName, getIcon(objBinding->qualifiedTypeNameId));
|
||||||
|
}
|
||||||
|
objectPrototype.setIcon(m_typeToIcon.value(typeName));
|
||||||
|
objectPrototype.setData(ElementType, ItemTypeRole);
|
||||||
|
objectPrototype.setIdNode(objBinding->qualifiedTypeNameId);
|
||||||
|
objectPrototype.setNode(objBinding);
|
||||||
|
objectPrototype.setSourceLocation(getLocation(objBinding));
|
||||||
|
|
||||||
|
enterNode(objectPrototype);
|
||||||
|
|
||||||
|
return bindingPrototype.index();
|
||||||
|
}
|
||||||
|
|
||||||
|
void QmlOutlineModel::leaveObjectBinding()
|
||||||
|
{
|
||||||
|
leaveNode();
|
||||||
|
leaveNode();
|
||||||
|
}
|
||||||
|
|
||||||
|
QModelIndex QmlOutlineModel::enterArrayBinding(AST::UiArrayBinding *arrayBinding)
|
||||||
|
{
|
||||||
|
QmlOutlineItem bindingPrototype(this);
|
||||||
|
|
||||||
|
bindingPrototype.setText(asString(arrayBinding->qualifiedId));
|
||||||
|
bindingPrototype.setIcon(m_icons->scriptBindingIcon());
|
||||||
|
bindingPrototype.setData(PropertyType, ItemTypeRole);
|
||||||
|
bindingPrototype.setNode(arrayBinding);
|
||||||
|
bindingPrototype.setSourceLocation(getLocation(arrayBinding));
|
||||||
|
bindingPrototype.setIdNode(arrayBinding->qualifiedId);
|
||||||
|
|
||||||
|
enterNode(bindingPrototype);
|
||||||
|
|
||||||
|
return bindingPrototype.index();
|
||||||
|
}
|
||||||
|
|
||||||
|
void QmlOutlineModel::leaveArrayBinding()
|
||||||
|
{
|
||||||
|
leaveNode();
|
||||||
|
}
|
||||||
|
|
||||||
QModelIndex QmlOutlineModel::enterScriptBinding(AST::UiScriptBinding *scriptBinding)
|
QModelIndex QmlOutlineModel::enterScriptBinding(AST::UiScriptBinding *scriptBinding)
|
||||||
{
|
{
|
||||||
QmlOutlineItem prototype(this);
|
QmlOutlineItem prototype(this);
|
||||||
@@ -666,8 +750,8 @@ AST::SourceLocation QmlOutlineModel::getLocation(AST::UiObjectMember *objMember)
|
|||||||
return location;
|
return location;
|
||||||
}
|
}
|
||||||
|
|
||||||
QIcon QmlOutlineModel::getIcon(AST::UiObjectDefinition *objDef) {
|
QIcon QmlOutlineModel::getIcon(AST::UiQualifiedId *qualifiedId) {
|
||||||
const QmlJS::Interpreter::Value *value = m_context->evaluate(objDef->qualifiedTypeNameId);
|
const QmlJS::Interpreter::Value *value = m_context->evaluate(qualifiedId);
|
||||||
|
|
||||||
if (const Interpreter::ObjectValue *objectValue = value->asObjectValue()) {
|
if (const Interpreter::ObjectValue *objectValue = value->asObjectValue()) {
|
||||||
do {
|
do {
|
||||||
@@ -689,8 +773,8 @@ QIcon QmlOutlineModel::getIcon(AST::UiObjectDefinition *objDef) {
|
|||||||
return QIcon();
|
return QIcon();
|
||||||
}
|
}
|
||||||
|
|
||||||
QString QmlOutlineModel::getAnnotation(AST::UiObjectDefinition *objDef) {
|
QString QmlOutlineModel::getAnnotation(AST::UiObjectInitializer *objectInitializer) {
|
||||||
const QHash<QString,QString> bindings = getScriptBindings(objDef);
|
const QHash<QString,QString> bindings = getScriptBindings(objectInitializer);
|
||||||
|
|
||||||
if (bindings.contains("id"))
|
if (bindings.contains("id"))
|
||||||
return bindings.value("id");
|
return bindings.value("id");
|
||||||
@@ -701,12 +785,13 @@ QString QmlOutlineModel::getAnnotation(AST::UiObjectDefinition *objDef) {
|
|||||||
if (bindings.contains("target"))
|
if (bindings.contains("target"))
|
||||||
return bindings.value("target");
|
return bindings.value("target");
|
||||||
|
|
||||||
|
|
||||||
return QString();
|
return QString();
|
||||||
}
|
}
|
||||||
|
|
||||||
QHash<QString,QString> QmlOutlineModel::getScriptBindings(AST::UiObjectDefinition *objDef) {
|
QHash<QString,QString> QmlOutlineModel::getScriptBindings(AST::UiObjectInitializer *objectInitializer) {
|
||||||
QHash <QString,QString> scriptBindings;
|
QHash <QString,QString> scriptBindings;
|
||||||
for (AST::UiObjectMemberList *it = objDef->initializer->members; it; it = it->next) {
|
for (AST::UiObjectMemberList *it = objectInitializer->members; it; it = it->next) {
|
||||||
if (AST::UiScriptBinding *binding = AST::cast<AST::UiScriptBinding*>(it->member)) {
|
if (AST::UiScriptBinding *binding = AST::cast<AST::UiScriptBinding*>(it->member)) {
|
||||||
const QString bindingName = asString(binding->qualifiedId);
|
const QString bindingName = asString(binding->qualifiedId);
|
||||||
AST::ExpressionStatement *expr = AST::cast<AST::ExpressionStatement*>(binding->statement);
|
AST::ExpressionStatement *expr = AST::cast<AST::ExpressionStatement*>(binding->statement);
|
||||||
|
|||||||
@@ -88,6 +88,12 @@ private:
|
|||||||
QModelIndex enterObjectDefinition(QmlJS::AST::UiObjectDefinition *objectDefinition);
|
QModelIndex enterObjectDefinition(QmlJS::AST::UiObjectDefinition *objectDefinition);
|
||||||
void leaveObjectDefiniton();
|
void leaveObjectDefiniton();
|
||||||
|
|
||||||
|
QModelIndex enterObjectBinding(QmlJS::AST::UiObjectBinding *objectBinding);
|
||||||
|
void leaveObjectBinding();
|
||||||
|
|
||||||
|
QModelIndex enterArrayBinding(QmlJS::AST::UiArrayBinding *arrayBinding);
|
||||||
|
void leaveArrayBinding();
|
||||||
|
|
||||||
QModelIndex enterScriptBinding(QmlJS::AST::UiScriptBinding *scriptBinding);
|
QModelIndex enterScriptBinding(QmlJS::AST::UiScriptBinding *scriptBinding);
|
||||||
void leaveScriptBinding();
|
void leaveScriptBinding();
|
||||||
|
|
||||||
@@ -107,10 +113,10 @@ private:
|
|||||||
|
|
||||||
static QString asString(QmlJS::AST::UiQualifiedId *id);
|
static QString asString(QmlJS::AST::UiQualifiedId *id);
|
||||||
static QmlJS::AST::SourceLocation getLocation(QmlJS::AST::UiObjectMember *objMember);
|
static QmlJS::AST::SourceLocation getLocation(QmlJS::AST::UiObjectMember *objMember);
|
||||||
QIcon getIcon(QmlJS::AST::UiObjectDefinition *objDef);
|
QIcon getIcon(QmlJS::AST::UiQualifiedId *objDef);
|
||||||
|
|
||||||
static QString getAnnotation(QmlJS::AST::UiObjectDefinition *objDef);
|
static QString getAnnotation(QmlJS::AST::UiObjectInitializer *objInitializer);
|
||||||
static QHash<QString,QString> getScriptBindings(QmlJS::AST::UiObjectDefinition *objDefinition);
|
static QHash<QString,QString> getScriptBindings(QmlJS::AST::UiObjectInitializer *objInitializer);
|
||||||
|
|
||||||
|
|
||||||
SemanticInfo m_semanticInfo;
|
SemanticInfo m_semanticInfo;
|
||||||
|
|||||||
Reference in New Issue
Block a user