diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp index d02d52396d592825fde4f10cb8c84600704057ce..c799e09f6e23e5391591088da990de86636ab551 100644 --- a/src/plugins/debugger/debuggerplugin.cpp +++ b/src/plugins/debugger/debuggerplugin.cpp @@ -62,8 +62,6 @@ #include "watchwindow.h" #include "watchutils.h" #include "debuggertooltipmanager.h" -#include "qml/qmlengine.h" -#include "qml/qmlcppengine.h" #include "snapshothandler.h" #include "threadshandler.h" @@ -2097,14 +2095,7 @@ void DebuggerPluginPrivate::connectEngine(DebuggerEngine *engine) //m_threadBox->setModelColumn(ThreadData::ComboNameColumn); m_watchersWindow->setModel(engine->watchersModel()); - //Initialize QmlJSConsole - QmlEngine *qmlEngine = qobject_cast<QmlEngine *>(engine); - QmlCppEngine *qmlCppEngine = qobject_cast<QmlCppEngine *>(engine); - if (qmlCppEngine) - qmlEngine = qobject_cast<QmlEngine *>(qmlCppEngine->qmlEngine()); - if (qmlEngine) { - m_scriptConsoleWindow->setQmlAdapter(qmlEngine->adapter()); - } + m_scriptConsoleWindow->setEngine(engine); engine->watchHandler()->rebuildModel(); @@ -2376,19 +2367,6 @@ void DebuggerPluginPrivate::updateState(DebuggerEngine *engine) || state == InferiorUnrunnable; setBusyCursor(!notbusy); - //Console should be enabled only for QML - QmlEngine *qmlEngine = qobject_cast<QmlEngine *>(engine); - QmlCppEngine *qmlCppEngine = qobject_cast<QmlCppEngine *>(engine); - if (qmlCppEngine) - qmlEngine = qobject_cast<QmlEngine *>(qmlCppEngine->qmlEngine()); - - if (qmlEngine && (state == InferiorRunOk || state == InferiorStopOk)) { - m_scriptConsoleWindow->setEnabled(true); - m_scriptConsoleWindow->setInferiorStopped(state == InferiorStopOk); - } else { - m_scriptConsoleWindow->setEnabled(false); - } - } void DebuggerPluginPrivate::updateDebugActions() diff --git a/src/plugins/debugger/qml/qmljsscriptconsole.cpp b/src/plugins/debugger/qml/qmljsscriptconsole.cpp index 5fcb76f8729d6fd617361f9837dc35ca6caf7a16..af80bff1e4b9e863ae0e0199ea17d994c7c34a3e 100644 --- a/src/plugins/debugger/qml/qmljsscriptconsole.cpp +++ b/src/plugins/debugger/qml/qmljsscriptconsole.cpp @@ -47,6 +47,8 @@ #include <utils/qtcassert.h> #include <qmljsdebugclient/qdebugmessageclient.h> +#include <debugger/qml/qmlcppengine.h> +#include <debugger/qml/qmlengine.h> #include <QtGui/QMenu> #include <QtGui/QTextBlock> @@ -67,7 +69,8 @@ class QmlJSScriptConsolePrivate { public: QmlJSScriptConsolePrivate() - : prompt(_("> ")), + : adapter(0), + prompt(_("> ")), startOfEditableArea(-1), lastKnownPosition(0), inferiorStopped(false) @@ -79,7 +82,7 @@ public: void appendToHistory(const QString &script); bool canEvaluateScript(const QString &script); - QWeakPointer<QmlAdapter> adapter; + QmlAdapter *adapter; QString prompt; int startOfEditableArea; @@ -193,14 +196,27 @@ QmlJSScriptConsoleWidget::~QmlJSScriptConsoleWidget() settings->setValue(_(SHOW_ERROR), QVariant(m_showError->isChecked())); settings->endGroup(); } -void QmlJSScriptConsoleWidget::setQmlAdapter(QmlAdapter *adapter) -{ - m_console->setQmlAdapter(adapter); -} -void QmlJSScriptConsoleWidget::setInferiorStopped(bool inferiorStopped) +void QmlJSScriptConsoleWidget::setEngine(DebuggerEngine *engine) { - m_console->setInferiorStopped(inferiorStopped); + if (m_console->engine()) + disconnect(m_console->engine(), SIGNAL(stateChanged(Debugger::DebuggerState)), + this, SLOT(engineStateChanged(Debugger::DebuggerState))); + + QmlEngine *qmlEngine = qobject_cast<QmlEngine *>(engine); + QmlCppEngine *qmlCppEngine = qobject_cast<QmlCppEngine *>(engine); + if (qmlCppEngine) + qmlEngine = qobject_cast<QmlEngine *>(qmlCppEngine->qmlEngine()); + + //Supports only QML Engine + if (qmlEngine) { + connect(qmlEngine, SIGNAL(stateChanged(Debugger::DebuggerState)), + this, SLOT(engineStateChanged(Debugger::DebuggerState))); + + engineStateChanged(qmlEngine->state()); + } + + m_console->setEngine(qmlEngine); } void QmlJSScriptConsoleWidget::appendResult(const QString &result) @@ -224,6 +240,16 @@ void QmlJSScriptConsoleWidget::setDebugLevel() m_console->setDebugLevel(level); } +void QmlJSScriptConsoleWidget::engineStateChanged(Debugger::DebuggerState state) +{ + if (state == InferiorRunOk || state == InferiorStopOk) { + setEnabled(true); + m_console->setInferiorStopped(state == InferiorStopOk); + } else { + setEnabled(false); + } +} + /////////////////////////////////////////////////////////////////////// // // QmlJSScriptConsole @@ -266,17 +292,33 @@ void QmlJSScriptConsole::setInferiorStopped(bool inferiorStopped) onSelectionChanged(); } -void QmlJSScriptConsole::setQmlAdapter(QmlAdapter *adapter) +void QmlJSScriptConsole::setEngine(QmlEngine *engine) { - d->adapter = adapter; - if (adapter) { - connect(adapter, SIGNAL(selectionChanged()), this, SLOT(onSelectionChanged())); - connect(adapter->messageClient(), SIGNAL(message(QtMsgType,QString)), + if (d->adapter) { + disconnect(d->adapter, SIGNAL(selectionChanged()), this, SLOT(onSelectionChanged())); + disconnect(d->adapter->messageClient(), SIGNAL(message(QtMsgType,QString)), + this, SLOT(insertDebugOutput(QtMsgType,QString))); + d->adapter = 0; + } + + if (engine) { + d->adapter = engine->adapter(); + connect(d->adapter, SIGNAL(selectionChanged()), this, SLOT(onSelectionChanged())); + connect(d->adapter->messageClient(), SIGNAL(message(QtMsgType,QString)), this, SLOT(insertDebugOutput(QtMsgType,QString))); } + clear(); } +DebuggerEngine * QmlJSScriptConsole::engine() +{ + if (d->adapter) { + return d->adapter->debuggerEngine(); + } + return 0; +} + void QmlJSScriptConsole::appendResult(const QString &result) { QString currentScript = getCurrentScript(); @@ -336,11 +378,11 @@ void QmlJSScriptConsole::onStateChanged(QmlJsDebugClient::QDeclarativeDebugQuery void QmlJSScriptConsole::onSelectionChanged() { - if (!d->adapter.isNull()) { + if (d->adapter) { QString status; if (!d->inferiorStopped) { status.append(tr("Current Selected Object: ")); - status.append(d->adapter.data()->currentSelectedDisplayName()); + status.append(d->adapter->currentSelectedDisplayName()); } emit updateStatusMessage(status, 0); } @@ -571,9 +613,9 @@ void QmlJSScriptConsole::handleReturnKey() //Select the engine for evaluation based on //inferior state if (!d->inferiorStopped) { - if (!d->adapter.isNull()) { - QDeclarativeEngineDebug *engineDebug = d->adapter.data()->engineDebugClient(); - int id = d->adapter.data()->currentSelectedDebugId(); + if (d->adapter) { + QDeclarativeEngineDebug *engineDebug = d->adapter->engineDebugClient(); + int id = d->adapter->currentSelectedDebugId(); if (engineDebug && id != -1) { QDeclarativeDebugExpressionQuery *query = engineDebug->queryExpressionResult(id, currentScript, this); diff --git a/src/plugins/debugger/qml/qmljsscriptconsole.h b/src/plugins/debugger/qml/qmljsscriptconsole.h index b1ff75be2bfaa525e31d60f102d2b69c1ceffb04..20a3e809b7f5a13fd3dec514c1eb08a89f3b5d71 100644 --- a/src/plugins/debugger/qml/qmljsscriptconsole.h +++ b/src/plugins/debugger/qml/qmljsscriptconsole.h @@ -34,6 +34,7 @@ #define QMLJSSCRIPTCONSOLE_H #include <qmljsdebugclient/qdeclarativeenginedebug.h> +#include <debugger/debuggerconstants.h> #include <QtGui/QPlainTextEdit> QT_BEGIN_NAMESPACE @@ -46,12 +47,13 @@ class StatusLabel; namespace Debugger { -class QmlAdapter; +class DebuggerEngine; namespace Internal { class QmlJSScriptConsolePrivate; class QmlJSScriptConsole; +class QmlEngine; class QmlJSScriptConsoleWidget : public QWidget { @@ -60,16 +62,18 @@ public: QmlJSScriptConsoleWidget(QWidget *parent = 0); ~QmlJSScriptConsoleWidget(); - void setQmlAdapter(QmlAdapter *adapter); - void setInferiorStopped(bool inferiorStopped); + void setEngine(DebuggerEngine *engine); public slots: void appendResult(const QString &result); - void setDebugLevel(); signals: void evaluateExpression(const QString &expr); +private slots: + void setDebugLevel(); + void engineStateChanged(Debugger::DebuggerState state); + private: QmlJSScriptConsole *m_console; Utils::StatusLabel *m_statusLabel; @@ -105,7 +109,8 @@ public: void setInferiorStopped(bool inferiorStopped); - void setQmlAdapter(QmlAdapter *adapter); + void setEngine(QmlEngine *engine); + DebuggerEngine *engine(); void appendResult(const QString &result); @@ -114,7 +119,6 @@ public: public slots: void clear(); void onStateChanged(QmlJsDebugClient::QDeclarativeDebugQuery::State); - void onSelectionChanged(); void insertDebugOutput(QtMsgType type, const QString &debugMsg); protected: @@ -127,6 +131,7 @@ signals: void updateStatusMessage(const QString &message, int timeoutMS); private slots: + void onSelectionChanged(); void onCursorPositionChanged(); private: @@ -141,6 +146,7 @@ private: private: QmlJSScriptConsolePrivate *d; + friend class QmlJSScriptConsolePrivate; }; } //Internal