forked from qt-creator/qt-creator
Help: Move viewer backend management from plugin to local help manager
which poses as a settings class. Change-Id: Icb01f0d4750c2d197875954a648ae7358c4c217a Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
@@ -42,19 +42,8 @@
|
||||
#include "remotehelpfilter.h"
|
||||
#include "searchwidget.h"
|
||||
#include "searchtaskhandler.h"
|
||||
#include "textbrowserhelpviewer.h"
|
||||
#include "topicchooser.h"
|
||||
|
||||
#ifdef QTC_LITEHTML_HELPVIEWER
|
||||
#include "litehtmlhelpviewer.h"
|
||||
#endif
|
||||
#ifdef QTC_MAC_NATIVE_HELPVIEWER
|
||||
#include "macwebkithelpviewer.h"
|
||||
#endif
|
||||
#ifdef QTC_WEBENGINE_HELPVIEWER
|
||||
#include "webenginehelpviewer.h"
|
||||
#endif
|
||||
|
||||
#include <bookmarkmanager.h>
|
||||
#include <contentwindow.h>
|
||||
#include <indexwindow.h>
|
||||
@@ -452,47 +441,9 @@ HelpViewer *HelpPluginPrivate::externalHelpViewer()
|
||||
|
||||
HelpViewer *HelpPlugin::createHelpViewer(qreal zoom)
|
||||
{
|
||||
// check for backends
|
||||
using ViewerFactory = std::function<HelpViewer *()>;
|
||||
using ViewerFactoryItem = QPair<QByteArray, ViewerFactory>; // id -> factory
|
||||
QVector<ViewerFactoryItem> factories;
|
||||
#ifdef QTC_LITEHTML_HELPVIEWER
|
||||
factories.append(qMakePair(QByteArray("litehtml"), [] { return new LiteHtmlHelpViewer(); }));
|
||||
#endif
|
||||
#ifdef QTC_WEBENGINE_HELPVIEWER
|
||||
factories.append(
|
||||
qMakePair(QByteArray("qtwebengine"), []() { return new WebEngineHelpViewer(); }));
|
||||
#endif
|
||||
factories.append(
|
||||
qMakePair(QByteArray("textbrowser"), []() { return new TextBrowserHelpViewer(); }));
|
||||
|
||||
#ifdef QTC_MAC_NATIVE_HELPVIEWER
|
||||
// default setting
|
||||
#ifdef QTC_MAC_NATIVE_HELPVIEWER_DEFAULT
|
||||
factories.prepend(qMakePair(QByteArray("native"), []() { return new MacWebKitHelpViewer(); }));
|
||||
#else
|
||||
factories.append(qMakePair(QByteArray("native"), []() { return new MacWebKitHelpViewer(); }));
|
||||
#endif
|
||||
#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 (!viewer)
|
||||
viewer = factories.first().second();
|
||||
QTC_ASSERT(viewer, return nullptr);
|
||||
const HelpViewerFactory factory = LocalHelpManager::viewerBackend();
|
||||
QTC_ASSERT(factory.create, return nullptr);
|
||||
HelpViewer *viewer = factory.create();
|
||||
|
||||
// initialize font
|
||||
viewer->setViewerFont(LocalHelpManager::fallbackFont());
|
||||
|
||||
@@ -29,6 +29,17 @@
|
||||
#include "helpconstants.h"
|
||||
#include "helpmanager.h"
|
||||
#include "helpviewer.h"
|
||||
#include "textbrowserhelpviewer.h"
|
||||
|
||||
#ifdef QTC_WEBENGINE_HELPVIEWER
|
||||
#include "webenginehelpviewer.h"
|
||||
#endif
|
||||
#ifdef QTC_LITEHTML_HELPVIEWER
|
||||
#include "litehtmlhelpviewer.h"
|
||||
#endif
|
||||
#ifdef QTC_MAC_NATIVE_HELPVIEWER
|
||||
#include "macwebkithelpviewer.h"
|
||||
#endif
|
||||
|
||||
#include <app/app_version.h>
|
||||
#include <coreplugin/icore.h>
|
||||
@@ -276,6 +287,46 @@ void LocalHelpManager::setLastSelectedTab(int index)
|
||||
Core::ICore::settings()->setValue(kLastSelectedTabKey, index);
|
||||
}
|
||||
|
||||
QByteArray LocalHelpManager::defaultViewerBackend()
|
||||
{
|
||||
const QByteArray backend = qgetenv("QTC_HELPVIEWER_BACKEND");
|
||||
if (Utils::contains(viewerBackends(), Utils::equal(&HelpViewerFactory::id, backend)))
|
||||
return backend;
|
||||
else if (!backend.isEmpty())
|
||||
qWarning("Help viewer backend \"%s\" not found, using default.", backend.constData());
|
||||
#ifdef QTC_WEBENGINE_HELPVIEWER
|
||||
return "qtwebengine";
|
||||
#else
|
||||
return "textbrowser";
|
||||
#endif
|
||||
}
|
||||
|
||||
QVector<HelpViewerFactory> LocalHelpManager::viewerBackends()
|
||||
{
|
||||
QVector<HelpViewerFactory> result;
|
||||
#ifdef QTC_WEBENGINE_HELPVIEWER
|
||||
result.append({"qtwebengine", tr("QtWebEngine"), []() { return new WebEngineHelpViewer; }});
|
||||
#endif
|
||||
#ifdef QTC_LITEHTML_HELPVIEWER
|
||||
result.append({"litehtml", tr("litehtml"), []() { return new LiteHtmlHelpViewer; }});
|
||||
#endif
|
||||
#ifdef QTC_MAC_NATIVE_HELPVIEWER
|
||||
result.append({"native", tr("WebKit"), []() { return new MacWebKitHelpViewer; }});
|
||||
#endif
|
||||
result.append({"textbrowser", tr("QTextBrowser"), []() { return new TextBrowserHelpViewer; }});
|
||||
return result;
|
||||
}
|
||||
|
||||
HelpViewerFactory LocalHelpManager::viewerBackend()
|
||||
{
|
||||
const QVector<HelpViewerFactory> factories = viewerBackends();
|
||||
const auto backend = std::find_if(std::begin(factories),
|
||||
std::end(factories),
|
||||
Utils::equal(&HelpViewerFactory::id, defaultViewerBackend()));
|
||||
QTC_ASSERT(backend != std::end(factories), return {});
|
||||
return *backend;
|
||||
}
|
||||
|
||||
void LocalHelpManager::setupGuiHelpEngine()
|
||||
{
|
||||
if (m_needsCollectionFile) {
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
#pragma once
|
||||
|
||||
#include <coreplugin/helpmanager.h>
|
||||
#include <utils/optional.h>
|
||||
|
||||
#include <QMetaType>
|
||||
#include <QMutex>
|
||||
@@ -33,6 +34,8 @@
|
||||
#include <QUrl>
|
||||
#include <QStandardItemModel>
|
||||
|
||||
#include <functional>
|
||||
|
||||
QT_FORWARD_DECLARE_CLASS(QHelpEngine)
|
||||
|
||||
class BookmarkManager;
|
||||
@@ -40,6 +43,15 @@ class BookmarkManager;
|
||||
namespace Help {
|
||||
namespace Internal {
|
||||
|
||||
class HelpViewer;
|
||||
|
||||
struct HelpViewerFactory
|
||||
{
|
||||
QByteArray id;
|
||||
QString displayName;
|
||||
std::function<HelpViewer *()> create;
|
||||
};
|
||||
|
||||
class LocalHelpManager : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
@@ -90,6 +102,10 @@ public:
|
||||
static int lastSelectedTab();
|
||||
static void setLastSelectedTab(int index);
|
||||
|
||||
static QByteArray defaultViewerBackend();
|
||||
static QVector<HelpViewerFactory> viewerBackends();
|
||||
static HelpViewerFactory viewerBackend();
|
||||
|
||||
static void setupGuiHelpEngine();
|
||||
static void setEngineNeedsUpdate();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user