diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index 9ed40e4e793..0b5fa2ff650 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -211,6 +211,10 @@ GdbEngine::GdbEngine(const DebuggerStartParameters &startParameters, SLOT(reloadLocals())); connect(debuggerCore()->action(SortStructMembers), SIGNAL(valueChanged(QVariant)), SLOT(reloadLocals())); + connect(debuggerCore()->action(ShowStdNamespace), SIGNAL(valueChanged(QVariant)), + SLOT(reloadLocals())); + connect(debuggerCore()->action(ShowQtNamespace), SIGNAL(valueChanged(QVariant)), + SLOT(reloadLocals())); connect(debuggerCore()->action(CreateFullBacktrace), SIGNAL(triggered()), SLOT(createFullBacktrace())); } diff --git a/src/plugins/debugger/watchdata.cpp b/src/plugins/debugger/watchdata.cpp index f2b1da2ef75..648e311104e 100644 --- a/src/plugins/debugger/watchdata.cpp +++ b/src/plugins/debugger/watchdata.cpp @@ -315,17 +315,6 @@ static void formatToolTipRow(QTextStream &str, << htmlEscape(value) << ""; } -static QString typeToolTip(const WatchData &wd) -{ - if (wd.displayedType.isEmpty()) - return wd.type; - QString rc = wd.displayedType; - rc += QLatin1String(" ("); - rc += wd.type; - rc += QLatin1Char(')'); - return rc; -} - QString WatchData::toToolTip() const { if (!valuetooltip.isEmpty()) @@ -335,7 +324,8 @@ QString WatchData::toToolTip() const str << ""; formatToolTipRow(str, tr("Name"), name); formatToolTipRow(str, tr("Expression"), exp); - formatToolTipRow(str, tr("Type"), typeToolTip(*this)); + formatToolTipRow(str, tr("Internal Type"), type); + formatToolTipRow(str, tr("Displayed Type"), displayedType); QString val = value; if (value.size() > 1000) { val.truncate(1000); diff --git a/src/plugins/debugger/watchhandler.cpp b/src/plugins/debugger/watchhandler.cpp index 7f366cfacf7..48e5cee97c3 100644 --- a/src/plugins/debugger/watchhandler.cpp +++ b/src/plugins/debugger/watchhandler.cpp @@ -260,19 +260,36 @@ static QString niceTypeHelper(const QByteArray &typeIn) return simplified; } +static QString removeNamespaces(QString str, const QByteArray &ns) +{ + if (!debuggerCore()->boolSetting(ShowStdNamespace)) + str.remove(QLatin1String("std::")); + if (!debuggerCore()->boolSetting(ShowQtNamespace)) { + const QString qtNamespace = QString::fromLatin1(ns); + if (!qtNamespace.isEmpty()) + str.remove(qtNamespace); + } + return str; +} + +static QString removeInitialNamespace(QString str, const QByteArray &ns) +{ + if (str.startsWith(QLatin1String("std::")) + && debuggerCore()->boolSetting(ShowStdNamespace)) + str = str.mid(5); + if (!debuggerCore()->boolSetting(ShowQtNamespace)) { + const QString qtNamespace = QString::fromLatin1(ns); + if (!qtNamespace.isEmpty() && str.startsWith(qtNamespace)) + str = str.mid(qtNamespace.size()); + } + return str; +} + QString WatchModel::displayType(const WatchData &data) const { - if (!data.displayedType.isEmpty()) - return data.displayedType; - QString type = niceTypeHelper(data.type); - if (!debuggerCore()->boolSetting(ShowStdNamespace)) - type.remove(QLatin1String("std::")); - if (!debuggerCore()->boolSetting(ShowQtNamespace)) { - const QString qtNamespace = QString::fromLatin1(engine()->qtNamespace()); - if (!qtNamespace.isEmpty()) - type.remove(qtNamespace); - } - return type; + return data.displayedType.isEmpty() + ? niceTypeHelper(data.type) + : data.displayedType; } static inline int formatToIntegerBase(int format) @@ -600,25 +617,30 @@ QVariant WatchModel::data(const QModelIndex &idx, int role) const case 1: return editValue(data); case 2: - if (!data.displayedType.isEmpty()) // To be tested: Can debuggers handle those? + // FIXME:: To be tested: Can debuggers handle those? + if (!data.displayedType.isEmpty()) return data.displayedType; return QString::fromUtf8(data.type); default: break; } // switch editrole column - case Qt::DisplayRole: + case Qt::DisplayRole: { + const QByteArray ns = engine()->qtNamespace(); switch (idx.column()) { case 0: if (data.name.isEmpty()) return tr(""); if (data.name == QLatin1String("*") && item->parent) return QVariant(QLatin1Char('*') + item->parent->name); - return data.name; + return removeInitialNamespace(data.name, ns); case 1: - return truncateValue(formattedValue(data, itemFormat(data))); + return removeInitialNamespace(truncateValue( + formattedValue(data, itemFormat(data))), ns); case 2: - return displayType(data); - default: break; + return removeNamespaces(displayType(data), ns); + default: + break; } // switch editrole column + } case Qt::ToolTipRole: return debuggerCore()->boolSetting(UseToolTipsInLocalsView) ? data.toToolTip() : QVariant();