diff options
author | Kent Hansen <khansen@trolltech.com> | 2009-06-12 19:37:42 +0200 |
---|---|---|
committer | Kent Hansen <khansen@trolltech.com> | 2009-06-12 19:37:42 +0200 |
commit | 9a041e28ec478791240f2cbe8c19a9f3f8bc7a1a (patch) | |
tree | 9f9556753fb1c6f3080b9df8aecceeb2e4e039f3 /src | |
parent | cd02187bf2fa3edf8c29fe73c244ff853a51f6ec (diff) |
progress
Diffstat (limited to 'src')
-rw-r--r-- | src/qscriptdebuggerconnector.cpp | 5 | ||||
-rw-r--r-- | src/qscriptremotetargetdebugger.cpp | 85 | ||||
-rw-r--r-- | src/qscriptremotetargetdebugger.h | 16 |
3 files changed, 47 insertions, 59 deletions
diff --git a/src/qscriptdebuggerconnector.cpp b/src/qscriptdebuggerconnector.cpp index db603d2..b677d27 100644 --- a/src/qscriptdebuggerconnector.cpp +++ b/src/qscriptdebuggerconnector.cpp @@ -34,8 +34,6 @@ // #define DEBUGGERCONNECTOR_DEBUG -void qScriptDebugRegisterMetaTypes(); - class QScriptRemoteTargetDebuggerBackend : public QObject, public QScriptDebuggerBackend { @@ -95,7 +93,6 @@ private: QScriptRemoteTargetDebuggerBackend::QScriptRemoteTargetDebuggerBackend() : m_state(UnconnectedState), m_socket(0), m_blockSize(0), m_server(0) { - qScriptDebugRegisterMetaTypes(); } QScriptRemoteTargetDebuggerBackend::~QScriptRemoteTargetDebuggerBackend() @@ -148,7 +145,7 @@ void QScriptRemoteTargetDebuggerBackend::onSocketStateChanged(QAbstractSocket::S void QScriptRemoteTargetDebuggerBackend::onSocketError(QAbstractSocket::SocketError err) { - Q_ASSERT_X(false, Q_FUNC_INFO, "implement me"); + qDebug("%s", qPrintable(m_socket->errorString())); } void QScriptRemoteTargetDebuggerBackend::onNewConnection() diff --git a/src/qscriptremotetargetdebugger.cpp b/src/qscriptremotetargetdebugger.cpp index e22e810..9e5152e 100644 --- a/src/qscriptremotetargetdebugger.cpp +++ b/src/qscriptremotetargetdebugger.cpp @@ -41,50 +41,11 @@ // #define DEBUG_DEBUGGER -namespace { - -class WidgetClosedNotifier : public QObject -{ - Q_OBJECT -public: - WidgetClosedNotifier(QWidget *w, QObject *parent = 0) - : QObject(parent), widget(w) - { - w->installEventFilter(this); - } - - bool eventFilter(QObject *watched, QEvent *e) - { - if (watched != widget) - return false; - if (e->type() != QEvent::Close) - return false; - emit widgetClosed(); - return true; - } - -Q_SIGNALS: - void widgetClosed(); - -private: - QWidget *widget; -}; - -} // namespace - class QScriptRemoteTargetDebuggerFrontend : public QObject, public QScriptDebuggerFrontend { Q_OBJECT public: - enum Error { - NoError, - HostNotFoundError, - ConnectionRefusedError, - HandshakeError, - SocketError - }; - enum State { UnattachedState, ConnectingState, @@ -102,7 +63,7 @@ public: Q_SIGNALS: void attached(); void detached(); - void error(Error error); + void error(QScriptRemoteTargetDebugger::Error error); protected: void processCommand(int id, const QScriptDebuggerCommand &command); @@ -169,16 +130,20 @@ void QScriptRemoteTargetDebuggerFrontend::onSocketStateChanged(QAbstractSocket:: case QAbstractSocket::BoundState: break; case QAbstractSocket::ClosingState: - Q_ASSERT(0); + emit detached(); break; case QAbstractSocket::ListeningState: break; } } -void QScriptRemoteTargetDebuggerFrontend::onSocketError(QAbstractSocket::SocketError error) +void QScriptRemoteTargetDebuggerFrontend::onSocketError(QAbstractSocket::SocketError err) { - Q_ASSERT_X(false, Q_FUNC_INFO, qPrintable(m_socket->errorString())); + if (err != QAbstractSocket::RemoteHostClosedError) { + qDebug("%s", qPrintable(m_socket->errorString())); + emit error(QScriptRemoteTargetDebugger::SocketError); + } + } void QScriptRemoteTargetDebuggerFrontend::onReadyRead() @@ -199,14 +164,14 @@ void QScriptRemoteTargetDebuggerFrontend::onReadyRead() qDebug("handshake ok!"); #endif m_state = AttachedState; - QMetaObject::invokeMethod(this, "emitAttachedSignal", Qt::QueuedConnection); + emit attached(); if (m_socket->bytesAvailable() > 0) QMetaObject::invokeMethod(this, "onReadyRead", Qt::QueuedConnection); } else { // d->error = HandshakeError; // d->errorString = QString::fromLatin1("Incorrect handshake data received"); m_state = DetachingState; - emit error(HandshakeError); + emit error(QScriptRemoteTargetDebugger::HandshakeError); m_socket->close(); } } @@ -246,7 +211,11 @@ void QScriptRemoteTargetDebuggerFrontend::onReadyRead() #ifdef DEBUG_DEBUGGER qDebug("notifying event of type %d", event.type()); #endif - notifyEvent(event); + bool handled = notifyEvent(event); + if (handled) { + scheduleCommand(QScriptDebuggerCommand::resumeCommand(), + /*responseHandler=*/0); + } } else { // command response #ifdef DEBUG_DEBUGGER @@ -306,13 +275,29 @@ void QScriptRemoteTargetDebugger::attachTo(const QHostAddress &address, quint16 createDebugger(); if (!m_frontend) { m_frontend = new QScriptRemoteTargetDebuggerFrontend(); - QObject::connect(m_frontend, SIGNAL(attached()), this, SIGNAL(attached())); - QObject::connect(m_frontend, SIGNAL(detached()), this, SIGNAL(detached())); + QObject::connect(m_frontend, SIGNAL(attached()), + this, SIGNAL(attached()), Qt::QueuedConnection); + QObject::connect(m_frontend, SIGNAL(detached()), + this, SIGNAL(detached()), Qt::QueuedConnection); + QObject::connect(m_frontend, SIGNAL(error(QScriptRemoteTargetDebugger::Error)), + this, SIGNAL(error(QScriptRemoteTargetDebugger::Error))); } m_frontend->attachTo(address, port); m_debugger->setFrontend(m_frontend); } +void QScriptRemoteTargetDebugger::detach() +{ + if (m_frontend) + m_frontend->detach(); +} + +bool QScriptRemoteTargetDebugger::listen(const QHostAddress &address, quint16 port) +{ + Q_ASSERT_X(false, Q_FUNC_INFO, "implement me"); + return false; +} + void QScriptRemoteTargetDebugger::createDebugger() { if (!m_debugger) { @@ -422,10 +407,6 @@ QMainWindow *QScriptRemoteTargetDebugger::standardWindow() const if (state.isValid()) win->restoreState(state.toByteArray()); - WidgetClosedNotifier *closedNotifier = new WidgetClosedNotifier(win, that); - QObject::connect(closedNotifier, SIGNAL(widgetClosed()), - action(ContinueAction), SLOT(trigger())); - const_cast<QScriptRemoteTargetDebugger*>(this)->m_standardWindow = win; return win; } diff --git a/src/qscriptremotetargetdebugger.h b/src/qscriptremotetargetdebugger.h index df39702..32f430c 100644 --- a/src/qscriptremotetargetdebugger.h +++ b/src/qscriptremotetargetdebugger.h @@ -23,10 +23,10 @@ #define QSCRIPTREMOTETARGETDEBUGGER_H #include <QtCore/qobject.h> - +#include <QtNetwork/qabstractsocket.h> +#include <QtNetwork/qhostaddress.h> #include <private/qscriptdebuggerwidgetfactoryinterface_p.h> -class QHostAddress; class QScriptDebugger; class QScriptRemoteTargetDebuggerFrontend; class QAction; @@ -40,6 +40,14 @@ class QScriptRemoteTargetDebugger { Q_OBJECT public: + enum Error { + NoError, + HostNotFoundError, + ConnectionRefusedError, + HandshakeError, + SocketError + }; + enum DebuggerWidget { ConsoleWidget, StackWidget, @@ -76,6 +84,8 @@ public: void attachTo(const QHostAddress &address, quint16 port); void detach(); + bool listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0); + bool autoShowStandardWindow() const; void setAutoShowStandardWindow(bool autoShow); @@ -89,7 +99,7 @@ public: Q_SIGNALS: void attached(); void detached(); -// void error(Error error); + void error(QScriptRemoteTargetDebugger::Error error); void evaluationSuspended(); void evaluationResumed(); |