forked from qt-creator/qt-creator
Help: Add option for help viewer backend
Add "Reload" menu item, which re-creates the help viewer with the current backend. Change-Id: I979cb9cdf5ae5635f4d028dc41d71ab71ce80248 Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
@@ -37,6 +37,7 @@
|
||||
#include <coreplugin/helpmanager.h>
|
||||
#include <coreplugin/icore.h>
|
||||
|
||||
#include <utils/algorithm.h>
|
||||
#include <utils/fileutils.h>
|
||||
|
||||
#include <QCoreApplication>
|
||||
@@ -122,6 +123,21 @@ QWidget *GeneralSettingsPage::widget()
|
||||
|
||||
m_scrollWheelZoomingEnabled = LocalHelpManager::isScrollWheelZoomingEnabled();
|
||||
m_ui->scrollWheelZooming->setChecked(m_scrollWheelZoomingEnabled);
|
||||
|
||||
const QString tooltip = tr("Change takes effect after reloading help pages.");
|
||||
m_ui->viewerBackendLabel->setToolTip(tooltip);
|
||||
m_ui->viewerBackend->setToolTip(tooltip);
|
||||
m_ui->viewerBackend->addItem(tr("Default (%1)", "Default viewer backend")
|
||||
.arg(LocalHelpManager::defaultViewerBackend().displayName));
|
||||
const QByteArray currentBackend = LocalHelpManager::viewerBackendId();
|
||||
const QVector<HelpViewerFactory> backends = LocalHelpManager::viewerBackends();
|
||||
for (const HelpViewerFactory &f : backends) {
|
||||
m_ui->viewerBackend->addItem(f.displayName, f.id);
|
||||
if (f.id == currentBackend)
|
||||
m_ui->viewerBackend->setCurrentIndex(m_ui->viewerBackend->count() - 1);
|
||||
}
|
||||
if (backends.size() == 1)
|
||||
m_ui->viewerBackend->setEnabled(false);
|
||||
}
|
||||
return m_widget;
|
||||
}
|
||||
@@ -168,6 +184,9 @@ void GeneralSettingsPage::apply()
|
||||
m_scrollWheelZoomingEnabled = zoom;
|
||||
LocalHelpManager::setScrollWheelZoomingEnabled(m_scrollWheelZoomingEnabled);
|
||||
}
|
||||
|
||||
const QByteArray viewerBackendId = m_ui->viewerBackend->currentData().toByteArray();
|
||||
LocalHelpManager::setViewerBackendId(viewerBackendId);
|
||||
}
|
||||
|
||||
void GeneralSettingsPage::setCurrentPage()
|
||||
|
@@ -305,6 +305,33 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_5">
|
||||
<item>
|
||||
<widget class="QLabel" name="viewerBackendLabel">
|
||||
<property name="text">
|
||||
<string>Viewer backend:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QComboBox" name="viewerBackend"/>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
@@ -337,6 +364,15 @@
|
||||
</color>
|
||||
</brush>
|
||||
</colorrole>
|
||||
<colorrole role="PlaceholderText">
|
||||
<brush brushstyle="NoBrush">
|
||||
<color alpha="128">
|
||||
<red>255</red>
|
||||
<green>0</green>
|
||||
<blue>0</blue>
|
||||
</color>
|
||||
</brush>
|
||||
</colorrole>
|
||||
</active>
|
||||
<inactive>
|
||||
<colorrole role="Text">
|
||||
@@ -348,6 +384,15 @@
|
||||
</color>
|
||||
</brush>
|
||||
</colorrole>
|
||||
<colorrole role="PlaceholderText">
|
||||
<brush brushstyle="NoBrush">
|
||||
<color alpha="128">
|
||||
<red>255</red>
|
||||
<green>0</green>
|
||||
<blue>0</blue>
|
||||
</color>
|
||||
</brush>
|
||||
</colorrole>
|
||||
</inactive>
|
||||
<disabled>
|
||||
<colorrole role="Text">
|
||||
@@ -359,6 +404,15 @@
|
||||
</color>
|
||||
</brush>
|
||||
</colorrole>
|
||||
<colorrole role="PlaceholderText">
|
||||
<brush brushstyle="NoBrush">
|
||||
<color alpha="128">
|
||||
<red>255</red>
|
||||
<green>0</green>
|
||||
<blue>0</blue>
|
||||
</color>
|
||||
</brush>
|
||||
</colorrole>
|
||||
</disabled>
|
||||
</palette>
|
||||
</property>
|
||||
|
@@ -300,13 +300,15 @@ HelpWidget::HelpWidget(const Core::Context &context, WidgetStyle style, QWidget
|
||||
advancedMenu->addAction(cmd, Core::Constants::G_EDIT_FONT);
|
||||
}
|
||||
|
||||
if (style != ExternalWindow) {
|
||||
auto openButton = new QToolButton;
|
||||
openButton->setIcon(Utils::Icons::SPLIT_HORIZONTAL_TOOLBAR.icon());
|
||||
openButton->setPopupMode(QToolButton::InstantPopup);
|
||||
openButton->setProperty("noArrow", true);
|
||||
layout->addWidget(openButton);
|
||||
auto openMenu = new QMenu(openButton);
|
||||
openButton->setMenu(openMenu);
|
||||
|
||||
if (style != ExternalWindow) {
|
||||
if (m_switchToHelp)
|
||||
openMenu->addAction(m_switchToHelp);
|
||||
if (style == ModeWidget) {
|
||||
@@ -324,7 +326,7 @@ HelpWidget::HelpWidget(const Core::Context &context, WidgetStyle style, QWidget
|
||||
emit closeButtonClicked();
|
||||
}
|
||||
});
|
||||
openButton->setMenu(openMenu);
|
||||
openMenu->addSeparator();
|
||||
|
||||
const Utils::Icon &icon = style == ModeWidget ? Utils::Icons::CLOSE_TOOLBAR
|
||||
: Utils::Icons::CLOSE_SPLIT_RIGHT;
|
||||
@@ -335,6 +337,15 @@ HelpWidget::HelpWidget(const Core::Context &context, WidgetStyle style, QWidget
|
||||
layout->addWidget(button);
|
||||
}
|
||||
|
||||
QAction *reload = openMenu->addAction(tr("Reload"));
|
||||
connect(reload, &QAction::triggered, this, [this]() {
|
||||
const int index = m_viewerStack->currentIndex();
|
||||
HelpViewer *previous = currentViewer();
|
||||
insertViewer(index, previous->source(), previous->scale());
|
||||
removeViewerAt(index + 1);
|
||||
setCurrentIndex(index);
|
||||
});
|
||||
|
||||
if (style != ModeWidget) {
|
||||
addViewer({});
|
||||
setCurrentIndex(0);
|
||||
@@ -516,9 +527,14 @@ void HelpWidget::setCurrentIndex(int index)
|
||||
|
||||
HelpViewer *HelpWidget::addViewer(const QUrl &url, qreal zoom)
|
||||
{
|
||||
m_model.beginInsertRows(QModelIndex(), viewerCount(), viewerCount());
|
||||
return insertViewer(m_viewerStack->count(), url, zoom);
|
||||
}
|
||||
|
||||
HelpViewer *HelpWidget::insertViewer(int index, const QUrl &url, qreal zoom)
|
||||
{
|
||||
m_model.beginInsertRows({}, index, index);
|
||||
HelpViewer *viewer = HelpPlugin::createHelpViewer(zoom);
|
||||
m_viewerStack->addWidget(viewer);
|
||||
m_viewerStack->insertWidget(index, viewer);
|
||||
viewer->setFocus(Qt::OtherFocusReason);
|
||||
viewer->setActionVisible(HelpViewer::Action::NewPage, m_style == ModeWidget);
|
||||
viewer->setActionVisible(HelpViewer::Action::ExternalWindow, m_style != ExternalWindow);
|
||||
|
@@ -114,7 +114,7 @@ signals:
|
||||
|
||||
private:
|
||||
int indexOf(HelpViewer *viewer) const;
|
||||
|
||||
HelpViewer *insertViewer(int index, const QUrl &url, qreal zoom);
|
||||
void updateBackMenu();
|
||||
void updateForwardMenu();
|
||||
void updateWindowTitle();
|
||||
|
@@ -45,6 +45,7 @@
|
||||
#include <coreplugin/icore.h>
|
||||
#include <utils/algorithm.h>
|
||||
#include <utils/hostosinfo.h>
|
||||
#include <utils/optional.h>
|
||||
#include <utils/qtcassert.h>
|
||||
|
||||
#include <QDesktopServices>
|
||||
@@ -81,6 +82,10 @@ static const char kUseScrollWheelZooming[] = "Help/UseScrollWheelZooming";
|
||||
static const char kLastShownPagesKey[] = "Help/LastShownPages";
|
||||
static const char kLastShownPagesZoomKey[] = "Help/LastShownPagesZoom";
|
||||
static const char kLastSelectedTabKey[] = "Help/LastSelectedTab";
|
||||
static const char kViewerBackend[] = "Help/ViewerBackend";
|
||||
|
||||
static const char kQtWebEngineBackend[] = "qtwebengine";
|
||||
static const char kTextBrowserBackend[] = "textbrowser";
|
||||
|
||||
static const int kDefaultFallbackFontSize = 14;
|
||||
|
||||
@@ -287,25 +292,39 @@ void LocalHelpManager::setLastSelectedTab(int index)
|
||||
Core::ICore::settings()->setValue(kLastSelectedTabKey, index);
|
||||
}
|
||||
|
||||
QByteArray LocalHelpManager::defaultViewerBackend()
|
||||
static Utils::optional<HelpViewerFactory> backendForId(const QByteArray &id)
|
||||
{
|
||||
const QVector<HelpViewerFactory> factories = LocalHelpManager::viewerBackends();
|
||||
const auto backend = std::find_if(std::begin(factories),
|
||||
std::end(factories),
|
||||
Utils::equal(&HelpViewerFactory::id, id));
|
||||
if (backend != std::end(factories))
|
||||
return *backend;
|
||||
return {};
|
||||
}
|
||||
|
||||
HelpViewerFactory LocalHelpManager::defaultViewerBackend()
|
||||
{
|
||||
const QByteArray backend = qgetenv("QTC_HELPVIEWER_BACKEND");
|
||||
if (Utils::contains(viewerBackends(), Utils::equal(&HelpViewerFactory::id, backend)))
|
||||
return backend;
|
||||
else if (!backend.isEmpty())
|
||||
if (!backend.isEmpty()) {
|
||||
const Utils::optional<HelpViewerFactory> factory = backendForId(backend);
|
||||
if (factory)
|
||||
return *factory;
|
||||
}
|
||||
if (!backend.isEmpty())
|
||||
qWarning("Help viewer backend \"%s\" not found, using default.", backend.constData());
|
||||
#ifdef QTC_WEBENGINE_HELPVIEWER
|
||||
return "qtwebengine";
|
||||
#else
|
||||
return "textbrowser";
|
||||
#endif
|
||||
const Utils::optional<HelpViewerFactory> factory = backendForId(kQtWebEngineBackend);
|
||||
if (factory)
|
||||
return *factory;
|
||||
return backendForId(kTextBrowserBackend).value_or(HelpViewerFactory());
|
||||
}
|
||||
|
||||
QVector<HelpViewerFactory> LocalHelpManager::viewerBackends()
|
||||
{
|
||||
QVector<HelpViewerFactory> result;
|
||||
#ifdef QTC_WEBENGINE_HELPVIEWER
|
||||
result.append({"qtwebengine", tr("QtWebEngine"), []() { return new WebEngineHelpViewer; }});
|
||||
result.append(
|
||||
{kQtWebEngineBackend, tr("QtWebEngine"), []() { return new WebEngineHelpViewer; }});
|
||||
#endif
|
||||
#ifdef QTC_LITEHTML_HELPVIEWER
|
||||
result.append({"litehtml", tr("litehtml"), []() { return new LiteHtmlHelpViewer; }});
|
||||
@@ -313,18 +332,30 @@ QVector<HelpViewerFactory> LocalHelpManager::viewerBackends()
|
||||
#ifdef QTC_MAC_NATIVE_HELPVIEWER
|
||||
result.append({"native", tr("WebKit"), []() { return new MacWebKitHelpViewer; }});
|
||||
#endif
|
||||
result.append({"textbrowser", tr("QTextBrowser"), []() { return new TextBrowserHelpViewer; }});
|
||||
result.append(
|
||||
{kTextBrowserBackend, 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;
|
||||
const QByteArray id = Core::ICore::settings()->value(kViewerBackend).toByteArray();
|
||||
if (!id.isEmpty())
|
||||
return backendForId(id).value_or(defaultViewerBackend());
|
||||
return defaultViewerBackend();
|
||||
}
|
||||
|
||||
void LocalHelpManager::setViewerBackendId(const QByteArray &id)
|
||||
{
|
||||
if (id.isEmpty())
|
||||
Core::ICore::settings()->remove(kViewerBackend);
|
||||
else
|
||||
Core::ICore::settings()->setValue(kViewerBackend, id);
|
||||
}
|
||||
|
||||
QByteArray LocalHelpManager::viewerBackendId()
|
||||
{
|
||||
return Core::ICore::settings()->value(kViewerBackend).toByteArray();
|
||||
}
|
||||
|
||||
void LocalHelpManager::setupGuiHelpEngine()
|
||||
|
@@ -26,7 +26,6 @@
|
||||
#pragma once
|
||||
|
||||
#include <coreplugin/helpmanager.h>
|
||||
#include <utils/optional.h>
|
||||
|
||||
#include <QMetaType>
|
||||
#include <QMutex>
|
||||
@@ -102,9 +101,11 @@ public:
|
||||
static int lastSelectedTab();
|
||||
static void setLastSelectedTab(int index);
|
||||
|
||||
static QByteArray defaultViewerBackend();
|
||||
static HelpViewerFactory defaultViewerBackend();
|
||||
static QVector<HelpViewerFactory> viewerBackends();
|
||||
static HelpViewerFactory viewerBackend();
|
||||
static void setViewerBackendId(const QByteArray &id);
|
||||
static QByteArray viewerBackendId();
|
||||
|
||||
static void setupGuiHelpEngine();
|
||||
static void setEngineNeedsUpdate();
|
||||
|
Reference in New Issue
Block a user