Core: De-virtualize IContext::contextHelp()

Adapt the using code.

Change-Id: I2f46de253d5f00c4bd74b2adea163b7c23145393
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
hjk
2024-07-05 13:39:53 +02:00
parent 90e0cd4912
commit baf20b8491
14 changed files with 78 additions and 109 deletions

View File

@@ -48,7 +48,6 @@ class CMakeEditor final : public BaseTextEditor
{ {
public: public:
CMakeEditor(); CMakeEditor();
void contextHelp(const HelpCallback &callback) const final;
private: private:
CMakeKeywords m_keywords; CMakeKeywords m_keywords;
@@ -58,43 +57,42 @@ CMakeEditor::CMakeEditor()
{ {
if (auto tool = CMakeToolManager::defaultProjectOrDefaultCMakeTool()) if (auto tool = CMakeToolManager::defaultProjectOrDefaultCMakeTool())
m_keywords = tool->keywords(); m_keywords = tool->keywords();
}
void CMakeEditor::contextHelp(const HelpCallback &callback) const setContextHelpProvider([this](const HelpCallback &callback) {
{ auto helpPrefix = [this](const QString &word) {
auto helpPrefix = [this](const QString &word) { if (m_keywords.includeStandardModules.contains(word))
if (m_keywords.includeStandardModules.contains(word)) return "module/";
return "module/"; if (m_keywords.functions.contains(word))
if (m_keywords.functions.contains(word)) return "command/";
return "command/"; if (m_keywords.variables.contains(word))
if (m_keywords.variables.contains(word)) return "variable/";
return "variable/"; if (m_keywords.directoryProperties.contains(word))
if (m_keywords.directoryProperties.contains(word)) return "prop_dir/";
return "prop_dir/"; if (m_keywords.targetProperties.contains(word))
if (m_keywords.targetProperties.contains(word)) return "prop_tgt/";
return "prop_tgt/"; if (m_keywords.sourceProperties.contains(word))
if (m_keywords.sourceProperties.contains(word)) return "prop_sf/";
return "prop_sf/"; if (m_keywords.testProperties.contains(word))
if (m_keywords.testProperties.contains(word)) return "prop_test/";
return "prop_test/"; if (m_keywords.properties.contains(word))
if (m_keywords.properties.contains(word)) return "prop_gbl/";
return "prop_gbl/"; if (m_keywords.policies.contains(word))
if (m_keywords.policies.contains(word)) return "policy/";
return "policy/"; if (m_keywords.environmentVariables.contains(word))
if (m_keywords.environmentVariables.contains(word)) return "envvar/";
return "envvar/";
return "unknown/"; return "unknown/";
}; };
const QString word = Text::wordUnderCursor(editorWidget()->textCursor()); const QString word = Text::wordUnderCursor(editorWidget()->textCursor());
const QString id = helpPrefix(word) + word; const QString id = helpPrefix(word) + word;
if (id.startsWith("unknown/")) { if (id.startsWith("unknown/")) {
BaseTextEditor::contextHelp(callback); BaseTextEditor::contextHelp(callback);
return; return;
} }
callback({{id, word}, {}, {}, HelpItem::Unknown}); callback({{id, word}, {}, {}, HelpItem::Unknown});
});
} }
// //

View File

@@ -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) void IContext::attach(QWidget *widget, const Context &context, const HelpItem &help)
{ {
auto icontext = new IContext(widget); // As QObject parent. auto icontext = new IContext(widget); // As QObject parent.

View File

@@ -62,8 +62,9 @@ public:
using HelpCallback = std::function<void(const HelpItem &item)>; using HelpCallback = std::function<void(const HelpItem &item)>;
using HelpProvider = std::function<void(const HelpCallback &item)>; using HelpProvider = std::function<void(const HelpCallback &item)>;
virtual void contextHelp(const HelpCallback &callback) const; void contextHelp(const HelpCallback &callback) const;
void setContextHelp(const HelpItem &id); void setContextHelp(const HelpItem &id);
void setContextHelpProvider(const HelpProvider &provider);
static void attach(QWidget *widget, static void attach(QWidget *widget,
const Context &context, const Context &context,

View File

@@ -100,12 +100,10 @@ public:
{ {
setContext(context); setContext(context);
setWidget(widget); setWidget(widget);
} setContextHelpProvider([](const HelpCallback &callback) {
const QDesignerFormEditorInterface *core = designerEditor();
void contextHelp(const HelpCallback &callback) const final callback(core->integration()->contextHelpId());
{ });
const QDesignerFormEditorInterface *core = designerEditor();
callback(core->integration()->contextHelpId());
} }
}; };

View File

@@ -24,11 +24,10 @@ EffectComposerContext::EffectComposerContext(QWidget *widget)
setWidget(widget); setWidget(widget);
setContext(Core::Context(QmlDesigner::Constants::C_QMLEFFECTCOMPOSER, setContext(Core::Context(QmlDesigner::Constants::C_QMLEFFECTCOMPOSER,
QmlDesigner::Constants::C_QT_QUICK_TOOLS_MENU)); QmlDesigner::Constants::C_QT_QUICK_TOOLS_MENU));
}
void EffectComposerContext::contextHelp(const HelpCallback &callback) const setContextHelpProvider([this](const HelpCallback &callback) {
{ qobject_cast<EffectComposerWidget *>(m_widget)->contextHelp(callback);
qobject_cast<EffectComposerWidget *>(m_widget)->contextHelp(callback); });
} }
EffectComposerView::EffectComposerView(QmlDesigner::ExternalDependenciesInterface &externalDependencies) EffectComposerView::EffectComposerView(QmlDesigner::ExternalDependenciesInterface &externalDependencies)

View File

@@ -21,7 +21,6 @@ class EffectComposerContext : public Core::IContext
public: public:
EffectComposerContext(QWidget *widget); EffectComposerContext(QWidget *widget);
void contextHelp(const Core::IContext::HelpCallback &callback) const override;
}; };
class EffectComposerView : public QmlDesigner::AbstractView class EffectComposerView : public QmlDesigner::AbstractView

