forked from qt-creator/qt-creator
Help: Replace annoying URL syncing by explicit Open in Edit Mode
Qt Creator was syncing the current page in Help mode to the page shown in the side-by-side view in edit mode. This doesn't really make sense because context is completely lost. Instead provide the explicit option to open a help page in edit mode, also from the external help window. Fixes: QTCREATORBUG-19198 Change-Id: I00698bb431d5c116dd1e0e1cbdc5fbd7421ac267 Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io> Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
@@ -119,8 +119,6 @@ public:
|
|||||||
void saveExternalWindowSettings();
|
void saveExternalWindowSettings();
|
||||||
void showLinksInCurrentViewer(const QMap<QString, QUrl> &links, const QString &key);
|
void showLinksInCurrentViewer(const QMap<QString, QUrl> &links, const QString &key);
|
||||||
|
|
||||||
void updateSideBarSource(const QUrl &newUrl);
|
|
||||||
|
|
||||||
void setupHelpEngineIfNeeded();
|
void setupHelpEngineIfNeeded();
|
||||||
|
|
||||||
HelpViewer *showHelpUrl(const QUrl &url, Core::HelpManager::HelpViewerLocation location);
|
HelpViewer *showHelpUrl(const QUrl &url, Core::HelpManager::HelpViewerLocation location);
|
||||||
@@ -206,8 +204,6 @@ HelpPluginPrivate::HelpPluginPrivate()
|
|||||||
}
|
}
|
||||||
|
|
||||||
m_centralWidget = createHelpWidget(Context("Help.CentralHelpWidget"), HelpWidget::ModeWidget);
|
m_centralWidget = createHelpWidget(Context("Help.CentralHelpWidget"), HelpWidget::ModeWidget);
|
||||||
connect(m_centralWidget, &HelpWidget::sourceChanged,
|
|
||||||
this, &HelpPluginPrivate::updateSideBarSource);
|
|
||||||
connect(HelpManager::instance(), &HelpManager::helpRequested,
|
connect(HelpManager::instance(), &HelpManager::helpRequested,
|
||||||
this, &HelpPluginPrivate::showHelpUrl);
|
this, &HelpPluginPrivate::showHelpUrl);
|
||||||
connect(&m_searchTaskHandler, &SearchTaskHandler::search,
|
connect(&m_searchTaskHandler, &SearchTaskHandler::search,
|
||||||
@@ -369,18 +365,16 @@ HelpWidget *HelpPluginPrivate::createHelpWidget(const Context &context, HelpWidg
|
|||||||
{
|
{
|
||||||
auto widget = new HelpWidget(context, style);
|
auto widget = new HelpWidget(context, style);
|
||||||
|
|
||||||
connect(widget, &HelpWidget::openHelpMode, this, [this](const QUrl &url) {
|
connect(widget, &HelpWidget::requestShowHelpUrl, this, &HelpPluginPrivate::showHelpUrl);
|
||||||
showHelpUrl(url, Core::HelpManager::HelpModeAlways);
|
|
||||||
});
|
|
||||||
connect(LocalHelpManager::instance(),
|
connect(LocalHelpManager::instance(),
|
||||||
&LocalHelpManager::returnOnCloseChanged,
|
&LocalHelpManager::returnOnCloseChanged,
|
||||||
widget,
|
widget,
|
||||||
&HelpWidget::updateCloseButton);
|
&HelpWidget::updateCloseButton);
|
||||||
connect(widget, &HelpWidget::closeButtonClicked, this, [this, widget] {
|
connect(widget, &HelpWidget::closeButtonClicked, this, [this, widget] {
|
||||||
if (widget->viewerCount() == 1 && LocalHelpManager::returnOnClose())
|
|
||||||
ModeManager::activateMode(Core::Constants::MODE_EDIT);
|
|
||||||
if (widget->widgetStyle() == HelpWidget::SideBarWidget)
|
if (widget->widgetStyle() == HelpWidget::SideBarWidget)
|
||||||
RightPaneWidget::instance()->setShown(false);
|
RightPaneWidget::instance()->setShown(false);
|
||||||
|
else if (widget->viewerCount() == 1 && LocalHelpManager::returnOnClose())
|
||||||
|
ModeManager::activateMode(Core::Constants::MODE_EDIT);
|
||||||
});
|
});
|
||||||
connect(widget, &HelpWidget::aboutToClose,
|
connect(widget, &HelpWidget::aboutToClose,
|
||||||
this, &HelpPluginPrivate::saveExternalWindowSettings);
|
this, &HelpPluginPrivate::saveExternalWindowSettings);
|
||||||
@@ -464,17 +458,6 @@ void HelpPluginPrivate::modeChanged(Core::Id mode, Core::Id old)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void HelpPluginPrivate::updateSideBarSource(const QUrl &newUrl)
|
|
||||||
{
|
|
||||||
if (m_rightPaneSideBarWidget) {
|
|
||||||
// This is called when setSource on the central widget is called.
|
|
||||||
// Avoid nested setSource calls (even of different help viewers) by scheduling the
|
|
||||||
// sidebar viewer update on the event loop (QTCREATORBUG-12742)
|
|
||||||
QMetaObject::invokeMethod(m_rightPaneSideBarWidget->currentViewer(), "setSource",
|
|
||||||
Qt::QueuedConnection, Q_ARG(QUrl, newUrl));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void HelpPluginPrivate::setupHelpEngineIfNeeded()
|
void HelpPluginPrivate::setupHelpEngineIfNeeded()
|
||||||
{
|
{
|
||||||
LocalHelpManager::setEngineNeedsUpdate();
|
LocalHelpManager::setEngineNeedsUpdate();
|
||||||
@@ -535,6 +518,7 @@ HelpViewer *HelpPluginPrivate::viewerForHelpViewerLocation(
|
|||||||
|
|
||||||
if (actualLocation == Core::HelpManager::SideBySideAlways) {
|
if (actualLocation == Core::HelpManager::SideBySideAlways) {
|
||||||
createRightPaneContextViewer();
|
createRightPaneContextViewer();
|
||||||
|
ModeManager::activateMode(Core::Constants::MODE_EDIT);
|
||||||
RightPaneWidget::instance()->setWidget(m_rightPaneSideBarWidget);
|
RightPaneWidget::instance()->setWidget(m_rightPaneSideBarWidget);
|
||||||
RightPaneWidget::instance()->setShown(true);
|
RightPaneWidget::instance()->setShown(true);
|
||||||
return m_rightPaneSideBarWidget->currentViewer();
|
return m_rightPaneSideBarWidget->currentViewer();
|
||||||
|
|||||||
@@ -63,8 +63,7 @@ public:
|
|||||||
virtual QString title() const = 0;
|
virtual QString title() const = 0;
|
||||||
|
|
||||||
virtual QUrl source() const = 0;
|
virtual QUrl source() const = 0;
|
||||||
// metacall in HelpPlugin::updateSideBarSource
|
virtual void setSource(const QUrl &url) = 0;
|
||||||
Q_INVOKABLE virtual void setSource(const QUrl &url) = 0;
|
|
||||||
|
|
||||||
virtual void setHtml(const QString &html) = 0;
|
virtual void setHtml(const QString &html) = 0;
|
||||||
|
|
||||||
|
|||||||
@@ -100,11 +100,6 @@ QVariant OpenPagesModel::data(const QModelIndex &index, int role) const
|
|||||||
return QVariant();
|
return QVariant();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void openUrlInWindow(const QUrl &url)
|
|
||||||
{
|
|
||||||
HelpPlugin::showHelpUrl(url, Core::HelpManager::ExternalHelpAlways);
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool isBookmarkable(const QUrl &url)
|
static bool isBookmarkable(const QUrl &url)
|
||||||
{
|
{
|
||||||
return !url.isEmpty() && url != QUrl(Help::Constants::AboutBlank);
|
return !url.isEmpty() && url != QUrl(Help::Constants::AboutBlank);
|
||||||
@@ -207,7 +202,9 @@ HelpWidget::HelpWidget(const Core::Context &context, WidgetStyle style, QWidget
|
|||||||
if (style != ModeWidget) {
|
if (style != ModeWidget) {
|
||||||
m_switchToHelp = new QAction(tr("Open in Help Mode"), toolBar);
|
m_switchToHelp = new QAction(tr("Open in Help Mode"), toolBar);
|
||||||
cmd = Core::ActionManager::registerAction(m_switchToHelp, Constants::CONTEXT_HELP, context);
|
cmd = Core::ActionManager::registerAction(m_switchToHelp, Constants::CONTEXT_HELP, context);
|
||||||
connect(m_switchToHelp, &QAction::triggered, this, &HelpWidget::helpModeButtonClicked);
|
connect(m_switchToHelp, &QAction::triggered, this, [this] {
|
||||||
|
postRequestShowHelpUrl(Core::HelpManager::HelpModeAlways);
|
||||||
|
});
|
||||||
layout->addWidget(Core::Command::toolButtonWithAppendedShortcut(m_switchToHelp, cmd));
|
layout->addWidget(Core::Command::toolButtonWithAppendedShortcut(m_switchToHelp, cmd));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -336,6 +333,12 @@ HelpWidget::HelpWidget(const Core::Context &context, WidgetStyle style, QWidget
|
|||||||
|
|
||||||
if (m_switchToHelp)
|
if (m_switchToHelp)
|
||||||
openMenu->addAction(m_switchToHelp);
|
openMenu->addAction(m_switchToHelp);
|
||||||
|
if (style != SideBarWidget) {
|
||||||
|
QAction *openSideBySide = openMenu->addAction(tr("Open in Edit Mode"));
|
||||||
|
connect(openSideBySide, &QAction::triggered, this, [this]() {
|
||||||
|
postRequestShowHelpUrl(Core::HelpManager::SideBySideAlways);
|
||||||
|
});
|
||||||
|
}
|
||||||
if (supportsPages()) {
|
if (supportsPages()) {
|
||||||
QAction *openPage = openMenu->addAction(tr("Open in New Page"));
|
QAction *openPage = openMenu->addAction(tr("Open in New Page"));
|
||||||
connect(openPage, &QAction::triggered, this, [this]() {
|
connect(openPage, &QAction::triggered, this, [this]() {
|
||||||
@@ -346,11 +349,7 @@ HelpWidget::HelpWidget(const Core::Context &context, WidgetStyle style, QWidget
|
|||||||
if (style != ExternalWindow) {
|
if (style != ExternalWindow) {
|
||||||
QAction *openExternal = openMenu->addAction(tr("Open in Window"));
|
QAction *openExternal = openMenu->addAction(tr("Open in Window"));
|
||||||
connect(openExternal, &QAction::triggered, this, [this]() {
|
connect(openExternal, &QAction::triggered, this, [this]() {
|
||||||
if (HelpViewer *viewer = currentViewer()) {
|
postRequestShowHelpUrl(Core::HelpManager::ExternalHelpAlways);
|
||||||
openUrlInWindow(viewer->source());
|
|
||||||
if (m_style == SideBarWidget)
|
|
||||||
emit closeButtonClicked();
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
openMenu->addSeparator();
|
openMenu->addSeparator();
|
||||||
@@ -555,7 +554,6 @@ void HelpWidget::setCurrentIndex(int index)
|
|||||||
LocalHelpManager::canOpenOnlineHelp(viewer->source()));
|
LocalHelpManager::canOpenOnlineHelp(viewer->source()));
|
||||||
if (m_style == ExternalWindow)
|
if (m_style == ExternalWindow)
|
||||||
updateWindowTitle();
|
updateWindowTitle();
|
||||||
emit sourceChanged(viewer->source());
|
|
||||||
emit currentIndexChanged(index);
|
emit currentIndexChanged(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -576,7 +574,6 @@ HelpViewer *HelpWidget::insertViewer(int index, const QUrl &url, qreal zoom)
|
|||||||
if (currentViewer() == viewer) {
|
if (currentViewer() == viewer) {
|
||||||
m_addBookmarkAction->setEnabled(isBookmarkable(url));
|
m_addBookmarkAction->setEnabled(isBookmarkable(url));
|
||||||
m_openOnlineDocumentationAction->setEnabled(LocalHelpManager::canOpenOnlineHelp(url));
|
m_openOnlineDocumentationAction->setEnabled(LocalHelpManager::canOpenOnlineHelp(url));
|
||||||
emit sourceChanged(url);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
connect(viewer, &HelpViewer::forwardAvailable, this, [viewer, this](bool available) {
|
connect(viewer, &HelpViewer::forwardAvailable, this, [viewer, this](bool available) {
|
||||||
@@ -598,7 +595,9 @@ HelpViewer *HelpWidget::insertViewer(int index, const QUrl &url, qreal zoom)
|
|||||||
|
|
||||||
connect(viewer, &HelpViewer::loadFinished, this, &HelpWidget::highlightSearchTerms);
|
connect(viewer, &HelpViewer::loadFinished, this, &HelpWidget::highlightSearchTerms);
|
||||||
connect(viewer, &HelpViewer::newPageRequested, this, &HelpWidget::openNewPage);
|
connect(viewer, &HelpViewer::newPageRequested, this, &HelpWidget::openNewPage);
|
||||||
connect(viewer, &HelpViewer::externalPageRequested, this, &openUrlInWindow);
|
connect(viewer, &HelpViewer::externalPageRequested, this, [this](const QUrl &url) {
|
||||||
|
emit requestShowHelpUrl(url, Core::HelpManager::ExternalHelpAlways);
|
||||||
|
});
|
||||||
updateCloseButton();
|
updateCloseButton();
|
||||||
m_model.endInsertRows();
|
m_model.endInsertRows();
|
||||||
if (url.isValid())
|
if (url.isValid())
|
||||||
@@ -731,12 +730,11 @@ void HelpWidget::updateWindowTitle()
|
|||||||
setWindowTitle(tr("Help - %1").arg(pageTitle));
|
setWindowTitle(tr("Help - %1").arg(pageTitle));
|
||||||
}
|
}
|
||||||
|
|
||||||
void HelpWidget::helpModeButtonClicked()
|
void HelpWidget::postRequestShowHelpUrl(Core::HelpManager::HelpViewerLocation location)
|
||||||
{
|
{
|
||||||
QTC_ASSERT(currentViewer(), return);
|
QTC_ASSERT(currentViewer(), return);
|
||||||
emit openHelpMode(currentViewer()->source());
|
emit requestShowHelpUrl(currentViewer()->source(), location);
|
||||||
if (m_style == ExternalWindow)
|
closeWindow();
|
||||||
close();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void HelpWidget::closeCurrentPage()
|
void HelpWidget::closeCurrentPage()
|
||||||
@@ -770,6 +768,14 @@ bool HelpWidget::supportsPages() const
|
|||||||
return m_style != SideBarWidget;
|
return m_style != SideBarWidget;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void HelpWidget::closeWindow()
|
||||||
|
{
|
||||||
|
if (m_style == SideBarWidget)
|
||||||
|
emit closeButtonClicked();
|
||||||
|
else if (m_style == ExternalWindow)
|
||||||
|
close();
|
||||||
|
}
|
||||||
|
|
||||||
void HelpWidget::updateCloseButton()
|
void HelpWidget::updateCloseButton()
|
||||||
{
|
{
|
||||||
if (supportsPages()) {
|
if (supportsPages()) {
|
||||||
|
|||||||
@@ -25,6 +25,7 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <coreplugin/helpmanager.h>
|
||||||
#include <coreplugin/icontext.h>
|
#include <coreplugin/icontext.h>
|
||||||
|
|
||||||
#include <QAbstractTableModel>
|
#include <QAbstractTableModel>
|
||||||
@@ -109,10 +110,9 @@ protected:
|
|||||||
void closeEvent(QCloseEvent *) override;
|
void closeEvent(QCloseEvent *) override;
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void openHelpMode(const QUrl &url);
|
void requestShowHelpUrl(const QUrl &url, Core::HelpManager::HelpViewerLocation location);
|
||||||
void closeButtonClicked();
|
void closeButtonClicked();
|
||||||
void aboutToClose();
|
void aboutToClose();
|
||||||
void sourceChanged(const QUrl &url);
|
|
||||||
void filterActivated(const QString &name);
|
void filterActivated(const QString &name);
|
||||||
void currentIndexChanged(int index);
|
void currentIndexChanged(int index);
|
||||||
|
|
||||||
@@ -122,10 +122,11 @@ private:
|
|||||||
void updateBackMenu();
|
void updateBackMenu();
|
||||||
void updateForwardMenu();
|
void updateForwardMenu();
|
||||||
void updateWindowTitle();
|
void updateWindowTitle();
|
||||||
void helpModeButtonClicked();
|
void postRequestShowHelpUrl(Core::HelpManager::HelpViewerLocation location);
|
||||||
void closeCurrentPage();
|
void closeCurrentPage();
|
||||||
void saveState() const;
|
void saveState() const;
|
||||||
bool supportsPages() const;
|
bool supportsPages() const;
|
||||||
|
void closeWindow();
|
||||||
|
|
||||||
void goHome();
|
void goHome();
|
||||||
void addBookmark();
|
void addBookmark();
|
||||||
|
|||||||
Reference in New Issue
Block a user