From 59c53592139b3c9ae048aaf994638394cd5c8f09 Mon Sep 17 00:00:00 2001
From: Roberto Raggi <roberto.raggi@nokia.com>
Date: Fri, 26 Nov 2010 11:17:30 +0100
Subject: [PATCH] Show tooltips with the error messages.

---
 src/plugins/glsleditor/glsleditor.pro       |  6 +-
 src/plugins/glsleditor/glsleditorplugin.cpp |  3 +
 src/plugins/glsleditor/glslhoverhandler.cpp | 73 +++++++++++++++++++++
 src/plugins/glsleditor/glslhoverhandler.h   | 64 ++++++++++++++++++
 4 files changed, 144 insertions(+), 2 deletions(-)
 create mode 100644 src/plugins/glsleditor/glslhoverhandler.cpp
 create mode 100644 src/plugins/glsleditor/glslhoverhandler.h

diff --git a/src/plugins/glsleditor/glsleditor.pro b/src/plugins/glsleditor/glsleditor.pro
index 424c0d0c334..be0cdf3b439 100644
--- a/src/plugins/glsleditor/glsleditor.pro
+++ b/src/plugins/glsleditor/glsleditor.pro
@@ -19,7 +19,8 @@ glslfilewizard.h \
 glslhighlighter.h \
 glslcodecompletion.h \
 glslautocompleter.h \
-glslindenter.h
+glslindenter.h \
+glslhoverhandler.h
 
 SOURCES += \
 glsleditor.cpp \
@@ -31,7 +32,8 @@ glslfilewizard.cpp \
 glslhighlighter.cpp \
 glslcodecompletion.cpp \
 glslautocompleter.cpp \
-glslindenter.cpp
+glslindenter.cpp \
+glslhoverhandler.cpp
 
 OTHER_FILES += GLSLEditor.mimetypes.xml
 RESOURCES += glsleditor.qrc
diff --git a/src/plugins/glsleditor/glsleditorplugin.cpp b/src/plugins/glsleditor/glsleditorplugin.cpp
index e4adcd1fdae..a023f7198fa 100644
--- a/src/plugins/glsleditor/glsleditorplugin.cpp
+++ b/src/plugins/glsleditor/glsleditorplugin.cpp
@@ -33,6 +33,7 @@
 #include "glsleditorfactory.h"
 #include "glslcodecompletion.h"
 #include "glslfilewizard.h"
+#include "glslhoverhandler.h"
 
 #include <coreplugin/icore.h>
 #include <coreplugin/coreconstants.h>
@@ -104,6 +105,8 @@ bool GLSLEditorPlugin::initialize(const QStringList & /*arguments*/, QString *er
 //    m_modelManager = new ModelManager(this);
 //    addAutoReleasedObject(m_modelManager);
 
+    addAutoReleasedObject(new GLSLHoverHandler(this));
+
     Core::Context context(GLSLEditor::Constants::C_GLSLEDITOR_ID);
 
     m_editor = new GLSLEditorFactory(this);
diff --git a/src/plugins/glsleditor/glslhoverhandler.cpp b/src/plugins/glsleditor/glslhoverhandler.cpp
new file mode 100644
index 00000000000..e2e9702f563
--- /dev/null
+++ b/src/plugins/glsleditor/glslhoverhandler.cpp
@@ -0,0 +1,73 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** Commercial Usage
+**
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** GNU Lesser General Public License Usage
+**
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://qt.nokia.com/contact.
+**
+**************************************************************************/
+
+#include "glslhoverhandler.h"
+#include "glsleditor.h"
+
+#include <coreplugin/editormanager/ieditor.h>
+#include <coreplugin/editormanager/editormanager.h>
+#include <coreplugin/helpmanager.h>
+#include <extensionsystem/pluginmanager.h>
+#include <texteditor/itexteditor.h>
+#include <texteditor/basetexteditor.h>
+
+#include <QtGui/QTextCursor>
+#include <QtCore/QUrl>
+
+using namespace GLSLEditor;
+using namespace GLSLEditor::Internal;
+using namespace Core;
+
+GLSLHoverHandler::GLSLHoverHandler(QObject *parent) : BaseHoverHandler(parent)
+{}
+
+GLSLHoverHandler::~GLSLHoverHandler()
+{}
+
+bool GLSLHoverHandler::acceptEditor(IEditor *editor)
+{
+    if (qobject_cast<GLSLEditorEditable *>(editor) != 0)
+        return true;
+    return false;
+}
+
+void GLSLHoverHandler::identifyMatch(TextEditor::ITextEditor *editor, int pos)
+{
+    if (GLSLTextEditor *glslEditor = qobject_cast<GLSLTextEditor *>(editor->widget())) {
+        if (! glslEditor->extraSelectionTooltip(pos).isEmpty()) {
+            setToolTip(glslEditor->extraSelectionTooltip(pos));
+        }
+    }
+}
+
+void GLSLHoverHandler::decorateToolTip()
+{
+    if (Qt::mightBeRichText(toolTip()))
+        setToolTip(Qt::escape(toolTip()));
+}
diff --git a/src/plugins/glsleditor/glslhoverhandler.h b/src/plugins/glsleditor/glslhoverhandler.h
new file mode 100644
index 00000000000..08e3ed72713
--- /dev/null
+++ b/src/plugins/glsleditor/glslhoverhandler.h
@@ -0,0 +1,64 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** Commercial Usage
+**
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** GNU Lesser General Public License Usage
+**
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://qt.nokia.com/contact.
+**
+**************************************************************************/
+
+#ifndef GLSLHOVERHANDLER_H
+#define GLSLHOVERHANDLER_H
+
+#include <texteditor/basehoverhandler.h>
+
+#include <QtCore/QObject>
+
+namespace Core {
+class IEditor;
+}
+
+namespace TextEditor {
+class ITextEditor;
+}
+
+namespace GLSLEditor {
+namespace Internal {
+
+class GLSLHoverHandler : public TextEditor::BaseHoverHandler
+{
+    Q_OBJECT
+public:
+    GLSLHoverHandler(QObject *parent = 0);
+    virtual ~GLSLHoverHandler();
+
+private:
+    virtual bool acceptEditor(Core::IEditor *editor);
+    virtual void identifyMatch(TextEditor::ITextEditor *editor, int pos);
+    virtual void decorateToolTip();
+};
+
+} // namespace Internal
+} // namespace GLSLEditor
+
+#endif // GLSLHOVERHANDLER_H
-- 
GitLab