forked from qt-creator/qt-creator
Do not prevent wrapping for long tooltips.
Reviewed-by: Robert Loehning
(cherry picked from commit 0ad6dfe09e
)
This commit is contained in:
@@ -61,6 +61,8 @@
|
|||||||
#include <QtGui/QToolTip>
|
#include <QtGui/QToolTip>
|
||||||
#include <QtGui/QTextCursor>
|
#include <QtGui/QTextCursor>
|
||||||
#include <QtGui/QTextBlock>
|
#include <QtGui/QTextBlock>
|
||||||
|
#include <QtGui/QApplication>
|
||||||
|
#include <QtGui/QDesktopWidget>
|
||||||
|
|
||||||
using namespace CppEditor::Internal;
|
using namespace CppEditor::Internal;
|
||||||
using namespace CPlusPlus;
|
using namespace CPlusPlus;
|
||||||
@@ -105,7 +107,7 @@ void CppHoverHandler::showToolTip(TextEditor::ITextEditor *editor, const QPoint
|
|||||||
if (core->hasContext(dbgcontext))
|
if (core->hasContext(dbgcontext))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
updateHelpIdAndTooltip(editor, pos);
|
updateHelpIdAndTooltip(editor, pos, QApplication::desktop()->screenNumber(point));
|
||||||
|
|
||||||
if (m_toolTip.isEmpty())
|
if (m_toolTip.isEmpty())
|
||||||
QToolTip::hideText();
|
QToolTip::hideText();
|
||||||
@@ -238,7 +240,9 @@ static FullySpecifiedType resolve(const FullySpecifiedType &ty,
|
|||||||
return ty;
|
return ty;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CppHoverHandler::updateHelpIdAndTooltip(TextEditor::ITextEditor *editor, int pos)
|
void CppHoverHandler::updateHelpIdAndTooltip(TextEditor::ITextEditor *editor,
|
||||||
|
int pos,
|
||||||
|
const int screen)
|
||||||
{
|
{
|
||||||
m_helpId.clear();
|
m_helpId.clear();
|
||||||
m_toolTip.clear();
|
m_toolTip.clear();
|
||||||
@@ -395,16 +399,36 @@ void CppHoverHandler::updateHelpIdAndTooltip(TextEditor::ITextEditor *editor, in
|
|||||||
if (!formatTooltip.isEmpty())
|
if (!formatTooltip.isEmpty())
|
||||||
m_toolTip = formatTooltip;
|
m_toolTip = formatTooltip;
|
||||||
|
|
||||||
|
const int tipWidth = QFontMetrics(QToolTip::font()).width(m_toolTip);
|
||||||
|
bool preventWrapping = true;
|
||||||
|
|
||||||
|
if (screen != -1) {
|
||||||
|
#ifdef Q_WS_MAC
|
||||||
|
int screenWidth = QApplication::desktop()->availableGeometry(screen).width();
|
||||||
|
#else
|
||||||
|
int screenWidth = QApplication::desktop()->screenGeometry(screen).width();
|
||||||
|
#endif
|
||||||
|
if (tipWidth > screenWidth * .8)
|
||||||
|
preventWrapping = false;
|
||||||
|
}
|
||||||
|
|
||||||
if (!m_helpId.isEmpty() && !helpLinks.isEmpty()) {
|
if (!m_helpId.isEmpty() && !helpLinks.isEmpty()) {
|
||||||
if (showF1) {
|
if (showF1) {
|
||||||
// we need the original width without escape sequences
|
if (preventWrapping) {
|
||||||
const int width = QFontMetrics(QToolTip::font()).width(m_toolTip);
|
|
||||||
m_toolTip = QString(QLatin1String("<table><tr><td valign=middle width=%2>%1</td>"
|
m_toolTip = QString(QLatin1String("<table><tr><td valign=middle width=%2>%1</td>"
|
||||||
"<td><img src=\":/cppeditor/images/f1.png\"></td></tr></table>"))
|
"<td><img src=\":/cppeditor/images/f1.png\"></td></tr></table>"))
|
||||||
.arg(Qt::escape(m_toolTip)).arg(width);
|
.arg(Qt::escape(m_toolTip)).arg(tipWidth);
|
||||||
|
} else {
|
||||||
|
m_toolTip = QString(QLatin1String("<table><tr><td valign=middle>%1</td>"
|
||||||
|
"<td><img src=\":/cppeditor/images/f1.png\"></td></tr></table>"))
|
||||||
|
.arg(Qt::escape(m_toolTip));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
editor->setContextHelpId(m_helpId);
|
editor->setContextHelpId(m_helpId);
|
||||||
} else if (!m_toolTip.isEmpty() && Qt::mightBeRichText(m_toolTip)) {
|
} else if (!m_toolTip.isEmpty()) {
|
||||||
m_toolTip = QString(QLatin1String("<nobr>%1</nobr>")).arg(Qt::escape(m_toolTip));
|
if (preventWrapping)
|
||||||
|
m_toolTip = QString(QLatin1String("<table><tr><td width=%2>%1</td></tr></table>")).arg(Qt::escape(m_toolTip)).arg(tipWidth);
|
||||||
|
else if (!Qt::mightBeRichText(m_toolTip))
|
||||||
|
m_toolTip = QString(QLatin1String("<p>%1</p>")).arg(Qt::escape(m_toolTip));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -66,7 +66,7 @@ private slots:
|
|||||||
void editorOpened(Core::IEditor *editor);
|
void editorOpened(Core::IEditor *editor);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void updateHelpIdAndTooltip(TextEditor::ITextEditor *editor, int pos);
|
void updateHelpIdAndTooltip(TextEditor::ITextEditor *editor, int pos, const int screen = -1);
|
||||||
|
|
||||||
CppTools::CppModelManagerInterface *m_modelManager;
|
CppTools::CppModelManagerInterface *m_modelManager;
|
||||||
QString m_helpId;
|
QString m_helpId;
|
||||||
|
Reference in New Issue
Block a user