summaryrefslogtreecommitdiff
path: root/src/plugins
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@qt.io>2019-01-25 15:04:50 +0100
committerEike Ziller <eike.ziller@qt.io>2019-01-29 07:57:19 +0000
commit418dcfbcbbd15a63ed261b22da3391e43e7ab8aa (patch)
tree7b176df3b7b48527fdb53d1caaa964de63800607 /src/plugins
parentc04c5c1575e4ee425e6d2383e52a2b44e9c20fd2 (diff)
downloadqt-creator-418dcfbcbbd15a63ed261b22da3391e43e7ab8aa.tar.gz
Help: Avoid multiple lookups of help id for context help
Context help would first query the database with potential IDs, and afterwards the help plugin would look up the links for the resulting ID again. Pass the HelpItem (which potentially contains the cached links) directly to context help. Change-Id: I73bddcd3cd4eacaea412b98d53c5e5354a31f3d5 Reviewed-by: David Schulz <david.schulz@qt.io>
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/cmakeprojectmanager/cmakeeditor.cpp4
-rw-r--r--src/plugins/cmakeprojectmanager/cmakeeditor.h2
-rw-r--r--src/plugins/coreplugin/helpitem.cpp14
-rw-r--r--src/plugins/coreplugin/helpitem.h5
-rw-r--r--src/plugins/coreplugin/icontext.h13
-rw-r--r--src/plugins/designer/designercontext.cpp2
-rw-r--r--src/plugins/designer/designercontext.h2
-rw-r--r--src/plugins/helloworld/helloworldplugin.cpp2
-rw-r--r--src/plugins/help/helpplugin.cpp15
-rw-r--r--src/plugins/projectexplorer/projectexplorer.cpp2
-rw-r--r--src/plugins/qmldesigner/components/texteditor/texteditorview.cpp2
-rw-r--r--src/plugins/qmldesigner/designmodecontext.cpp8
-rw-r--r--src/plugins/qmldesigner/designmodecontext.h8
-rw-r--r--src/plugins/texteditor/basehoverhandler.cpp11
-rw-r--r--src/plugins/texteditor/texteditor.cpp24
-rw-r--r--src/plugins/texteditor/texteditor.h9
-rw-r--r--src/plugins/welcome/welcomeplugin.cpp2
17 files changed, 67 insertions, 58 deletions
diff --git a/src/plugins/cmakeprojectmanager/cmakeeditor.cpp b/src/plugins/cmakeprojectmanager/cmakeeditor.cpp
index 6342535361..36b9ddddec 100644
--- a/src/plugins/cmakeprojectmanager/cmakeeditor.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakeeditor.cpp
@@ -60,7 +60,7 @@ namespace Internal {
// CMakeEditor
//
-void CMakeEditor::contextHelpId(const HelpIdCallback &callback) const
+void CMakeEditor::contextHelp(const HelpIdCallback &callback) const
{
int pos = position();
@@ -102,7 +102,7 @@ void CMakeEditor::contextHelpId(const HelpIdCallback &callback) const
}
QString command = textAt(begin, end - begin).toLower();
- callback(QLatin1String("command/") + command);
+ callback(QString("command/" + command));
}
//
diff --git a/src/plugins/cmakeprojectmanager/cmakeeditor.h b/src/plugins/cmakeprojectmanager/cmakeeditor.h
index 364fb48c02..5e5a88fcae 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:
- void contextHelpId(const HelpIdCallback &callback) const override;
+ void contextHelp(const HelpIdCallback &callback) const override;
friend class CMakeEditorWidget;
};
diff --git a/src/plugins/coreplugin/helpitem.cpp b/src/plugins/coreplugin/helpitem.cpp
index dfb152ed05..a5025b1b6e 100644
--- a/src/plugins/coreplugin/helpitem.cpp
+++ b/src/plugins/coreplugin/helpitem.cpp
@@ -32,6 +32,14 @@ using namespace Core;
HelpItem::HelpItem() = default;
+HelpItem::HelpItem(const char *helpId)
+ : m_helpId(QString::fromUtf8(helpId))
+{}
+
+HelpItem::HelpItem(const QString &helpId)
+ : m_helpId(helpId)
+{}
+
HelpItem::HelpItem(const QString &helpId, Category category) :
m_helpId(helpId), m_docMark(helpId), m_category(category)
{}
@@ -70,7 +78,7 @@ bool HelpItem::isValid() const
{
if (m_helpId.isEmpty())
return false;
- if (!retrieveHelpLinks().isEmpty())
+ if (!links().isEmpty())
return true;
if (QUrl(m_helpId).isValid())
return true;
@@ -86,7 +94,7 @@ QString HelpItem::extractContent(bool extended) const
htmlExtractor.setMode(Utils::HtmlDocExtractor::FirstParagraph);
QString contents;
- QMap<QString, QUrl> helpLinks = retrieveHelpLinks();
+ QMap<QString, QUrl> helpLinks = links();
if (helpLinks.isEmpty()) {
// Maybe this is already an URL...
QUrl url(m_helpId);
@@ -134,7 +142,7 @@ QString HelpItem::extractContent(bool extended) const
return contents;
}
-QMap<QString, QUrl> HelpItem::retrieveHelpLinks() const
+QMap<QString, QUrl> HelpItem::links() const
{
if (m_helpLinks.isEmpty())
m_helpLinks = Core::HelpManager::linksForIdentifier(m_helpId);
diff --git a/src/plugins/coreplugin/helpitem.h b/src/plugins/coreplugin/helpitem.h
index f79836ce98..496e32ffe7 100644
--- a/src/plugins/coreplugin/helpitem.h
+++ b/src/plugins/coreplugin/helpitem.h
@@ -50,6 +50,8 @@ public:
};
HelpItem();
+ HelpItem(const char *helpId);
+ HelpItem(const QString &helpId);
HelpItem(const QString &helpId, Category category);
HelpItem(const QString &helpId, const QString &docMark, Category category);
HelpItem(const QString &helpId, const QString &docMark, Category category,
@@ -69,8 +71,7 @@ public:
QString extractContent(bool extended) const;
-private:
- QMap<QString, QUrl> retrieveHelpLinks() const;
+ QMap<QString, QUrl> links() const;
private:
QString m_helpId;
diff --git a/src/plugins/coreplugin/icontext.h b/src/plugins/coreplugin/icontext.h
index d7bb022c5b..f69dfc2bad 100644
--- a/src/plugins/coreplugin/icontext.h
+++ b/src/plugins/coreplugin/icontext.h
@@ -25,8 +25,9 @@
#pragma once
-#include <coreplugin/core_global.h>
-#include <coreplugin/id.h>
+#include "core_global.h"
+#include "helpitem.h"
+#include "id.h"
#include <QList>
#include <QObject>
@@ -73,17 +74,17 @@ public:
virtual Context context() const { return m_context; }
virtual QWidget *widget() const { return m_widget; }
- using HelpIdCallback = std::function<void(const QString &id)>;
- virtual void contextHelpId(const HelpIdCallback &callback) const { callback(m_contextHelpId); }
+ using HelpIdCallback = std::function<void(const HelpItem &id)>;
+ virtual void contextHelp(const HelpIdCallback &callback) const { callback(m_contextHelp); }
virtual void setContext(const Context &context) { m_context = context; }
virtual void setWidget(QWidget *widget) { m_widget = widget; }
- virtual void setContextHelpId(const QString &id) { m_contextHelpId = id; }
+ virtual void setContextHelp(const HelpItem &id) { m_contextHelp = id; }
protected:
Context m_context;
QPointer<QWidget> m_widget;
- QString m_contextHelpId;
+ HelpItem m_contextHelp;
};
} // namespace Core
diff --git a/src/plugins/designer/designercontext.cpp b/src/plugins/designer/designercontext.cpp
index bff77559b1..edc7c09829 100644
--- a/src/plugins/designer/designercontext.cpp
+++ b/src/plugins/designer/designercontext.cpp
@@ -45,7 +45,7 @@ DesignerContext::DesignerContext(const Core::Context &context,
setWidget(widget);
}
-void DesignerContext::contextHelpId(const HelpIdCallback &callback) const
+void DesignerContext::contextHelp(const HelpIdCallback &callback) const
{
const QDesignerFormEditorInterface *core = FormEditorW::designerEditor();
callback(core->integration()->contextHelpId());
diff --git a/src/plugins/designer/designercontext.h b/src/plugins/designer/designercontext.h
index 3259951e7d..b9a892097f 100644
--- a/src/plugins/designer/designercontext.h
+++ b/src/plugins/designer/designercontext.h
@@ -37,7 +37,7 @@ public:
QWidget *widget,
QObject *parent = nullptr);
- void contextHelpId(const HelpIdCallback &callback) const override;
+ void contextHelp(const HelpIdCallback &callback) const override;
};
} // namespace Internal
diff --git a/src/plugins/helloworld/helloworldplugin.cpp b/src/plugins/helloworld/helloworldplugin.cpp
index c2e431508b..8d9309fd03 100644
--- a/src/plugins/helloworld/helloworldplugin.cpp
+++ b/src/plugins/helloworld/helloworldplugin.cpp
@@ -56,7 +56,7 @@ public:
setIcon(QIcon());
setPriority(0);
setId("HelloWorld.HelloWorldMode");
- setContextHelpId(QString());
+ setContextHelp(QString());
}
};
diff --git a/src/plugins/help/helpplugin.cpp b/src/plugins/help/helpplugin.cpp
index 20dc5f1392..c7ac66436b 100644
--- a/src/plugins/help/helpplugin.cpp
+++ b/src/plugins/help/helpplugin.cpp
@@ -65,6 +65,7 @@
#include <coreplugin/editormanager/editormanager.h>
#include <coreplugin/editormanager/ieditor.h>
#include <coreplugin/findplaceholder.h>
+#include <coreplugin/helpitem.h>
#include <coreplugin/icore.h>
#include <coreplugin/minisplitter.h>
#include <coreplugin/modemanager.h>
@@ -119,7 +120,7 @@ public:
void modeChanged(Core::Id mode, Core::Id old);
void requestContextHelp();
- void showContextHelp(const QString &contextHelpId);
+ void showContextHelp(const HelpItem &contextHelp);
void activateIndex();
void activateContents();
@@ -649,17 +650,17 @@ void HelpPluginPrivate::requestContextHelp()
QString contextHelpId = Utils::ToolTip::contextHelpId();
IContext *context = ICore::currentContextObject();
if (contextHelpId.isEmpty() && context)
- context->contextHelpId([this](const QString &id) { showContextHelp(id); });
+ context->contextHelp([this](const HelpItem &item) { showContextHelp(item); });
else
showContextHelp(contextHelpId);
}
-void HelpPluginPrivate::showContextHelp(const QString &contextHelpId)
+void HelpPluginPrivate::showContextHelp(const HelpItem &contextHelp)
{
- QMap<QString, QUrl> links = Core::HelpManager::linksForIdentifier(contextHelpId);
+ QMap<QString, QUrl> links = contextHelp.links();
// Maybe the id is already an URL
- if (links.isEmpty() && LocalHelpManager::isValidUrl(contextHelpId))
- links.insert(contextHelpId, contextHelpId);
+ if (links.isEmpty() && LocalHelpManager::isValidUrl(contextHelp.helpId()))
+ links.insert(contextHelp.helpId(), contextHelp.helpId());
QUrl source = findBestLink(links);
if (!source.isValid()) {
@@ -675,7 +676,7 @@ void HelpPluginPrivate::showContextHelp(const QString &contextHelpId)
.arg(HelpPlugin::tr("No Documentation"))
.arg(creatorTheme()->color(Theme::BackgroundColorNormal).name())
.arg(creatorTheme()->color(Theme::TextColorNormal).name())
- .arg(contextHelpId)
+ .arg(contextHelp.helpId())
.arg(HelpPlugin::tr("No documentation available.")));
}
} else {
diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp
index 75882cff8c..82d458ffa0 100644
--- a/src/plugins/projectexplorer/projectexplorer.cpp
+++ b/src/plugins/projectexplorer/projectexplorer.cpp
@@ -305,7 +305,7 @@ public:
Icons::MODE_PROJECT_FLAT, Icons::MODE_PROJECT_FLAT_ACTIVE));
setPriority(Constants::P_MODE_SESSION);
setId(Constants::MODE_SESSION);
- setContextHelpId(QLatin1String("Managing Projects"));
+ setContextHelp("Managing Projects");
}
};
diff --git a/src/plugins/qmldesigner/components/texteditor/texteditorview.cpp b/src/plugins/qmldesigner/components/texteditor/texteditorview.cpp
index 462a51dbe7..737faf77ac 100644
--- a/src/plugins/qmldesigner/components/texteditor/texteditorview.cpp
+++ b/src/plugins/qmldesigner/components/texteditor/texteditorview.cpp
@@ -160,7 +160,7 @@ void TextEditorView::contextHelpId(const Core::IContext::HelpIdCallback &callbac
void TextEditorView::qmlJSEditorHelpId(const Core::IContext::HelpIdCallback &callback) const
{
if (m_widget->textEditor())
- m_widget->textEditor()->contextHelpId(callback);
+ m_widget->textEditor()->contextHelp(callback);
else
callback(QString());
}
diff --git a/src/plugins/qmldesigner/designmodecontext.cpp b/src/plugins/qmldesigner/designmodecontext.cpp
index 42d0f04bf6..ae8d2e2548 100644
--- a/src/plugins/qmldesigner/designmodecontext.cpp
+++ b/src/plugins/qmldesigner/designmodecontext.cpp
@@ -40,7 +40,7 @@ DesignModeContext::DesignModeContext(QWidget *widget)
setContext(Core::Context(Constants::C_QMLDESIGNER, Constants::C_QT_QUICK_TOOLS_MENU));
}
-void DesignModeContext::contextHelpId(const HelpIdCallback &callback) const
+void DesignModeContext::contextHelp(const HelpIdCallback &callback) const
{
qobject_cast<DesignModeWidget *>(m_widget)->contextHelpId(callback);
}
@@ -52,7 +52,7 @@ FormEditorContext::FormEditorContext(QWidget *widget)
setContext(Core::Context(Constants::C_QMLFORMEDITOR, Constants::C_QT_QUICK_TOOLS_MENU));
}
-void FormEditorContext::contextHelpId(const HelpIdCallback &callback) const
+void FormEditorContext::contextHelp(const HelpIdCallback &callback) const
{
qobject_cast<FormEditorWidget *>(m_widget)->contextHelpId(callback);
}
@@ -64,7 +64,7 @@ NavigatorContext::NavigatorContext(QWidget *widget)
setContext(Core::Context(Constants::C_QMLNAVIGATOR, Constants::C_QT_QUICK_TOOLS_MENU));
}
-void NavigatorContext::contextHelpId(const HelpIdCallback &callback) const
+void NavigatorContext::contextHelp(const HelpIdCallback &callback) const
{
qobject_cast<NavigatorWidget *>(m_widget)->contextHelpId(callback);
}
@@ -76,7 +76,7 @@ TextEditorContext::TextEditorContext(QWidget *widget)
setContext(Core::Context(Constants::C_QMLTEXTEDITOR, Constants::C_QT_QUICK_TOOLS_MENU));
}
-void TextEditorContext::contextHelpId(const HelpIdCallback &callback) const
+void TextEditorContext::contextHelp(const HelpIdCallback &callback) const
{
qobject_cast<TextEditorWidget *>(m_widget)->contextHelpId(callback);
}
diff --git a/src/plugins/qmldesigner/designmodecontext.h b/src/plugins/qmldesigner/designmodecontext.h
index e677233075..ccea1d79d9 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);
- void contextHelpId(const Core::IContext::HelpIdCallback &callback) const override;
+ void contextHelp(const Core::IContext::HelpIdCallback &callback) const override;
};
class FormEditorContext : public Core::IContext
@@ -48,7 +48,7 @@ class FormEditorContext : public Core::IContext
public:
FormEditorContext(QWidget *widget);
- void contextHelpId(const Core::IContext::HelpIdCallback &callback) const override;
+ void contextHelp(const Core::IContext::HelpIdCallback &callback) const override;
};
class NavigatorContext : public Core::IContext
@@ -57,7 +57,7 @@ class NavigatorContext : public Core::IContext
public:
NavigatorContext(QWidget *widget);
- void contextHelpId(const Core::IContext::HelpIdCallback &callback) const override;
+ void contextHelp(const Core::IContext::HelpIdCallback &callback) const override;
};
class TextEditorContext : public Core::IContext
@@ -66,7 +66,7 @@ class TextEditorContext : public Core::IContext
public:
TextEditorContext(QWidget *widget);
- void contextHelpId(const Core::IContext::HelpIdCallback &callback) const override;
+ void contextHelp(const Core::IContext::HelpIdCallback &callback) const override;
};
}
diff --git a/src/plugins/texteditor/basehoverhandler.cpp b/src/plugins/texteditor/basehoverhandler.cpp
index 19ab9073e9..6529ab9d39 100644
--- a/src/plugins/texteditor/basehoverhandler.cpp
+++ b/src/plugins/texteditor/basehoverhandler.cpp
@@ -45,7 +45,7 @@ void BaseHoverHandler::checkPriority(TextEditorWidget *widget,
int pos,
ReportPriority report)
{
- widget->setContextHelpId(QString());
+ widget->setContextHelpItem({});
process(widget, pos, report);
}
@@ -117,12 +117,9 @@ bool BaseHoverHandler::isContextHelpRequest() const
void BaseHoverHandler::propagateHelpId(TextEditorWidget *widget,
const Core::IContext::HelpIdCallback &callback)
{
- QString id;
- if (lastHelpItemIdentified().isValid())
- id = lastHelpItemIdentified().helpId();
-
- widget->setContextHelpId(id);
- callback(id);
+ const Core::HelpItem contextHelp = lastHelpItemIdentified();
+ widget->setContextHelpItem(contextHelp);
+ callback(contextHelp);
}
void BaseHoverHandler::process(TextEditorWidget *widget, int pos, ReportPriority report)
diff --git a/src/plugins/texteditor/texteditor.cpp b/src/plugins/texteditor/texteditor.cpp
index aed04a3ba7..c42358a8d5 100644
--- a/src/plugins/texteditor/texteditor.cpp
+++ b/src/plugins/texteditor/texteditor.cpp
@@ -663,7 +663,7 @@ public:
QRectF getLastLineLineRect(const QTextBlock &block);
RefactorOverlay *m_refactorOverlay = nullptr;
- QString m_contextHelpId;
+ HelpItem m_contextHelpItem;
QBasicTimer foldedBlockTimer;
int visibleFoldedBlockNumber = -1;
@@ -8000,36 +8000,36 @@ void BaseTextEditor::select(int toPos)
void TextEditorWidgetPrivate::updateCursorPosition()
{
- m_contextHelpId.clear();
+ m_contextHelpItem = HelpItem();
if (!q->textCursor().block().isVisible())
q->ensureCursorVisible();
}
-void BaseTextEditor::contextHelpId(const HelpIdCallback &callback) const
+void BaseTextEditor::contextHelp(const HelpIdCallback &callback) const
{
- editorWidget()->contextHelpId(callback);
+ editorWidget()->contextHelpItem(callback);
}
-void BaseTextEditor::setContextHelpId(const QString &id)
+void BaseTextEditor::setContextHelp(const HelpItem &item)
{
- IEditor::setContextHelpId(id);
- editorWidget()->setContextHelpId(id);
+ IEditor::setContextHelp(item);
+ editorWidget()->setContextHelpItem(item);
}
-void TextEditorWidget::contextHelpId(const IContext::HelpIdCallback &callback)
+void TextEditorWidget::contextHelpItem(const IContext::HelpIdCallback &callback)
{
- if (d->m_contextHelpId.isEmpty() && !d->m_hoverHandlers.isEmpty()) {
+ if (!d->m_contextHelpItem.isValid() && !d->m_hoverHandlers.isEmpty()) {
d->m_hoverHandlers.first()->contextHelpId(this,
Text::wordStartCursor(textCursor()).position(),
callback);
} else {
- callback(d->m_contextHelpId);
+ callback(d->m_contextHelpItem);
}
}
-void TextEditorWidget::setContextHelpId(const QString &id)
+void TextEditorWidget::setContextHelpItem(const HelpItem &item)
{
- d->m_contextHelpId = id;
+ d->m_contextHelpItem = item;
}
RefactorMarkers TextEditorWidget::refactorMarkers() const
diff --git a/src/plugins/texteditor/texteditor.h b/src/plugins/texteditor/texteditor.h
index f1d1b19353..b2c840e6c8 100644
--- a/src/plugins/texteditor/texteditor.h
+++ b/src/plugins/texteditor/texteditor.h
@@ -33,6 +33,7 @@
#include <coreplugin/editormanager/editormanager.h>
#include <coreplugin/editormanager/ieditor.h>
#include <coreplugin/editormanager/ieditorfactory.h>
+#include <coreplugin/helpitem.h>
#include <utils/link.h>
#include <utils/uncommentselection.h>
@@ -130,8 +131,8 @@ public:
bool restoreState(const QByteArray &state) override;
QWidget *toolBar() override;
- void contextHelpId(const HelpIdCallback &callback) const override; // from IContext
- void setContextHelpId(const QString &id) override;
+ void contextHelp(const HelpIdCallback &callback) const override; // from IContext
+ void setContextHelp(const Core::HelpItem &item) override;
int currentLine() const override;
int currentColumn() const override;
@@ -542,8 +543,8 @@ public:
QChar characterAt(int pos) const;
QString textAt(int from, int to) const;
- void contextHelpId(const Core::IContext::HelpIdCallback &callback);
- void setContextHelpId(const QString &id);
+ void contextHelpItem(const Core::IContext::HelpIdCallback &callback);
+ void setContextHelpItem(const Core::HelpItem &item);
static TextEditorWidget *currentTextEditorWidget();
diff --git a/src/plugins/welcome/welcomeplugin.cpp b/src/plugins/welcome/welcomeplugin.cpp
index b70639fb4e..dea242a810 100644
--- a/src/plugins/welcome/welcomeplugin.cpp
+++ b/src/plugins/welcome/welcomeplugin.cpp
@@ -309,7 +309,7 @@ WelcomeMode::WelcomeMode()
setPriority(Constants::P_MODE_WELCOME);
setId(Constants::MODE_WELCOME);
- setContextHelpId("Qt Creator Manual");
+ setContextHelp("Qt Creator Manual");
setContext(Context(Constants::C_WELCOME_MODE));
QPalette palette = creatorTheme()->palette();