From 13e8ff6f03f57b2b0debfe41dc9371e11d736d6d Mon Sep 17 00:00:00 2001 From: Aurindam Jana Date: Thu, 29 Mar 2012 13:56:53 +0200 Subject: [PATCH] QmlJSInspector: Enable/Disable based on engine state Change-Id: I078d12fb16fe61908e5b90ebf819c9fd9e8faae0 Reviewed-by: Kai Koehne --- src/plugins/debugger/qml/qmlcppengine.cpp | 1 + src/plugins/debugger/qml/qmlengine.h | 2 +- src/plugins/qmljsinspector/qmljsinspector.cpp | 40 +++++++++++-------- src/plugins/qmljsinspector/qmljsinspector.h | 5 ++- .../qmljsinspector/qmljspropertyinspector.cpp | 34 ++++++++++++++++ .../qmljsinspector/qmljspropertyinspector.h | 19 ++++++++- 6 files changed, 80 insertions(+), 21 deletions(-) diff --git a/src/plugins/debugger/qml/qmlcppengine.cpp b/src/plugins/debugger/qml/qmlcppengine.cpp index 58f570c9f98..8d69249b688 100644 --- a/src/plugins/debugger/qml/qmlcppengine.cpp +++ b/src/plugins/debugger/qml/qmlcppengine.cpp @@ -130,6 +130,7 @@ QmlCppEngine::~QmlCppEngine() bool QmlCppEngine::setToolTipExpression(const QPoint & mousePos, TextEditor::ITextEditor *editor, const DebuggerToolTipContext &ctx) { + //FIXIT:: This is broken!! return d->m_activeEngine->setToolTipExpression(mousePos, editor, ctx); } diff --git a/src/plugins/debugger/qml/qmlengine.h b/src/plugins/debugger/qml/qmlengine.h index 9a69094c9bd..5a4876b39cb 100644 --- a/src/plugins/debugger/qml/qmlengine.h +++ b/src/plugins/debugger/qml/qmlengine.h @@ -57,7 +57,7 @@ namespace Internal { class QtMessageLogItem; class QmlEnginePrivate; -class QmlEngine : public DebuggerEngine +class DEBUGGER_EXPORT QmlEngine : public DebuggerEngine { Q_OBJECT diff --git a/src/plugins/qmljsinspector/qmljsinspector.cpp b/src/plugins/qmljsinspector/qmljsinspector.cpp index 598980bac51..9e18a43919c 100644 --- a/src/plugins/qmljsinspector/qmljsinspector.cpp +++ b/src/plugins/qmljsinspector/qmljsinspector.cpp @@ -45,10 +45,9 @@ #include #include #include -#include #include #include -#include +#include #include #include @@ -137,7 +136,6 @@ InspectorUi::InspectorUi(QObject *parent) , m_propertyInspector(0) , m_settings(new InspectorSettings(this)) , m_clientProxy(0) - , m_qmlEngine(0) , m_debugQuery(0) , m_selectionCallbackExpected(false) , m_cursorPositionChangedExternally(false) @@ -169,23 +167,31 @@ void InspectorUi::restoreSettings() m_settings->restoreSettings(Core::ICore::settings()); } -void InspectorUi::setDebuggerEngine(QObject *qmlEngine) +void InspectorUi::setDebuggerEngine(QObject *engine) { - if (m_qmlEngine && !qmlEngine) { - disconnect(m_qmlEngine, SIGNAL(tooltipRequested(QPoint,TextEditor::ITextEditor*,int)), - this, SLOT(showDebuggerTooltip(QPoint,TextEditor::ITextEditor*,int))); - } + Debugger::Internal::QmlEngine *qmlEngine = + qobject_cast(engine); + QTC_ASSERT(qmlEngine, return); + Debugger::DebuggerEngine *masterEngine = qmlEngine; + if (qmlEngine->isSlaveEngine()) + masterEngine = qmlEngine->masterEngine(); - m_qmlEngine = qmlEngine; - if (m_qmlEngine) { - connect(m_qmlEngine, SIGNAL(tooltipRequested(QPoint,TextEditor::ITextEditor*,int)), - this, SLOT(showDebuggerTooltip(QPoint,TextEditor::ITextEditor*,int))); - } + connect(qmlEngine, SIGNAL(tooltipRequested(QPoint,TextEditor::ITextEditor*,int)), + this, SLOT(showDebuggerTooltip(QPoint,TextEditor::ITextEditor*,int))); + connect(masterEngine, SIGNAL(stateChanged(Debugger::DebuggerState)), + this, SLOT(onEngineStateChanged(Debugger::DebuggerState))); } -QObject *InspectorUi::debuggerEngine() const +void InspectorUi::onEngineStateChanged(Debugger::DebuggerState state) { - return m_qmlEngine; + bool enable = state == Debugger::InferiorRunOk; + if (enable) + m_toolBar->enable(); + else + m_toolBar->disable(); + m_crumblePath->setEnabled(enable); + m_propertyInspector->setContentsValid(enable); + m_propertyInspector->reset(); } void InspectorUi::showDebuggerTooltip(const QPoint &mousePos, TextEditor::ITextEditor *editor, @@ -342,7 +348,6 @@ void InspectorUi::disconnected() disconnectSignals(); disable(); - m_qmlEngine = 0; resetViews(); applyChangesToQmlInspectorHelper(false); @@ -355,7 +360,6 @@ void InspectorUi::disconnected() m_clientProxy = 0; m_propertyInspector->clear(); m_pendingPreviewDocumentNames.clear(); - setDebuggerEngine(0); } void InspectorUi::onRootContext(const QVariant &value) @@ -399,6 +403,8 @@ void InspectorUi::updateEngineList() void InspectorUi::changeSelectedItems(const QList &objects) { + if (!m_propertyInspector->contentsValid()) + return; if (m_selectionCallbackExpected) { m_selectionCallbackExpected = false; return; diff --git a/src/plugins/qmljsinspector/qmljsinspector.h b/src/plugins/qmljsinspector/qmljsinspector.h index b2555424a17..37796b75221 100644 --- a/src/plugins/qmljsinspector/qmljsinspector.h +++ b/src/plugins/qmljsinspector/qmljsinspector.h @@ -41,6 +41,8 @@ #include #include +#include + #include #include @@ -100,7 +102,6 @@ public: void connected(ClientProxy *clientProxy); void disconnected(); void setDebuggerEngine(QObject *qmlEngine); - QObject *debuggerEngine() const; signals: void statusMessage(const QString &text); @@ -133,6 +134,7 @@ private slots: void updatePendingPreviewDocuments(QmlJS::Document::Ptr doc); void showDebuggerTooltip(const QPoint &mousePos, TextEditor::ITextEditor *editor, int cursorPos); + void onEngineStateChanged(Debugger::DebuggerState state); private: void showRoot(); @@ -161,7 +163,6 @@ private: InspectorSettings *m_settings; ClientProxy *m_clientProxy; - QObject *m_qmlEngine; quint32 m_debugQuery; quint32 m_showObjectQueryId; QList m_updateObjectQueryIds; diff --git a/src/plugins/qmljsinspector/qmljspropertyinspector.cpp b/src/plugins/qmljsinspector/qmljspropertyinspector.cpp index cbcc2a74edd..c48e5ccdaaa 100644 --- a/src/plugins/qmljsinspector/qmljspropertyinspector.cpp +++ b/src/plugins/qmljsinspector/qmljspropertyinspector.cpp @@ -255,6 +255,30 @@ inline QString cleanPropertyValue(QString propertyValue) return propertyValue; } +// ************************************************************************* +// QmlJSPropertyInspectorModel +// ************************************************************************* +QmlJSPropertyInspectorModel::QmlJSPropertyInspectorModel() + : QStandardItemModel() + , m_contentsValid(false) +{ +} + +Qt::ItemFlags QmlJSPropertyInspectorModel::flags(const QModelIndex &index) const +{ + return m_contentsValid ? QStandardItemModel::flags(index) : Qt::ItemFlags(); +} + +void QmlJSPropertyInspectorModel::setContentsValid(bool contentsValid) +{ + m_contentsValid = contentsValid; +} + +bool QmlJSPropertyInspectorModel::contentsValid() const +{ + return m_contentsValid; +} + QmlJSPropertyInspector::QmlJSPropertyInspector(QWidget *parent) : QTreeView(parent) { @@ -285,6 +309,16 @@ void QmlJSPropertyInspector::clear() m_currentObjects.clear(); } +void QmlJSPropertyInspector::setContentsValid(bool contentsValid) +{ + m_model.setContentsValid(contentsValid); +} + +bool QmlJSPropertyInspector::contentsValid() const +{ + return m_model.contentsValid(); +} + void QmlJSPropertyInspector::setCurrentObjects(const QList &objectList) { if (objectList.isEmpty()) diff --git a/src/plugins/qmljsinspector/qmljspropertyinspector.h b/src/plugins/qmljsinspector/qmljspropertyinspector.h index 61a5f36e558..9de8fdc483f 100644 --- a/src/plugins/qmljsinspector/qmljspropertyinspector.h +++ b/src/plugins/qmljsinspector/qmljspropertyinspector.h @@ -92,6 +92,21 @@ private: QmlEditorWidgets::CustomColorDialog *m_mainFrame; }; +class QmlJSPropertyInspectorModel : public QStandardItemModel +{ + Q_OBJECT +public: + QmlJSPropertyInspectorModel(); + void setContentsValid(bool contentsValid); + bool contentsValid() const; + +protected: + Qt::ItemFlags flags(const QModelIndex &index) const; + +private: + bool m_contentsValid; +}; + class QmlJSPropertyInspector : public QTreeView { Q_OBJECT @@ -107,6 +122,8 @@ public: explicit QmlJSPropertyInspector(QWidget *parent = 0); void clear(); + void setContentsValid(bool contentsValid); + bool contentsValid() const; signals: void changePropertyValue(int debugId, QString propertyName, QString valueExpression); @@ -135,7 +152,7 @@ private: void contextMenuEvent(QContextMenuEvent *ev); - QStandardItemModel m_model; + QmlJSPropertyInspectorModel m_model; QList m_currentObjects; };