%1 | "
@@ -201,9 +201,10 @@ int TextTip::showTime() const
return 10000 + 40 * qMax(0, m_text.size() - 100);
}
-bool TextTip::equals(int typeId, const QVariant &other, const QString &otherHelpId) const
+bool TextTip::equals(int typeId, const QVariant &other, const QVariant &otherContextHelp) const
{
- return typeId == ToolTip::TextContent && otherHelpId == helpId() && other.toString() == m_text;
+ return typeId == ToolTip::TextContent && otherContextHelp == contextHelp()
+ && other.toString() == m_text;
}
void TextTip::paintEvent(QPaintEvent *event)
@@ -280,9 +281,9 @@ bool WidgetTip::canHandleContentReplacement(int typeId) const
return false;
}
-bool WidgetTip::equals(int typeId, const QVariant &other, const QString &otherHelpId) const
+bool WidgetTip::equals(int typeId, const QVariant &other, const QVariant &otherContextHelp) const
{
- return typeId == ToolTip::WidgetContent && otherHelpId == helpId()
+ return typeId == ToolTip::WidgetContent && otherContextHelp == contextHelp()
&& other.value() == m_widget;
}
diff --git a/src/libs/utils/tooltip/tips.h b/src/libs/utils/tooltip/tips.h
index 764e10eb8ae..22415075ab8 100644
--- a/src/libs/utils/tooltip/tips.h
+++ b/src/libs/utils/tooltip/tips.h
@@ -46,15 +46,15 @@ public:
virtual int showTime() const = 0;
virtual void configure(const QPoint &pos, QWidget *w) = 0;
virtual bool canHandleContentReplacement(int typeId) const = 0;
- virtual bool equals(int typeId, const QVariant &other, const QString &helpId) const = 0;
- virtual void setHelpId(const QString &id);
- virtual QString helpId() const;
+ virtual bool equals(int typeId, const QVariant &other, const QVariant &contextHelp) const = 0;
+ virtual void setContextHelp(const QVariant &help);
+ virtual QVariant contextHelp() const;
protected:
const QMetaObject *metaObject() const override;
private:
- QString m_helpId;
+ QVariant m_contextHelp;
};
class TextTip : public TipLabel
@@ -67,7 +67,7 @@ public:
void configure(const QPoint &pos, QWidget *w) override;
bool canHandleContentReplacement(int typeId) const override;
int showTime() const override;
- bool equals(int typeId, const QVariant &other, const QString &otherHelpId) const override;
+ bool equals(int typeId, const QVariant &other, const QVariant &otherContextHelp) const override;
void paintEvent(QPaintEvent *event) override;
void resizeEvent(QResizeEvent *event) override;
@@ -84,7 +84,7 @@ public:
void configure(const QPoint &pos, QWidget *w) override;
bool canHandleContentReplacement(int typeId) const override;
int showTime() const override { return 4000; }
- bool equals(int typeId, const QVariant &other, const QString &otherHelpId) const override;
+ bool equals(int typeId, const QVariant &other, const QVariant &otherContextHelp) const override;
void paintEvent(QPaintEvent *event) override;
private:
@@ -104,7 +104,7 @@ public:
void configure(const QPoint &pos, QWidget *w) override;
bool canHandleContentReplacement(int typeId) const override;
int showTime() const override { return 30000; }
- bool equals(int typeId, const QVariant &other, const QString &otherHelpId) const override;
+ bool equals(int typeId, const QVariant &other, const QVariant &otherContextHelp) const override;
bool isInteractive() const override { return true; }
private:
diff --git a/src/libs/utils/tooltip/tooltip.cpp b/src/libs/utils/tooltip/tooltip.cpp
index 42ce6b5c565..de3c536c5fe 100644
--- a/src/libs/utils/tooltip/tooltip.cpp
+++ b/src/libs/utils/tooltip/tooltip.cpp
@@ -62,36 +62,36 @@ ToolTip *ToolTip::instance()
return &tooltip;
}
-void ToolTip::show(const QPoint &pos, const QString &content, QWidget *w, const QString &helpId, const QRect &rect)
+void ToolTip::show(const QPoint &pos, const QString &content, QWidget *w, const QVariant &contextHelp, const QRect &rect)
{
if (content.isEmpty())
instance()->hideTipWithDelay();
else
- instance()->showInternal(pos, QVariant(content), TextContent, w, helpId, rect);
+ instance()->showInternal(pos, QVariant(content), TextContent, w, contextHelp, rect);
}
-void ToolTip::show(const QPoint &pos, const QColor &color, QWidget *w, const QString &helpId, const QRect &rect)
+void ToolTip::show(const QPoint &pos, const QColor &color, QWidget *w, const QVariant &contextHelp, const QRect &rect)
{
if (!color.isValid())
instance()->hideTipWithDelay();
else
- instance()->showInternal(pos, QVariant(color), ColorContent, w, helpId, rect);
+ instance()->showInternal(pos, QVariant(color), ColorContent, w, contextHelp, rect);
}
-void ToolTip::show(const QPoint &pos, QWidget *content, QWidget *w, const QString &helpId, const QRect &rect)
+void ToolTip::show(const QPoint &pos, QWidget *content, QWidget *w, const QVariant &contextHelp, const QRect &rect)
{
if (!content)
instance()->hideTipWithDelay();
else
- instance()->showInternal(pos, QVariant::fromValue(content), WidgetContent, w, helpId, rect);
+ instance()->showInternal(pos, QVariant::fromValue(content), WidgetContent, w, contextHelp, rect);
}
-void ToolTip::show(const QPoint &pos, QLayout *content, QWidget *w, const QString &helpId, const QRect &rect)
+void ToolTip::show(const QPoint &pos, QLayout *content, QWidget *w, const QVariant &contextHelp, const QRect &rect)
{
if (content && content->count()) {
auto tooltipWidget = new FakeToolTip;
tooltipWidget->setLayout(content);
- instance()->showInternal(pos, QVariant::fromValue(tooltipWidget), WidgetContent, w, helpId, rect);
+ instance()->showInternal(pos, QVariant::fromValue(tooltipWidget), WidgetContent, w, contextHelp, rect);
} else {
instance()->hideTipWithDelay();
}
@@ -118,15 +118,15 @@ bool ToolTip::pinToolTip(QWidget *w, QWidget *parent)
return false;
}
-QString ToolTip::contextHelpId()
+QVariant ToolTip::contextHelp()
{
- return instance()->m_tip ? instance()->m_tip->helpId() : QString();
+ return instance()->m_tip ? instance()->m_tip->contextHelp() : QVariant();
}
bool ToolTip::acceptShow(const QVariant &content,
int typeId,
const QPoint &pos,
- QWidget *w, const QString &helpId,
+ QWidget *w, const QVariant &contextHelp,
const QRect &rect)
{
if (isVisible()) {
@@ -135,9 +135,9 @@ bool ToolTip::acceptShow(const QVariant &content,
QPoint localPos = pos;
if (w)
localPos = w->mapFromGlobal(pos);
- if (tipChanged(localPos, content, typeId, w, helpId)) {
+ if (tipChanged(localPos, content, typeId, w, contextHelp)) {
m_tip->setContent(content);
- m_tip->setHelpId(helpId);
+ m_tip->setContextHelp(contextHelp);
setUp(pos, w, rect);
}
return false;
@@ -169,9 +169,9 @@ void ToolTip::setUp(const QPoint &pos, QWidget *w, const QRect &rect)
}
bool ToolTip::tipChanged(const QPoint &pos, const QVariant &content, int typeId, QWidget *w,
- const QString &helpId) const
+ const QVariant &contextHelp) const
{
- if (!m_tip->equals(typeId, content, helpId) || m_widget != w)
+ if (!m_tip->equals(typeId, content, contextHelp) || m_widget != w)
return true;
if (!m_rect.isNull())
return !m_rect.contains(pos);
@@ -243,9 +243,9 @@ void ToolTip::hideTipImmediately()
}
void ToolTip::showInternal(const QPoint &pos, const QVariant &content,
- int typeId, QWidget *w, const QString &helpId, const QRect &rect)
+ int typeId, QWidget *w, const QVariant &contextHelp, const QRect &rect)
{
- if (acceptShow(content, typeId, pos, w, helpId, rect)) {
+ if (acceptShow(content, typeId, pos, w, contextHelp, rect)) {
QWidget *target = nullptr;
if (HostOsInfo::isWindowsHost())
target = QApplication::desktop()->screen(Internal::screenNumber(pos, w));
@@ -264,7 +264,7 @@ void ToolTip::showInternal(const QPoint &pos, const QVariant &content,
break;
}
m_tip->setContent(content);
- m_tip->setHelpId(helpId);
+ m_tip->setContextHelp(contextHelp);
setUp(pos, w, rect);
qApp->installEventFilter(this);
showTip();
diff --git a/src/libs/utils/tooltip/tooltip.h b/src/libs/utils/tooltip/tooltip.h
index d78623b41ff..8a4a0e83096 100644
--- a/src/libs/utils/tooltip/tooltip.h
+++ b/src/libs/utils/tooltip/tooltip.h
@@ -32,6 +32,7 @@
#include
#include
#include
+#include
/*
* In its current form QToolTip is not extensible. So this is an attempt to provide a more
@@ -72,13 +73,13 @@ public:
static ToolTip *instance();
static void show(const QPoint &pos, const QString &content, QWidget *w = nullptr,
- const QString &helpId = QString(), const QRect &rect = QRect());
+ const QVariant &contextHelp = {}, const QRect &rect = QRect());
static void show(const QPoint &pos, const QColor &color, QWidget *w = nullptr,
- const QString &helpId = QString(), const QRect &rect = QRect());
+ const QVariant &contextHelp = {}, const QRect &rect = QRect());
static void show(const QPoint &pos, QWidget *content, QWidget *w = nullptr,
- const QString &helpId = QString(), const QRect &rect = QRect());
+ const QVariant &contextHelp = {}, const QRect &rect = QRect());
static void show(const QPoint &pos, QLayout *content, QWidget *w = nullptr,
- const QString &helpId = QString(), const QRect &rect = QRect());
+ const QVariant &contextHelp = {}, const QRect &rect = QRect());
static void move(const QPoint &pos, QWidget *w);
static void hide();
static void hideImmediately();
@@ -90,7 +91,7 @@ public:
// using WidgetContent
static bool pinToolTip(QWidget *w, QWidget *parent);
- static QString contextHelpId();
+ static QVariant contextHelp();
signals:
void shown();
@@ -98,13 +99,13 @@ signals:
private:
void showInternal(const QPoint &pos, const QVariant &content, int typeId, QWidget *w,
- const QString &helpId, const QRect &rect);
+ const QVariant &contextHelp, const QRect &rect);
void hideTipImmediately();
bool acceptShow(const QVariant &content, int typeId, const QPoint &pos, QWidget *w,
- const QString &helpId, const QRect &rect);
+ const QVariant &contextHelp, const QRect &rect);
void setUp(const QPoint &pos, QWidget *w, const QRect &rect);
bool tipChanged(const QPoint &pos, const QVariant &content, int typeId, QWidget *w,
- const QString &helpId) const;
+ const QVariant &contextHelp) const;
void setTipRect(QWidget *w, const QRect &rect);
void placeTip(const QPoint &pos, QWidget *w);
void showTip();
@@ -115,7 +116,7 @@ private:
QRect m_rect;
QTimer m_showTimer;
QTimer m_hideDelayTimer;
- QString m_helpId;
+ QVariant m_contextHelp;
};
} // namespace Utils
diff --git a/src/plugins/clangcodemodel/clanghoverhandler.cpp b/src/plugins/clangcodemodel/clanghoverhandler.cpp
index fb8b751d879..446b436325e 100644
--- a/src/plugins/clangcodemodel/clanghoverhandler.cpp
+++ b/src/plugins/clangcodemodel/clanghoverhandler.cpp
@@ -75,7 +75,7 @@ static bool editorDocumentProcessorHasDiagnosticAt(TextEditorWidget *editorWidge
static void processWithEditorDocumentProcessor(TextEditorWidget *editorWidget,
const QPoint &point,
int position,
- const QString &helpId)
+ const Core::HelpItem &helpItem)
{
if (CppTools::BaseEditorDocumentProcessor *processor = editorDocumentProcessor(editorWidget)) {
int line, column;
@@ -84,7 +84,7 @@ static void processWithEditorDocumentProcessor(TextEditorWidget *editorWidget,
layout->setContentsMargins(0, 0, 0, 0);
layout->setSpacing(2);
processor->addDiagnosticToolTipToLayout(line, column, layout);
- Utils::ToolTip::show(point, layout, editorWidget, helpId);
+ Utils::ToolTip::show(point, layout, editorWidget, qVariantFromValue(helpItem));
}
}
}
@@ -283,9 +283,10 @@ void ClangHoverHandler::operateTooltip(TextEditor::TextEditorWidget *editorWidge
const QPoint &point)
{
if (priority() == Priority_Diagnostic) {
- const Core::HelpItem helpItem = lastHelpItemIdentified();
- const QString helpId = helpItem.isValid() ? helpItem.helpId() : QString();
- processWithEditorDocumentProcessor(editorWidget, point, m_cursorPosition, helpId);
+ processWithEditorDocumentProcessor(editorWidget,
+ point,
+ m_cursorPosition,
+ lastHelpItemIdentified());
return;
}
diff --git a/src/plugins/coreplugin/helpitem.h b/src/plugins/coreplugin/helpitem.h
index ef07bdbb069..1e424056c72 100644
--- a/src/plugins/coreplugin/helpitem.h
+++ b/src/plugins/coreplugin/helpitem.h
@@ -32,6 +32,7 @@
#include
#include
#include
+#include
namespace Core {
@@ -89,3 +90,5 @@ private:
};
} // namespace Core
+
+Q_DECLARE_METATYPE(Core::HelpItem)
diff --git a/src/plugins/help/helpplugin.cpp b/src/plugins/help/helpplugin.cpp
index f0e253776b2..6b7dd0ac17f 100644
--- a/src/plugins/help/helpplugin.cpp
+++ b/src/plugins/help/helpplugin.cpp
@@ -647,12 +647,15 @@ static QUrl findBestLink(const QMap &links)
void HelpPluginPrivate::requestContextHelp()
{
// Find out what to show
- QString contextHelpId = Utils::ToolTip::contextHelpId();
+ const QVariant tipHelpValue = Utils::ToolTip::contextHelp();
+ const HelpItem tipHelp = tipHelpValue.canConvert()
+ ? tipHelpValue.value()
+ : HelpItem(tipHelpValue.toString());
IContext *context = ICore::currentContextObject();
- if (contextHelpId.isEmpty() && context)
+ if (!tipHelp.isValid() && context)
context->contextHelp([this](const HelpItem &item) { showContextHelp(item); });
else
- showContextHelp(contextHelpId);
+ showContextHelp(tipHelp);
}
void HelpPluginPrivate::showContextHelp(const HelpItem &contextHelp)
diff --git a/src/plugins/texteditor/basehoverhandler.cpp b/src/plugins/texteditor/basehoverhandler.cpp
index a94374fbbdf..72e35ba5bb3 100644
--- a/src/plugins/texteditor/basehoverhandler.cpp
+++ b/src/plugins/texteditor/basehoverhandler.cpp
@@ -159,9 +159,10 @@ void BaseHoverHandler::operateTooltip(TextEditorWidget *editorWidget, const QPoi
if (m_toolTip.isEmpty())
Utils::ToolTip::hide();
else
- Utils::ToolTip::show(point, m_toolTip, editorWidget, m_lastHelpItemIdentified.isValid()
- ? m_lastHelpItemIdentified.helpId()
- : QString());
+ Utils::ToolTip::show(point,
+ m_toolTip,
+ editorWidget,
+ qVariantFromValue(m_lastHelpItemIdentified));
}
} // namespace TextEditor
diff --git a/src/plugins/texteditor/texteditor.cpp b/src/plugins/texteditor/texteditor.cpp
index 4e9de84f103..7f9ad3b5f33 100644
--- a/src/plugins/texteditor/texteditor.cpp
+++ b/src/plugins/texteditor/texteditor.cpp
@@ -3565,7 +3565,7 @@ bool TextEditorWidget::viewportEvent(QEvent *event)
RefactorMarker refactorMarker = d->m_refactorOverlay->markerAt(pos);
if (refactorMarker.isValid() && !refactorMarker.tooltip.isEmpty()) {
ToolTip::show(he->globalPos(), refactorMarker.tooltip,
- viewport(), QString(), refactorMarker.rect);
+ viewport(), {}, refactorMarker.rect);
return true;
}
|