summaryrefslogtreecommitdiff
path: root/src/plugins/debugger/watchhandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/debugger/watchhandler.cpp')
-rw-r--r--src/plugins/debugger/watchhandler.cpp52
1 files changed, 47 insertions, 5 deletions
diff --git a/src/plugins/debugger/watchhandler.cpp b/src/plugins/debugger/watchhandler.cpp
index f90f9b7672..12f9a58744 100644
--- a/src/plugins/debugger/watchhandler.cpp
+++ b/src/plugins/debugger/watchhandler.cpp
@@ -172,6 +172,10 @@ WatchModel::WatchModel(WatchHandler *handler, WatchType type)
m_root->iname = "tooltip";
m_root->name = WatchHandler::tr("Tooltip");
break;
+ case InspectWatch:
+ m_root->iname = "inspect";
+ m_root->name = WatchHandler::tr("Inspector");
+ break;
}
}
@@ -576,7 +580,7 @@ bool WatchModel::canFetchMore(const QModelIndex &index) const
{
WatchItem *item = watchItem(index);
QTC_ASSERT(item, return false);
- return index.isValid() && m_handler->m_contentsValid && !m_fetchTriggered.contains(item->iname);
+ return index.isValid() && contentIsValid() && !m_fetchTriggered.contains(item->iname);
}
void WatchModel::fetchMore(const QModelIndex &index)
@@ -713,6 +717,14 @@ int WatchModel::itemFormat(const WatchData &data) const
return theTypeFormats.value(stripForFormat(data.type), -1);
}
+bool WatchModel::contentIsValid() const
+{
+ // inspector doesn't follow normal beginCycle()/endCycle()
+ if (m_type == InspectWatch)
+ return true;
+ return m_handler->m_contentsValid;
+}
+
static inline QString expression(const WatchItem *item)
{
if (!item->exp.isEmpty())
@@ -812,7 +824,7 @@ QVariant WatchModel::data(const QModelIndex &idx, int role) const
static const QVariant red(QColor(200, 0, 0));
static const QVariant gray(QColor(140, 140, 140));
switch (idx.column()) {
- case 1: return (!data.valueEnabled || !m_handler->m_contentsValid) ? gray
+ case 1: return (!data.valueEnabled || !contentIsValid()) ? gray
: data.changed ? red : QVariant();
}
break;
@@ -927,7 +939,7 @@ bool WatchModel::setData(const QModelIndex &index, const QVariant &value, int ro
Qt::ItemFlags WatchModel::flags(const QModelIndex &idx) const
{
- if (!m_handler->m_contentsValid)
+ if (!contentIsValid())
return Qt::ItemFlags();
if (!idx.isValid())
@@ -1276,6 +1288,7 @@ WatchHandler::WatchHandler(DebuggerEngine *engine)
m_locals = new WatchModel(this, LocalsWatch);
m_watchers = new WatchModel(this, WatchersWatch);
m_tooltips = new WatchModel(this, TooltipsWatch);
+ m_inspect = new WatchModel(this, InspectWatch);
m_contentsValid = false;
m_resetLocationScheduled = false;
@@ -1294,6 +1307,7 @@ void WatchHandler::beginCycle(bool fullCycle)
m_locals->beginCycle(fullCycle);
m_watchers->beginCycle(fullCycle);
m_tooltips->beginCycle(fullCycle);
+ // don't sync m_inspect here: It's updated on it's own
}
void WatchHandler::endCycle()
@@ -1309,6 +1323,16 @@ void WatchHandler::endCycle()
updateWatchersWindow();
}
+void WatchHandler::beginCycle(WatchType type, bool fullCycle)
+{
+ model(type)->beginCycle(fullCycle);
+}
+
+void WatchHandler::endCycle(WatchType type)
+{
+ model(type)->endCycle();
+}
+
void WatchHandler::cleanup()
{
m_expandedINames.clear();
@@ -1316,10 +1340,12 @@ void WatchHandler::cleanup()
m_return->reinitialize();
m_locals->reinitialize();
m_tooltips->reinitialize();
+ m_inspect->reinitialize();
m_return->m_fetchTriggered.clear();
m_locals->m_fetchTriggered.clear();
m_watchers->m_fetchTriggered.clear();
m_tooltips->m_fetchTriggered.clear();
+ m_inspect->m_fetchTriggered.clear();
#if 1
for (EditHandlers::ConstIterator it = m_editHandlers.begin();
it != m_editHandlers.end(); ++it) {
@@ -1336,6 +1362,7 @@ void WatchHandler::emitAllChanged()
m_locals->emitAllChanged();
m_watchers->emitAllChanged();
m_tooltips->emitAllChanged();
+ m_inspect->emitAllChanged();
}
void WatchHandler::insertData(const WatchData &data)
@@ -1347,9 +1374,10 @@ void WatchHandler::insertData(const WatchData &data)
return;
}
- if (data.isSomethingNeeded() && data.iname.contains('.')) {
+ if (data.isSomethingNeeded() && data.iname.contains(".")) {
MODEL_DEBUG("SOMETHING NEEDED: " << data.toString());
- if (!m_engine->isSynchronous()) {
+ if (!m_engine->isSynchronous()
+ || data.iname.startsWith("inspect.")) {
WatchModel *model = modelForIName(data.iname);
QTC_ASSERT(model, return);
model->insertData(data);
@@ -1381,6 +1409,7 @@ void WatchHandler::reinsertAllData()
m_watchers->reinsertAllData();
m_tooltips->reinsertAllData();
m_return->reinsertAllData();
+ m_inspect->reinsertAllData();
}
// Bulk-insertion
@@ -1685,6 +1714,7 @@ WatchModel *WatchHandler::model(WatchType type) const
case LocalsWatch: return m_locals;
case WatchersWatch: return m_watchers;
case TooltipsWatch: return m_tooltips;
+ case InspectWatch: return m_inspect;
}
QTC_CHECK(false);
return 0;
@@ -1700,6 +1730,8 @@ WatchModel *WatchHandler::modelForIName(const QByteArray &iname) const
return m_tooltips;
if (iname.startsWith("watch"))
return m_watchers;
+ if (iname.startsWith("inspect"))
+ return m_inspect;
QTC_ASSERT(false, qDebug() << "INAME: " << iname);
return 0;
}
@@ -1746,6 +1778,7 @@ void WatchHandler::setFormat(const QByteArray &type0, int format)
m_locals->emitDataChanged(1);
m_watchers->emitDataChanged(1);
m_tooltips->emitDataChanged(1);
+ m_inspect->emitDataChanged(1);
}
int WatchHandler::format(const QByteArray &iname) const
@@ -1905,6 +1938,7 @@ void WatchHandler::resetLocation()
m_locals->invalidateAll();
m_watchers->invalidateAll();
m_tooltips->invalidateAll();
+ m_inspect->invalidateAll();
}
}
@@ -1914,6 +1948,14 @@ bool WatchHandler::isValidToolTip(const QByteArray &iname) const
return item && !item->type.trimmed().isEmpty();
}
+void WatchHandler::setCurrentModelIndex(WatchType modelType,
+ const QModelIndex &index)
+{
+ if (WatchModel *m = model(modelType)) {
+ emit m->setCurrentIndex(index);
+ }
+}
+
QHash<QByteArray, int> WatchHandler::watcherNames()
{
return theWatcherNames;