From b87edd821df54f0f767de5b9ef8ece9728e341e7 Mon Sep 17 00:00:00 2001
From: Leandro Melo <leandro.melo@nokia.com>
Date: Thu, 23 Sep 2010 18:34:17 +0200
Subject: [PATCH] Tooltips and help ids: Fix for templates.

Tooltips can still be improved.
---
 src/plugins/cppeditor/cppelementevaluator.cpp | 30 +++++++++++++++++++
 src/plugins/cppeditor/cppelementevaluator.h   | 13 ++++++++
 2 files changed, 43 insertions(+)

diff --git a/src/plugins/cppeditor/cppelementevaluator.cpp b/src/plugins/cppeditor/cppelementevaluator.cpp
index aedbfa65f64..4ed8a0b207a 100644
--- a/src/plugins/cppeditor/cppelementevaluator.cpp
+++ b/src/plugins/cppeditor/cppelementevaluator.cpp
@@ -192,6 +192,8 @@ void CppElementEvaluator::handleLookupItemMatch(const Snapshot &snapshot,
         } else if (declaration->isDeclaration() && type.isValid()) {
             m_element = QSharedPointer<CppElement>(
                 new CppVariable(declaration, context, lookupItem.scope()));
+        } else if (declaration->isTemplate() && declaration->asTemplate()->declaration()) {
+            m_element = QSharedPointer<CppElement>(new CppTemplate(declaration));
         } else {
             m_element = QSharedPointer<CppElement>(new CppDeclarableElement(declaration));
         }
@@ -491,3 +493,31 @@ CppVariable::CppVariable(Symbol *declaration, const LookupContext &context, Scop
 
 CppVariable::~CppVariable()
 {}
+
+// CppTemplate
+CppTemplate::CppTemplate(CPlusPlus::Symbol *declaration) : CppDeclarableElement(declaration)
+{
+    Template *templateSymbol = declaration->asTemplate();
+    if (templateSymbol->declaration()->isClass() ||
+        templateSymbol->declaration()->isForwardClassDeclaration()) {
+        m_isClassTemplate = true;
+        setHelpCategory(TextEditor::HelpItem::ClassOrNamespace);
+        setTooltip(qualifiedName());
+    } else {
+        m_isClassTemplate = false;
+        setHelpCategory(TextEditor::HelpItem::Function);
+    }
+}
+
+CppTemplate::~CppTemplate()
+{}
+
+bool CppTemplate::isClassTemplate() const
+{
+    return m_isClassTemplate;
+}
+
+bool CppTemplate::isFunctionTemplate() const
+{
+    return !m_isClassTemplate;
+}
diff --git a/src/plugins/cppeditor/cppelementevaluator.h b/src/plugins/cppeditor/cppelementevaluator.h
index 6a34f4666d4..f71e8b323e7 100644
--- a/src/plugins/cppeditor/cppelementevaluator.h
+++ b/src/plugins/cppeditor/cppelementevaluator.h
@@ -233,6 +233,19 @@ public:
     virtual ~CppVariable();
 };
 
+class CppTemplate : public CppDeclarableElement
+{
+public:
+    CppTemplate(CPlusPlus::Symbol *declaration);
+    virtual ~CppTemplate();
+
+    bool isClassTemplate() const;
+    bool isFunctionTemplate() const;
+
+private:
+    bool m_isClassTemplate;
+};
+
 } // namespace Internal
 } // namespace CppEditor
 
-- 
GitLab