View File

@@ -12,12 +12,10 @@ TimelineContext::TimelineContext(QWidget *widget)
{ {
setWidget(widget); setWidget(widget);
setContext(Core::Context(TimelineConstants::C_QMLTIMELINE)); setContext(Core::Context(TimelineConstants::C_QMLTIMELINE));
} setContextHelpProvider([this](const Core::IContext::HelpCallback &callback) {
if (auto *widget = qobject_cast<TimelineWidget *>(m_widget))
void TimelineContext::contextHelp(const Core::IContext::HelpCallback &callback) const widget->contextHelp(callback);
{ });
if (auto *widget = qobject_cast<TimelineWidget *>(m_widget))
widget->contextHelp(callback);
} }
} // namespace QmlDesigner } // namespace QmlDesigner

View File

@@ -15,7 +15,6 @@ class TimelineContext : public Core::IContext
public: public:
explicit TimelineContext(QWidget *widget); explicit TimelineContext(QWidget *widget);
void contextHelp(const HelpCallback &callback) const override;
}; };
} // namespace QmlDesigner } // namespace QmlDesigner

View File

@@ -52,12 +52,10 @@ TransitionContext::TransitionContext(QWidget *widget)
{ {
setWidget(widget); setWidget(widget);
setContext(Core::Context(TransitionEditorConstants::C_QMLTRANSITIONS)); setContext(Core::Context(TransitionEditorConstants::C_QMLTRANSITIONS));
} setContextHelpProvider([this](const Core::IContext::HelpCallback &callback) {
if (auto *widget = qobject_cast<TransitionEditorWidget *>(m_widget))
void TransitionContext::contextHelp(const Core::IContext::HelpCallback &callback) const widget->contextHelp(callback);
{ });
if (auto *widget = qobject_cast<TransitionEditorWidget *>(m_widget))
widget->contextHelp(callback);
} }
class Eventfilter : public QObject class Eventfilter : public QObject

View File

@@ -35,7 +35,6 @@ class TransitionContext : public Core::IContext
public: public:
explicit TransitionContext(QWidget *widget); explicit TransitionContext(QWidget *widget);
void contextHelp(const HelpCallback &callback) const override;
}; };
class TransitionEditorWidget : public QWidget class TransitionEditorWidget : public QWidget

View File

