summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorWarwick Allison <warwick.allison@nokia.com>2009-05-26 01:46:00 (GMT)
committerWarwick Allison <warwick.allison@nokia.com>2009-05-26 01:46:00 (GMT)
commit478a339bc668611f6e31803e26c502a2aabe7bfe (patch)
treec42e15048338377bf56db2ca5b26b8c20463767f /tools
parenta106ba14b7ed630f5d7941462ba9271dd83acea3 (diff)
parent7fc5d5e693a6a7f4c2bd040b8d6f29fd33a01712 (diff)
downloadQt-478a339bc668611f6e31803e26c502a2aabe7bfe.zip
Qt-478a339bc668611f6e31803e26c502a2aabe7bfe.tar.gz
Qt-478a339bc668611f6e31803e26c502a2aabe7bfe.tar.bz2
Merge branch 'kinetic-declarativeui' of git@scm.dev.nokia.troll.no:qt/kinetic into kinetic-declarativeui
Diffstat (limited to 'tools')
-rw-r--r--tools/qmldebugger/canvasframerate.cpp304
-rw-r--r--tools/qmldebugger/canvasframerate.h24
-rw-r--r--tools/qmldebugger/canvasscene.cpp245
-rw-r--r--tools/qmldebugger/canvasscene.h39
-rw-r--r--tools/qmldebugger/main.cpp137
-rw-r--r--tools/qmldebugger/qmldebugger.pro10
6 files changed, 759 insertions, 0 deletions
diff --git a/tools/qmldebugger/canvasframerate.cpp b/tools/qmldebugger/canvasframerate.cpp
new file mode 100644
index 0000000..022aed5
--- /dev/null
+++ b/tools/qmldebugger/canvasframerate.cpp
@@ -0,0 +1,304 @@
+#include "canvasframerate.h"
+#include <QtGui/qwidget.h>
+#include <QtGui/qpainter.h>
+#include <QtGui/qscrollbar.h>
+#include <QtDeclarative/qmldebugclient.h>
+#include <QtCore/qdebug.h>
+#include <QtCore/qstringlist.h>
+#include <QtCore/qdatastream.h>
+#include <QtGui/qboxlayout.h>
+#include <QResizeEvent>
+#include <QShowEvent>
+#include <QTabWidget>
+#include <QPushButton>
+#include <QLineEdit>
+#include <QCheckBox>
+
+class QLineGraph : public QWidget
+{
+Q_OBJECT
+public:
+ QLineGraph(QWidget * = 0);
+
+ void setPosition(int);
+
+public slots:
+ void addSample(int, int, int, int, bool);
+
+protected:
+ virtual void paintEvent(QPaintEvent *);
+ virtual QSize sizeHint() const;
+
+private slots:
+ void scrollbarChanged(int);
+
+private:
+ void updateScrollbar();
+ void drawSample(QPainter *, int, const QRect &);
+ void drawTime(QPainter *, const QRect &);
+ struct Sample {
+ int sample[4];
+ bool isBreak;
+ };
+ QList<Sample> _samples;
+
+ QScrollBar sb;
+ int position;
+ int samplesPerWidth;
+ int resolutionForHeight;
+ bool ignoreScroll;
+};
+
+QLineGraph::QLineGraph(QWidget *parent)
+: QWidget(parent), sb(Qt::Horizontal, this), position(-1), samplesPerWidth(99), resolutionForHeight(50), ignoreScroll(false)
+{
+ sb.setMaximum(0);
+ sb.setMinimum(0);
+ sb.setSingleStep(1);
+
+ QVBoxLayout *layout = new QVBoxLayout;
+ setLayout(layout);
+ layout->addStretch(2);
+ layout->addWidget(&sb);
+ QObject::connect(&sb, SIGNAL(valueChanged(int)), this, SLOT(scrollbarChanged(int)));
+}
+
+QSize QLineGraph::sizeHint() const
+{
+ return QSize(800, 600);
+}
+
+void QLineGraph::scrollbarChanged(int v)
+{
+ if(ignoreScroll)
+ return;
+
+ if (v == sb.maximum())
+ position = -1;
+ else
+ position = v;
+ update();
+}
+
+void QLineGraph::updateScrollbar()
+{
+ ignoreScroll = true;
+ sb.setMaximum(qMax(0, _samples.count() - samplesPerWidth - 1));
+
+ if(position == -1) {
+ sb.setValue(sb.maximum());
+ } else {
+ sb.setValue(position);
+ }
+ ignoreScroll = false;
+}
+
+void QLineGraph::addSample(int a, int b, int c, int d, bool isBreak)
+{
+ Sample s;
+ s.isBreak = isBreak;
+ s.sample[0] = a;
+ s.sample[1] = b;
+ s.sample[2] = c;
+ s.sample[3] = d;
+ _samples << s;
+ updateScrollbar();
+ update();
+}
+
+void QLineGraph::setPosition(int p)
+{
+ scrollbarChanged(p);
+}
+
+void QLineGraph::drawTime(QPainter *p, const QRect &rect)
+{
+ if(_samples.isEmpty())
+ return;
+
+ int first = position;
+ if(first == -1)
+ first = qMax(0, _samples.count() - samplesPerWidth - 1);
+ int last = qMin(_samples.count() - 1, first + samplesPerWidth);
+
+ qreal scaleX = qreal(rect.width()) / qreal(samplesPerWidth);
+
+ int t = 0;
+
+ for(int ii = first; ii <= last; ++ii) {
+ int sampleTime = _samples.at(ii).sample[3] / 1000;
+ if(sampleTime != t) {
+
+ int xEnd = rect.left() + scaleX * (ii - first);
+ p->drawLine(xEnd, rect.bottom(), xEnd, rect.bottom() + 7);
+
+ QRect text(xEnd - 30, rect.bottom() + 10, 60, 30);
+
+ p->drawText(text, Qt::AlignHCenter | Qt::AlignTop, QString::number(_samples.at(ii).sample[3]));
+
+ t = sampleTime;
+ }
+ }
+
+}
+
+void QLineGraph::drawSample(QPainter *p, int s, const QRect &rect)
+{
+ if(_samples.isEmpty())
+ return;
+
+ int first = position;
+ if(first == -1)
+ first = qMax(0, _samples.count() - samplesPerWidth - 1);
+ int last = qMin(_samples.count() - 1, first + samplesPerWidth);
+
+ qreal scaleY = rect.height() / resolutionForHeight;
+ qreal scaleX = qreal(rect.width()) / qreal(samplesPerWidth);
+
+ int xEnd;
+ int lastXEnd = rect.left();
+
+ p->save();
+ p->setPen(Qt::NoPen);
+ for(int ii = first + 1; ii <= last; ++ii) {
+
+ xEnd = rect.left() + scaleX * (ii - first);
+ int yEnd = rect.bottom() - _samples.at(ii).sample[s] * scaleY;
+
+ if (!(s == 0 && _samples.at(ii).isBreak))
+ p->drawRect(QRect(lastXEnd, yEnd, scaleX, _samples.at(ii).sample[s] * scaleY));
+
+ lastXEnd = xEnd;
+ }
+ p->restore();
+}
+
+void QLineGraph::paintEvent(QPaintEvent *)
+{
+ QPainter p(this);
+ p.setRenderHint(QPainter::Antialiasing);
+
+
+ QRect r(50, 10, width() - 60, height() - 60);
+ p.setBrush(QColor("lightsteelblue"));
+ drawSample(&p, 0, r);
+
+ p.setBrush(QColor("pink"));
+ drawSample(&p, 1, r);
+
+ p.setBrush(QColor("green"));
+ drawSample(&p, 2, r);
+
+ p.setBrush(Qt::NoBrush);
+ p.drawRect(r);
+
+ for(int ii = 0; ii <= resolutionForHeight; ++ii) {
+ int y = 1 + r.bottom() - ii * r.height() / resolutionForHeight;
+
+ if((ii % 10) == 0) {
+ p.drawLine(r.left() - 20, y, r.left(), y);
+ QRect text(r.left() - 20 - 53, y - 10, 50, 20);
+ p.drawText(text, Qt::AlignRight | Qt::AlignVCenter, QString::number(ii));
+ } else {
+ p.drawLine(r.left() - 7, y, r.left(), y);
+ }
+ }
+
+ drawTime(&p, r);
+}
+
+class CanvasFrameRatePlugin : public QmlDebugClientPlugin
+{
+Q_OBJECT
+public:
+ CanvasFrameRatePlugin(QmlDebugClient *client);
+
+signals:
+ void sample(int, int, int, int, bool);
+
+protected:
+ virtual void messageReceived(const QByteArray &);
+
+private:
+ int la;
+ int lb;
+ int ld;
+};
+
+CanvasFrameRatePlugin::CanvasFrameRatePlugin(QmlDebugClient *client)
+: QmlDebugClientPlugin(QLatin1String("CanvasFrameRate"), client), la(-1)
+{
+}
+
+void CanvasFrameRatePlugin::messageReceived(const QByteArray &data)
+{
+ QByteArray rwData = data;
+ QDataStream stream(&rwData, QIODevice::ReadOnly);
+
+ int a; int b; int c; int d; bool isBreak;
+ stream >> a >> b >> c >> d >> isBreak;
+
+ if (la != -1)
+ emit sample(c, lb, la, ld, isBreak);
+
+ la = a;
+ lb = b;
+ ld = d;
+}
+
+CanvasFrameRate::CanvasFrameRate(QmlDebugClient *client, QWidget *parent)
+: QWidget(parent)
+{
+ m_plugin = new CanvasFrameRatePlugin(client);
+
+ QVBoxLayout *layout = new QVBoxLayout;
+ layout->setContentsMargins(0,0,0,0);
+ layout->setSpacing(0);
+ setLayout(layout);
+
+ m_tabs = new QTabWidget(this);
+ layout->addWidget(m_tabs);
+
+ QHBoxLayout *bottom = new QHBoxLayout;
+ layout->addLayout(bottom);
+ bottom->addStretch(2);
+
+ QCheckBox *check = new QCheckBox("Enable", this);
+ bottom->addWidget(check);
+ QObject::connect(check, SIGNAL(stateChanged(int)),
+ this, SLOT(stateChanged(int)));
+
+ QPushButton *pb = new QPushButton(tr("New Tab"), this);
+ QObject::connect(pb, SIGNAL(clicked()), this, SLOT(newTab()));
+ bottom->addWidget(pb);
+
+ newTab();
+}
+
+void CanvasFrameRate::newTab()
+{
+ if (m_tabs->count()) {
+ QWidget *w = m_tabs->widget(m_tabs->count() - 1);
+ QObject::disconnect(m_plugin, SIGNAL(sample(int,int,int,int,bool)),
+ w, SLOT(addSample(int,int,int,int,bool)));
+ }
+
+ int id = m_tabs->count();
+
+ QLineGraph *graph = new QLineGraph(this);
+ QObject::connect(m_plugin, SIGNAL(sample(int,int,int,int,bool)),
+ graph, SLOT(addSample(int,int,int,int,bool)));
+
+ QString name = QLatin1String("Graph ") + QString::number(id);
+ m_tabs->addTab(graph, name);
+ m_tabs->setCurrentIndex(id);
+}
+
+void CanvasFrameRate::stateChanged(int s)
+{
+ bool checked = s != 0;
+
+ static_cast<QmlDebugClientPlugin *>(m_plugin)->setEnabled(checked);
+}
+
+#include "canvasframerate.moc"
diff --git a/tools/qmldebugger/canvasframerate.h b/tools/qmldebugger/canvasframerate.h
new file mode 100644
index 0000000..543f233
--- /dev/null
+++ b/tools/qmldebugger/canvasframerate.h
@@ -0,0 +1,24 @@
+#ifndef CANVASFRAMERATE_H
+#define CANVASFRAMERATE_H
+
+#include <QWidget>
+
+class QmlDebugClient;
+class QTabWidget;
+class CanvasFrameRate : public QWidget
+{
+ Q_OBJECT
+public:
+ CanvasFrameRate(QmlDebugClient *, QWidget *parent = 0);
+
+private slots:
+ void newTab();
+ void stateChanged(int);
+
+private:
+ QTabWidget *m_tabs;
+ QObject *m_plugin;
+};
+
+#endif // CANVASFRAMERATE_H
+
diff --git a/tools/qmldebugger/canvasscene.cpp b/tools/qmldebugger/canvasscene.cpp
new file mode 100644
index 0000000..2d5b764
--- /dev/null
+++ b/tools/qmldebugger/canvasscene.cpp
@@ -0,0 +1,245 @@
+#include "canvasscene.h"
+#include <QtDeclarative/qmldebugclient.h>
+#include <QDataStream>
+#include <QVBoxLayout>
+#include <QPushButton>
+#include <QSpinBox>
+#include <QSplitter>
+#include <QtDeclarative/qfxrect.h>
+#include <QtDeclarative/qfximage.h>
+
+class CanvasSceneClientPlugin : public QmlDebugClientPlugin
+{
+public:
+ CanvasSceneClientPlugin(QmlDebugClient *, CanvasScene *s);
+
+protected:
+ void messageReceived(const QByteArray &);
+
+private:
+ void dump(QDataStream &, int indent);
+ CanvasScene *scene;
+};
+
+class QmlCanvasDebuggerItem : public QTreeWidgetItem
+{
+public:
+ QmlCanvasDebuggerItem(QTreeWidget *tree)
+ : QTreeWidgetItem(tree), me(0), img(0)
+ {
+ }
+
+ QmlCanvasDebuggerItem(QTreeWidgetItem *item)
+ : QTreeWidgetItem(item), me(0), img(0)
+ {
+ }
+
+ QFxRect *me;
+ QFxImage *img;
+};
+
+CanvasSceneClientPlugin::CanvasSceneClientPlugin(QmlDebugClient *c,
+ CanvasScene *s)
+: QmlDebugClientPlugin(QLatin1String("CanvasScene"), c), scene(s)
+{
+}
+
+void CanvasSceneClientPlugin::messageReceived(const QByteArray &data)
+{
+ QByteArray d = data;
+ QDataStream ds(&d, QIODevice::ReadOnly);
+
+ scene->message(ds);
+}
+
+void CanvasScene::message(QDataStream &ds)
+{
+ QList<QSimpleCanvasItem *> children = m_canvasRoot->children();
+ qDeleteAll(children);
+ m_tree->clear();
+ m_selected = 0;
+
+ QTreeWidgetItem *root = new QmlCanvasDebuggerItem(m_tree);
+ root->setText(0, tr("Root"));
+ root->setExpanded(true);
+ clone(root, m_canvasRoot, ds);
+}
+
+void CanvasScene::clone(QTreeWidgetItem *item, QSimpleCanvasItem *me,
+ QDataStream &ds)
+{
+ int children;
+ ds >> children;
+
+ for (int ii = 0; ii < children; ++ii) {
+ QString name;
+ qreal x, y, z, width, height, scale;
+ QTransform transform;
+ bool activeFocus;
+ int transformOrigin, flip, options;
+ QPixmap pix;
+
+ ds >> name >> x >> y >> z >> width >> height >> transformOrigin >> scale
+ >> flip >> transform >> activeFocus >> options >> pix;
+
+ QmlCanvasDebuggerItem *childItem = new QmlCanvasDebuggerItem(item);
+ childItem->setText(0, name);
+ childItem->setExpanded(true);
+
+ QFxRect *rect = new QFxRect;
+ rect->setParent(me);
+ rect->setX(x);
+ rect->setY(y);
+ rect->setZ(z);
+ rect->setWidth(width);
+ rect->setHeight(height);
+ rect->setTransformOrigin((QSimpleCanvasItem::TransformOrigin)transformOrigin);
+ rect->setScale(scale);
+ rect->setFlip((QSimpleCanvasItem::Flip)flip);
+ rect->setTransform(transform);
+
+ if (activeFocus)
+ rect->setColor(QColor(0, 0, 0, 10));
+ else if(options & QSimpleCanvasItem::IsFocusPanel)
+ rect->setColor(QColor(0, 255, 0, 10));
+ else if(options & QSimpleCanvasItem::IsFocusRealm)
+ rect->setColor(QColor(0, 0, 255, 10));
+ else
+ rect->setColor(QColor(255, 0, 0, 10));
+
+ if (pix.width() > 0 || pix.height() > 0) {
+ QFxImage *img = new QFxImage;
+ img->setParent(rect);
+ img->setWidth(width);
+ img->setHeight(height);
+ img->setPixmap(pix);
+ img->setOpacity(0);
+ childItem->img = img;
+ }
+
+ childItem->me = rect;
+
+ clone(childItem, rect, ds);
+ }
+}
+
+void CanvasSceneClientPlugin::dump(QDataStream &ds, int indent)
+{
+ QString name;
+ qreal x, y, z, width, height, scale;
+ QTransform transform;
+ bool activeFocus;
+ int transformOrigin, flip, options, count;
+ QPixmap pix;
+
+ ds >> name >> x >> y >> z >> width >> height >> transformOrigin >> scale
+ >> flip >> transform >> activeFocus >> options >> pix >> count;
+
+ QByteArray ba(indent * 4, ' ');
+ qWarning() << ba.constData() << name << x << y;
+
+ for(int ii = 0; ii < count; ++ii)
+ dump(ds, indent + 1);
+}
+
+CanvasScene::CanvasScene(QmlDebugClient *c, QWidget *parent)
+: QWidget(parent)
+{
+ client = new CanvasSceneClientPlugin(c, this);
+
+ QVBoxLayout *layout = new QVBoxLayout;
+ layout->setContentsMargins(0,0,0,0);
+ layout->setSpacing(0);
+ setLayout(layout);
+ QSplitter *splitter = new QSplitter(this);
+
+ m_tree = new QTreeWidget(this);
+ m_tree->setHeaderHidden(true);
+ QObject::connect(m_tree, SIGNAL(itemExpanded(QTreeWidgetItem*)),
+ this, SLOT(itemExpanded(QTreeWidgetItem*)));
+ QObject::connect(m_tree, SIGNAL(itemCollapsed(QTreeWidgetItem*)),
+ this, SLOT(itemCollapsed(QTreeWidgetItem*)));
+ QObject::connect(m_tree, SIGNAL(itemClicked(QTreeWidgetItem*,int)),
+ this, SLOT(itemClicked(QTreeWidgetItem*)));
+ m_canvas = new QSimpleCanvas(QSimpleCanvas::SimpleCanvas, this);
+ m_canvasRoot = new QSimpleCanvasItem;
+ m_canvasRoot->setParent(m_canvas->root());
+ splitter->addWidget(m_tree);
+ splitter->addWidget(m_canvas);
+ splitter->setStretchFactor(1, 2);
+ layout->addWidget(splitter);
+
+ QHBoxLayout *hlayout = new QHBoxLayout;
+ hlayout->setContentsMargins(0,0,0,0);
+ hlayout->addStretch(2);
+ hlayout->setSpacing(0);
+ layout->addLayout(hlayout);
+ QSpinBox *x = new QSpinBox(this);
+ x->setSingleStep(50);
+ x->setMaximum(10000);
+ x->setMinimum(-10000);
+ QObject::connect(x, SIGNAL(valueChanged(int)), this, SLOT(setX(int)));
+ QSpinBox *y = new QSpinBox(this);
+ y->setSingleStep(50);
+ y->setMaximum(10000);
+ y->setMinimum(-10000);
+ QObject::connect(y, SIGNAL(valueChanged(int)), this, SLOT(setY(int)));
+ hlayout->addWidget(x);
+ hlayout->addWidget(y);
+ QPushButton *pb = new QPushButton(tr("Refresh"), this);
+ QObject::connect(pb, SIGNAL(clicked()), this, SLOT(refresh()));
+ hlayout->addWidget(pb);
+}
+
+void CanvasScene::refresh()
+{
+ client->sendMessage(QByteArray());
+}
+
+void CanvasScene::itemExpanded(QTreeWidgetItem *i)
+{
+ QmlCanvasDebuggerItem *item = static_cast<QmlCanvasDebuggerItem *>(i);
+ if(item->me)
+ item->me->setOpacity(1);
+}
+
+void CanvasScene::setOpacityRecur(QTreeWidgetItem *i, qreal op)
+{
+ QmlCanvasDebuggerItem *item = static_cast<QmlCanvasDebuggerItem *>(i);
+ if(item->img)
+ item->img->setOpacity(op);
+
+ for(int ii = 0; ii < item->childCount(); ++ii)
+ setOpacityRecur(item->child(ii), op);
+}
+
+void CanvasScene::itemClicked(QTreeWidgetItem *i)
+{
+ QmlCanvasDebuggerItem *item = static_cast<QmlCanvasDebuggerItem *>(i);
+
+ if(m_selected) {
+ setOpacityRecur(m_selected, 0);
+ m_selected = 0;
+ }
+
+ m_selected = item;
+ setOpacityRecur(m_selected, 1);
+}
+
+void CanvasScene::itemCollapsed(QTreeWidgetItem *i)
+{
+ QmlCanvasDebuggerItem *item = static_cast<QmlCanvasDebuggerItem *>(i);
+ if(item->me)
+ item->me->setOpacity(0);
+}
+
+void CanvasScene::setX(int x)
+{
+ m_canvasRoot->setX(x);
+}
+
+void CanvasScene::setY(int y)
+{
+ m_canvasRoot->setY(y);
+}
+
diff --git a/tools/qmldebugger/canvasscene.h b/tools/qmldebugger/canvasscene.h
new file mode 100644
index 0000000..d980241
--- /dev/null
+++ b/tools/qmldebugger/canvasscene.h
@@ -0,0 +1,39 @@
+#ifndef CANVASSCENE_H
+#define CANVASSCENE_H
+
+#include <QWidget>
+#include <QTreeWidget>
+#include <QtDeclarative/qsimplecanvas.h>
+#include <QtDeclarative/qsimplecanvasitem.h>
+
+class QmlDebugClient;
+class CanvasSceneClient;
+class QmlDebugClientPlugin;
+class CanvasScene : public QWidget
+{
+Q_OBJECT
+public:
+ CanvasScene(QmlDebugClient *, QWidget *parent = 0);
+
+ void message(QDataStream &);
+private slots:
+ void refresh();
+ void itemClicked(QTreeWidgetItem *);
+ void itemExpanded(QTreeWidgetItem *);
+ void itemCollapsed(QTreeWidgetItem *);
+ void setX(int);
+ void setY(int);
+
+private:
+ void setOpacityRecur(QTreeWidgetItem *, qreal);
+ void clone(QTreeWidgetItem *item, QSimpleCanvasItem *me, QDataStream &);
+ QmlDebugClientPlugin *client;
+
+ QTreeWidget *m_tree;
+ QSimpleCanvas *m_canvas;
+ QSimpleCanvasItem *m_canvasRoot;
+ QTreeWidgetItem *m_selected;
+};
+
+#endif // CANVASSCENE_H
+
diff --git a/tools/qmldebugger/main.cpp b/tools/qmldebugger/main.cpp
new file mode 100644
index 0000000..5b94cbb
--- /dev/null
+++ b/tools/qmldebugger/main.cpp
@@ -0,0 +1,137 @@
+#include <QtNetwork/qtcpsocket.h>
+#include <QtGui/qapplication.h>
+#include <QtGui/qwidget.h>
+#include <QtGui/qpainter.h>
+#include <QtGui/qscrollbar.h>
+#include <QtDeclarative/qmldebugclient.h>
+#include <QtCore/qdebug.h>
+#include <QtCore/qstringlist.h>
+#include <QtCore/qdatastream.h>
+#include "canvasframerate.h"
+#include "canvasscene.h"
+#include <QVBoxLayout>
+#include <QPushButton>
+#include <QLineEdit>
+#include <QTabWidget>
+#include <QSpinBox>
+#include <QLabel>
+
+class Shell : public QWidget
+{
+Q_OBJECT
+public:
+ Shell(QWidget * = 0);
+
+private slots:
+ void connectToHost();
+ void disconnectFromHost();
+ void connectionStateChanged();
+
+private:
+ QmlDebugClient client;
+
+ QLabel *m_connectionState;
+ QLineEdit *m_host;
+ QSpinBox *m_port;
+ QPushButton *m_connectButton;
+ QPushButton *m_disconnectButton;
+};
+
+Shell::Shell(QWidget *parent)
+: QWidget(parent)
+{
+ QVBoxLayout *layout = new QVBoxLayout;
+ setLayout(layout);
+
+
+ QHBoxLayout *connectLayout = new QHBoxLayout;
+ layout->addLayout(connectLayout);
+ connectLayout->addStretch(2);
+
+ m_connectionState = new QLabel(this);
+ connectLayout->addWidget(m_connectionState);
+ m_host = new QLineEdit(this);
+ m_host->setText("127.0.0.1");
+ connectLayout->addWidget(m_host);
+ m_port = new QSpinBox(this);
+ m_port->setMinimum(1024);
+ m_port->setMaximum(20000);
+ m_port->setValue(3768);
+ connectLayout->addWidget(m_port);
+ m_connectButton = new QPushButton(tr("Connect"), this);
+ QObject::connect(m_connectButton, SIGNAL(clicked()),
+ this, SLOT(connectToHost()));
+ connectLayout->addWidget(m_connectButton);
+ m_disconnectButton = new QPushButton(tr("Disconnect"), this);
+ QObject::connect(m_disconnectButton, SIGNAL(clicked()),
+ this, SLOT(disconnectFromHost()));
+ m_disconnectButton->setEnabled(false);
+ connectLayout->addWidget(m_disconnectButton);
+
+ QTabWidget *tabs = new QTabWidget(this);
+ layout->addWidget(tabs);
+
+ CanvasFrameRate *cfr = new CanvasFrameRate(&client, this);
+ tabs->addTab(cfr, tr("Frame Rate"));
+
+ CanvasScene *cs = new CanvasScene(&client, this);
+ tabs->addTab(cs, tr("Scene"));
+
+ QObject::connect(&client, SIGNAL(stateChanged(QAbstractSocket::SocketState)), this, SLOT(connectionStateChanged()));
+ connectionStateChanged();
+}
+
+void Shell::connectionStateChanged()
+{
+ switch (client.state()) {
+ default:
+ case QAbstractSocket::UnconnectedState:
+ m_connectionState->setText(tr("Disconnected"));
+ m_connectButton->setEnabled(true);
+ m_disconnectButton->setEnabled(false);
+ break;
+ case QAbstractSocket::HostLookupState:
+ m_connectionState->setText(tr("Resolving"));
+ m_connectButton->setEnabled(false);
+ m_disconnectButton->setEnabled(true);
+ break;
+ case QAbstractSocket::ConnectingState:
+ m_connectionState->setText(tr("Connecting"));
+ m_connectButton->setEnabled(false);
+ m_disconnectButton->setEnabled(true);
+ break;
+ case QAbstractSocket::ConnectedState:
+ m_connectionState->setText(tr("Connected"));
+ m_connectButton->setEnabled(false);
+ m_disconnectButton->setEnabled(true);
+ break;
+ case QAbstractSocket::ClosingState:
+ m_connectionState->setText(tr("Closing"));
+ m_connectButton->setEnabled(false);
+ m_disconnectButton->setEnabled(false);
+ break;
+ }
+}
+
+void Shell::connectToHost()
+{
+ client.connectToHost(m_host->text(), m_port->value());
+}
+
+void Shell::disconnectFromHost()
+{
+ client.disconnectFromHost();
+}
+
+int main(int argc, char ** argv)
+{
+ QApplication app(argc, argv);
+
+ Shell shell;
+ shell.show();
+
+
+ return app.exec();
+}
+
+#include "main.moc"
diff --git a/tools/qmldebugger/qmldebugger.pro b/tools/qmldebugger/qmldebugger.pro
new file mode 100644
index 0000000..757ba12
--- /dev/null
+++ b/tools/qmldebugger/qmldebugger.pro
@@ -0,0 +1,10 @@
+DESTDIR = ../../bin
+QT += network declarative
+# Input
+HEADERS += canvasframerate.h canvasscene.h
+SOURCES += main.cpp canvasframerate.cpp canvasscene.cpp
+
+target.path=$$[QT_INSTALL_BINS]
+INSTALLS += target
+
+CONFIG += console