summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@digia.com>2014-06-04 13:41:32 +0200
committerEike Ziller <eike.ziller@digia.com>2014-06-04 15:10:59 +0200
commit43895b038f1712d4c98b8f81d7248b44f42f27cd (patch)
treeb92d785986ba0fea9c66fed93f6ff878951ce801 /src
parent94ca9e563c4fa444ad647f8380f040c146fa0344 (diff)
downloadqt-creator-43895b038f1712d4c98b8f81d7248b44f42f27cd.tar.gz
Help: Fix finding latest Qt documentation link for Qt5
The identifiers changed to use org.qt-project. Also simplify the logic the does the id highlighting. Task-number: QTCREATORBUG-10331 Change-Id: I3b6eb80138d8fafeb84772b95435acd68818ada1 Reviewed-by: Karsten Heimrich <karsten.heimrich@digia.com>
Diffstat (limited to 'src')
-rw-r--r--src/plugins/help/helpplugin.cpp100
-rw-r--r--src/plugins/help/helpplugin.h4
-rw-r--r--src/plugins/help/qtwebkithelpviewer.cpp15
3 files changed, 66 insertions, 53 deletions
diff --git a/src/plugins/help/helpplugin.cpp b/src/plugins/help/helpplugin.cpp
index 0ae2a61db0..ff7a6299b4 100644
--- a/src/plugins/help/helpplugin.cpp
+++ b/src/plugins/help/helpplugin.cpp
@@ -75,6 +75,7 @@
#include <coreplugin/find/findplugin.h>
#include <texteditor/texteditorconstants.h>
#include <utils/hostosinfo.h>
+#include <utils/qtcassert.h>
#include <utils/styledbar.h>
#include <QDir>
@@ -617,6 +618,9 @@ void HelpPlugin::createRightPaneContextViewer()
advancedMenu->addAction(cmd, Core::Constants::G_EDIT_FONT);
}
+ connect(m_helpViewerForSideBar, SIGNAL(loadFinished()),
+ this, SLOT(highlightSearchTermsInContextHelp()));
+
// force setup, as we might have never switched to full help mode
// thus the help engine might still run without collection file setup
m_helpManager->setupGuiHelpEngine();
@@ -870,6 +874,34 @@ HelpViewer *HelpPlugin::viewerForContextMode()
return viewer;
}
+static QUrl findBestLink(const QMap<QString, QUrl> &links, QString *highlightId)
+{
+ if (highlightId)
+ highlightId->clear();
+ if (links.isEmpty())
+ return QUrl();
+ QUrl source = links.first();
+ // workaround to show the latest Qt version
+ int version = 0;
+ QRegExp exp(QLatin1String("(\\d+)"));
+ foreach (const QUrl &link, links) {
+ const QString &authority = link.authority();
+ if (authority.startsWith(QLatin1String("com.trolltech."))
+ || authority.startsWith(QLatin1String("org.qt-project."))) {
+ if (exp.indexIn(authority) >= 0) {
+ const int tmpVersion = exp.cap(1).toInt();
+ if (tmpVersion > version) {
+ source = link;
+ version = tmpVersion;
+ if (highlightId)
+ *highlightId = source.fragment();
+ }
+ }
+ }
+ }
+ return source;
+}
+
void HelpPlugin::activateContext()
{
createRightPaneContextViewer();
@@ -885,64 +917,28 @@ void HelpPlugin::activateContext()
// Find out what to show
QMap<QString, QUrl> links;
+ QString idFromContext;
if (IContext *context = Core::ICore::currentContextObject()) {
- m_idFromContext = context->contextHelpId();
- links = HelpManager::linksForIdentifier(m_idFromContext);
+ idFromContext = context->contextHelpId();
+ links = HelpManager::linksForIdentifier(idFromContext);
// Maybe the id is already an URL
- if (links.isEmpty() && LocalHelpManager::isValidUrl(m_idFromContext))
- links.insert(m_idFromContext, m_idFromContext);
+ if (links.isEmpty() && LocalHelpManager::isValidUrl(idFromContext))
+ links.insert(idFromContext, idFromContext);
}
if (HelpViewer* viewer = viewerForContextMode()) {
- if (links.isEmpty()) {
+ QUrl source = findBestLink(links, &m_contextHelpHighlightId);
+ if (!source.isValid()) {
// No link found or no context object
viewer->setSource(QUrl(Help::Constants::AboutBlank));
viewer->setHtml(tr("<html><head><title>No Documentation</title>"
"</head><body><br/><center><b>%1</b><br/>No documentation "
- "available.</center></body></html>").arg(m_idFromContext));
+ "available.</center></body></html>").arg(idFromContext));
} else {
- int version = 0;
- QRegExp exp(QLatin1String("(\\d+)"));
- QUrl source = *links.begin();
- const QLatin1String qtRefDoc = QLatin1String("com.trolltech.qt");
-
- // workaround to show the latest Qt version
- foreach (const QUrl &tmp, links) {
- const QString &authority = tmp.authority();
- if (authority.startsWith(qtRefDoc)) {
- if (exp.indexIn(authority) >= 0) {
- const int tmpVersion = exp.cap(1).toInt();
- if (tmpVersion > version) {
- source = tmp;
- version = tmpVersion;
- }
- }
- }
- }
-
const QUrl &oldSource = viewer->source();
if (source != oldSource) {
viewer->stop();
- const QString &fragment = source.fragment();
- const bool isQtRefDoc = source.authority().startsWith(qtRefDoc);
- if (isQtRefDoc) {
- // workaround for qt properties
- m_idFromContext = fragment;
-
- if (!m_idFromContext.isEmpty()) {
- connect(viewer, SIGNAL(loadFinished()), this,
- SLOT(highlightSearchTerms()));
- }
- }
-
- viewer->setSource(source);
-
- if (isQtRefDoc && !m_idFromContext.isEmpty()) {
- if (source.toString().remove(fragment)
- == oldSource.toString().remove(oldSource.fragment())) {
- highlightSearchTerms();
- }
- }
+ viewer->setSource(source); // triggers loadFinished which triggers id highlighting
} else {
viewer->scrollToAnchor(source.fragment());
}
@@ -1094,13 +1090,15 @@ void HelpPlugin::addBookmark()
manager->showBookmarkDialog(m_centralWidget, viewer->title(), url);
}
-void HelpPlugin::highlightSearchTerms()
+void HelpPlugin::highlightSearchTermsInContextHelp()
{
- if (HelpViewer* viewer = viewerForContextMode()) {
- disconnect(viewer, SIGNAL(loadFinished()), this,
- SLOT(highlightSearchTerms()));
- viewer->highlightId(m_idFromContext);
- }
+ qDebug() << "highlight" << m_contextHelpHighlightId;
+ if (m_contextHelpHighlightId.isEmpty())
+ return;
+ HelpViewer* viewer = viewerForContextMode();
+ QTC_ASSERT(viewer, return);
+ viewer->highlightId(m_contextHelpHighlightId);
+ m_contextHelpHighlightId.clear();
}
void HelpPlugin::handleHelpRequest(const QUrl &url)
diff --git a/src/plugins/help/helpplugin.h b/src/plugins/help/helpplugin.h
index eb2dd506be..0839ec4eae 100644
--- a/src/plugins/help/helpplugin.h
+++ b/src/plugins/help/helpplugin.h
@@ -111,7 +111,7 @@ private slots:
void updateCloseButton();
void setupHelpEngineIfNeeded();
- void highlightSearchTerms();
+ void highlightSearchTermsInContextHelp();
void handleHelpRequest(const QUrl &url);
void slotAboutToShowBackMenu();
@@ -166,7 +166,7 @@ private:
QToolButton *m_closeButton;
- QString m_idFromContext;
+ QString m_contextHelpHighlightId;
Core::IMode* m_oldMode;
bool m_connectWindow;
diff --git a/src/plugins/help/qtwebkithelpviewer.cpp b/src/plugins/help/qtwebkithelpviewer.cpp
index 777077154b..7d28578776 100644
--- a/src/plugins/help/qtwebkithelpviewer.cpp
+++ b/src/plugins/help/qtwebkithelpviewer.cpp
@@ -499,7 +499,20 @@ QUrl QtWebKitHelpViewer::source() const
void QtWebKitHelpViewer::setSource(const QUrl &url)
{
+ QUrl oldWithoutFragment = source();
+ oldWithoutFragment.setFragment(QString());
+
m_webView->load(url);
+
+ // if the new url only changes the anchor,
+ // then webkit does not send loadStarted nor loadFinished,
+ // so we should do that manually in that case
+ QUrl newWithoutFragment = url;
+ newWithoutFragment.setFragment(QString());
+ if (oldWithoutFragment == newWithoutFragment) {
+ slotLoadStarted();
+ slotLoadFinished();
+ }
}
void QtWebKitHelpViewer::scrollToAnchor(const QString &anchor)
@@ -509,6 +522,8 @@ void QtWebKitHelpViewer::scrollToAnchor(const QString &anchor)
void QtWebKitHelpViewer::highlightId(const QString &id)
{
+ if (m_oldHighlightId == id)
+ return;
const QWebElement &document = m_webView->page()->mainFrame()->documentElement();
const QWebElementCollection &collection = document.findAll(QLatin1String("h3.fn a"));