diff options
author | hjk <[email protected]> | 2010-03-15 14:48:06 +0100 |
---|---|---|
committer | hjk <[email protected]> | 2010-03-15 14:56:55 +0100 |
commit | a47fa969cda3709f2d5cd394fa5023fd9f085495 (patch) | |
tree | c7ba3ade313826a49f128f86ab406dac81d405c0 /src/plugins/debugger/watchhandler.cpp | |
parent | 8894c040b14777f92a610a5a1e4ea1acbf9f37fa (diff) |
debugger: speed up QImage dumper
Diffstat (limited to 'src/plugins/debugger/watchhandler.cpp')
-rw-r--r-- | src/plugins/debugger/watchhandler.cpp | 45 |
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); } } |