@@ -18,11 +18,9 @@ DesignModeContext::DesignModeContext(QWidget *widget)
{ {
setWidget(widget); setWidget(widget);
setContext(Core::Context(Constants::C_QMLDESIGNER, Constants::C_QT_QUICK_TOOLS_MENU)); setContext(Core::Context(Constants::C_QMLDESIGNER, Constants::C_QT_QUICK_TOOLS_MENU));
} setContextHelpProvider([this](const HelpCallback &callback) {
qobject_cast<DesignModeWidget *>(m_widget)->contextHelp(callback);
void DesignModeContext::contextHelp(const HelpCallback &callback) const });
{
qobject_cast<DesignModeWidget *>(m_widget)->contextHelp(callback);
} }
FormEditorContext::FormEditorContext(QWidget *widget) FormEditorContext::FormEditorContext(QWidget *widget)
@@ -30,11 +28,9 @@ FormEditorContext::FormEditorContext(QWidget *widget)
{ {
setWidget(widget); setWidget(widget);
setContext(Core::Context(Constants::C_QMLFORMEDITOR, Constants::C_QT_QUICK_TOOLS_MENU)); setContext(Core::Context(Constants::C_QMLFORMEDITOR, Constants::C_QT_QUICK_TOOLS_MENU));
} setContextHelpProvider([this](const HelpCallback &callback) {
qobject_cast<FormEditorWidget *>(m_widget)->contextHelp(callback);
void FormEditorContext::contextHelp(const HelpCallback &callback) const });
{
qobject_cast<FormEditorWidget *>(m_widget)->contextHelp(callback);
} }
Editor3DContext::Editor3DContext(QWidget *widget) Editor3DContext::Editor3DContext(QWidget *widget)
@@ -42,11 +38,9 @@ Editor3DContext::Editor3DContext(QWidget *widget)
{ {
setWidget(widget); setWidget(widget);
setContext(Core::Context(Constants::C_QMLEDITOR3D, Constants::C_QT_QUICK_TOOLS_MENU)); setContext(Core::Context(Constants::C_QMLEDITOR3D, Constants::C_QT_QUICK_TOOLS_MENU));
} setContextHelpProvider([this](const HelpCallback &callback) {
qobject_cast<Edit3DWidget *>(m_widget)->contextHelp(callback);
void Editor3DContext::contextHelp(const HelpCallback &callback) const });
{
qobject_cast<Edit3DWidget *>(m_widget)->contextHelp(callback);
} }
MaterialBrowserContext::MaterialBrowserContext(QWidget *widget) MaterialBrowserContext::MaterialBrowserContext(QWidget *widget)
@@ -54,11 +48,9 @@ MaterialBrowserContext::MaterialBrowserContext(QWidget *widget)
{ {
setWidget(widget); setWidget(widget);
setContext(Core::Context(Constants::C_QMLMATERIALBROWSER, Constants::C_QT_QUICK_TOOLS_MENU)); setContext(Core::Context(Constants::C_QMLMATERIALBROWSER, Constants::C_QT_QUICK_TOOLS_MENU));
} setContextHelpProvider([this](const HelpCallback &callback) {
qobject_cast<MaterialBrowserWidget *>(m_widget)->contextHelp(callback);
void MaterialBrowserContext::contextHelp(const HelpCallback &callback) const });
{
qobject_cast<MaterialBrowserWidget *>(m_widget)->contextHelp(callback);
} }
AssetsLibraryContext::AssetsLibraryContext(QWidget *widget) AssetsLibraryContext::AssetsLibraryContext(QWidget *widget)
@@ -66,11 +58,9 @@ AssetsLibraryContext::AssetsLibraryContext(QWidget *widget)
{ {
setWidget(widget); setWidget(widget);
setContext(Core::Context(Constants::C_QMLASSETSLIBRARY, Constants::C_QT_QUICK_TOOLS_MENU)); setContext(Core::Context(Constants::C_QMLASSETSLIBRARY, Constants::C_QT_QUICK_TOOLS_MENU));
} setContextHelpProvider([this](const HelpCallback &callback) {
qobject_cast<AssetsLibraryWidget *>(m_widget)->contextHelp(callback);
void AssetsLibraryContext::contextHelp(const HelpCallback &callback) const });
{
qobject_cast<AssetsLibraryWidget *>(m_widget)->contextHelp(callback);
} }
NavigatorContext::NavigatorContext(QWidget *widget) NavigatorContext::NavigatorContext(QWidget *widget)
@@ -78,11 +68,9 @@ NavigatorContext::NavigatorContext(QWidget *widget)
{ {
setWidget(widget); setWidget(widget);
setContext(Core::Context(Constants::C_QMLNAVIGATOR, Constants::C_QT_QUICK_TOOLS_MENU)); setContext(Core::Context(Constants::C_QMLNAVIGATOR, Constants::C_QT_QUICK_TOOLS_MENU));
} setContextHelpProvider([this](const HelpCallback &callback) {
qobject_cast<NavigatorWidget *>(m_widget)->contextHelp(callback);
void NavigatorContext::contextHelp(const HelpCallback &callback) const });
{
qobject_cast<NavigatorWidget *>(m_widget)->contextHelp(callback);
} }
TextEditorContext::TextEditorContext(QWidget *widget) TextEditorContext::TextEditorContext(QWidget *widget)
@@ -90,11 +78,9 @@ TextEditorContext::TextEditorContext(QWidget *widget)
{ {
setWidget(widget); setWidget(widget);
setContext(Core::Context(Constants::C_QMLTEXTEDITOR, Constants::C_QT_QUICK_TOOLS_MENU)); setContext(Core::Context(Constants::C_QMLTEXTEDITOR, Constants::C_QT_QUICK_TOOLS_MENU));
} setContextHelpProvider([this](const HelpCallback &callback) {
qobject_cast<TextEditorWidget *>(m_widget)->contextHelp(callback);
void TextEditorContext::contextHelp(const HelpCallback &callback) const });
{
qobject_cast<TextEditorWidget *>(m_widget)->contextHelp(callback);
} }
} // namespace QmlDesigner::Internal } // namespace QmlDesigner::Internal

