diff options
author | Eike Ziller <eike.ziller@digia.com> | 2014-06-20 17:24:18 +0200 |
---|---|---|
committer | Eike Ziller <eike.ziller@digia.com> | 2014-06-24 11:22:20 +0200 |
commit | 8fc7035b18e265910795b27cf1be346dd900b942 (patch) | |
tree | 43b5abbaacb66cd1a443e28320df9bf3c8b32f2f /src/plugins | |
parent | 513aba55a2ea69a64fb820a9c453bd87eafdf26a (diff) | |
download | qt-creator-8fc7035b18e265910795b27cf1be346dd900b942.tar.gz |
Help: Open example documentation in extra window
Also remove the hack that HelpManager::handleHelpRequest looks
for ?view=split in the URL and use an enum instead.
Change-Id: I4ad74775381cf0b321181358266d8e89c6e277b5
Reviewed-by: Karsten Heimrich <karsten.heimrich@digia.com>
Diffstat (limited to 'src/plugins')
-rw-r--r-- | src/plugins/coreplugin/helpmanager.cpp | 9 | ||||
-rw-r--r-- | src/plugins/coreplugin/helpmanager.h | 14 | ||||
-rw-r--r-- | src/plugins/help/generalsettingspage.cpp | 2 | ||||
-rw-r--r-- | src/plugins/help/helpconstants.h | 7 | ||||
-rw-r--r-- | src/plugins/help/helpplugin.cpp | 92 | ||||
-rw-r--r-- | src/plugins/help/helpplugin.h | 9 | ||||
-rw-r--r-- | src/plugins/qtsupport/gettingstartedwelcomepage.cpp | 8 | ||||
-rw-r--r-- | src/plugins/qtsupport/gettingstartedwelcomepage.h | 2 | ||||
-rw-r--r-- | src/plugins/welcome/welcomeplugin.cpp | 1 |
9 files changed, 81 insertions, 63 deletions
diff --git a/src/plugins/coreplugin/helpmanager.cpp b/src/plugins/coreplugin/helpmanager.cpp index b28e3f0c87..36169062aa 100644 --- a/src/plugins/coreplugin/helpmanager.cpp +++ b/src/plugins/coreplugin/helpmanager.cpp @@ -282,9 +282,14 @@ QByteArray HelpManager::fileData(const QUrl &url) return d->m_helpEngine->fileData(url); } -void HelpManager::handleHelpRequest(const QString &url) +void HelpManager::handleHelpRequest(const QUrl &url, HelpManager::HelpViewerLocation location) { - emit m_instance->helpRequested(QUrl(url)); + emit m_instance->helpRequested(url, location); +} + +void HelpManager::handleHelpRequest(const QString &url, HelpViewerLocation location) +{ + handleHelpRequest(QUrl(url), location); } QStringList HelpManager::registeredNamespaces() diff --git a/src/plugins/coreplugin/helpmanager.h b/src/plugins/coreplugin/helpmanager.h index 63e0408572..f145b549fb 100644 --- a/src/plugins/coreplugin/helpmanager.h +++ b/src/plugins/coreplugin/helpmanager.h @@ -53,6 +53,13 @@ class CORE_EXPORT HelpManager : public QObject Q_OBJECT public: + enum HelpViewerLocation { + SideBySideIfPossible = 0, + SideBySideAlways = 1, + HelpModeAlways = 2, + ExternalHelpAlways = 3 + }; + typedef QHash<QString, QStringList> Filters; static QObject *instance(); @@ -85,13 +92,16 @@ public: static void addUserDefinedFilter(const QString &filter, const QStringList &attr); public slots: - static void handleHelpRequest(const QString &url); + static void handleHelpRequest(const QUrl &url, + Core::HelpManager::HelpViewerLocation location = HelpModeAlways); + static void handleHelpRequest(const QString &url, + Core::HelpManager::HelpViewerLocation location = HelpModeAlways); signals: void setupFinished(); void documentationChanged(); void collectionFileChanged(); - void helpRequested(const QUrl &url); + void helpRequested(const QUrl &url, Core::HelpManager::HelpViewerLocation location); private: explicit HelpManager(QObject *parent = 0); diff --git a/src/plugins/help/generalsettingspage.cpp b/src/plugins/help/generalsettingspage.cpp index c14081743e..f60a65dbe6 100644 --- a/src/plugins/help/generalsettingspage.cpp +++ b/src/plugins/help/generalsettingspage.cpp @@ -103,7 +103,7 @@ QWidget *GeneralSettingsPage::widget() m_ui->helpStartComboBox->setCurrentIndex(m_startOption); m_contextOption = HelpManager::customValue(QLatin1String("ContextHelpOption"), - Help::Constants::SideBySideIfPossible).toInt(); + Core::HelpManager::SideBySideIfPossible).toInt(); m_ui->contextHelpComboBox->setCurrentIndex(m_contextOption); connect(m_ui->currentPageButton, SIGNAL(clicked()), this, SLOT(setCurrentPage())); diff --git a/src/plugins/help/helpconstants.h b/src/plugins/help/helpconstants.h index 674d0fba76..bd561fb056 100644 --- a/src/plugins/help/helpconstants.h +++ b/src/plugins/help/helpconstants.h @@ -42,13 +42,6 @@ enum { ShowLastPages = 2 }; -enum { - SideBySideIfPossible = 0, - SideBySideAlways = 1, - HelpModeAlways = 2, - ExternalHelpAlways = 3 -}; - static const QLatin1String ListSeparator("|"); static const QLatin1String DefaultZoomFactor("0.0"); static const QLatin1String AboutBlank("about:blank"); diff --git a/src/plugins/help/helpplugin.cpp b/src/plugins/help/helpplugin.cpp index 7d44f56181..c68c71d84e 100644 --- a/src/plugins/help/helpplugin.cpp +++ b/src/plugins/help/helpplugin.cpp @@ -65,7 +65,6 @@ #include <coreplugin/editormanager/ieditor.h> #include <coreplugin/findplaceholder.h> #include <coreplugin/icore.h> -#include <coreplugin/helpmanager.h> #include <coreplugin/minisplitter.h> #include <coreplugin/modemanager.h> #include <coreplugin/rightpane.h> @@ -176,8 +175,8 @@ bool HelpPlugin::initialize(const QStringList &arguments, QString *error) SLOT(fontChanged())); connect(m_generalSettingsPage, SIGNAL(returnOnCloseChanged()), this, SLOT(updateCloseButton())); - connect(HelpManager::instance(), SIGNAL(helpRequested(QUrl)), this, - SLOT(handleHelpRequest(QUrl))); + connect(HelpManager::instance(), SIGNAL(helpRequested(QUrl,Core::HelpManager::HelpViewerLocation)), + this, SLOT(handleHelpRequest(QUrl,Core::HelpManager::HelpViewerLocation))); connect(m_searchTaskHandler, SIGNAL(search(QUrl)), this, SLOT(switchToHelpMode(QUrl))); @@ -678,45 +677,48 @@ void HelpPlugin::setupHelpEngineIfNeeded() { m_helpManager->setEngineNeedsUpdate(); if (ModeManager::currentMode() == m_mode - || contextHelpOption() == Help::Constants::ExternalHelpAlways) + || contextHelpOption() == Core::HelpManager::ExternalHelpAlways) m_helpManager->setupGuiHelpEngine(); } -HelpViewer *HelpPlugin::viewerForContextMode() +bool HelpPlugin::canShowHelpSideBySide() const { - bool showSideBySide = false; RightPanePlaceHolder *placeHolder = RightPanePlaceHolder::current(); - switch (contextHelpOption()) { - case Help::Constants::SideBySideIfPossible: { - // side by side if possible - if (IEditor *editor = EditorManager::currentEditor()) { - if (!placeHolder || !placeHolder->isVisible()) { - if (!editor->widget()) - break; - if (!editor->widget()->isVisible()) - break; - if (editor->widget()->width() < 800) - break; - } - } - } // fall through - case Help::Constants::SideBySideAlways: { - // side by side - showSideBySide = true; - } break; - case Help::Constants::ExternalHelpAlways: - return externalHelpViewer(); - default: // help mode - break; - } + if (!placeHolder) + return false; + if (placeHolder->isVisible()) + return true; + + IEditor *editor = EditorManager::currentEditor(); + if (!editor) + return true; + QTC_ASSERT(editor->widget(), return true); + if (!editor->widget()->isVisible()) + return true; + if (editor->widget()->width() < 800) + return false; + return true; +} + +HelpViewer *HelpPlugin::viewerForHelpViewerLocation(Core::HelpManager::HelpViewerLocation location) +{ + Core::HelpManager::HelpViewerLocation actualLocation = location; + if (location == Core::HelpManager::SideBySideIfPossible) + actualLocation = canShowHelpSideBySide() ? Core::HelpManager::SideBySideAlways + : Core::HelpManager::HelpModeAlways; + + if (actualLocation == Core::HelpManager::ExternalHelpAlways) + return externalHelpViewer(); - if (placeHolder && showSideBySide) { + if (actualLocation == Core::HelpManager::SideBySideAlways) { createRightPaneContextViewer(); RightPaneWidget::instance()->setWidget(m_rightPaneSideBarWidget); RightPaneWidget::instance()->setShown(true); return m_rightPaneSideBarWidget->currentViewer(); } + QTC_CHECK(actualLocation == Core::HelpManager::HelpModeAlways); + activateHelpMode(); // should trigger an createPage... HelpViewer *viewer = m_centralWidget->currentHelpViewer(); if (!viewer) @@ -724,6 +726,11 @@ HelpViewer *HelpPlugin::viewerForContextMode() return viewer; } +HelpViewer *HelpPlugin::viewerForContextHelp() +{ + return viewerForHelpViewerLocation(contextHelpOption()); +} + static QUrl findBestLink(const QMap<QString, QUrl> &links, QString *highlightId) { if (highlightId) @@ -768,7 +775,7 @@ void HelpPlugin::activateContext() links.insert(idFromContext, idFromContext); } - if (HelpViewer* viewer = viewerForContextMode()) { + if (HelpViewer *viewer = viewerForContextHelp()) { QUrl source = findBestLink(links, &m_contextHelpHighlightId); if (!source.isValid()) { // No link found or no context object @@ -937,13 +944,13 @@ void HelpPlugin::highlightSearchTermsInContextHelp() { if (m_contextHelpHighlightId.isEmpty()) return; - HelpViewer* viewer = viewerForContextMode(); + HelpViewer *viewer = viewerForContextHelp(); QTC_ASSERT(viewer, return); viewer->highlightId(m_contextHelpHighlightId); m_contextHelpHighlightId.clear(); } -void HelpPlugin::handleHelpRequest(const QUrl &url) +void HelpPlugin::handleHelpRequest(const QUrl &url, Core::HelpManager::HelpViewerLocation location) { if (HelpViewer::launchWithExternalApp(url)) return; @@ -964,12 +971,10 @@ void HelpPlugin::handleHelpRequest(const QUrl &url) } const QUrl newUrl(address); - if (newUrl.queryItemValue(QLatin1String("view")) == QLatin1String("split")) { - if (HelpViewer* viewer = viewerForContextMode()) - viewer->setSource(newUrl); - } else { - switchToHelpMode(newUrl); - } + HelpViewer *viewer = viewerForHelpViewerLocation(location); + QTC_ASSERT(viewer, return); + viewer->setSource(newUrl); + Core::ICore::raiseWindow(viewer); } void HelpPlugin::slotAboutToShowBackMenu() @@ -1014,16 +1019,17 @@ void HelpPlugin::doSetupIfNeeded() } } -int HelpPlugin::contextHelpOption() const +Core::HelpManager::HelpViewerLocation HelpPlugin::contextHelpOption() const { QSettings *settings = Core::ICore::settings(); const QString key = QLatin1String(Help::Constants::ID_MODE_HELP) + QLatin1String("/ContextHelpOption"); if (settings->contains(key)) - return settings->value(key, Help::Constants::SideBySideIfPossible).toInt(); + return Core::HelpManager::HelpViewerLocation( + settings->value(key, Core::HelpManager::SideBySideIfPossible).toInt()); const QHelpEngineCore &engine = LocalHelpManager::helpEngine(); - return engine.customValue(QLatin1String("ContextHelpOption"), - Help::Constants::SideBySideIfPossible).toInt(); + return Core::HelpManager::HelpViewerLocation(engine.customValue(QLatin1String("ContextHelpOption"), + Core::HelpManager::SideBySideIfPossible).toInt()); } void HelpPlugin::setupNavigationMenus(QAction *back, QAction *next, QWidget *parent) diff --git a/src/plugins/help/helpplugin.h b/src/plugins/help/helpplugin.h index 4ce14cfba9..1170e2733b 100644 --- a/src/plugins/help/helpplugin.h +++ b/src/plugins/help/helpplugin.h @@ -32,6 +32,7 @@ #include "helpwidget.h" +#include <coreplugin/helpmanager.h> #include <coreplugin/icontext.h> #include <extensionsystem/iplugin.h> @@ -113,7 +114,7 @@ private slots: void setupHelpEngineIfNeeded(); void highlightSearchTermsInContextHelp(); - void handleHelpRequest(const QUrl &url); + void handleHelpRequest(const QUrl &url, Core::HelpManager::HelpViewerLocation location); void slotAboutToShowBackMenu(); void slotAboutToShowNextMenu(); @@ -128,13 +129,15 @@ private: void activateHelpMode(); Utils::StyledBar *createWidgetToolBar(); Utils::StyledBar *createIconToolBar(bool external); - HelpViewer* viewerForContextMode(); + bool canShowHelpSideBySide() const; + HelpViewer *viewerForHelpViewerLocation(Core::HelpManager::HelpViewerLocation location); + HelpViewer *viewerForContextHelp(); HelpWidget *createHelpWidget(const Core::Context &context, HelpWidget::WidgetStyle style); void createRightPaneContextViewer(); HelpViewer *externalHelpViewer(); void doSetupIfNeeded(); - int contextHelpOption() const; + Core::HelpManager::HelpViewerLocation contextHelpOption() const; void setupNavigationMenus(QAction *back, QAction *next, QWidget *parent); private: diff --git a/src/plugins/qtsupport/gettingstartedwelcomepage.cpp b/src/plugins/qtsupport/gettingstartedwelcomepage.cpp index 9d38cc4317..3d7fcd9d71 100644 --- a/src/plugins/qtsupport/gettingstartedwelcomepage.cpp +++ b/src/plugins/qtsupport/gettingstartedwelcomepage.cpp @@ -279,14 +279,14 @@ ExamplesWelcomePage::Id ExamplesWelcomePage::id() const return m_showExamples ? Examples : Tutorials; } -void ExamplesWelcomePage::openSplitHelp(const QUrl &help) +void ExamplesWelcomePage::openHelpInExtraWindow(const QUrl &help) { - Core::HelpManager::handleHelpRequest(help.toString()+QLatin1String("?view=split")); + Core::HelpManager::handleHelpRequest(help, Core::HelpManager::ExternalHelpAlways); } void ExamplesWelcomePage::openHelp(const QUrl &help) { - Core::HelpManager::handleHelpRequest(help.toString()); + Core::HelpManager::handleHelpRequest(help, Core::HelpManager::HelpModeAlways); } void ExamplesWelcomePage::openUrl(const QUrl &url) @@ -414,7 +414,7 @@ void ExamplesWelcomePage::openProject(const QString &projectFile, Core::ICore::openFiles(filesToOpen); Core::ModeManager::activateMode(Core::Constants::MODE_EDIT); if (help.isValid()) - Core::HelpManager::handleHelpRequest(help.toString() + QLatin1String("?view=split")); + openHelpInExtraWindow(help.toString()); Core::ModeManager::activateMode(ProjectExplorer::Constants::MODE_SESSION); } if (!errorMessage.isEmpty()) diff --git a/src/plugins/qtsupport/gettingstartedwelcomepage.h b/src/plugins/qtsupport/gettingstartedwelcomepage.h index 377a9d9dba..a60074fdba 100644 --- a/src/plugins/qtsupport/gettingstartedwelcomepage.h +++ b/src/plugins/qtsupport/gettingstartedwelcomepage.h @@ -61,7 +61,7 @@ public: Q_INVOKABLE void openUrl(const QUrl &url); public slots: - void openSplitHelp(const QUrl &help); + void openHelpInExtraWindow(const QUrl &help); void openHelp(const QUrl &help); void openProject(const QString& projectFile, const QStringList& additionalFilesToOpen, const QString &mainFile, const QUrl& help, const QStringList &dependencies, diff --git a/src/plugins/welcome/welcomeplugin.cpp b/src/plugins/welcome/welcomeplugin.cpp index c1d14cee1e..57779ff4a2 100644 --- a/src/plugins/welcome/welcomeplugin.cpp +++ b/src/plugins/welcome/welcomeplugin.cpp @@ -156,6 +156,7 @@ WelcomeMode::WelcomeMode() : layout->addWidget(m_welcomePage); #else QWidget *container = QWidget::createWindowContainer(m_welcomePage, m_modeWidget); + container->setProperty("nativeAncestors", true); m_modeWidget->setLayout(layout); layout->addWidget(container); #endif // USE_QUICK_WIDGET |