From 33b11f23d311013959f3a8228a109c8d8604449b Mon Sep 17 00:00:00 2001
From: Roberto Raggi <roberto.raggi@nokia.com>
Date: Tue, 19 May 2009 12:33:55 +0200
Subject: [PATCH] Fixed prettyprint of template types.

---
 src/libs/cplusplus/Overview.cpp            | 13 ++++++++++++-
 src/libs/cplusplus/Overview.h              |  4 ++++
 src/libs/cplusplus/TypePrettyPrinter.cpp   | 17 +++++++++++++----
 src/libs/cplusplus/TypePrettyPrinter.h     |  1 +
 src/plugins/cpptools/cppcodecompletion.cpp |  1 +
 5 files changed, 31 insertions(+), 5 deletions(-)

diff --git a/src/libs/cplusplus/Overview.cpp b/src/libs/cplusplus/Overview.cpp
index 8b4ad673b78..dcb51db9813 100644
--- a/src/libs/cplusplus/Overview.cpp
+++ b/src/libs/cplusplus/Overview.cpp
@@ -39,12 +39,23 @@ Overview::Overview()
       _showArgumentNames(false),
       _showReturnTypes(false),
       _showFunctionSignatures(true),
-      _showFullyQualifiedNames(false)
+      _showFullyQualifiedNames(false),
+      _richText(false)
 { }
 
 Overview::~Overview()
 { }
 
+bool Overview::richText() const
+{
+    return _richText;
+}
+
+void Overview::setRichText(bool richText)
+{
+    _richText = richText;
+}
+
 bool Overview::showArgumentNames() const
 {
     return _showArgumentNames;
diff --git a/src/libs/cplusplus/Overview.h b/src/libs/cplusplus/Overview.h
index 1af633353bf..8d2facac8ed 100644
--- a/src/libs/cplusplus/Overview.h
+++ b/src/libs/cplusplus/Overview.h
@@ -44,6 +44,9 @@ public:
     Overview();
     ~Overview();
 
+    bool richText() const;
+    void setRichText(bool richText);
+
     bool showArgumentNames() const;
     void setShowArgumentNames(bool showArgumentNames);
 
@@ -77,6 +80,7 @@ private:
     bool _showReturnTypes: 1;
     bool _showFunctionSignatures: 1;
     bool _showFullyQualifiedNames: 1;
+    bool _richText: 1;
 };
 
 } // end of namespace CPlusPlus
diff --git a/src/libs/cplusplus/TypePrettyPrinter.cpp b/src/libs/cplusplus/TypePrettyPrinter.cpp
index 0334e8d44f0..f2594bacfe1 100644
--- a/src/libs/cplusplus/TypePrettyPrinter.cpp
+++ b/src/libs/cplusplus/TypePrettyPrinter.cpp
@@ -35,6 +35,7 @@
 #include <Scope.h>
 #include <QStringList>
 #include <QtDebug>
+#include <QTextDocument> // Qt::escape()
 
 using namespace CPlusPlus;
 
@@ -54,7 +55,7 @@ static QString fullyQualifiedName(Symbol *symbol, const Overview *overview)
         }
 
         if (! owner->name())
-            nestedNameSpecifier.prepend(QLatin1String("<anonymous>"));
+            nestedNameSpecifier.prepend(QLatin1String("$anonymous"));
 
         else {
             const QString name = overview->prettyName(owner->name());
@@ -325,7 +326,7 @@ void TypePrettyPrinter::visit(Function *type)
 
             if (Argument *arg = type->argumentAt(index)->asArgument()) {
                 if (index + 1 == _overview->markArgument())
-                    out(QLatin1String("<b>"));
+                    outPlain(QLatin1String("<b>"));
 
                 Name *name = 0;
 
@@ -335,7 +336,7 @@ void TypePrettyPrinter::visit(Function *type)
                 out(argumentText(arg->type(), name));
 
                 if (index + 1 == _overview->markArgument())
-                    out(QLatin1String("</b>"));
+                    outPlain(QLatin1String("</b>"));
             }
         }
 
@@ -367,9 +368,17 @@ void TypePrettyPrinter::space()
         _text += QLatin1Char(' ');
 }
 
-void TypePrettyPrinter::out(const QString &text)
+void TypePrettyPrinter::outPlain(const QString &text)
 { _text += text; }
 
+void TypePrettyPrinter::out(const QString &text)
+{
+    if (overview()->richText())
+        _text += Qt::escape(text);
+    else
+        _text += text;
+}
+
 void TypePrettyPrinter::out(const QChar &ch)
 { _text += ch; }
 
diff --git a/src/libs/cplusplus/TypePrettyPrinter.h b/src/libs/cplusplus/TypePrettyPrinter.h
index 432b400dd8d..42f020fa124 100644
--- a/src/libs/cplusplus/TypePrettyPrinter.h
+++ b/src/libs/cplusplus/TypePrettyPrinter.h
@@ -72,6 +72,7 @@ protected:
     virtual void visit(Enum *type);
 
     void space();
+    void outPlain(const QString &text);
     void out(const QString &text);
     void out(const QChar &ch);
     void outCV(const FullySpecifiedType &ty);
diff --git a/src/plugins/cpptools/cppcodecompletion.cpp b/src/plugins/cpptools/cppcodecompletion.cpp
index 0d580ff0f9d..fd7278cd65c 100644
--- a/src/plugins/cpptools/cppcodecompletion.cpp
+++ b/src/plugins/cpptools/cppcodecompletion.cpp
@@ -382,6 +382,7 @@ bool FunctionArgumentWidget::eventFilter(QObject *obj, QEvent *e)
 void FunctionArgumentWidget::updateHintText()
 {
     Overview overview;
+    overview.setRichText(true);
     overview.setShowReturnTypes(true);
     overview.setShowArgumentNames(true);
     overview.setMarkArgument(m_currentarg + 1);
-- 
GitLab