forked from qt-creator/qt-creator
Help: Pimpl plugin and avoid use of global object pool
Create a HelpPluginPrivate class, move all previously private HelpPlugin data and code there. Make it live from HelpPlugin::initialize() to HelpPlugin destruction, so it can be used to handle life time of data members automatically, making use of IPlugin::addAutoRemovedObject unneeded. Change-Id: I9e381ca20b98f4d9c06687c11b81a64e69ceeb96 Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
@@ -100,32 +100,97 @@
|
|||||||
|
|
||||||
#include <functional>
|
#include <functional>
|
||||||
|
|
||||||
using namespace Help::Internal;
|
|
||||||
|
|
||||||
static const char kExternalWindowStateKey[] = "Help/ExternalWindowState";
|
static const char kExternalWindowStateKey[] = "Help/ExternalWindowState";
|
||||||
static const char kToolTipHelpContext[] = "Help.ToolTip";
|
static const char kToolTipHelpContext[] = "Help.ToolTip";
|
||||||
|
|
||||||
using namespace Core;
|
using namespace Core;
|
||||||
using namespace Utils;
|
using namespace Utils;
|
||||||
|
|
||||||
static HelpPlugin *m_instance = nullptr;
|
namespace Help {
|
||||||
|
namespace Internal {
|
||||||
|
|
||||||
HelpPlugin::HelpPlugin()
|
class HelpPluginPrivate : public QObject
|
||||||
{
|
{
|
||||||
m_instance = this;
|
public:
|
||||||
}
|
HelpPluginPrivate();
|
||||||
|
|
||||||
|
void modeChanged(Core::Id mode, Core::Id old);
|
||||||
|
|
||||||
|
void requestContextHelp();
|
||||||
|
void showContextHelp(const QString &contextHelpId);
|
||||||
|
void activateIndex();
|
||||||
|
void activateContents();
|
||||||
|
|
||||||
|
void saveExternalWindowSettings();
|
||||||
|
void showLinkInHelpMode(const QUrl &source);
|
||||||
|
void showLinksInCurrentViewer(const QMap<QString, QUrl> &links, const QString &key);
|
||||||
|
void slotHideRightPane();
|
||||||
|
|
||||||
|
void updateSideBarSource(const QUrl &newUrl);
|
||||||
|
|
||||||
|
void setupHelpEngineIfNeeded();
|
||||||
|
|
||||||
|
void highlightSearchTermsInContextHelp();
|
||||||
|
void handleHelpRequest(const QUrl &url, Core::HelpManager::HelpViewerLocation location);
|
||||||
|
|
||||||
|
void slotSystemInformation();
|
||||||
|
|
||||||
|
void resetFilter();
|
||||||
|
static void activateHelpMode() { ModeManager::activateMode(Constants::ID_MODE_HELP); }
|
||||||
|
static bool canShowHelpSideBySide();
|
||||||
|
|
||||||
|
HelpViewer *viewerForContextHelp();
|
||||||
|
HelpWidget *createHelpWidget(const Core::Context &context, HelpWidget::WidgetStyle style);
|
||||||
|
void createRightPaneContextViewer();
|
||||||
|
HelpViewer *externalHelpViewer();
|
||||||
|
HelpViewer *helpModeHelpViewer();
|
||||||
|
HelpWidget *helpWidgetForWindow(QWidget *window);
|
||||||
|
HelpViewer *viewerForHelpViewerLocation(HelpManager::HelpViewerLocation location);
|
||||||
|
|
||||||
|
void showInHelpViewer(const QUrl &url, HelpViewer *viewer);
|
||||||
|
void doSetupIfNeeded();
|
||||||
|
|
||||||
|
HelpMode m_mode;
|
||||||
|
CentralWidget *m_centralWidget = nullptr;
|
||||||
|
HelpWidget *m_rightPaneSideBarWidget = nullptr;
|
||||||
|
|
||||||
|
DocSettingsPage m_docSettingsPage;
|
||||||
|
FilterSettingsPage m_filterSettingsPage;
|
||||||
|
SearchTaskHandler m_searchTaskHandler;
|
||||||
|
GeneralSettingsPage m_generalSettingsPage;
|
||||||
|
|
||||||
|
bool m_setupNeeded = true;
|
||||||
|
LocalHelpManager m_helpManager;
|
||||||
|
OpenPagesManager m_openPagesManager;
|
||||||
|
|
||||||
|
QString m_contextHelpHighlightId;
|
||||||
|
|
||||||
|
QPointer<HelpWidget> m_externalWindow;
|
||||||
|
QRect m_externalWindowState;
|
||||||
|
|
||||||
|
HelpIndexFilter helpIndexFilter;
|
||||||
|
RemoteHelpFilter remoteHelpFilter;
|
||||||
|
};
|
||||||
|
|
||||||
|
static HelpPluginPrivate *dd = nullptr;
|
||||||
|
|
||||||
HelpPlugin::~HelpPlugin()
|
HelpPlugin::~HelpPlugin()
|
||||||
{
|
{
|
||||||
delete m_openPagesManager;
|
delete dd;
|
||||||
delete m_helpManager;
|
dd = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool HelpPlugin::initialize(const QStringList &arguments, QString *error)
|
bool HelpPlugin::initialize(const QStringList &arguments, QString *error)
|
||||||
{
|
{
|
||||||
Q_UNUSED(arguments)
|
Q_UNUSED(arguments)
|
||||||
Q_UNUSED(error)
|
Q_UNUSED(error)
|
||||||
Context modecontext(Constants::C_MODE_HELP);
|
dd = new HelpPluginPrivate;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
HelpPluginPrivate::HelpPluginPrivate()
|
||||||
|
{
|
||||||
|
Context modecontext(Help::Constants::C_MODE_HELP);
|
||||||
|
|
||||||
const QString &locale = ICore::userInterfaceLanguage();
|
const QString &locale = ICore::userInterfaceLanguage();
|
||||||
if (!locale.isEmpty()) {
|
if (!locale.isEmpty()) {
|
||||||
@@ -141,31 +206,25 @@ bool HelpPlugin::initialize(const QStringList &arguments, QString *error)
|
|||||||
QCoreApplication::installTranslator(qhelptr);
|
QCoreApplication::installTranslator(qhelptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_helpManager = new LocalHelpManager(this);
|
|
||||||
m_openPagesManager = new OpenPagesManager(this);
|
|
||||||
addAutoReleasedObject(m_docSettingsPage = new DocSettingsPage());
|
|
||||||
addAutoReleasedObject(m_filterSettingsPage = new FilterSettingsPage());
|
|
||||||
addAutoReleasedObject(new GeneralSettingsPage());
|
|
||||||
addAutoReleasedObject(m_searchTaskHandler = new SearchTaskHandler);
|
|
||||||
|
|
||||||
m_centralWidget = new CentralWidget(Context("Help.CentralHelpWidget"));
|
m_centralWidget = new CentralWidget(Context("Help.CentralHelpWidget"));
|
||||||
connect(m_centralWidget, &HelpWidget::sourceChanged, this,
|
connect(m_centralWidget, &HelpWidget::sourceChanged,
|
||||||
&HelpPlugin::updateSideBarSource);
|
this, &HelpPluginPrivate::updateSideBarSource);
|
||||||
connect(m_centralWidget, &CentralWidget::closeButtonClicked,
|
connect(m_centralWidget, &CentralWidget::closeButtonClicked,
|
||||||
&OpenPagesManager::instance(), &OpenPagesManager::closeCurrentPage);
|
&OpenPagesManager::instance(), &OpenPagesManager::closeCurrentPage);
|
||||||
|
|
||||||
connect(LocalHelpManager::instance(), &LocalHelpManager::returnOnCloseChanged,
|
connect(LocalHelpManager::instance(), &LocalHelpManager::returnOnCloseChanged,
|
||||||
m_centralWidget, &CentralWidget::updateCloseButton);
|
m_centralWidget, &CentralWidget::updateCloseButton);
|
||||||
connect(HelpManager::instance(), &HelpManager::helpRequested,
|
connect(HelpManager::instance(), &HelpManager::helpRequested,
|
||||||
this, &HelpPlugin::handleHelpRequest);
|
this, &HelpPluginPrivate::handleHelpRequest);
|
||||||
connect(m_searchTaskHandler, &SearchTaskHandler::search, this, &QDesktopServices::openUrl);
|
connect(&m_searchTaskHandler, &SearchTaskHandler::search,
|
||||||
|
this, &QDesktopServices::openUrl);
|
||||||
|
|
||||||
connect(m_filterSettingsPage, &FilterSettingsPage::filtersChanged, this,
|
connect(&m_filterSettingsPage, &FilterSettingsPage::filtersChanged,
|
||||||
&HelpPlugin::setupHelpEngineIfNeeded);
|
this, &HelpPluginPrivate::setupHelpEngineIfNeeded);
|
||||||
connect(HelpManager::instance(), &HelpManager::documentationChanged, this,
|
connect(HelpManager::instance(), &HelpManager::documentationChanged,
|
||||||
&HelpPlugin::setupHelpEngineIfNeeded);
|
this, &HelpPluginPrivate::setupHelpEngineIfNeeded);
|
||||||
connect(HelpManager::instance(), &HelpManager::collectionFileChanged, this,
|
connect(HelpManager::instance(), &HelpManager::collectionFileChanged,
|
||||||
&HelpPlugin::setupHelpEngineIfNeeded);
|
this, &HelpPluginPrivate::setupHelpEngineIfNeeded);
|
||||||
|
|
||||||
connect(ToolTip::instance(), &ToolTip::shown, ICore::instance(), []() {
|
connect(ToolTip::instance(), &ToolTip::shown, ICore::instance(), []() {
|
||||||
ICore::addAdditionalContext(Context(kToolTipHelpContext), ICore::ContextPriority::High);
|
ICore::addAdditionalContext(Context(kToolTipHelpContext), ICore::ContextPriority::High);
|
||||||
@@ -179,41 +238,41 @@ bool HelpPlugin::initialize(const QStringList &arguments, QString *error)
|
|||||||
|
|
||||||
// Add Contents, Index, and Context menu items
|
// Add Contents, Index, and Context menu items
|
||||||
action = new QAction(QIcon::fromTheme("help-contents"),
|
action = new QAction(QIcon::fromTheme("help-contents"),
|
||||||
tr(Constants::SB_CONTENTS), this);
|
HelpPlugin::tr(Constants::SB_CONTENTS), this);
|
||||||
cmd = ActionManager::registerAction(action, "Help.ContentsMenu");
|
cmd = ActionManager::registerAction(action, "Help.ContentsMenu");
|
||||||
ActionManager::actionContainer(Core::Constants::M_HELP)->addAction(cmd, Core::Constants::G_HELP_HELP);
|
ActionManager::actionContainer(Core::Constants::M_HELP)->addAction(cmd, Core::Constants::G_HELP_HELP);
|
||||||
connect(action, &QAction::triggered, this, &HelpPlugin::activateContents);
|
connect(action, &QAction::triggered, this, &HelpPluginPrivate::activateContents);
|
||||||
|
|
||||||
action = new QAction(tr(Constants::SB_INDEX), this);
|
action = new QAction(HelpPlugin::tr(Constants::SB_INDEX), this);
|
||||||
cmd = ActionManager::registerAction(action, "Help.IndexMenu");
|
cmd = ActionManager::registerAction(action, "Help.IndexMenu");
|
||||||
ActionManager::actionContainer(Core::Constants::M_HELP)->addAction(cmd, Core::Constants::G_HELP_HELP);
|
ActionManager::actionContainer(Core::Constants::M_HELP)->addAction(cmd, Core::Constants::G_HELP_HELP);
|
||||||
connect(action, &QAction::triggered, this, &HelpPlugin::activateIndex);
|
connect(action, &QAction::triggered, this, &HelpPluginPrivate::activateIndex);
|
||||||
|
|
||||||
action = new QAction(tr("Context Help"), this);
|
action = new QAction(HelpPlugin::tr("Context Help"), this);
|
||||||
cmd = ActionManager::registerAction(action, Help::Constants::CONTEXT_HELP,
|
cmd = ActionManager::registerAction(action, Help::Constants::CONTEXT_HELP,
|
||||||
Context(kToolTipHelpContext, Core::Constants::C_GLOBAL));
|
Context(kToolTipHelpContext, Core::Constants::C_GLOBAL));
|
||||||
ActionManager::actionContainer(Core::Constants::M_HELP)->addAction(cmd, Core::Constants::G_HELP_HELP);
|
ActionManager::actionContainer(Core::Constants::M_HELP)->addAction(cmd, Core::Constants::G_HELP_HELP);
|
||||||
cmd->setDefaultKeySequence(QKeySequence(Qt::Key_F1));
|
cmd->setDefaultKeySequence(QKeySequence(Qt::Key_F1));
|
||||||
connect(action, &QAction::triggered, this, &HelpPlugin::requestContextHelp);
|
connect(action, &QAction::triggered, this, &HelpPluginPrivate::requestContextHelp);
|
||||||
|
|
||||||
action = new QAction(tr("Technical Support"), this);
|
action = new QAction(HelpPlugin::tr("Technical Support"), this);
|
||||||
cmd = ActionManager::registerAction(action, "Help.TechSupport");
|
cmd = ActionManager::registerAction(action, "Help.TechSupport");
|
||||||
ActionManager::actionContainer(Core::Constants::M_HELP)->addAction(cmd, Core::Constants::G_HELP_SUPPORT);
|
ActionManager::actionContainer(Core::Constants::M_HELP)->addAction(cmd, Core::Constants::G_HELP_SUPPORT);
|
||||||
connect(action, &QAction::triggered, this, [this] {
|
connect(action, &QAction::triggered, this, [this] {
|
||||||
showLinkInHelpMode(QUrl("qthelp://org.qt-project.qtcreator/doc/technical-support.html"));
|
showLinkInHelpMode(QUrl("qthelp://org.qt-project.qtcreator/doc/technical-support.html"));
|
||||||
});
|
});
|
||||||
|
|
||||||
action = new QAction(tr("Report Bug..."), this);
|
action = new QAction(HelpPlugin::tr("Report Bug..."), this);
|
||||||
cmd = ActionManager::registerAction(action, "Help.ReportBug");
|
cmd = ActionManager::registerAction(action, "Help.ReportBug");
|
||||||
ActionManager::actionContainer(Core::Constants::M_HELP)->addAction(cmd, Core::Constants::G_HELP_SUPPORT);
|
ActionManager::actionContainer(Core::Constants::M_HELP)->addAction(cmd, Core::Constants::G_HELP_SUPPORT);
|
||||||
connect(action, &QAction::triggered, this, [] {
|
connect(action, &QAction::triggered, this, [] {
|
||||||
QDesktopServices::openUrl(QUrl("https://bugreports.qt.io"));
|
QDesktopServices::openUrl(QUrl("https://bugreports.qt.io"));
|
||||||
});
|
});
|
||||||
|
|
||||||
action = new QAction(tr("System Information..."), this);
|
action = new QAction(HelpPlugin::tr("System Information..."), this);
|
||||||
cmd = ActionManager::registerAction(action, "Help.SystemInformation");
|
cmd = ActionManager::registerAction(action, "Help.SystemInformation");
|
||||||
ActionManager::actionContainer(Core::Constants::M_HELP)->addAction(cmd, Core::Constants::G_HELP_SUPPORT);
|
ActionManager::actionContainer(Core::Constants::M_HELP)->addAction(cmd, Core::Constants::G_HELP_SUPPORT);
|
||||||
connect(action, &QAction::triggered, this, &HelpPlugin::slotSystemInformation);
|
connect(action, &QAction::triggered, this, &HelpPluginPrivate::slotSystemInformation);
|
||||||
|
|
||||||
if (ActionContainer *windowMenu = ActionManager::actionContainer(Core::Constants::M_WINDOW)) {
|
if (ActionContainer *windowMenu = ActionManager::actionContainer(Core::Constants::M_WINDOW)) {
|
||||||
// reuse EditorManager constants to avoid a second pair of menu actions
|
// reuse EditorManager constants to avoid a second pair of menu actions
|
||||||
@@ -234,24 +293,17 @@ bool HelpPlugin::initialize(const QStringList &arguments, QString *error)
|
|||||||
&OpenPagesManager::gotoNextPage);
|
&OpenPagesManager::gotoNextPage);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto helpIndexFilter = new HelpIndexFilter();
|
connect(&helpIndexFilter, &HelpIndexFilter::linksActivated,
|
||||||
addAutoReleasedObject(helpIndexFilter);
|
this, &HelpPluginPrivate::showLinksInCurrentViewer);
|
||||||
connect(helpIndexFilter, &HelpIndexFilter::linksActivated,
|
|
||||||
this, &HelpPlugin::showLinksInCurrentViewer);
|
|
||||||
|
|
||||||
RemoteHelpFilter *remoteHelpFilter = new RemoteHelpFilter();
|
connect(&remoteHelpFilter, &RemoteHelpFilter::linkActivated,
|
||||||
addAutoReleasedObject(remoteHelpFilter);
|
this, &QDesktopServices::openUrl);
|
||||||
connect(remoteHelpFilter, &RemoteHelpFilter::linkActivated, this, &QDesktopServices::openUrl);
|
|
||||||
|
|
||||||
QDesktopServices::setUrlHandler("qthelp", HelpManager::instance(), "handleHelpRequest");
|
QDesktopServices::setUrlHandler("qthelp", HelpManager::instance(), "handleHelpRequest");
|
||||||
connect(ModeManager::instance(), &ModeManager::currentModeChanged,
|
connect(ModeManager::instance(), &ModeManager::currentModeChanged,
|
||||||
this, &HelpPlugin::modeChanged);
|
this, &HelpPluginPrivate::modeChanged);
|
||||||
|
|
||||||
m_mode = new HelpMode;
|
m_mode.setWidget(m_centralWidget);
|
||||||
m_mode->setWidget(m_centralWidget);
|
|
||||||
addAutoReleasedObject(m_mode);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void HelpPlugin::extensionsInitialized()
|
void HelpPlugin::extensionsInitialized()
|
||||||
@@ -264,16 +316,18 @@ void HelpPlugin::extensionsInitialized()
|
|||||||
|
|
||||||
ExtensionSystem::IPlugin::ShutdownFlag HelpPlugin::aboutToShutdown()
|
ExtensionSystem::IPlugin::ShutdownFlag HelpPlugin::aboutToShutdown()
|
||||||
{
|
{
|
||||||
if (m_externalWindow)
|
delete dd->m_externalWindow.data();
|
||||||
delete m_externalWindow.data();
|
|
||||||
if (m_centralWidget)
|
delete dd->m_centralWidget;
|
||||||
delete m_centralWidget;
|
dd->m_centralWidget = nullptr;
|
||||||
if (m_rightPaneSideBarWidget)
|
|
||||||
delete m_rightPaneSideBarWidget;
|
delete dd->m_rightPaneSideBarWidget;
|
||||||
|
dd->m_rightPaneSideBarWidget = nullptr;
|
||||||
|
|
||||||
return SynchronousShutdown;
|
return SynchronousShutdown;
|
||||||
}
|
}
|
||||||
|
|
||||||
void HelpPlugin::resetFilter()
|
void HelpPluginPrivate::resetFilter()
|
||||||
{
|
{
|
||||||
const QString &filterInternal = QString::fromLatin1("Qt Creator %1.%2.%3")
|
const QString &filterInternal = QString::fromLatin1("Qt Creator %1.%2.%3")
|
||||||
.arg(IDE_VERSION_MAJOR).arg(IDE_VERSION_MINOR).arg(IDE_VERSION_RELEASE);
|
.arg(IDE_VERSION_MAJOR).arg(IDE_VERSION_MINOR).arg(IDE_VERSION_RELEASE);
|
||||||
@@ -295,7 +349,7 @@ void HelpPlugin::resetFilter()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// potentially remove a filter with new name
|
// potentially remove a filter with new name
|
||||||
const QString filterName = tr("Unfiltered");
|
const QString filterName = HelpPlugin::tr("Unfiltered");
|
||||||
engine->removeCustomFilter(filterName);
|
engine->removeCustomFilter(filterName);
|
||||||
engine->addCustomFilter(filterName, QStringList());
|
engine->addCustomFilter(filterName, QStringList());
|
||||||
engine->setCustomValue(Help::Constants::WeAddedFilterKey, 1);
|
engine->setCustomValue(Help::Constants::WeAddedFilterKey, 1);
|
||||||
@@ -307,7 +361,7 @@ void HelpPlugin::resetFilter()
|
|||||||
LocalHelpManager::instance(), &LocalHelpManager::updateFilterModel);
|
LocalHelpManager::instance(), &LocalHelpManager::updateFilterModel);
|
||||||
}
|
}
|
||||||
|
|
||||||
void HelpPlugin::saveExternalWindowSettings()
|
void HelpPluginPrivate::saveExternalWindowSettings()
|
||||||
{
|
{
|
||||||
if (!m_externalWindow)
|
if (!m_externalWindow)
|
||||||
return;
|
return;
|
||||||
@@ -316,18 +370,18 @@ void HelpPlugin::saveExternalWindowSettings()
|
|||||||
settings->setValue(kExternalWindowStateKey, qVariantFromValue(m_externalWindowState));
|
settings->setValue(kExternalWindowStateKey, qVariantFromValue(m_externalWindowState));
|
||||||
}
|
}
|
||||||
|
|
||||||
HelpWidget *HelpPlugin::createHelpWidget(const Context &context, HelpWidget::WidgetStyle style)
|
HelpWidget *HelpPluginPrivate::createHelpWidget(const Context &context, HelpWidget::WidgetStyle style)
|
||||||
{
|
{
|
||||||
HelpWidget *widget = new HelpWidget(context, style);
|
HelpWidget *widget = new HelpWidget(context, style);
|
||||||
|
|
||||||
connect(widget->currentViewer(), &HelpViewer::loadFinished,
|
connect(widget->currentViewer(), &HelpViewer::loadFinished,
|
||||||
this, &HelpPlugin::highlightSearchTermsInContextHelp);
|
this, &HelpPluginPrivate::highlightSearchTermsInContextHelp);
|
||||||
connect(widget, &HelpWidget::openHelpMode,
|
connect(widget, &HelpWidget::openHelpMode,
|
||||||
this, &HelpPlugin::showLinkInHelpMode);
|
this, &HelpPluginPrivate::showLinkInHelpMode);
|
||||||
connect(widget, &HelpWidget::closeButtonClicked,
|
connect(widget, &HelpWidget::closeButtonClicked,
|
||||||
this, &HelpPlugin::slotHideRightPane);
|
this, &HelpPluginPrivate::slotHideRightPane);
|
||||||
connect(widget, &HelpWidget::aboutToClose,
|
connect(widget, &HelpWidget::aboutToClose,
|
||||||
this, &HelpPlugin::saveExternalWindowSettings);
|
this, &HelpPluginPrivate::saveExternalWindowSettings);
|
||||||
|
|
||||||
// force setup, as we might have never switched to full help mode
|
// force setup, as we might have never switched to full help mode
|
||||||
// thus the help engine might still run without collection file setup
|
// thus the help engine might still run without collection file setup
|
||||||
@@ -336,7 +390,7 @@ HelpWidget *HelpPlugin::createHelpWidget(const Context &context, HelpWidget::Wid
|
|||||||
return widget;
|
return widget;
|
||||||
}
|
}
|
||||||
|
|
||||||
void HelpPlugin::createRightPaneContextViewer()
|
void HelpPluginPrivate::createRightPaneContextViewer()
|
||||||
{
|
{
|
||||||
if (m_rightPaneSideBarWidget)
|
if (m_rightPaneSideBarWidget)
|
||||||
return;
|
return;
|
||||||
@@ -344,7 +398,7 @@ void HelpPlugin::createRightPaneContextViewer()
|
|||||||
HelpWidget::SideBarWidget);
|
HelpWidget::SideBarWidget);
|
||||||
}
|
}
|
||||||
|
|
||||||
HelpViewer *HelpPlugin::externalHelpViewer()
|
HelpViewer *HelpPluginPrivate::externalHelpViewer()
|
||||||
{
|
{
|
||||||
if (m_externalWindow)
|
if (m_externalWindow)
|
||||||
return m_externalWindow->currentViewer();
|
return m_externalWindow->currentViewer();
|
||||||
@@ -419,17 +473,12 @@ HelpViewer *HelpPlugin::createHelpViewer(qreal zoom)
|
|||||||
return viewer;
|
return viewer;
|
||||||
}
|
}
|
||||||
|
|
||||||
void HelpPlugin::activateHelpMode()
|
void HelpPluginPrivate::showLinkInHelpMode(const QUrl &source)
|
||||||
{
|
|
||||||
ModeManager::activateMode(Id(Constants::ID_MODE_HELP));
|
|
||||||
}
|
|
||||||
|
|
||||||
void HelpPlugin::showLinkInHelpMode(const QUrl &source)
|
|
||||||
{
|
{
|
||||||
showInHelpViewer(source, helpModeHelpViewer());
|
showInHelpViewer(source, helpModeHelpViewer());
|
||||||
}
|
}
|
||||||
|
|
||||||
void HelpPlugin::showLinksInCurrentViewer(const QMap<QString, QUrl> &links, const QString &key)
|
void HelpPluginPrivate::showLinksInCurrentViewer(const QMap<QString, QUrl> &links, const QString &key)
|
||||||
{
|
{
|
||||||
if (links.size() < 1)
|
if (links.size() < 1)
|
||||||
return;
|
return;
|
||||||
@@ -437,22 +486,22 @@ void HelpPlugin::showLinksInCurrentViewer(const QMap<QString, QUrl> &links, cons
|
|||||||
widget->showLinks(links, key);
|
widget->showLinks(links, key);
|
||||||
}
|
}
|
||||||
|
|
||||||
void HelpPlugin::slotHideRightPane()
|
void HelpPluginPrivate::slotHideRightPane()
|
||||||
{
|
{
|
||||||
RightPaneWidget::instance()->setShown(false);
|
RightPaneWidget::instance()->setShown(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void HelpPlugin::modeChanged(Core::Id mode, Core::Id old)
|
void HelpPluginPrivate::modeChanged(Core::Id mode, Core::Id old)
|
||||||
{
|
{
|
||||||
Q_UNUSED(old)
|
Q_UNUSED(old)
|
||||||
if (mode == m_mode->id()) {
|
if (mode == m_mode.id()) {
|
||||||
QGuiApplication::setOverrideCursor(Qt::WaitCursor);
|
QGuiApplication::setOverrideCursor(Qt::WaitCursor);
|
||||||
doSetupIfNeeded();
|
doSetupIfNeeded();
|
||||||
QGuiApplication::restoreOverrideCursor();
|
QGuiApplication::restoreOverrideCursor();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void HelpPlugin::updateSideBarSource(const QUrl &newUrl)
|
void HelpPluginPrivate::updateSideBarSource(const QUrl &newUrl)
|
||||||
{
|
{
|
||||||
if (m_rightPaneSideBarWidget) {
|
if (m_rightPaneSideBarWidget) {
|
||||||
// This is called when setSource on the central widget is called.
|
// This is called when setSource on the central widget is called.
|
||||||
@@ -463,15 +512,15 @@ void HelpPlugin::updateSideBarSource(const QUrl &newUrl)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void HelpPlugin::setupHelpEngineIfNeeded()
|
void HelpPluginPrivate::setupHelpEngineIfNeeded()
|
||||||
{
|
{
|
||||||
LocalHelpManager::setEngineNeedsUpdate();
|
LocalHelpManager::setEngineNeedsUpdate();
|
||||||
if (ModeManager::currentMode() == m_mode->id()
|
if (ModeManager::currentMode() == m_mode.id()
|
||||||
|| LocalHelpManager::contextHelpOption() == HelpManager::ExternalHelpAlways)
|
|| LocalHelpManager::contextHelpOption() == HelpManager::ExternalHelpAlways)
|
||||||
LocalHelpManager::setupGuiHelpEngine();
|
LocalHelpManager::setupGuiHelpEngine();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool HelpPlugin::canShowHelpSideBySide()
|
bool HelpPluginPrivate::canShowHelpSideBySide()
|
||||||
{
|
{
|
||||||
RightPanePlaceHolder *placeHolder = RightPanePlaceHolder::current();
|
RightPanePlaceHolder *placeHolder = RightPanePlaceHolder::current();
|
||||||
if (!placeHolder)
|
if (!placeHolder)
|
||||||
@@ -490,16 +539,16 @@ bool HelpPlugin::canShowHelpSideBySide()
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
HelpViewer *HelpPlugin::helpModeHelpViewer()
|
HelpViewer *HelpPluginPrivate::helpModeHelpViewer()
|
||||||
{
|
{
|
||||||
activateHelpMode(); // should trigger an createPage...
|
activateHelpMode(); // should trigger an createPage...
|
||||||
HelpViewer *viewer = m_instance->m_centralWidget->currentViewer();
|
HelpViewer *viewer = m_centralWidget->currentViewer();
|
||||||
if (!viewer)
|
if (!viewer)
|
||||||
viewer = OpenPagesManager::instance().createPage();
|
viewer = OpenPagesManager::instance().createPage();
|
||||||
return viewer;
|
return viewer;
|
||||||
}
|
}
|
||||||
|
|
||||||
HelpWidget *HelpPlugin::helpWidgetForWindow(QWidget *window)
|
HelpWidget *HelpPluginPrivate::helpWidgetForWindow(QWidget *window)
|
||||||
{
|
{
|
||||||
if (m_externalWindow && m_externalWindow->window() == window->window())
|
if (m_externalWindow && m_externalWindow->window() == window->window())
|
||||||
return m_externalWindow;
|
return m_externalWindow;
|
||||||
@@ -508,6 +557,11 @@ HelpWidget *HelpPlugin::helpWidgetForWindow(QWidget *window)
|
|||||||
}
|
}
|
||||||
|
|
||||||
HelpViewer *HelpPlugin::viewerForHelpViewerLocation(HelpManager::HelpViewerLocation location)
|
HelpViewer *HelpPlugin::viewerForHelpViewerLocation(HelpManager::HelpViewerLocation location)
|
||||||
|
{
|
||||||
|
return dd->viewerForHelpViewerLocation(location);
|
||||||
|
}
|
||||||
|
|
||||||
|
HelpViewer *HelpPluginPrivate::viewerForHelpViewerLocation(HelpManager::HelpViewerLocation location)
|
||||||
{
|
{
|
||||||
HelpManager::HelpViewerLocation actualLocation = location;
|
HelpManager::HelpViewerLocation actualLocation = location;
|
||||||
if (location == HelpManager::SideBySideIfPossible)
|
if (location == HelpManager::SideBySideIfPossible)
|
||||||
@@ -515,21 +569,26 @@ HelpViewer *HelpPlugin::viewerForHelpViewerLocation(HelpManager::HelpViewerLocat
|
|||||||
: HelpManager::HelpModeAlways;
|
: HelpManager::HelpModeAlways;
|
||||||
|
|
||||||
if (actualLocation == HelpManager::ExternalHelpAlways)
|
if (actualLocation == HelpManager::ExternalHelpAlways)
|
||||||
return m_instance->externalHelpViewer();
|
return externalHelpViewer();
|
||||||
|
|
||||||
if (actualLocation == HelpManager::SideBySideAlways) {
|
if (actualLocation == HelpManager::SideBySideAlways) {
|
||||||
m_instance->createRightPaneContextViewer();
|
createRightPaneContextViewer();
|
||||||
RightPaneWidget::instance()->setWidget(m_instance->m_rightPaneSideBarWidget);
|
RightPaneWidget::instance()->setWidget(m_rightPaneSideBarWidget);
|
||||||
RightPaneWidget::instance()->setShown(true);
|
RightPaneWidget::instance()->setShown(true);
|
||||||
return m_instance->m_rightPaneSideBarWidget->currentViewer();
|
return m_rightPaneSideBarWidget->currentViewer();
|
||||||
}
|
}
|
||||||
|
|
||||||
QTC_CHECK(actualLocation == HelpManager::HelpModeAlways);
|
QTC_CHECK(actualLocation == HelpManager::HelpModeAlways);
|
||||||
|
|
||||||
return m_instance->helpModeHelpViewer();
|
return helpModeHelpViewer();
|
||||||
}
|
}
|
||||||
|
|
||||||
void HelpPlugin::showInHelpViewer(const QUrl &url, HelpViewer *viewer)
|
void HelpPlugin::showInHelpViewer(const QUrl &url, HelpViewer *viewer)
|
||||||
|
{
|
||||||
|
dd->showInHelpViewer(url, viewer);
|
||||||
|
}
|
||||||
|
|
||||||
|
void HelpPluginPrivate::showInHelpViewer(const QUrl &url, HelpViewer *viewer)
|
||||||
{
|
{
|
||||||
QTC_ASSERT(viewer, return);
|
QTC_ASSERT(viewer, return);
|
||||||
viewer->setFocus();
|
viewer->setFocus();
|
||||||
@@ -540,7 +599,7 @@ void HelpPlugin::showInHelpViewer(const QUrl &url, HelpViewer *viewer)
|
|||||||
viewer->window()->show();
|
viewer->window()->show();
|
||||||
}
|
}
|
||||||
|
|
||||||
HelpViewer *HelpPlugin::viewerForContextHelp()
|
HelpViewer *HelpPluginPrivate::viewerForContextHelp()
|
||||||
{
|
{
|
||||||
return viewerForHelpViewerLocation(LocalHelpManager::contextHelpOption());
|
return viewerForHelpViewerLocation(LocalHelpManager::contextHelpOption());
|
||||||
}
|
}
|
||||||
@@ -573,7 +632,7 @@ static QUrl findBestLink(const QMap<QString, QUrl> &links, QString *highlightId)
|
|||||||
return source;
|
return source;
|
||||||
}
|
}
|
||||||
|
|
||||||
void HelpPlugin::requestContextHelp()
|
void HelpPluginPrivate::requestContextHelp()
|
||||||
{
|
{
|
||||||
// Find out what to show
|
// Find out what to show
|
||||||
QString contextHelpId = Utils::ToolTip::contextHelpId();
|
QString contextHelpId = Utils::ToolTip::contextHelpId();
|
||||||
@@ -584,7 +643,7 @@ void HelpPlugin::requestContextHelp()
|
|||||||
showContextHelp(contextHelpId);
|
showContextHelp(contextHelpId);
|
||||||
}
|
}
|
||||||
|
|
||||||
void HelpPlugin::showContextHelp(const QString &contextHelpId)
|
void HelpPluginPrivate::showContextHelp(const QString &contextHelpId)
|
||||||
{
|
{
|
||||||
// get the viewer after getting the help id,
|
// get the viewer after getting the help id,
|
||||||
// because a new window might be opened and therefore focus be moved
|
// because a new window might be opened and therefore focus be moved
|
||||||
@@ -600,7 +659,7 @@ void HelpPlugin::showContextHelp(const QString &contextHelpId)
|
|||||||
if (!source.isValid()) {
|
if (!source.isValid()) {
|
||||||
// No link found or no context object
|
// No link found or no context object
|
||||||
showInHelpViewer(QUrl(Help::Constants::AboutBlank), viewer);
|
showInHelpViewer(QUrl(Help::Constants::AboutBlank), viewer);
|
||||||
viewer->setHtml(tr("<html><head><title>No Documentation</title>"
|
viewer->setHtml(HelpPlugin::tr("<html><head><title>No Documentation</title>"
|
||||||
"</head><body><br/><center>"
|
"</head><body><br/><center>"
|
||||||
"<font color=\"%1\"><b>%2</b></font><br/>"
|
"<font color=\"%1\"><b>%2</b></font><br/>"
|
||||||
"<font color=\"%3\">No documentation available.</font>"
|
"<font color=\"%3\">No documentation available.</font>"
|
||||||
@@ -613,19 +672,19 @@ void HelpPlugin::showContextHelp(const QString &contextHelpId)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void HelpPlugin::activateIndex()
|
void HelpPluginPrivate::activateIndex()
|
||||||
{
|
{
|
||||||
activateHelpMode();
|
activateHelpMode();
|
||||||
m_centralWidget->activateSideBarItem(Constants::HELP_INDEX);
|
m_centralWidget->activateSideBarItem(Constants::HELP_INDEX);
|
||||||
}
|
}
|
||||||
|
|
||||||
void HelpPlugin::activateContents()
|
void HelpPluginPrivate::activateContents()
|
||||||
{
|
{
|
||||||
activateHelpMode();
|
activateHelpMode();
|
||||||
m_centralWidget->activateSideBarItem(Constants::HELP_CONTENTS);
|
m_centralWidget->activateSideBarItem(Constants::HELP_CONTENTS);
|
||||||
}
|
}
|
||||||
|
|
||||||
void HelpPlugin::highlightSearchTermsInContextHelp()
|
void HelpPluginPrivate::highlightSearchTermsInContextHelp()
|
||||||
{
|
{
|
||||||
if (m_contextHelpHighlightId.isEmpty())
|
if (m_contextHelpHighlightId.isEmpty())
|
||||||
return;
|
return;
|
||||||
@@ -635,7 +694,7 @@ void HelpPlugin::highlightSearchTermsInContextHelp()
|
|||||||
m_contextHelpHighlightId.clear();
|
m_contextHelpHighlightId.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
void HelpPlugin::handleHelpRequest(const QUrl &url, HelpManager::HelpViewerLocation location)
|
void HelpPluginPrivate::handleHelpRequest(const QUrl &url, HelpManager::HelpViewerLocation location)
|
||||||
{
|
{
|
||||||
static const QString qtcreatorUnversionedID = "org.qt-project.qtcreator";
|
static const QString qtcreatorUnversionedID = "org.qt-project.qtcreator";
|
||||||
if (url.host() == qtcreatorUnversionedID) {
|
if (url.host() == qtcreatorUnversionedID) {
|
||||||
@@ -687,16 +746,16 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
void HelpPlugin::slotSystemInformation()
|
void HelpPluginPrivate::slotSystemInformation()
|
||||||
{
|
{
|
||||||
auto dialog = new DialogClosingOnEscape(ICore::dialogParent());
|
auto dialog = new DialogClosingOnEscape(ICore::dialogParent());
|
||||||
dialog->setAttribute(Qt::WA_DeleteOnClose);
|
dialog->setAttribute(Qt::WA_DeleteOnClose);
|
||||||
dialog->setWindowFlags(Qt::Window);
|
dialog->setWindowFlags(Qt::Window);
|
||||||
dialog->setModal(true);
|
dialog->setModal(true);
|
||||||
dialog->setWindowTitle(tr("System Information"));
|
dialog->setWindowTitle(HelpPlugin::tr("System Information"));
|
||||||
auto layout = new QVBoxLayout;
|
auto layout = new QVBoxLayout;
|
||||||
dialog->setLayout(layout);
|
dialog->setLayout(layout);
|
||||||
auto intro = new QLabel(tr("Use the following to provide more detailed information about your system to bug reports:"));
|
auto intro = new QLabel(HelpPlugin::tr("Use the following to provide more detailed information about your system to bug reports:"));
|
||||||
intro->setWordWrap(true);
|
intro->setWordWrap(true);
|
||||||
layout->addWidget(intro);
|
layout->addWidget(intro);
|
||||||
const QString text = "{noformat}\n" + ICore::systemInformation() + "\n{noformat}";
|
const QString text = "{noformat}\n" + ICore::systemInformation() + "\n{noformat}";
|
||||||
@@ -709,7 +768,7 @@ void HelpPlugin::slotSystemInformation()
|
|||||||
layout->addWidget(info);
|
layout->addWidget(info);
|
||||||
auto buttonBox = new QDialogButtonBox;
|
auto buttonBox = new QDialogButtonBox;
|
||||||
buttonBox->addButton(QDialogButtonBox::Cancel);
|
buttonBox->addButton(QDialogButtonBox::Cancel);
|
||||||
buttonBox->addButton(tr("Copy to Clipboard"), QDialogButtonBox::AcceptRole);
|
buttonBox->addButton(HelpPlugin::tr("Copy to Clipboard"), QDialogButtonBox::AcceptRole);
|
||||||
connect(buttonBox, &QDialogButtonBox::accepted, dialog, &QDialog::accept);
|
connect(buttonBox, &QDialogButtonBox::accepted, dialog, &QDialog::accept);
|
||||||
connect(buttonBox, &QDialogButtonBox::rejected, dialog, &QDialog::reject);
|
connect(buttonBox, &QDialogButtonBox::rejected, dialog, &QDialog::reject);
|
||||||
layout->addWidget(buttonBox);
|
layout->addWidget(buttonBox);
|
||||||
@@ -723,7 +782,7 @@ void HelpPlugin::slotSystemInformation()
|
|||||||
dialog->show();
|
dialog->show();
|
||||||
}
|
}
|
||||||
|
|
||||||
void HelpPlugin::doSetupIfNeeded()
|
void HelpPluginPrivate::doSetupIfNeeded()
|
||||||
{
|
{
|
||||||
LocalHelpManager::setupGuiHelpEngine();
|
LocalHelpManager::setupGuiHelpEngine();
|
||||||
if (m_setupNeeded) {
|
if (m_setupNeeded) {
|
||||||
@@ -733,3 +792,6 @@ void HelpPlugin::doSetupIfNeeded()
|
|||||||
LocalHelpManager::bookmarkManager().setupBookmarkModels();
|
LocalHelpManager::bookmarkManager().setupBookmarkModels();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} // Internal
|
||||||
|
} // Help
|
||||||
|
@@ -25,35 +25,17 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "helpwidget.h"
|
|
||||||
|
|
||||||
#include <coreplugin/helpmanager.h>
|
#include <coreplugin/helpmanager.h>
|
||||||
#include <coreplugin/icontext.h>
|
|
||||||
#include <extensionsystem/iplugin.h>
|
#include <extensionsystem/iplugin.h>
|
||||||
|
|
||||||
#include <QMap>
|
|
||||||
#include <QStringList>
|
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
class QUrl;
|
class QUrl;
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
namespace Core {
|
|
||||||
class SideBar;
|
|
||||||
} // Core
|
|
||||||
|
|
||||||
namespace Utils { class StyledBar; }
|
|
||||||
|
|
||||||
namespace Help {
|
namespace Help {
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
class CentralWidget;
|
|
||||||
class DocSettingsPage;
|
|
||||||
class FilterSettingsPage;
|
|
||||||
class HelpMode;
|
|
||||||
class HelpViewer;
|
class HelpViewer;
|
||||||
class LocalHelpManager;
|
|
||||||
class OpenPagesManager;
|
|
||||||
class SearchTaskHandler;
|
|
||||||
|
|
||||||
class HelpPlugin : public ExtensionSystem::IPlugin
|
class HelpPlugin : public ExtensionSystem::IPlugin
|
||||||
{
|
{
|
||||||
@@ -61,68 +43,17 @@ class HelpPlugin : public ExtensionSystem::IPlugin
|
|||||||
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QtCreatorPlugin" FILE "Help.json")
|
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QtCreatorPlugin" FILE "Help.json")
|
||||||
|
|
||||||
public:
|
public:
|
||||||
HelpPlugin();
|
HelpPlugin() = default;
|
||||||
virtual ~HelpPlugin();
|
~HelpPlugin() final;
|
||||||
|
|
||||||
bool initialize(const QStringList &arguments, QString *errorMessage);
|
|
||||||
void extensionsInitialized();
|
|
||||||
ShutdownFlag aboutToShutdown();
|
|
||||||
|
|
||||||
static HelpViewer *viewerForHelpViewerLocation(Core::HelpManager::HelpViewerLocation location);
|
static HelpViewer *viewerForHelpViewerLocation(Core::HelpManager::HelpViewerLocation location);
|
||||||
static void showInHelpViewer(const QUrl &url, HelpViewer *viewer);
|
static void showInHelpViewer(const QUrl &url, HelpViewer *viewer);
|
||||||
|
|
||||||
static HelpViewer *createHelpViewer(qreal zoom);
|
static HelpViewer *createHelpViewer(qreal zoom);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void modeChanged(Core::Id mode, Core::Id old);
|
bool initialize(const QStringList &arguments, QString *errorMessage) final;
|
||||||
|
void extensionsInitialized() final;
|
||||||
void requestContextHelp();
|
ShutdownFlag aboutToShutdown() final;
|
||||||
void showContextHelp(const QString &contextHelpId);
|
|
||||||
void activateIndex();
|
|
||||||
void activateContents();
|
|
||||||
|
|
||||||
void saveExternalWindowSettings();
|
|
||||||
void showLinkInHelpMode(const QUrl &source);
|
|
||||||
void showLinksInCurrentViewer(const QMap<QString, QUrl> &links, const QString &key);
|
|
||||||
void slotHideRightPane();
|
|
||||||
|
|
||||||
void updateSideBarSource(const QUrl &newUrl);
|
|
||||||
|
|
||||||
void setupHelpEngineIfNeeded();
|
|
||||||
|
|
||||||
void highlightSearchTermsInContextHelp();
|
|
||||||
void handleHelpRequest(const QUrl &url, Core::HelpManager::HelpViewerLocation location);
|
|
||||||
|
|
||||||
void slotSystemInformation();
|
|
||||||
|
|
||||||
void resetFilter();
|
|
||||||
static void activateHelpMode();
|
|
||||||
static bool canShowHelpSideBySide();
|
|
||||||
HelpViewer *viewerForContextHelp();
|
|
||||||
HelpWidget *createHelpWidget(const Core::Context &context, HelpWidget::WidgetStyle style);
|
|
||||||
void createRightPaneContextViewer();
|
|
||||||
HelpViewer *externalHelpViewer();
|
|
||||||
HelpViewer *helpModeHelpViewer();
|
|
||||||
HelpWidget *helpWidgetForWindow(QWidget *window);
|
|
||||||
|
|
||||||
void doSetupIfNeeded();
|
|
||||||
|
|
||||||
HelpMode *m_mode = nullptr;
|
|
||||||
CentralWidget *m_centralWidget = nullptr;
|
|
||||||
HelpWidget *m_rightPaneSideBarWidget = nullptr;
|
|
||||||
|
|
||||||
DocSettingsPage *m_docSettingsPage = nullptr;
|
|
||||||
FilterSettingsPage *m_filterSettingsPage = nullptr;
|
|
||||||
SearchTaskHandler *m_searchTaskHandler = nullptr;
|
|
||||||
|
|
||||||
bool m_setupNeeded = true;
|
|
||||||
LocalHelpManager *m_helpManager = nullptr;
|
|
||||||
OpenPagesManager *m_openPagesManager = nullptr;
|
|
||||||
|
|
||||||
QString m_contextHelpHighlightId;
|
|
||||||
|
|
||||||
QPointer<HelpWidget> m_externalWindow;
|
|
||||||
QRect m_externalWindowState;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace Internal
|
} // namespace Internal
|
||||||
|
Reference in New Issue
Block a user