void HoverHandler::handleOrdinaryMatch(const ScopeChain &scopeChain, AST::Node *node) { if (node && !(AST::cast<AST::StringLiteral *>(node) != 0 || AST::cast<AST::NumericLiteral *>(node) != 0)) { const Value *value = scopeChain.evaluate(node); prettyPrintTooltip(value, scopeChain.context()); } }
bool HoverHandler::matchColorItem(const ScopeChain &scopeChain, const Document::Ptr &qmlDocument, const QList<AST::Node *> &astPath, unsigned pos) { AST::UiObjectInitializer *initializer = nodeInitializer(astPath.last()); if (!initializer) return false; AST::UiObjectMember *member = 0; for (AST::UiObjectMemberList *list = initializer->members; list; list = list->next) { if (posIsInSource(pos, list->member)) { member = list->member; break; } } if (!member) return false; QString color; const Value *value = 0; if (const AST::UiScriptBinding *binding = AST::cast<const AST::UiScriptBinding *>(member)) { if (binding->qualifiedId && posIsInSource(pos, binding->statement)) { value = scopeChain.evaluate(binding->qualifiedId); if (value && value->asColorValue()) { color = textAt(qmlDocument, binding->statement->firstSourceLocation(), binding->statement->lastSourceLocation()); } } } else if (const AST::UiPublicMember *publicMember = AST::cast<const AST::UiPublicMember *>(member)) { if (!publicMember->name.isEmpty() && posIsInSource(pos, publicMember->statement)) { value = scopeChain.lookup(publicMember->name.toString()); if (const Reference *ref = value->asReference()) value = scopeChain.context()->lookupReference(ref); if (value && value->asColorValue()) { color = textAt(qmlDocument, publicMember->statement->firstSourceLocation(), publicMember->statement->lastSourceLocation()); } } } if (!color.isEmpty()) { color.remove(QLatin1Char('\'')); color.remove(QLatin1Char('\"')); color.remove(QLatin1Char(';')); m_colorTip = QmlJS::toQColor(color); if (m_colorTip.isValid()) { setToolTip(color); return true; } } return false; }