aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/debugger
diff options
context:
space:
mode:
authorhjk <[email protected]>2010-03-15 17:44:56 +0100
committerhjk <[email protected]>2010-03-16 12:08:33 +0100
commite8936ad9d21cf08d854b36cb6a0610aab0194179 (patch)
tree4143ddbec1007d4be532a38589a690559c76b1c0 /src/plugins/debugger
parent0cd06f55bc3618567246cf97417ee632db70dfab (diff)
debugger: code cosmetics for custom displays
Diffstat (limited to 'src/plugins/debugger')
-rw-r--r--src/plugins/debugger/watchhandler.cpp36
-rw-r--r--src/plugins/debugger/watchhandler.h9
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;