From bb64cc70057655de182e3d1698c744bcaeac7566 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann <Thomas.Hartmann@nokia.com> Date: Thu, 5 Aug 2010 10:43:44 +0200 Subject: [PATCH] QtQuickToolbar: adds isAvailable() to IContextPane isAvailable() returns true if a Quick ToolBar is available for that node --- src/libs/qmljs/qmljsicontextpane.h | 1 + src/plugins/qmldesigner/qmlcontextpane.cpp | 34 +++++++++++++++++++++- src/plugins/qmldesigner/qmlcontextpane.h | 1 + 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/src/libs/qmljs/qmljsicontextpane.h b/src/libs/qmljs/qmljsicontextpane.h index ab66b4bf198..3444fe3daaa 100644 --- a/src/libs/qmljs/qmljsicontextpane.h +++ b/src/libs/qmljs/qmljsicontextpane.h @@ -54,6 +54,7 @@ public: virtual ~IContextPane() {} virtual void apply(TextEditor::BaseTextEditorEditable *editor, Document::Ptr doc, const QmlJS::Snapshot &snapshot, AST::Node *node, bool update, bool force = false) = 0; virtual void setEnabled(bool) = 0; + virtual bool isAvailable(TextEditor::BaseTextEditorEditable *editor, Document::Ptr doc, const QmlJS::Snapshot &snapshot, AST::Node *node) = 0; virtual QWidget* widget() = 0; }; diff --git a/src/plugins/qmldesigner/qmlcontextpane.cpp b/src/plugins/qmldesigner/qmlcontextpane.cpp index 8b69e1eea0e..0d3b5a7c380 100644 --- a/src/plugins/qmldesigner/qmlcontextpane.cpp +++ b/src/plugins/qmldesigner/qmlcontextpane.cpp @@ -68,8 +68,10 @@ QmlContextPane::~QmlContextPane() void QmlContextPane::apply(TextEditor::BaseTextEditorEditable *editor, Document::Ptr doc, const QmlJS::Snapshot &snapshot, AST::Node *node, bool update, bool force) { - if (!Internal::BauhausPlugin::pluginInstance()->settings().enableContextPane && !force) + if (!Internal::BauhausPlugin::pluginInstance()->settings().enableContextPane && !force && !update) { + contextWidget()->hide(); return; + } if (doc.isNull()) return; @@ -169,6 +171,36 @@ void QmlContextPane::apply(TextEditor::BaseTextEditorEditable *editor, Document: } +bool QmlContextPane::isAvailable(TextEditor::BaseTextEditorEditable *, Document::Ptr doc, const QmlJS::Snapshot &snapshot, AST::Node *node) +{ + if (doc.isNull()) + return false; + + if (!node) + return false; + + LookupContext::Ptr lookupContext = LookupContext::create(doc, snapshot, QList<Node*>()); + const Interpreter::ObjectValue *scopeObject = doc->bind()->findQmlObject(node); + + QStringList prototypes; + + while (scopeObject) { + prototypes.append(scopeObject->className()); + scopeObject = scopeObject->prototype(lookupContext->context()); + } + + if (prototypes.contains("Rectangle") || + prototypes.contains("Image") || + prototypes.contains("BorderImage") || + prototypes.contains("TextEdit") || + prototypes.contains("TextInput") || + prototypes.contains("PropertyAnimation") || + prototypes.contains("Text")) + return true; + + return false; +} + void QmlContextPane::setProperty(const QString &propertyName, const QVariant &value) { diff --git a/src/plugins/qmldesigner/qmlcontextpane.h b/src/plugins/qmldesigner/qmlcontextpane.h index 04006a38aa6..eac2aa85ec2 100644 --- a/src/plugins/qmldesigner/qmlcontextpane.h +++ b/src/plugins/qmldesigner/qmlcontextpane.h @@ -29,6 +29,7 @@ public: QmlContextPane(QObject *parent = 0); ~QmlContextPane(); void apply(TextEditor::BaseTextEditorEditable *editor, QmlJS::Document::Ptr doc, const QmlJS::Snapshot &snapshot, QmlJS::AST::Node *node, bool update, bool force = 0); + bool isAvailable(TextEditor::BaseTextEditorEditable *editor, QmlJS::Document::Ptr doc, const QmlJS::Snapshot &snapshot, QmlJS::AST::Node *node); void setProperty(const QString &propertyName, const QVariant &value); void removeProperty(const QString &propertyName); void setEnabled(bool); -- GitLab