forked from qt-creator/qt-creator
Add QtWebEngine backed help viewer backend
Supports most features. Defined priority for help viewers: "qtwebkit" > "qtwebengine" > "textbrowser". Task-number: QTCREATORBUG-13910 Change-Id: I59b4231ef93fdf9df46436850ed3743b5916f9cd Reviewed-by: Nikita Baryshnikov <nib952051@gmail.com> Reviewed-by: Eike Ziller <eike.ziller@theqtcompany.com>
This commit is contained in:
@@ -47,6 +47,9 @@
|
||||
#ifdef QTC_MAC_NATIVE_HELPVIEWER
|
||||
#include "macwebkithelpviewer.h"
|
||||
#endif
|
||||
#ifdef QTC_WEBENGINE_HELPVIEWER
|
||||
#include "webenginehelpviewer.h"
|
||||
#endif
|
||||
|
||||
#include <bookmarkmanager.h>
|
||||
#include <contentwindow.h>
|
||||
@@ -69,6 +72,7 @@
|
||||
#include <extensionsystem/pluginmanager.h>
|
||||
#include <coreplugin/find/findplugin.h>
|
||||
#include <texteditor/texteditorconstants.h>
|
||||
#include <utils/algorithm.h>
|
||||
#include <utils/hostosinfo.h>
|
||||
#include <utils/qtcassert.h>
|
||||
#include <utils/styledbar.h>
|
||||
@@ -362,48 +366,43 @@ HelpViewer *HelpPlugin::createHelpViewer(qreal zoom)
|
||||
{
|
||||
// check for backends
|
||||
typedef std::function<HelpViewer *()> ViewerFactory;
|
||||
QHash<QString, ViewerFactory> factories; // id -> factory
|
||||
#ifdef QTC_MAC_NATIVE_HELPVIEWER
|
||||
factories.insert(QLatin1String("native"), []() { return new MacWebKitHelpViewer(); });
|
||||
#endif
|
||||
typedef QPair<QByteArray, ViewerFactory> ViewerFactoryItem; // id -> factory
|
||||
QVector<ViewerFactoryItem> factories;
|
||||
#ifndef QT_NO_WEBKIT
|
||||
factories.insert(QLatin1String("qtwebkit"), []() { return new QtWebKitHelpViewer(); });
|
||||
factories.append(qMakePair(QByteArray("qtwebkit"), []() { return new QtWebKitHelpViewer(); }));
|
||||
#endif
|
||||
factories.insert(QLatin1String("textbrowser"), []() { return new TextBrowserHelpViewer(); });
|
||||
#ifdef QTC_WEBENGINE_HELPVIEWER
|
||||
factories.append(qMakePair(QByteArray("qtwebengine"), []() { return new WebEngineHelpViewer(); }));
|
||||
#endif
|
||||
factories.append(qMakePair(QByteArray("textbrowser"), []() { return new TextBrowserHelpViewer(); }));
|
||||
|
||||
ViewerFactory factory;
|
||||
// TODO: Visual Studio < 2013 has a bug in std::function's operator bool, which in this case
|
||||
// leads to succeeding boolean checks on factory which should not succeed.
|
||||
// So we may not check against "if (!factory)"
|
||||
bool factoryFound = false;
|
||||
|
||||
// check requested backend
|
||||
const QString backend = QLatin1String(qgetenv("QTC_HELPVIEWER_BACKEND"));
|
||||
if (!backend.isEmpty()) {
|
||||
if (!factories.contains(backend)) {
|
||||
qWarning("Help viewer backend \"%s\" not found, using default.", qPrintable(backend));
|
||||
} else {
|
||||
factory = factories.value(backend);
|
||||
factoryFound = true;
|
||||
}
|
||||
}
|
||||
#ifdef QTC_MAC_NATIVE_HELPVIEWER
|
||||
// default setting
|
||||
#ifdef QTC_MAC_NATIVE_HELPVIEWER_DEFAULT
|
||||
if (!factoryFound && factories.contains(QLatin1String("native"))) {
|
||||
factory = factories.value(QLatin1String("native"));
|
||||
factoryFound = true;
|
||||
}
|
||||
factories.prepend(qMakePair(QByteArray("native"), []() { return new MacWebKitHelpViewer(); }));
|
||||
#else
|
||||
factories.append(qMakePair(QByteArray("native"), []() { return new MacWebKitHelpViewer(); }));
|
||||
#endif
|
||||
if (!factoryFound && factories.contains(QLatin1String("qtwebkit"))) {
|
||||
factory = factories.value(QLatin1String("qtwebkit"));
|
||||
factoryFound = true;
|
||||
#endif
|
||||
|
||||
HelpViewer *viewer = nullptr;
|
||||
|
||||
// check requested backend
|
||||
const QByteArray backend = qgetenv("QTC_HELPVIEWER_BACKEND");
|
||||
if (!backend.isEmpty()) {
|
||||
const int pos = Utils::indexOf(factories, [backend](const ViewerFactoryItem &item) {
|
||||
return backend == item.first;
|
||||
});
|
||||
if (pos == -1) {
|
||||
qWarning("Help viewer backend \"%s\" not found, using default.", backend.constData());
|
||||
} else {
|
||||
viewer = factories.at(pos).second();
|
||||
}
|
||||
}
|
||||
if (!factoryFound && factories.contains(QLatin1String("textbrowser"))) {
|
||||
factory = factories.value(QLatin1String("textbrowser"));
|
||||
factoryFound = true;
|
||||
}
|
||||
QTC_ASSERT(factoryFound, return 0);
|
||||
HelpViewer *viewer = factory();
|
||||
|
||||
if (!viewer)
|
||||
viewer = factories.first().second();
|
||||
QTC_ASSERT(viewer, return nullptr);
|
||||
|
||||
// initialize font
|
||||
viewer->setViewerFont(LocalHelpManager::fallbackFont());
|
||||
|
||||
Reference in New Issue
Block a user