Add a fake dereferencing item '*' to CDB for dumping QString*, etc.

Simplify the symbol group recursion to oblivion and make
it parametrizable with predicates to control recursion and
further processing. Most importantly, insert a parent item
BEFORE its child item (ignoring for now the fact that child recursion
might fail), making it possible to check and do magic on the parent,
disabling further handling by the symbol context. Dumper handling
can then kick in and handle pointed-to dumpeable items by inserting
fake dereferencing items.
Remove logic to detect already expanded items, just re-insert the
children if the handler asks for it.
This commit is contained in:
Friedemann Kleint
2009-06-23 13:43:23 +02:00
parent 34197e361b
commit cc58713361
5 changed files with 221 additions and 136 deletions

View File

@@ -877,7 +877,7 @@ void WatchHandler::watchExpression(const QString &exp)
WatchData data;
data.exp = exp;
data.name = exp;
if (exp == watcherEditPlaceHolder())
if (exp.isEmpty() || exp == watcherEditPlaceHolder())
data.setAllUnneeded();
data.iname = watcherName(exp);
insertData(data);
@@ -1012,7 +1012,15 @@ void WatchHandler::loadWatchers()
void WatchHandler::saveWatchers()
{
//qDebug() << "SAVE WATCHERS: " << m_watchers.keys();
setSessionValueRequested("Watchers", QVariant(m_watcherNames.keys()));
// Filter out valid watchers.
QStringList watcherNames;
const QHash<QString, int>::const_iterator cend = m_watcherNames.constEnd();
for (QHash<QString, int>::const_iterator it = m_watcherNames.constBegin(); it != cend; ++it) {
const QString &watcherName = it.key();
if (!watcherName.isEmpty() && watcherName != watcherEditPlaceHolder())
watcherNames.push_back(watcherName);
}
setSessionValueRequested("Watchers", QVariant(watcherNames));
}
void WatchHandler::saveSessionData()