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:
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});
});
}
//

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)
{
auto icontext = new IContext(widget); // As QObject parent.

View File

@@ -62,8 +62,9 @@ public:
using HelpCallback = std::function<void(const HelpItem &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 setContextHelpProvider(const HelpProvider &provider);
static void attach(QWidget *widget,
const Context &context,

View File

@@ -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());
});
}
};

View File

@@ -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<EffectComposerWidget *>(m_widget)->contextHelp(callback);
setContextHelpProvider([this](const HelpCallback &callback) {
qobject_cast<EffectComposerWidget *>(m_widget)->contextHelp(callback);
});
}
EffectComposerView::EffectComposerView(QmlDesigner::ExternalDependenciesInterface &externalDependencies)

View File

@@ -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

View File

@@ -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<TimelineWidget *>(m_widget))
widget->contextHelp(callback);
setContextHelpProvider([this](const Core::IContext::HelpCallback &callback) {
if (auto *widget = qobject_cast<TimelineWidget *>(m_widget))
widget->contextHelp(callback);
});
}
} // namespace QmlDesigner

View File

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

View File

@@ -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<TransitionEditorWidget *>(m_widget))
widget->contextHelp(callback);
setContextHelpProvider([this](const Core::IContext::HelpCallback &callback) {
if (auto *widget = qobject_cast<TransitionEditorWidget *>(m_widget))
widget->contextHelp(callback);
});
}
class Eventfilter : public QObject

View File

@@ -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

View File

@@ -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<DesignModeWidget *>(m_widget)->contextHelp(callback);
setContextHelpProvider([this](const HelpCallback &callback) {
qobject_cast<DesignModeWidget *>(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<FormEditorWidget *>(m_widget)->contextHelp(callback);
setContextHelpProvider([this](const HelpCallback &callback) {
qobject_cast<FormEditorWidget *>(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<Edit3DWidget *>(m_widget)->contextHelp(callback);
setContextHelpProvider([this](const HelpCallback &callback) {
qobject_cast<Edit3DWidget *>(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<MaterialBrowserWidget *>(m_widget)->contextHelp(callback);
setContextHelpProvider([this](const HelpCallback &callback) {
qobject_cast<MaterialBrowserWidget *>(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<AssetsLibraryWidget *>(m_widget)->contextHelp(callback);
setContextHelpProvider([this](const HelpCallback &callback) {
qobject_cast<AssetsLibraryWidget *>(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<NavigatorWidget *>(m_widget)->contextHelp(callback);
setContextHelpProvider([this](const HelpCallback &callback) {
qobject_cast<NavigatorWidget *>(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<TextEditorWidget *>(m_widget)->contextHelp(callback);
setContextHelpProvider([this](const HelpCallback &callback) {
qobject_cast<TextEditorWidget *>(m_widget)->contextHelp(callback);
});
}
} // namespace QmlDesigner::Internal

View File

@@ -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

View File

@@ -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()) {

View File

@@ -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;