View File

@@ -17,7 +17,6 @@ class DesignModeContext : public Core::IContext
public: public:
DesignModeContext(QWidget *widget); DesignModeContext(QWidget *widget);
void contextHelp(const Core::IContext::HelpCallback &callback) const override;
}; };
class FormEditorContext : public Core::IContext class FormEditorContext : public Core::IContext
@@ -26,7 +25,6 @@ class FormEditorContext : public Core::IContext
public: public:
FormEditorContext(QWidget *widget); FormEditorContext(QWidget *widget);
void contextHelp(const Core::IContext::HelpCallback &callback) const override;
}; };
class Editor3DContext : public Core::IContext class Editor3DContext : public Core::IContext
@@ -35,7 +33,6 @@ class Editor3DContext : public Core::IContext
public: public:
Editor3DContext(QWidget *widget); Editor3DContext(QWidget *widget);
void contextHelp(const Core::IContext::HelpCallback &callback) const override;
}; };
class MaterialBrowserContext : public Core::IContext class MaterialBrowserContext : public Core::IContext
@@ -44,7 +41,6 @@ class MaterialBrowserContext : public Core::IContext
public: public:
MaterialBrowserContext(QWidget *widget); MaterialBrowserContext(QWidget *widget);
void contextHelp(const Core::IContext::HelpCallback &callback) const override;
}; };
class AssetsLibraryContext : public Core::IContext class AssetsLibraryContext : public Core::IContext
@@ -53,7 +49,6 @@ class AssetsLibraryContext : public Core::IContext
public: public:
AssetsLibraryContext(QWidget *widget); AssetsLibraryContext(QWidget *widget);
void contextHelp(const Core::IContext::HelpCallback &callback) const override;
}; };
class NavigatorContext : public Core::IContext class NavigatorContext : public Core::IContext
@@ -62,7 +57,6 @@ class NavigatorContext : public Core::IContext
public: public:
NavigatorContext(QWidget *widget); NavigatorContext(QWidget *widget);
void contextHelp(const Core::IContext::HelpCallback &callback) const override;
}; };
class TextEditorContext : public Core::IContext class TextEditorContext : public Core::IContext
@@ -71,7 +65,6 @@ class TextEditorContext : public Core::IContext
public: public:
TextEditorContext(QWidget *widget); TextEditorContext(QWidget *widget);
void contextHelp(const Core::IContext::HelpCallback &callback) const override;
}; };
} // namespace Internal } // namespace Internal
} // namespace QmlDesigner } // namespace QmlDesigner

View File

@@ -9437,6 +9437,9 @@ BaseTextEditor::BaseTextEditor()
: d(new BaseTextEditorPrivate) : d(new BaseTextEditorPrivate)
{ {
addContext(Constants::C_TEXTEDITOR); addContext(Constants::C_TEXTEDITOR);
setContextHelpProvider([this](const HelpCallback &callback) {
editorWidget()->contextHelpItem(callback);
});
} }
BaseTextEditor::~BaseTextEditor() BaseTextEditor::~BaseTextEditor()
@@ -9682,11 +9685,6 @@ void TextEditorWidgetPrivate::updateCursorPosition()
q->ensureCursorVisible(); q->ensureCursorVisible();
} }
void BaseTextEditor::contextHelp(const HelpCallback &callback) const
{
editorWidget()->contextHelpItem(callback);
}
void TextEditorWidget::contextHelpItem(const IContext::HelpCallback &callback) void TextEditorWidget::contextHelpItem(const IContext::HelpCallback &callback)
{ {
if (!d->m_contextHelpItem.isEmpty()) { if (!d->m_contextHelpItem.isEmpty()) {

View File

@@ -135,8 +135,6 @@ public:
void restoreState(const QByteArray &state) override; void restoreState(const QByteArray &state) override;
QWidget *toolBar() override; QWidget *toolBar() override;
void contextHelp(const HelpCallback &callback) const override; // from IContext
int currentLine() const override; int currentLine() const override;
int currentColumn() const override; int currentColumn() const override;
void gotoLine(int line, int column = 0, bool centerLine = true) override; void gotoLine(int line, int column = 0, bool centerLine = true) override;