diff --git a/src/plugins/cmakeprojectmanager/cmakeeditor.cpp b/src/plugins/cmakeprojectmanager/cmakeeditor.cpp index c4e91031015..5d01a1919cb 100644 --- a/src/plugins/cmakeprojectmanager/cmakeeditor.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeeditor.cpp @@ -48,7 +48,6 @@ class CMakeEditor final : public BaseTextEditor { public: CMakeEditor(); - void contextHelp(const HelpCallback &callback) const final; private: CMakeKeywords m_keywords; @@ -58,43 +57,42 @@ CMakeEditor::CMakeEditor() { if (auto tool = CMakeToolManager::defaultProjectOrDefaultCMakeTool()) m_keywords = tool->keywords(); -} -void CMakeEditor::contextHelp(const HelpCallback &callback) const -{ - auto helpPrefix = [this](const QString &word) { - if (m_keywords.includeStandardModules.contains(word)) - return "module/"; - if (m_keywords.functions.contains(word)) - return "command/"; - if (m_keywords.variables.contains(word)) - return "variable/"; - if (m_keywords.directoryProperties.contains(word)) - return "prop_dir/"; - if (m_keywords.targetProperties.contains(word)) - return "prop_tgt/"; - if (m_keywords.sourceProperties.contains(word)) - return "prop_sf/"; - if (m_keywords.testProperties.contains(word)) - return "prop_test/"; - if (m_keywords.properties.contains(word)) - return "prop_gbl/"; - if (m_keywords.policies.contains(word)) - return "policy/"; - if (m_keywords.environmentVariables.contains(word)) - return "envvar/"; + setContextHelpProvider([this](const HelpCallback &callback) { + auto helpPrefix = [this](const QString &word) { + if (m_keywords.includeStandardModules.contains(word)) + return "module/"; + if (m_keywords.functions.contains(word)) + return "command/"; + if (m_keywords.variables.contains(word)) + return "variable/"; + if (m_keywords.directoryProperties.contains(word)) + return "prop_dir/"; + if (m_keywords.targetProperties.contains(word)) + return "prop_tgt/"; + if (m_keywords.sourceProperties.contains(word)) + return "prop_sf/"; + if (m_keywords.testProperties.contains(word)) + return "prop_test/"; + if (m_keywords.properties.contains(word)) + return "prop_gbl/"; + if (m_keywords.policies.contains(word)) + return "policy/"; + if (m_keywords.environmentVariables.contains(word)) + return "envvar/"; - return "unknown/"; - }; + return "unknown/"; + }; - const QString word = Text::wordUnderCursor(editorWidget()->textCursor()); - const QString id = helpPrefix(word) + word; - if (id.startsWith("unknown/")) { - BaseTextEditor::contextHelp(callback); - return; - } + const QString word = Text::wordUnderCursor(editorWidget()->textCursor()); + const QString id = helpPrefix(word) + word; + if (id.startsWith("unknown/")) { + BaseTextEditor::contextHelp(callback); + return; + } - callback({{id, word}, {}, {}, HelpItem::Unknown}); + callback({{id, word}, {}, {}, HelpItem::Unknown}); + }); } // diff --git a/src/plugins/coreplugin/icontext.cpp b/src/plugins/coreplugin/icontext.cpp index 1d52b9f2b94..fe948c518c3 100644 --- a/src/plugins/coreplugin/icontext.cpp +++ b/src/plugins/coreplugin/icontext.cpp @@ -27,6 +27,11 @@ void IContext::setContextHelp(const HelpItem &item) }; } +void IContext::setContextHelpProvider(const HelpProvider &provider) +{ + m_contextHelpProvider = provider; +} + void IContext::attach(QWidget *widget, const Context &context, const HelpItem &help) { auto icontext = new IContext(widget); // As QObject parent. diff --git a/src/plugins/coreplugin/icontext.h b/src/plugins/coreplugin/icontext.h index a774bc41dd5..2b836690fc9 100644 --- a/src/plugins/coreplugin/icontext.h +++ b/src/plugins/coreplugin/icontext.h @@ -62,8 +62,9 @@ public: using HelpCallback = std::function; using HelpProvider = std::function; - virtual void contextHelp(const HelpCallback &callback) const; + void contextHelp(const HelpCallback &callback) const; void setContextHelp(const HelpItem &id); + void setContextHelpProvider(const HelpProvider &provider); static void attach(QWidget *widget, const Context &context, diff --git a/src/plugins/designer/formeditor.cpp b/src/plugins/designer/formeditor.cpp index c8191035053..e1e357f9754 100644 --- a/src/plugins/designer/formeditor.cpp +++ b/src/plugins/designer/formeditor.cpp @@ -100,12 +100,10 @@ public: { setContext(context); setWidget(widget); - } - - void contextHelp(const HelpCallback &callback) const final - { - const QDesignerFormEditorInterface *core = designerEditor(); - callback(core->integration()->contextHelpId()); + setContextHelpProvider([](const HelpCallback &callback) { + const QDesignerFormEditorInterface *core = designerEditor(); + callback(core->integration()->contextHelpId()); + }); } }; diff --git a/src/plugins/effectcomposer/effectcomposerview.cpp b/src/plugins/effectcomposer/effectcomposerview.cpp index 48c6a33c4b6..4dc975e4045 100644 --- a/src/plugins/effectcomposer/effectcomposerview.cpp +++ b/src/plugins/effectcomposer/effectcomposerview.cpp @@ -24,11 +24,10 @@ EffectComposerContext::EffectComposerContext(QWidget *widget) setWidget(widget); setContext(Core::Context(QmlDesigner::Constants::C_QMLEFFECTCOMPOSER, QmlDesigner::Constants::C_QT_QUICK_TOOLS_MENU)); -} -void EffectComposerContext::contextHelp(const HelpCallback &callback) const -{ - qobject_cast(m_widget)->contextHelp(callback); + setContextHelpProvider([this](const HelpCallback &callback) { + qobject_cast(m_widget)->contextHelp(callback); + }); } EffectComposerView::EffectComposerView(QmlDesigner::ExternalDependenciesInterface &externalDependencies) diff --git a/src/plugins/effectcomposer/effectcomposerview.h b/src/plugins/effectcomposer/effectcomposerview.h index b264fe0fd9a..e3900f04445 100644 --- a/src/plugins/effectcomposer/effectcomposerview.h +++ b/src/plugins/effectcomposer/effectcomposerview.h @@ -21,7 +21,6 @@ class EffectComposerContext : public Core::IContext public: EffectComposerContext(QWidget *widget); - void contextHelp(const Core::IContext::HelpCallback &callback) const override; }; class EffectComposerView : public QmlDesigner::AbstractView diff --git a/src/plugins/qmldesigner/components/timelineeditor/timelinecontext.cpp b/src/plugins/qmldesigner/components/timelineeditor/timelinecontext.cpp index 43d1fddb78f..250a7659fb3 100644 --- a/src/plugins/qmldesigner/components/timelineeditor/timelinecontext.cpp +++ b/src/plugins/qmldesigner/components/timelineeditor/timelinecontext.cpp @@ -12,12 +12,10 @@ TimelineContext::TimelineContext(QWidget *widget) { setWidget(widget); setContext(Core::Context(TimelineConstants::C_QMLTIMELINE)); -} - -void TimelineContext::contextHelp(const Core::IContext::HelpCallback &callback) const -{ - if (auto *widget = qobject_cast(m_widget)) - widget->contextHelp(callback); + setContextHelpProvider([this](const Core::IContext::HelpCallback &callback) { + if (auto *widget = qobject_cast(m_widget)) + widget->contextHelp(callback); + }); } } // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/components/timelineeditor/timelinecontext.h b/src/plugins/qmldesigner/components/timelineeditor/timelinecontext.h index d6b8a04b26a..a6b9ff0a707 100644 --- a/src/plugins/qmldesigner/components/timelineeditor/timelinecontext.h +++ b/src/plugins/qmldesigner/components/timelineeditor/timelinecontext.h @@ -15,7 +15,6 @@ class TimelineContext : public Core::IContext public: explicit TimelineContext(QWidget *widget); - void contextHelp(const HelpCallback &callback) const override; }; } // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/components/transitioneditor/transitioneditorwidget.cpp b/src/plugins/qmldesigner/components/transitioneditor/transitioneditorwidget.cpp index 57bb295d0ca..d8d44d44429 100644 --- a/src/plugins/qmldesigner/components/transitioneditor/transitioneditorwidget.cpp +++ b/src/plugins/qmldesigner/components/transitioneditor/transitioneditorwidget.cpp @@ -52,12 +52,10 @@ TransitionContext::TransitionContext(QWidget *widget) { setWidget(widget); setContext(Core::Context(TransitionEditorConstants::C_QMLTRANSITIONS)); -} - -void TransitionContext::contextHelp(const Core::IContext::HelpCallback &callback) const -{ - if (auto *widget = qobject_cast(m_widget)) - widget->contextHelp(callback); + setContextHelpProvider([this](const Core::IContext::HelpCallback &callback) { + if (auto *widget = qobject_cast(m_widget)) + widget->contextHelp(callback); + }); } class Eventfilter : public QObject diff --git a/src/plugins/qmldesigner/components/transitioneditor/transitioneditorwidget.h b/src/plugins/qmldesigner/components/transitioneditor/transitioneditorwidget.h index a8cb884be2e..a1363cd833d 100644 --- a/src/plugins/qmldesigner/components/transitioneditor/transitioneditorwidget.h +++ b/src/plugins/qmldesigner/components/transitioneditor/transitioneditorwidget.h @@ -35,7 +35,6 @@ class TransitionContext : public Core::IContext public: explicit TransitionContext(QWidget *widget); - void contextHelp(const HelpCallback &callback) const override; }; class TransitionEditorWidget : public QWidget diff --git a/src/plugins/qmldesigner/designmodecontext.cpp b/src/plugins/qmldesigner/designmodecontext.cpp index 796261935af..cc615131dba 100644 --- a/src/plugins/qmldesigner/designmodecontext.cpp +++ b/src/plugins/qmldesigner/designmodecontext.cpp @@ -18,11 +18,9 @@ DesignModeContext::DesignModeContext(QWidget *widget) { setWidget(widget); setContext(Core::Context(Constants::C_QMLDESIGNER, Constants::C_QT_QUICK_TOOLS_MENU)); -} - -void DesignModeContext::contextHelp(const HelpCallback &callback) const -{ - qobject_cast(m_widget)->contextHelp(callback); + setContextHelpProvider([this](const HelpCallback &callback) { + qobject_cast(m_widget)->contextHelp(callback); + }); } FormEditorContext::FormEditorContext(QWidget *widget) @@ -30,11 +28,9 @@ FormEditorContext::FormEditorContext(QWidget *widget) { setWidget(widget); setContext(Core::Context(Constants::C_QMLFORMEDITOR, Constants::C_QT_QUICK_TOOLS_MENU)); -} - -void FormEditorContext::contextHelp(const HelpCallback &callback) const -{ - qobject_cast(m_widget)->contextHelp(callback); + setContextHelpProvider([this](const HelpCallback &callback) { + qobject_cast(m_widget)->contextHelp(callback); + }); } Editor3DContext::Editor3DContext(QWidget *widget) @@ -42,11 +38,9 @@ Editor3DContext::Editor3DContext(QWidget *widget) { setWidget(widget); setContext(Core::Context(Constants::C_QMLEDITOR3D, Constants::C_QT_QUICK_TOOLS_MENU)); -} - -void Editor3DContext::contextHelp(const HelpCallback &callback) const -{ - qobject_cast(m_widget)->contextHelp(callback); + setContextHelpProvider([this](const HelpCallback &callback) { + qobject_cast(m_widget)->contextHelp(callback); + }); } MaterialBrowserContext::MaterialBrowserContext(QWidget *widget) @@ -54,11 +48,9 @@ MaterialBrowserContext::MaterialBrowserContext(QWidget *widget) { setWidget(widget); setContext(Core::Context(Constants::C_QMLMATERIALBROWSER, Constants::C_QT_QUICK_TOOLS_MENU)); -} - -void MaterialBrowserContext::contextHelp(const HelpCallback &callback) const -{ - qobject_cast(m_widget)->contextHelp(callback); + setContextHelpProvider([this](const HelpCallback &callback) { + qobject_cast(m_widget)->contextHelp(callback); + }); } AssetsLibraryContext::AssetsLibraryContext(QWidget *widget) @@ -66,11 +58,9 @@ AssetsLibraryContext::AssetsLibraryContext(QWidget *widget) { setWidget(widget); setContext(Core::Context(Constants::C_QMLASSETSLIBRARY, Constants::C_QT_QUICK_TOOLS_MENU)); -} - -void AssetsLibraryContext::contextHelp(const HelpCallback &callback) const -{ - qobject_cast(m_widget)->contextHelp(callback); + setContextHelpProvider([this](const HelpCallback &callback) { + qobject_cast(m_widget)->contextHelp(callback); + }); } NavigatorContext::NavigatorContext(QWidget *widget) @@ -78,11 +68,9 @@ NavigatorContext::NavigatorContext(QWidget *widget) { setWidget(widget); setContext(Core::Context(Constants::C_QMLNAVIGATOR, Constants::C_QT_QUICK_TOOLS_MENU)); -} - -void NavigatorContext::contextHelp(const HelpCallback &callback) const -{ - qobject_cast(m_widget)->contextHelp(callback); + setContextHelpProvider([this](const HelpCallback &callback) { + qobject_cast(m_widget)->contextHelp(callback); + }); } TextEditorContext::TextEditorContext(QWidget *widget) @@ -90,11 +78,9 @@ TextEditorContext::TextEditorContext(QWidget *widget) { setWidget(widget); setContext(Core::Context(Constants::C_QMLTEXTEDITOR, Constants::C_QT_QUICK_TOOLS_MENU)); -} - -void TextEditorContext::contextHelp(const HelpCallback &callback) const -{ - qobject_cast(m_widget)->contextHelp(callback); + setContextHelpProvider([this](const HelpCallback &callback) { + qobject_cast(m_widget)->contextHelp(callback); + }); } } // namespace QmlDesigner::Internal diff --git a/src/plugins/qmldesigner/designmodecontext.h b/src/plugins/qmldesigner/designmodecontext.h index 1d146deb7d8..0457e230cf3 100644 --- a/src/plugins/qmldesigner/designmodecontext.h +++ b/src/plugins/qmldesigner/designmodecontext.h @@ -17,7 +17,6 @@ class DesignModeContext : public Core::IContext public: DesignModeContext(QWidget *widget); - void contextHelp(const Core::IContext::HelpCallback &callback) const override; }; class FormEditorContext : public Core::IContext @@ -26,7 +25,6 @@ class FormEditorContext : public Core::IContext public: FormEditorContext(QWidget *widget); - void contextHelp(const Core::IContext::HelpCallback &callback) const override; }; class Editor3DContext : public Core::IContext @@ -35,7 +33,6 @@ class Editor3DContext : public Core::IContext public: Editor3DContext(QWidget *widget); - void contextHelp(const Core::IContext::HelpCallback &callback) const override; }; class MaterialBrowserContext : public Core::IContext @@ -44,7 +41,6 @@ class MaterialBrowserContext : public Core::IContext public: MaterialBrowserContext(QWidget *widget); - void contextHelp(const Core::IContext::HelpCallback &callback) const override; }; class AssetsLibraryContext : public Core::IContext @@ -53,7 +49,6 @@ class AssetsLibraryContext : public Core::IContext public: AssetsLibraryContext(QWidget *widget); - void contextHelp(const Core::IContext::HelpCallback &callback) const override; }; class NavigatorContext : public Core::IContext @@ -62,7 +57,6 @@ class NavigatorContext : public Core::IContext public: NavigatorContext(QWidget *widget); - void contextHelp(const Core::IContext::HelpCallback &callback) const override; }; class TextEditorContext : public Core::IContext @@ -71,7 +65,6 @@ class TextEditorContext : public Core::IContext public: TextEditorContext(QWidget *widget); - void contextHelp(const Core::IContext::HelpCallback &callback) const override; }; } // namespace Internal } // namespace QmlDesigner diff --git a/src/plugins/texteditor/texteditor.cpp b/src/plugins/texteditor/texteditor.cpp index ad76a5c832c..3c2649bf419 100644 --- a/src/plugins/texteditor/texteditor.cpp +++ b/src/plugins/texteditor/texteditor.cpp @@ -9437,6 +9437,9 @@ BaseTextEditor::BaseTextEditor() : d(new BaseTextEditorPrivate) { addContext(Constants::C_TEXTEDITOR); + setContextHelpProvider([this](const HelpCallback &callback) { + editorWidget()->contextHelpItem(callback); + }); } BaseTextEditor::~BaseTextEditor() @@ -9682,11 +9685,6 @@ void TextEditorWidgetPrivate::updateCursorPosition() q->ensureCursorVisible(); } -void BaseTextEditor::contextHelp(const HelpCallback &callback) const -{ - editorWidget()->contextHelpItem(callback); -} - void TextEditorWidget::contextHelpItem(const IContext::HelpCallback &callback) { if (!d->m_contextHelpItem.isEmpty()) { diff --git a/src/plugins/texteditor/texteditor.h b/src/plugins/texteditor/texteditor.h index 08c2eebd01d..1d8104a46f4 100644 --- a/src/plugins/texteditor/texteditor.h +++ b/src/plugins/texteditor/texteditor.h @@ -135,8 +135,6 @@ public: void restoreState(const QByteArray &state) override; QWidget *toolBar() override; - void contextHelp(const HelpCallback &callback) const override; // from IContext - int currentLine() const override; int currentColumn() const override; void gotoLine(int line, int column = 0, bool centerLine = true) override;