emit connectionError(socketError);
}
+void QmlAdapter::clientStatusChanged(QDeclarativeDebugClient::Status status)
+{
+ QString serviceName;
+ if (QDeclarativeDebugClient *client = qobject_cast<QDeclarativeDebugClient*>(sender())) {
+ serviceName = client->name();
+ }
+
+ logServiceStatusChange(serviceName, status);
+}
+
void QmlAdapter::connectionStateChanged()
{
switch (d->m_conn->state()) {
if (!d->m_mainClient) {
d->m_mainClient = new QDeclarativeEngineDebug(d->m_conn, this);
+ logServiceStatusChange(QLatin1String("QmlObserver"), static_cast<QDeclarativeDebugClient::Status>(d->m_mainClient->status()));
}
createDebuggerClient();
{
d->m_qmlClient = new Internal::QmlDebuggerClient(d->m_conn);
+ connect(d->m_qmlClient, SIGNAL(newStatus(QDeclarativeDebugClient::Status)),
+ this, SLOT(clientStatusChanged(QDeclarativeDebugClient::Status)));
connect(d->m_engine.data(), SIGNAL(sendMessage(QByteArray)),
d->m_qmlClient, SLOT(slotSendMessage(QByteArray)));
connect(d->m_qmlClient, SIGNAL(messageWasReceived(QByteArray)),
d->m_engine.data(), SLOT(messageReceived(QByteArray)));
+ logServiceStatusChange(d->m_qmlClient->name(), d->m_qmlClient->status());
+
//engine->startSuccessful(); // FIXME: AAA: port to new debugger states
}
d->m_connectionTimer->setInterval(interval);
}
+void QmlAdapter::logServiceStatusChange(const QString &service, QDeclarativeDebugClient::Status newStatus)
+{
+ switch (newStatus) {
+ case QDeclarativeDebugClient::Unavailable: {
+ showConnectionErrorMessage(tr("Error: Cannot connect to debug service '%1'. Debugging functionality will be limited.").arg(service));
+ emit serviceConnectionError(service);
+ break;
+ }
+ case QDeclarativeDebugClient::Enabled: {
+ showConnectionStatusMessage(tr("Connected to debug service '%1'.").arg(service));
+ break;
+ }
+
+ case QDeclarativeDebugClient::NotConnected: {
+ showConnectionStatusMessage(tr("Not connected to debug service '%1'.").arg(service));
+ break;
+ }
+ }
+}
+
} // namespace Debugger
#include "debugger_global.h"
#include <QtNetwork/QAbstractSocket>
+#include "qmldebuggerclient.h"
namespace QmlJsDebugClient {
class QDeclarativeEngineDebug;
void setMaxConnectionAttempts(int maxAttempts);
void setConnectionAttemptInterval(int interval);
+ void logServiceStatusChange(const QString &service, QDeclarativeDebugClient::Status newStatus);
+
signals:
void aboutToDisconnect();
void connected();
void disconnected();
void connectionStartupFailed();
void connectionError(QAbstractSocket::SocketError socketError);
+ void serviceConnectionError(const QString serviceName);
private slots:
void connectionErrorOccurred(QAbstractSocket::SocketError socketError);
+ void clientStatusChanged(QDeclarativeDebugClient::Status status);
void connectionStateChanged();
void pollInferior();
{
}
+void QmlDebuggerClient::statusChanged(Status status)
+{
+ emit newStatus(status);
+}
+
void QmlDebuggerClient::messageReceived(const QByteArray &data)
{
emit messageWasReceived(data);
virtual ~QmlDebuggerClient();
signals:
+ void newStatus(QDeclarativeDebugClient::Status status);
void messageWasReceived(const QByteArray &data);
private Q_SLOTS:
void slotSendMessage(const QByteArray &message);
protected:
+ virtual void statusChanged(Status status);
virtual void messageReceived(const QByteArray &data);
};
plugin()->showMessage(tr("QML Debugger: Remote host closed connection."), StatusBar);
}
+
+void QmlEngine::serviceConnectionError(const QString &serviceName)
+{
+ plugin()->showMessage(tr("QML Debugger: Couldn't connect to service '%1'.").arg(serviceName), StatusBar);
+}
+
void QmlEngine::runEngine()
{
QTC_ASSERT(state() == EngineRunRequested, qDebug() << state());
d->m_adapter->setConnectionAttemptInterval(ConnectionAttemptDefaultInterval);
connect(d->m_adapter, SIGNAL(connectionError(QAbstractSocket::SocketError)),
SLOT(connectionError(QAbstractSocket::SocketError)));
+ connect(d->m_adapter, SIGNAL(serviceConnectionError(QString)), SLOT(serviceConnectionError(QString)));
connect(d->m_adapter, SIGNAL(connected()), SLOT(connectionEstablished()));
connect(d->m_adapter, SIGNAL(connectionStartupFailed()), SLOT(connectionStartupFailed()));
void connectionEstablished();
void connectionStartupFailed();
void connectionError(QAbstractSocket::SocketError error);
+ void serviceConnectionError(const QString &service);
private:
void expandObject(const QByteArray &iname, quint64 objectId);
void ClientProxy::connectToServer()
{
m_designClient = new QmlJSObserverClient(m_adapter->connection(), this);
- emit connected();
+ if (m_designClient->status() == QDeclarativeDebugClient::Enabled)
+ emit connected();
+
+ m_adapter->logServiceStatusChange(m_designClient->name(), m_designClient->status());
+
+ connect(m_designClient, SIGNAL(connectedStatusChanged(QDeclarativeDebugClient::Status)),
+ this, SLOT(clientStatusChanged(QDeclarativeDebugClient::Status)));
connect(m_designClient, SIGNAL(currentObjectsChanged(QList<int>)),
SLOT(onCurrentObjectsChanged(QList<int>)));
connect(m_designClient, SIGNAL(colorPickerActivated()),
reloadEngines();
}
+void ClientProxy::clientStatusChanged(QDeclarativeDebugClient::Status status)
+{
+ QString serviceName;
+ if (QDeclarativeDebugClient *client = qobject_cast<QDeclarativeDebugClient*>(sender())) {
+ serviceName = client->name();
+ }
+
+ m_adapter->logServiceStatusChange(serviceName, status);
+
+ if (status == QDeclarativeDebugClient::Enabled)
+ emit connected();
+}
+
void ClientProxy::disconnectFromServer()
{
if (m_designClient) {
+ disconnect(m_designClient, SIGNAL(connectedStatusChanged(QDeclarativeDebugClient::Status)),
+ this, SLOT(clientStatusChanged(QDeclarativeDebugClient::Status)));
disconnect(m_designClient, SIGNAL(currentObjectsChanged(QList<int>)),
this, SLOT(onCurrentObjectsChanged(QList<int>)));
disconnect(m_designClient, SIGNAL(colorPickerActivated()),
void ClientProxy::setSelectedItemsByObjectId(const QList<QDeclarativeDebugObjectReference> &objectRefs)
{
- if (isConnected() && m_designClient)
+ if (isConnected())
m_designClient->setSelectedItemsByObjectId(objectRefs);
}
void ClientProxy::clearComponentCache()
{
- if (isDesignClientConnected())
+ if (isConnected())
m_designClient->clearComponentCache();
}
buildDebugIdHashRecursive(it);
emit objectTreeUpdated();
- if (isDesignClientConnected()) {
+ if (isConnected()) {
if (!m_designClient->selectedItemIds().isEmpty())
onCurrentObjectsChanged(m_designClient->selectedItemIds(), false);
void ClientProxy::reloadQmlViewer()
{
- if (isDesignClientConnected())
+ if (isConnected())
m_designClient->reloadViewer();
}
void ClientProxy::setDesignModeBehavior(bool inDesignMode)
{
- if (isDesignClientConnected())
+ if (isConnected())
m_designClient->setDesignModeBehavior(inDesignMode);
}
void ClientProxy::setAnimationSpeed(qreal slowdownFactor)
{
- if (isDesignClientConnected())
+ if (isConnected())
m_designClient->setAnimationSpeed(slowdownFactor);
}
void ClientProxy::changeToColorPickerTool()
{
- if (isDesignClientConnected())
+ if (isConnected())
m_designClient->changeToColorPickerTool();
}
void ClientProxy::changeToZoomTool()
{
- if (isDesignClientConnected())
+ if (isConnected())
m_designClient->changeToZoomTool();
}
void ClientProxy::changeToSelectTool()
{
- if (isDesignClientConnected())
+ if (isConnected())
m_designClient->changeToSelectTool();
}
void ClientProxy::changeToSelectMarqueeTool()
{
- if (isDesignClientConnected())
+ if (isConnected())
m_designClient->changeToSelectMarqueeTool();
}
void ClientProxy::createQmlObject(const QString &qmlText, int parentDebugId,
const QStringList &imports, const QString &filename)
{
- if (isDesignClientConnected())
+ if (isConnected())
m_designClient->createQmlObject(qmlText, parentDebugId, imports, filename);
}
void ClientProxy::destroyQmlObject(int debugId)
{
- if (isDesignClientConnected())
+ if (isConnected())
m_designClient->destroyQmlObject(debugId);
}
void ClientProxy::reparentQmlObject(int debugId, int newParent)
{
- if (isDesignClientConnected())
+ if (isConnected())
m_designClient->reparentQmlObject(debugId, newParent);
}
void ClientProxy::setContextPathIndex(int contextIndex)
{
- if (isDesignClientConnected())
+ if (isConnected())
m_designClient->setContextPathIndex(contextIndex);
}
-
-bool ClientProxy::isDesignClientConnected() const
-{
- return (m_designClient && m_adapter->isConnected());
-}
-
void ClientProxy::reloadEngines()
{
if (m_engineQuery) {
bool ClientProxy::isConnected() const
{
- return m_adapter->isConnected();
+ return m_designClient && m_designClient->status() == QDeclarativeDebugClient::Enabled
+ && m_client && m_client->status() == QDeclarativeEngineDebug::Enabled;
}
void ClientProxy::newObjects()
private slots:
void disconnectFromServer();
void connectToServer();
+ void clientStatusChanged(QDeclarativeDebugClient::Status status);
void contextChanged();
void newObjects();
private:
- bool isDesignClientConnected() const;
void reloadEngines();
QList<QDeclarativeDebugObjectReference> objectReferences(const QDeclarativeDebugObjectReference &objectRef) const;
{
}
+void QmlJSObserverClient::statusChanged(Status status)
+{
+ emit connectedStatusChanged(status);
+}
+
void QmlJSObserverClient::messageReceived(const QByteArray &message)
{
QDataStream ds(message);
void clearComponentCache();
signals:
+ void connectedStatusChanged(QDeclarativeDebugClient::Status status);
+
void currentObjectsChanged(const QList<int> &debugIds);
void selectedColorChanged(const QColor &color);
void colorPickerActivated();
void contextPathUpdated(const QStringList &path);
protected:
+ virtual void statusChanged(Status);
virtual void messageReceived(const QByteArray &);
private: