aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/debugger/watchhandler.cpp
diff options
context:
space:
mode:
authorhjk <[email protected]>2010-03-15 14:48:06 +0100
committerhjk <[email protected]>2010-03-15 14:56:55 +0100
commita47fa969cda3709f2d5cd394fa5023fd9f085495 (patch)
treec7ba3ade313826a49f128f86ab406dac81d405c0 /src/plugins/debugger/watchhandler.cpp
parent8894c040b14777f92a610a5a1e4ea1acbf9f37fa (diff)
debugger: speed up QImage dumper
Diffstat (limited to 'src/plugins/debugger/watchhandler.cpp')
-rw-r--r--src/plugins/debugger/watchhandler.cpp45
1 files changed, 30 insertions, 15 deletions
diff --git a/src/plugins/debugger/watchhandler.cpp b/src/plugins/debugger/watchhandler.cpp
index 54ba571eb66..d6e39b18053 100644
--- a/src/plugins/debugger/watchhandler.cpp
+++ b/src/plugins/debugger/watchhandler.cpp
@@ -41,10 +41,10 @@
#include <QtCore/QDebug>
#include <QtCore/QEvent>
-
-#include <QtCore/QtAlgorithms>
+#include <QtCore/QFile>
#include <QtCore/QTextStream>
#include <QtCore/QTimer>
+#include <QtCore/QtAlgorithms>
#include <QtGui/QAction>
#include <QtGui/QApplication>
@@ -1351,41 +1351,56 @@ static void swapEndian(char *d, int nchar)
void WatchHandler::showEditValue(const WatchData &data)
{
- // Editvalue is always hex encoded.
- QByteArray ba = QByteArray::fromHex(data.editvalue);
QWidget *w = m_editWindows.value(data.iname);
- const int format = ba.at(0);
- if (format == 0x1) {
+
+ if (data.editformat == 0x1 || data.editformat == 0x3) {
// QImage
if (!w) {
w = new QLabel;
m_editWindows[data.iname] = w;
}
if (QLabel *l = qobject_cast<QLabel *>(w)) {
- char *d = ba.data() + 1;
- swapEndian(d, ba.size() - 1);
- const int *header = (int *)(d);
- const uchar *data = 12 + (uchar *)(d);
- QImage im(data, header[0], header[1], QImage::Format(header[2]));
+ int width, height, format;
+ QByteArray ba;
+ uchar *bits;
+ if (data.editformat == 0x1) {
+ ba = QByteArray::fromHex(data.editvalue);
+ const int *header = (int *)(ba.data());
+ swapEndian(ba.data(), ba.size());
+ bits = 12 + (uchar *)(ba.data());
+ width = header[0];
+ height = header[1];
+ format = header[2];
+ } else { // data.editformat == 0x3
+ QTextStream ts(data.editvalue);
+ QString fileName;
+ ts >> width >> height >> format >> fileName;
+ QFile f(fileName);
+ f.open(QIODevice::ReadOnly);
+ ba = f.readAll();
+ bits = (uchar*)ba.data();
+ }
+ QImage im(bits, width, height, QImage::Format(format));
l->setPixmap(QPixmap::fromImage(im));
- l->resize(header[0], header[1]);
+ l->resize(width, height);
l->show();
}
- } else if (format == 0x2) {
+ } else if (data.editformat == 0x2) {
// QString
if (!w) {
w = new QTextEdit;
m_editWindows[data.iname] = w;
}
- MODEL_DEBUG("DATA: " << ba);
+ QByteArray ba = QByteArray::fromHex(data.editvalue);
QString str = QString::fromUtf16((ushort *)ba.constData(), ba.size()/2);
+
if (QTextEdit *t = qobject_cast<QTextEdit *>(w)) {
t->setText(str);
t->resize(400, 200);
t->show();
}
} else {
- QTC_ASSERT(false, qDebug() << "Display format: " << format);
+ QTC_ASSERT(false, qDebug() << "Display format: " << data.editformat);
}
}