diff --git a/src/plugins/cmakeprojectmanager/cmakeeditor.cpp b/src/plugins/cmakeprojectmanager/cmakeeditor.cpp index afb8a62d531..a1973454190 100644 --- a/src/plugins/cmakeprojectmanager/cmakeeditor.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeeditor.cpp @@ -61,7 +61,7 @@ namespace Internal { // CMakeEditor // -QString CMakeEditor::contextHelpId() const +void CMakeEditor::contextHelpId(const HelpIdCallback &callback) const { int pos = position(); @@ -71,8 +71,10 @@ QString CMakeEditor::contextHelpId() const if (pos < 0) break; chr = characterAt(pos); - if (chr == QLatin1Char('(')) - return QString(); + if (chr == QLatin1Char('(')) { + callback(QString()); + return; + } } while (chr.unicode() != QChar::ParagraphSeparator); ++pos; @@ -95,11 +97,13 @@ QString CMakeEditor::contextHelpId() const } // Not a command - if (chr != QLatin1Char('(')) - return QString(); + if (chr != QLatin1Char('(')) { + callback(QString()); + return; + } QString command = textAt(begin, end - begin).toLower(); - return QLatin1String("command/") + command; + callback(QLatin1String("command/") + command); } // diff --git a/src/plugins/cmakeprojectmanager/cmakeeditor.h b/src/plugins/cmakeprojectmanager/cmakeeditor.h index 93151db5471..364fb48c026 100644 --- a/src/plugins/cmakeprojectmanager/cmakeeditor.h +++ b/src/plugins/cmakeprojectmanager/cmakeeditor.h @@ -38,7 +38,7 @@ class CMakeEditor : public TextEditor::BaseTextEditor Q_OBJECT public: - QString contextHelpId() const override; + void contextHelpId(const HelpIdCallback &callback) const override; friend class CMakeEditorWidget; }; diff --git a/src/plugins/coreplugin/icontext.h b/src/plugins/coreplugin/icontext.h index 0baf9eee23f..486223c664a 100644 --- a/src/plugins/coreplugin/icontext.h +++ b/src/plugins/coreplugin/icontext.h @@ -33,6 +33,8 @@ #include #include +#include + namespace Core { class CORE_EXPORT Context @@ -71,7 +73,8 @@ public: virtual Context context() const { return m_context; } virtual QWidget *widget() const { return m_widget; } - virtual QString contextHelpId() const { return m_contextHelpId; } + using HelpIdCallback = std::function; + virtual void contextHelpId(const HelpIdCallback &callback) const { callback(m_contextHelpId); } virtual void setContext(const Context &context) { m_context = context; } virtual void setWidget(QWidget *widget) { m_widget = widget; } diff --git a/src/plugins/designer/designercontext.cpp b/src/plugins/designer/designercontext.cpp index f9407149d3a..bff77559b15 100644 --- a/src/plugins/designer/designercontext.cpp +++ b/src/plugins/designer/designercontext.cpp @@ -45,10 +45,10 @@ DesignerContext::DesignerContext(const Core::Context &context, setWidget(widget); } -QString DesignerContext::contextHelpId() const +void DesignerContext::contextHelpId(const HelpIdCallback &callback) const { const QDesignerFormEditorInterface *core = FormEditorW::designerEditor(); - return core->integration()->contextHelpId(); + callback(core->integration()->contextHelpId()); } } // namespace Internal diff --git a/src/plugins/designer/designercontext.h b/src/plugins/designer/designercontext.h index 5802d2cf3be..3259951e7d3 100644 --- a/src/plugins/designer/designercontext.h +++ b/src/plugins/designer/designercontext.h @@ -37,7 +37,7 @@ public: QWidget *widget, QObject *parent = nullptr); - QString contextHelpId() const override; + void contextHelpId(const HelpIdCallback &callback) const override; }; } // namespace Internal diff --git a/src/plugins/help/helpplugin.cpp b/src/plugins/help/helpplugin.cpp index 4595ff3151b..de85ae9968a 100644 --- a/src/plugins/help/helpplugin.cpp +++ b/src/plugins/help/helpplugin.cpp @@ -194,7 +194,7 @@ bool HelpPlugin::initialize(const QStringList &arguments, QString *error) Context(kToolTipHelpContext, Core::Constants::C_GLOBAL)); ActionManager::actionContainer(Core::Constants::M_HELP)->addAction(cmd, Core::Constants::G_HELP_HELP); cmd->setDefaultKeySequence(QKeySequence(Qt::Key_F1)); - connect(action, &QAction::triggered, this, &HelpPlugin::showContextHelp); + connect(action, &QAction::triggered, this, &HelpPlugin::requestContextHelp); action = new QAction(tr("Technical Support"), this); cmd = ActionManager::registerAction(action, "Help.TechSupport"); @@ -573,14 +573,19 @@ static QUrl findBestLink(const QMap &links, QString *highlightId) return source; } -void HelpPlugin::showContextHelp() +void HelpPlugin::requestContextHelp() { // Find out what to show QString contextHelpId = Utils::ToolTip::contextHelpId(); IContext *context = ICore::currentContextObject(); if (contextHelpId.isEmpty() && context) - contextHelpId = context->contextHelpId(); + context->contextHelpId([this](const QString &id) { showContextHelp(id); }); + else + showContextHelp(contextHelpId); +} +void HelpPlugin::showContextHelp(const QString &contextHelpId) +{ // get the viewer after getting the help id, // because a new window might be opened and therefore focus be moved HelpViewer *viewer = viewerForContextHelp(); diff --git a/src/plugins/help/helpplugin.h b/src/plugins/help/helpplugin.h index 52eb5a73701..5fdcfa87153 100644 --- a/src/plugins/help/helpplugin.h +++ b/src/plugins/help/helpplugin.h @@ -76,7 +76,8 @@ public: private: void modeChanged(Core::Id mode, Core::Id old); - void showContextHelp(); + void requestContextHelp(); + void showContextHelp(const QString &contextHelpId); void activateIndex(); void activateContents(); diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorwidget.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorwidget.cpp index 012f1162ad5..059261c3a28 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorwidget.cpp +++ b/src/plugins/qmldesigner/components/formeditor/formeditorwidget.cpp @@ -334,12 +334,12 @@ double FormEditorWidget::containerPadding() const } -QString FormEditorWidget::contextHelpId() const +void FormEditorWidget::contextHelpId(const Core::IContext::HelpIdCallback &callback) const { if (m_formEditorView) - return m_formEditorView->contextHelpId(); - - return QString(); + m_formEditorView->contextHelpId(callback); + else + callback(QString()); } void FormEditorWidget::setRootItemRect(const QRectF &rect) diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorwidget.h b/src/plugins/qmldesigner/components/formeditor/formeditorwidget.h index 261816ddffa..96d354afbb5 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorwidget.h +++ b/src/plugins/qmldesigner/components/formeditor/formeditorwidget.h @@ -26,6 +26,8 @@ #include +#include + #include #include @@ -62,7 +64,7 @@ public: double spacing() const; double containerPadding() const; - QString contextHelpId() const; + void contextHelpId(const Core::IContext::HelpIdCallback &callback) const; void setRootItemRect(const QRectF &rect); QRectF rootItemRect() const; diff --git a/src/plugins/qmldesigner/components/integration/designdocument.cpp b/src/plugins/qmldesigner/components/integration/designdocument.cpp index 2235e984a1d..068915d13cd 100644 --- a/src/plugins/qmldesigner/components/integration/designdocument.cpp +++ b/src/plugins/qmldesigner/components/integration/designdocument.cpp @@ -651,12 +651,12 @@ void DesignDocument::updateCurrentProject() viewManager().setNodeInstanceViewProject(currentProject); } -QString DesignDocument::contextHelpId() const +void DesignDocument::contextHelpId(const Core::IContext::HelpIdCallback &callback) const { if (view()) - return view()->contextHelpId(); - - return QString(); + view()->contextHelpId(callback); + else + callback(QString()); } } // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/components/integration/designdocument.h b/src/plugins/qmldesigner/components/integration/designdocument.h index e4048dae26f..a7f657ff30a 100644 --- a/src/plugins/qmldesigner/components/integration/designdocument.h +++ b/src/plugins/qmldesigner/components/integration/designdocument.h @@ -31,6 +31,8 @@ #include #include +#include + #include #include @@ -75,7 +77,7 @@ public: Model *currentModel() const; Model *documentModel() const; - QString contextHelpId() const; + void contextHelpId(const Core::IContext::HelpIdCallback &callback) const; QList qmlParseWarnings() const; bool hasQmlParseWarnings() const; QList qmlParseErrors() const; diff --git a/src/plugins/qmldesigner/components/navigator/navigatorwidget.cpp b/src/plugins/qmldesigner/components/navigator/navigatorwidget.cpp index 6f7995a185f..6926f7a9b3f 100644 --- a/src/plugins/qmldesigner/components/navigator/navigatorwidget.cpp +++ b/src/plugins/qmldesigner/components/navigator/navigatorwidget.cpp @@ -130,12 +130,12 @@ QList NavigatorWidget::createToolBarWidgets() return buttons; } -QString NavigatorWidget::contextHelpId() const +void NavigatorWidget::contextHelpId(const Core::IContext::HelpIdCallback &callback) const { if (navigatorView()) - return navigatorView()->contextHelpId(); - - return QString(); + navigatorView()->contextHelpId(callback); + else + callback(QString()); } NavigatorView *NavigatorWidget::navigatorView() const diff --git a/src/plugins/qmldesigner/components/navigator/navigatorwidget.h b/src/plugins/qmldesigner/components/navigator/navigatorwidget.h index 45e8b19c9b5..95f1643b840 100644 --- a/src/plugins/qmldesigner/components/navigator/navigatorwidget.h +++ b/src/plugins/qmldesigner/components/navigator/navigatorwidget.h @@ -25,6 +25,8 @@ #pragma once +#include + #include #include @@ -46,7 +48,7 @@ public: void setTreeModel(QAbstractItemModel *model); QTreeView *treeView() const; QList createToolBarWidgets(); - QString contextHelpId() const; + void contextHelpId(const Core::IContext::HelpIdCallback &callback) const; signals: void leftButtonClicked(); diff --git a/src/plugins/qmldesigner/components/texteditor/texteditorview.cpp b/src/plugins/qmldesigner/components/texteditor/texteditorview.cpp index 31fb93a03d8..495f6762ca3 100644 --- a/src/plugins/qmldesigner/components/texteditor/texteditorview.cpp +++ b/src/plugins/qmldesigner/components/texteditor/texteditorview.cpp @@ -150,19 +150,17 @@ WidgetInfo TextEditorView::widgetInfo() return createWidgetInfo(m_widget.get(), 0, "TextEditor", WidgetInfo::CentralPane, 0, tr("Text Editor"), DesignerWidgetFlags::IgnoreErrors); } -QString TextEditorView::contextHelpId() const +void TextEditorView::contextHelpId(const Core::IContext::HelpIdCallback &callback) const { - return AbstractView::contextHelpId(); + AbstractView::contextHelpId(callback); } -QString TextEditorView::qmlJSEditorHelpId() const +void TextEditorView::qmlJSEditorHelpId(const Core::IContext::HelpIdCallback &callback) const { - if (m_widget->textEditor()) { - QString contextHelpId = m_widget->textEditor()->contextHelpId(); - if (!contextHelpId.isEmpty()) - return m_widget->textEditor()->contextHelpId(); - } - return QString(); + if (m_widget->textEditor()) + m_widget->textEditor()->contextHelpId(callback); + else + callback(QString()); } void TextEditorView::nodeIdChanged(const ModelNode& /*node*/, const QString &/*newId*/, const QString &/*oldId*/) diff --git a/src/plugins/qmldesigner/components/texteditor/texteditorview.h b/src/plugins/qmldesigner/components/texteditor/texteditorview.h index 01ac15f2191..ea7766115a1 100644 --- a/src/plugins/qmldesigner/components/texteditor/texteditorview.h +++ b/src/plugins/qmldesigner/components/texteditor/texteditorview.h @@ -24,6 +24,8 @@ ****************************************************************************/ #pragma once +#include + #include #include @@ -67,9 +69,9 @@ public: // TextEditorView WidgetInfo widgetInfo() override; - QString contextHelpId() const override; + void contextHelpId(const Core::IContext::HelpIdCallback &callback) const override; - QString qmlJSEditorHelpId() const; + void qmlJSEditorHelpId(const Core::IContext::HelpIdCallback &callback) const; TextEditor::BaseTextEditor *textEditor(); diff --git a/src/plugins/qmldesigner/components/texteditor/texteditorwidget.cpp b/src/plugins/qmldesigner/components/texteditor/texteditorwidget.cpp index f46df03687c..8c0e715ba99 100644 --- a/src/plugins/qmldesigner/components/texteditor/texteditorwidget.cpp +++ b/src/plugins/qmldesigner/components/texteditor/texteditorwidget.cpp @@ -94,9 +94,9 @@ void TextEditorWidget::setTextEditor(TextEditor::BaseTextEditor *textEditor) oldEditor->deleteLater(); } -QString TextEditorWidget::contextHelpId() const +void TextEditorWidget::contextHelpId(const Core::IContext::HelpIdCallback &callback) const { - return m_textEditorView->contextHelpId(); + m_textEditorView->contextHelpId(callback); } void TextEditorWidget::updateSelectionByCursorPosition() diff --git a/src/plugins/qmldesigner/components/texteditor/texteditorwidget.h b/src/plugins/qmldesigner/components/texteditor/texteditorwidget.h index 7ab245adbbf..5dceef8c029 100644 --- a/src/plugins/qmldesigner/components/texteditor/texteditorwidget.h +++ b/src/plugins/qmldesigner/components/texteditor/texteditorwidget.h @@ -50,7 +50,7 @@ public: return m_textEditor.get(); } - QString contextHelpId() const; + void contextHelpId(const Core::IContext::HelpIdCallback &callback) const; void jumpTextCursorToSelectedModelNode(); void gotoCursorPosition(int line, int column); diff --git a/src/plugins/qmldesigner/designercore/include/abstractview.h b/src/plugins/qmldesigner/designercore/include/abstractview.h index 8b085f91371..a55d874a520 100644 --- a/src/plugins/qmldesigner/designercore/include/abstractview.h +++ b/src/plugins/qmldesigner/designercore/include/abstractview.h @@ -34,6 +34,8 @@ #include #include +#include + #include #include @@ -255,7 +257,7 @@ public: virtual bool hasWidget() const; virtual WidgetInfo widgetInfo(); - virtual QString contextHelpId() const; + virtual void contextHelpId(const Core::IContext::HelpIdCallback &callback) const; void activateTimelineRecording(const ModelNode &mutator); void deactivateTimelineRecording(); diff --git a/src/plugins/qmldesigner/designercore/include/viewmanager.h b/src/plugins/qmldesigner/designercore/include/viewmanager.h index b1a8077202e..d6123d73d5d 100644 --- a/src/plugins/qmldesigner/designercore/include/viewmanager.h +++ b/src/plugins/qmldesigner/designercore/include/viewmanager.h @@ -95,7 +95,7 @@ public: void toggleStatesViewExpanded(); - QString qmlJSEditorHelpId() const; + void qmlJSEditorHelpId(const Core::IContext::HelpIdCallback &callback) const; DesignDocument *currentDesignDocument() const; private: // functions diff --git a/src/plugins/qmldesigner/designercore/model/abstractview.cpp b/src/plugins/qmldesigner/designercore/model/abstractview.cpp index 36875422e0f..1649a17a4a3 100644 --- a/src/plugins/qmldesigner/designercore/model/abstractview.cpp +++ b/src/plugins/qmldesigner/designercore/model/abstractview.cpp @@ -561,14 +561,13 @@ WidgetInfo AbstractView::widgetInfo() return createWidgetInfo(); } -QString AbstractView::contextHelpId() const +void AbstractView::contextHelpId(const Core::IContext::HelpIdCallback &callback) const { - QString helpId; - #ifndef QMLDESIGNER_TEST - helpId = QmlDesignerPlugin::instance()->viewManager().qmlJSEditorHelpId(); + QmlDesignerPlugin::instance()->viewManager().qmlJSEditorHelpId(callback); +#else + callback(QString()); #endif - return helpId; } void AbstractView::activateTimelineRecording(const ModelNode &mutator) diff --git a/src/plugins/qmldesigner/designercore/model/viewmanager.cpp b/src/plugins/qmldesigner/designercore/model/viewmanager.cpp index 32e1398bd3c..16078ecb739 100644 --- a/src/plugins/qmldesigner/designercore/model/viewmanager.cpp +++ b/src/plugins/qmldesigner/designercore/model/viewmanager.cpp @@ -411,9 +411,9 @@ void ViewManager::toggleStatesViewExpanded() d->statesEditorView.toggleStatesViewExpanded(); } -QString ViewManager::qmlJSEditorHelpId() const +void ViewManager::qmlJSEditorHelpId(const Core::IContext::HelpIdCallback &callback) const { - return d->textEditorView.qmlJSEditorHelpId(); + d->textEditorView.qmlJSEditorHelpId(callback); } Model *ViewManager::currentModel() const diff --git a/src/plugins/qmldesigner/designmodecontext.cpp b/src/plugins/qmldesigner/designmodecontext.cpp index 82b583e8278..42d0f04bf66 100644 --- a/src/plugins/qmldesigner/designmodecontext.cpp +++ b/src/plugins/qmldesigner/designmodecontext.cpp @@ -40,9 +40,9 @@ DesignModeContext::DesignModeContext(QWidget *widget) setContext(Core::Context(Constants::C_QMLDESIGNER, Constants::C_QT_QUICK_TOOLS_MENU)); } -QString DesignModeContext::contextHelpId() const +void DesignModeContext::contextHelpId(const HelpIdCallback &callback) const { - return qobject_cast(m_widget)->contextHelpId(); + qobject_cast(m_widget)->contextHelpId(callback); } FormEditorContext::FormEditorContext(QWidget *widget) @@ -52,9 +52,9 @@ FormEditorContext::FormEditorContext(QWidget *widget) setContext(Core::Context(Constants::C_QMLFORMEDITOR, Constants::C_QT_QUICK_TOOLS_MENU)); } -QString FormEditorContext::contextHelpId() const +void FormEditorContext::contextHelpId(const HelpIdCallback &callback) const { - return qobject_cast(m_widget)->contextHelpId(); + qobject_cast(m_widget)->contextHelpId(callback); } NavigatorContext::NavigatorContext(QWidget *widget) @@ -64,9 +64,9 @@ NavigatorContext::NavigatorContext(QWidget *widget) setContext(Core::Context(Constants::C_QMLNAVIGATOR, Constants::C_QT_QUICK_TOOLS_MENU)); } -QString NavigatorContext::contextHelpId() const +void NavigatorContext::contextHelpId(const HelpIdCallback &callback) const { - return qobject_cast(m_widget)->contextHelpId(); + qobject_cast(m_widget)->contextHelpId(callback); } TextEditorContext::TextEditorContext(QWidget *widget) @@ -76,9 +76,9 @@ TextEditorContext::TextEditorContext(QWidget *widget) setContext(Core::Context(Constants::C_QMLTEXTEDITOR, Constants::C_QT_QUICK_TOOLS_MENU)); } -QString TextEditorContext::contextHelpId() const +void TextEditorContext::contextHelpId(const HelpIdCallback &callback) const { - return qobject_cast(m_widget)->contextHelpId(); + qobject_cast(m_widget)->contextHelpId(callback); } } diff --git a/src/plugins/qmldesigner/designmodecontext.h b/src/plugins/qmldesigner/designmodecontext.h index 0f7e1ee7946..aa3fc142d8d 100644 --- a/src/plugins/qmldesigner/designmodecontext.h +++ b/src/plugins/qmldesigner/designmodecontext.h @@ -39,7 +39,7 @@ class DesignModeContext : public Core::IContext public: DesignModeContext(QWidget *widget); - QString contextHelpId() const; + void contextHelpId(const Core::IContext::HelpIdCallback &callback) const; }; class FormEditorContext : public Core::IContext @@ -48,7 +48,7 @@ class FormEditorContext : public Core::IContext public: FormEditorContext(QWidget *widget); - QString contextHelpId() const; + void contextHelpId(const Core::IContext::HelpIdCallback &callback) const; }; class NavigatorContext : public Core::IContext @@ -57,7 +57,7 @@ class NavigatorContext : public Core::IContext public: NavigatorContext(QWidget *widget); - QString contextHelpId() const; + void contextHelpId(const Core::IContext::HelpIdCallback &callback) const; }; class TextEditorContext : public Core::IContext @@ -66,7 +66,7 @@ class TextEditorContext : public Core::IContext public: TextEditorContext(QWidget *widget); - QString contextHelpId() const; + void contextHelpId(const Core::IContext::HelpIdCallback &callback) const; }; } diff --git a/src/plugins/qmldesigner/designmodewidget.cpp b/src/plugins/qmldesigner/designmodewidget.cpp index 216ad00074b..cbe845240ca 100644 --- a/src/plugins/qmldesigner/designmodewidget.cpp +++ b/src/plugins/qmldesigner/designmodewidget.cpp @@ -531,11 +531,12 @@ void DesignModeWidget::showInternalTextEditor() m_centralTabWidget->switchTo(viewManager().widget("TextEditor")); } -QString DesignModeWidget::contextHelpId() const +void DesignModeWidget::contextHelpId(const Core::IContext::HelpIdCallback &callback) const { if (currentDesignDocument()) - return currentDesignDocument()->contextHelpId(); - return QString(); + currentDesignDocument()->contextHelpId(callback); + else + callback(QString()); } void DesignModeWidget::initialize() diff --git a/src/plugins/qmldesigner/designmodewidget.h b/src/plugins/qmldesigner/designmodewidget.h index 50a8fd64611..ce585a381b2 100644 --- a/src/plugins/qmldesigner/designmodewidget.h +++ b/src/plugins/qmldesigner/designmodewidget.h @@ -62,7 +62,7 @@ public: explicit DesignModeWidget(QWidget *parent = 0); ~DesignModeWidget(); - QString contextHelpId() const; + void contextHelpId(const Core::IContext::HelpIdCallback &callback) const; void initialize(); diff --git a/src/plugins/texteditor/texteditor.cpp b/src/plugins/texteditor/texteditor.cpp index 2c6403df22c..505c4325aec 100644 --- a/src/plugins/texteditor/texteditor.cpp +++ b/src/plugins/texteditor/texteditor.cpp @@ -7913,9 +7913,9 @@ void TextEditorWidgetPrivate::updateCursorPosition() q->ensureCursorVisible(); } -QString BaseTextEditor::contextHelpId() const +void BaseTextEditor::contextHelpId(const HelpIdCallback &callback) const { - return editorWidget()->contextHelpId(); + editorWidget()->contextHelpId(callback); } void BaseTextEditor::setContextHelpId(const QString &id) @@ -7924,11 +7924,11 @@ void BaseTextEditor::setContextHelpId(const QString &id) editorWidget()->setContextHelpId(id); } -QString TextEditorWidget::contextHelpId() +void TextEditorWidget::contextHelpId(const IContext::HelpIdCallback &callback) { if (d->m_contextHelpId.isEmpty() && !d->m_hoverHandlers.isEmpty()) d->m_contextHelpId = d->m_hoverHandlers.first()->contextHelpId(this, textCursor().position()); - return d->m_contextHelpId; + callback(d->m_contextHelpId); } void TextEditorWidget::setContextHelpId(const QString &id) diff --git a/src/plugins/texteditor/texteditor.h b/src/plugins/texteditor/texteditor.h index c98a84df005..ff7193b0257 100644 --- a/src/plugins/texteditor/texteditor.h +++ b/src/plugins/texteditor/texteditor.h @@ -129,7 +129,7 @@ public: bool restoreState(const QByteArray &state) override; QWidget *toolBar() override; - QString contextHelpId() const override; // from IContext + void contextHelpId(const HelpIdCallback &callback) const override; // from IContext void setContextHelpId(const QString &id) override; int currentLine() const override; @@ -533,7 +533,7 @@ public: QChar characterAt(int pos) const; QString textAt(int from, int to) const; - QString contextHelpId(); + void contextHelpId(const Core::IContext::HelpIdCallback &callback); void setContextHelpId(const QString &id); static TextEditorWidget *currentTextEditorWidget();