diff options
author | hjk <[email protected]> | 2010-03-15 17:44:56 +0100 |
---|---|---|
committer | hjk <[email protected]> | 2010-03-16 12:08:33 +0100 |
commit | e8936ad9d21cf08d854b36cb6a0610aab0194179 (patch) | |
tree | 4143ddbec1007d4be532a38589a690559c76b1c0 /src/plugins/debugger | |
parent | 0cd06f55bc3618567246cf97417ee632db70dfab (diff) |
debugger: code cosmetics for custom displays
Diffstat (limited to 'src/plugins/debugger')
-rw-r--r-- | src/plugins/debugger/watchhandler.cpp | 36 | ||||
-rw-r--r-- | src/plugins/debugger/watchhandler.h | 9 |
2 files changed, 31 insertions, 14 deletions
diff --git a/src/plugins/debugger/watchhandler.cpp b/src/plugins/debugger/watchhandler.cpp index b8c0f1e64fc..d046c9fcedf 100644 --- a/src/plugins/debugger/watchhandler.cpp +++ b/src/plugins/debugger/watchhandler.cpp @@ -42,6 +42,7 @@ #include <QtCore/QDebug> #include <QtCore/QEvent> #include <QtCore/QFile> +#include <QtCore/QProcess> #include <QtCore/QTextStream> #include <QtCore/QTimer> #include <QtCore/QtAlgorithms> @@ -1209,12 +1210,12 @@ void WatchHandler::cleanup() m_watchers->m_fetchTriggered.clear(); m_tooltips->m_fetchTriggered.clear(); #if 1 - for (EditWindows::ConstIterator it = m_editWindows.begin(); - it != m_editWindows.end(); ++it) { + for (EditHandlers::ConstIterator it = m_editHandlers.begin(); + it != m_editHandlers.end(); ++it) { if (!it.value().isNull()) delete it.value(); } - m_editWindows.clear(); + m_editHandlers.clear(); #endif } @@ -1348,21 +1349,21 @@ static void swapEndian(char *d, int nchar) void WatchHandler::showEditValue(const WatchData &data) { - QWidget *w = m_editWindows.value(data.iname); + QObject *w = m_editHandlers.value(data.iname); if (data.editformat == 0x0) { - m_editWindows.remove(data.iname); + m_editHandlers.remove(data.iname); delete w; - } else if (data.editformat == 0x1 || data.editformat == 0x3) { + } else if (data.editformat == 1 || data.editformat == 3) { // QImage if (!w) { w = new QLabel; - m_editWindows[data.iname] = w; + m_editHandlers[data.iname] = w; } if (QLabel *l = qobject_cast<QLabel *>(w)) { int width, height, format; QByteArray ba; uchar *bits; - if (data.editformat == 0x1) { + if (data.editformat == 1) { ba = QByteArray::fromHex(data.editvalue); const int *header = (int *)(ba.data()); swapEndian(ba.data(), ba.size()); @@ -1370,7 +1371,7 @@ void WatchHandler::showEditValue(const WatchData &data) width = header[0]; height = header[1]; format = header[2]; - } else { // data.editformat == 0x3 + } else { // data.editformat == 3 QTextStream ts(data.editvalue); QString fileName; ts >> width >> height >> format >> fileName; @@ -1384,11 +1385,11 @@ void WatchHandler::showEditValue(const WatchData &data) l->resize(width, height); l->show(); } - } else if (data.editformat == 0x2) { + } else if (data.editformat == 2) { // QString if (!w) { w = new QTextEdit; - m_editWindows[data.iname] = w; + m_editHandlers[data.iname] = w; } QByteArray ba = QByteArray::fromHex(data.editvalue); QString str = QString::fromUtf16((ushort *)ba.constData(), ba.size()/2); @@ -1398,6 +1399,19 @@ void WatchHandler::showEditValue(const WatchData &data) t->resize(400, 200); t->show(); } + } else if (data.editformat == 4) { + // Generic Process. + int pos = data.editvalue.indexOf('|'); + QByteArray cmd = data.editvalue.left(pos); + QByteArray input = data.editvalue.mid(pos + 1); + QProcess *p = qobject_cast<QProcess *>(w); + if (!p) { + p = new QProcess; + p->start(cmd); + p->waitForStarted(); + m_editHandlers[data.iname] = p; + } + p->write(input + "\n"); } else { QTC_ASSERT(false, qDebug() << "Display format: " << data.editformat); } diff --git a/src/plugins/debugger/watchhandler.h b/src/plugins/debugger/watchhandler.h index e2f4ddf0f93..d6b26ef6bdf 100644 --- a/src/plugins/debugger/watchhandler.h +++ b/src/plugins/debugger/watchhandler.h @@ -282,14 +282,17 @@ private: bool m_expandPointers; bool m_inChange; - typedef QMap<QString, QPointer<QWidget> > EditWindows; - EditWindows m_editWindows; + // QWidgets and QProcesses taking care of special displays. + typedef QMap<QString, QPointer<QObject> > EditHandlers; + EditHandlers m_editHandlers; QHash<QByteArray, int> m_watcherNames; QByteArray watcherName(const QByteArray &exp); QHash<QString, int> m_typeFormats; QHash<QString, int> m_individualFormats; - QSet<QByteArray> m_expandedINames; // Those expanded in the treeview. + + // Items expanded in the Locals & Watchers view. + QSet<QByteArray> m_expandedINames; WatchModel *m_locals; WatchModel *m_watchers; |