summaryrefslogtreecommitdiff
path: root/src/plugins/help
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/help')
-rw-r--r--src/plugins/help/docsettingspage.cpp29
-rw-r--r--src/plugins/help/docsettingspage.h3
-rw-r--r--src/plugins/help/filtersettingspage.cpp16
-rw-r--r--src/plugins/help/generalsettingspage.cpp23
-rw-r--r--src/plugins/help/help.pro8
-rw-r--r--src/plugins/help/help.qbs2
-rw-r--r--src/plugins/help/helpfindsupport.cpp12
-rw-r--r--src/plugins/help/helpindexfilter.cpp110
-rw-r--r--src/plugins/help/helpindexfilter.h14
-rw-r--r--src/plugins/help/helpplugin.cpp124
-rw-r--r--src/plugins/help/helpplugin.h2
-rw-r--r--src/plugins/help/helpviewer.h1
-rw-r--r--src/plugins/help/localhelpmanager.cpp5
-rw-r--r--src/plugins/help/localhelpmanager.h8
-rw-r--r--src/plugins/help/macwebkithelpviewer.h6
-rw-r--r--src/plugins/help/macwebkithelpviewer.mm91
-rw-r--r--src/plugins/help/openpagesmodel.cpp3
-rw-r--r--src/plugins/help/openpagesswitcher.cpp8
-rw-r--r--src/plugins/help/qtwebkithelpviewer.cpp24
-rw-r--r--src/plugins/help/qtwebkithelpviewer.h5
-rw-r--r--src/plugins/help/remotehelpfilter.cpp6
-rw-r--r--src/plugins/help/textbrowserhelpviewer.cpp29
-rw-r--r--src/plugins/help/textbrowserhelpviewer.h5
23 files changed, 385 insertions, 149 deletions
diff --git a/src/plugins/help/docsettingspage.cpp b/src/plugins/help/docsettingspage.cpp
index 159dbf1ec6..a1d3eff3c7 100644
--- a/src/plugins/help/docsettingspage.cpp
+++ b/src/plugins/help/docsettingspage.cpp
@@ -63,9 +63,13 @@ QWidget *DocSettingsPage::widget()
m_ui.docsListWidget->installEventFilter(this);
const QStringList nameSpaces = HelpManager::registeredNamespaces();
+ const QSet<QString> userDocumentationPaths = HelpManager::userDocumentationPaths();
foreach (const QString &nameSpace, nameSpaces) {
- addItem(nameSpace, HelpManager::fileFromNamespace(nameSpace));
- m_filesToRegister.insert(nameSpace, HelpManager::fileFromNamespace(nameSpace));
+ const QString filePath = HelpManager::fileFromNamespace(nameSpace);
+ bool user = userDocumentationPaths.contains(filePath);
+ addItem(nameSpace, filePath, user);
+ m_filesToRegister.insert(nameSpace, filePath);
+ m_filesToRegisterUserManaged.insert(nameSpace, user);
}
m_filesToUnregister.clear();
@@ -98,8 +102,9 @@ void DocSettingsPage::addDocumentation()
continue;
}
- addItem(nameSpace, file);
+ addItem(nameSpace, file, true/*user managed*/);
m_filesToRegister.insert(nameSpace, QDir::toNativeSeparators(filePath));
+ m_filesToRegisterUserManaged.insert(nameSpace, true/*user managed*/);
// If the files to unregister contains the namespace, grab a copy of all paths added and try to
// remove the current file path. Afterwards remove the whole entry and add the clean list back.
@@ -150,7 +155,14 @@ void DocSettingsPage::removeDocumentation()
void DocSettingsPage::apply()
{
HelpManager::unregisterDocumentation(m_filesToUnregister.keys());
- HelpManager::registerDocumentation(m_filesToRegister.values());
+ QStringList files;
+ auto it = m_filesToRegisterUserManaged.constBegin();
+ while (it != m_filesToRegisterUserManaged.constEnd()) {
+ if (it.value()/*userManaged*/)
+ files << m_filesToRegister.value(it.key());
+ ++it;
+ }
+ HelpManager::registerUserDocumentation(files);
m_filesToUnregister.clear();
}
@@ -185,9 +197,10 @@ void DocSettingsPage::removeDocumentation(const QList<QListWidgetItem*> &items)
int row = 0;
foreach (QListWidgetItem* item, items) {
- const QString nameSpace = item->text();
+ const QString nameSpace = item->data(Qt::UserRole).toString();
m_filesToRegister.remove(nameSpace);
+ m_filesToRegisterUserManaged.remove(nameSpace);
m_filesToUnregister.insertMulti(nameSpace, QDir::cleanPath(HelpManager::fileFromNamespace(nameSpace)));
row = m_ui.docsListWidget->row(item);
@@ -198,9 +211,11 @@ void DocSettingsPage::removeDocumentation(const QList<QListWidgetItem*> &items)
QItemSelectionModel::ClearAndSelect);
}
-void DocSettingsPage::addItem(const QString &nameSpace, const QString &fileName)
+void DocSettingsPage::addItem(const QString &nameSpace, const QString &fileName, bool userManaged)
{
- QListWidgetItem* item = new QListWidgetItem(nameSpace);
+ const QString name = userManaged ? nameSpace : tr("%1 (auto-detected)").arg(nameSpace);
+ QListWidgetItem* item = new QListWidgetItem(name);
item->setToolTip(fileName);
+ item->setData(Qt::UserRole, nameSpace);
m_ui.docsListWidget->addItem(item);
}
diff --git a/src/plugins/help/docsettingspage.h b/src/plugins/help/docsettingspage.h
index 100308f1a4..b87cc1dbf7 100644
--- a/src/plugins/help/docsettingspage.h
+++ b/src/plugins/help/docsettingspage.h
@@ -57,7 +57,7 @@ private slots:
private:
bool eventFilter(QObject *object, QEvent *event);
void removeDocumentation(const QList<QListWidgetItem *> &items);
- void addItem(const QString &nameSpace, const QString &fileName);
+ void addItem(const QString &nameSpace, const QString &fileName, bool userManaged);
private:
Ui::DocSettingsPage m_ui;
@@ -67,6 +67,7 @@ private:
typedef QHash<QString, QString> NameSpaceToPathHash;
NameSpaceToPathHash m_filesToRegister;
+ QHash<QString, bool> m_filesToRegisterUserManaged;
NameSpaceToPathHash m_filesToUnregister;
};
diff --git a/src/plugins/help/filtersettingspage.cpp b/src/plugins/help/filtersettingspage.cpp
index 55643de63e..f9ae9459e2 100644
--- a/src/plugins/help/filtersettingspage.cpp
+++ b/src/plugins/help/filtersettingspage.cpp
@@ -60,14 +60,14 @@ QWidget *FilterSettingsPage::widget()
updateFilterPage();
- connect(m_ui.attributeWidget, SIGNAL(itemChanged(QTreeWidgetItem*,int)),
- this, SLOT(updateFilterMap()));
- connect(m_ui.filterWidget,
- SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)), this,
- SLOT(updateAttributes(QListWidgetItem*)));
- connect(m_ui.filterAddButton, SIGNAL(clicked()), this, SLOT(addFilter()));
- connect(m_ui.filterRemoveButton, SIGNAL(clicked()), this,
- SLOT(removeFilter()));
+ connect(m_ui.attributeWidget, &QTreeWidget::itemChanged,
+ this, &FilterSettingsPage::updateFilterMap);
+ connect(m_ui.filterWidget, &QListWidget::currentItemChanged,
+ this, &FilterSettingsPage::updateAttributes);
+ connect(m_ui.filterAddButton, &QPushButton::clicked,
+ this, &FilterSettingsPage::addFilter);
+ connect(m_ui.filterRemoveButton, &QPushButton::clicked,
+ this, &FilterSettingsPage::removeFilter);
connect(HelpManager::instance(), SIGNAL(documentationChanged()),
this, SLOT(updateFilterPage()));
}
diff --git a/src/plugins/help/generalsettingspage.cpp b/src/plugins/help/generalsettingspage.cpp
index ade95e8add..e216b93da8 100644
--- a/src/plugins/help/generalsettingspage.cpp
+++ b/src/plugins/help/generalsettingspage.cpp
@@ -99,20 +99,25 @@ QWidget *GeneralSettingsPage::widget()
m_ui->helpStartComboBox->setCurrentIndex(m_startOption);
m_contextOption = HelpManager::customValue(QLatin1String("ContextHelpOption"),
- Core::HelpManager::SideBySideIfPossible).toInt();
+ HelpManager::SideBySideIfPossible).toInt();
m_ui->contextHelpComboBox->setCurrentIndex(m_contextOption);
- connect(m_ui->currentPageButton, SIGNAL(clicked()), this, SLOT(setCurrentPage()));
- connect(m_ui->blankPageButton, SIGNAL(clicked()), this, SLOT(setBlankPage()));
- connect(m_ui->defaultPageButton, SIGNAL(clicked()), this, SLOT(setDefaultPage()));
+ connect(m_ui->currentPageButton, &QPushButton::clicked,
+ this, &GeneralSettingsPage::setCurrentPage);
+ connect(m_ui->blankPageButton, &QPushButton::clicked,
+ this, &GeneralSettingsPage::setBlankPage);
+ connect(m_ui->defaultPageButton, &QPushButton::clicked,
+ this, &GeneralSettingsPage::setDefaultPage);
HelpViewer *viewer = CentralWidget::instance()->currentViewer();
if (!viewer)
m_ui->currentPageButton->setEnabled(false);
m_ui->errorLabel->setVisible(false);
- connect(m_ui->importButton, SIGNAL(clicked()), this, SLOT(importBookmarks()));
- connect(m_ui->exportButton, SIGNAL(clicked()), this, SLOT(exportBookmarks()));
+ connect(m_ui->importButton, &QPushButton::clicked,
+ this, &GeneralSettingsPage::importBookmarks);
+ connect(m_ui->exportButton, &QPushButton::clicked,
+ this, &GeneralSettingsPage::exportBookmarks);
m_returnOnClose = HelpManager::customValue(QLatin1String("ReturnOnClose"),
false).toBool();
@@ -177,7 +182,7 @@ void GeneralSettingsPage::apply()
m_contextOption = helpOption;
HelpManager::setCustomValue(QLatin1String("ContextHelpOption"), helpOption);
- QSettings *settings = Core::ICore::settings();
+ QSettings *settings = ICore::settings();
settings->beginGroup(QLatin1String(Help::Constants::ID_MODE_HELP));
settings->setValue(QLatin1String("ContextHelpOption"), helpOption);
settings->endGroup();
@@ -212,7 +217,7 @@ void GeneralSettingsPage::importBookmarks()
{
m_ui->errorLabel->setVisible(false);
- QString fileName = QFileDialog::getOpenFileName(Core::ICore::dialogParent(),
+ QString fileName = QFileDialog::getOpenFileName(ICore::dialogParent(),
tr("Import Bookmarks"), QDir::currentPath(), tr("Files (*.xbel)"));
if (fileName.isEmpty())
@@ -234,7 +239,7 @@ void GeneralSettingsPage::exportBookmarks()
{
m_ui->errorLabel->setVisible(false);
- QString fileName = QFileDialog::getSaveFileName(Core::ICore::dialogParent(),
+ QString fileName = QFileDialog::getSaveFileName(ICore::dialogParent(),
tr("Save File"), QLatin1String("untitled.xbel"), tr("Files (*.xbel)"));
QLatin1String suffix(".xbel");
diff --git a/src/plugins/help/help.pro b/src/plugins/help/help.pro
index c296fab572..ca6e1adb91 100644
--- a/src/plugins/help/help.pro
+++ b/src/plugins/help/help.pro
@@ -1,4 +1,4 @@
-QT += help network printsupport
+QT += help network printsupport sql
!isEmpty(QT.webkitwidgets.name): QT += webkitwidgets webkit
else: DEFINES += QT_NO_WEBKIT
@@ -67,9 +67,13 @@ osx {
QT += macextras
HEADERS += macwebkithelpviewer.h
OBJECTIVE_SOURCES += macwebkithelpviewer.mm
-
LIBS += -framework WebKit -framework AppKit
+
+ !isEmpty(USE_QUICK_WIDGET) {
+ DEFINES += QTC_MAC_NATIVE_HELPVIEWER_DEFAULT
+ }
}
+
RESOURCES += help.qrc
include(../../shared/help/help.pri)
diff --git a/src/plugins/help/help.qbs b/src/plugins/help/help.qbs
index d4b4535b6d..af3d320666 100644
--- a/src/plugins/help/help.qbs
+++ b/src/plugins/help/help.qbs
@@ -3,7 +3,7 @@ import qbs 1.0
QtcPlugin {
name: "Help"
- Depends { name: "Qt"; submodules: ["help", "network"]; }
+ Depends { name: "Qt"; submodules: ["help", "network", "sql"]; }
Depends { name: "Qt.printsupport" }
Depends {
name: "Qt.webkit"
diff --git a/src/plugins/help/helpfindsupport.cpp b/src/plugins/help/helpfindsupport.cpp
index a3c42cbb67..aab70e6418 100644
--- a/src/plugins/help/helpfindsupport.cpp
+++ b/src/plugins/help/helpfindsupport.cpp
@@ -41,7 +41,7 @@ HelpViewerFindSupport::HelpViewerFindSupport(HelpViewer *viewer)
{
}
-Core::FindFlags HelpViewerFindSupport::supportedFindFlags() const
+FindFlags HelpViewerFindSupport::supportedFindFlags() const
{
return FindBackward | FindCaseSensitively;
}
@@ -52,23 +52,23 @@ QString HelpViewerFindSupport::currentFindString() const
return m_viewer->selectedText();
}
-Core::IFindSupport::Result HelpViewerFindSupport::findIncremental(const QString &txt,
- Core::FindFlags findFlags)
+IFindSupport::Result HelpViewerFindSupport::findIncremental(const QString &txt,
+ FindFlags findFlags)
{
QTC_ASSERT(m_viewer, return NotFound);
findFlags &= ~FindBackward;
return find(txt, findFlags, true) ? Found : NotFound;
}
-Core::IFindSupport::Result HelpViewerFindSupport::findStep(const QString &txt,
- Core::FindFlags findFlags)
+IFindSupport::Result HelpViewerFindSupport::findStep(const QString &txt,
+ FindFlags findFlags)
{
QTC_ASSERT(m_viewer, return NotFound);
return find(txt, findFlags, false) ? Found : NotFound;
}
bool HelpViewerFindSupport::find(const QString &txt,
- Core::FindFlags findFlags, bool incremental)
+ FindFlags findFlags, bool incremental)
{
QTC_ASSERT(m_viewer, return false);
bool wrapped = false;
diff --git a/src/plugins/help/helpindexfilter.cpp b/src/plugins/help/helpindexfilter.cpp
index 52762f46f8..8fa6074983 100644
--- a/src/plugins/help/helpindexfilter.cpp
+++ b/src/plugins/help/helpindexfilter.cpp
@@ -37,8 +37,14 @@
#include <extensionsystem/pluginmanager.h>
#include <coreplugin/icore.h>
#include <coreplugin/helpmanager.h>
+#include <utils/algorithm.h>
#include <QIcon>
+#include <QSqlDatabase>
+#include <QSqlDriver>
+#include <QSqlError>
+#include <QSqlQuery>
+
using namespace Core;
using namespace Help;
@@ -47,6 +53,7 @@ using namespace Help::Internal;
Q_DECLARE_METATYPE(ILocatorFilter*)
HelpIndexFilter::HelpIndexFilter()
+ : m_needsUpdate(true)
{
setId("HelpIndexFilter");
setDisplayName(tr("Help Index"));
@@ -54,6 +61,12 @@ HelpIndexFilter::HelpIndexFilter()
setShortcutString(QString(QLatin1Char('?')));
m_icon = QIcon(QLatin1String(":/help/images/bookmark.png"));
+ connect(HelpManager::instance(), &HelpManager::setupFinished,
+ this, &HelpIndexFilter::invalidateCache);
+ connect(HelpManager::instance(), &HelpManager::documentationChanged,
+ this, &HelpIndexFilter::invalidateCache);
+ connect(HelpManager::instance(), &HelpManager::collectionFileChanged,
+ this, &HelpIndexFilter::invalidateCache);
}
HelpIndexFilter::~HelpIndexFilter()
@@ -62,21 +75,63 @@ HelpIndexFilter::~HelpIndexFilter()
void HelpIndexFilter::prepareSearch(const QString &entry)
{
- if (entry.length() < 2)
- m_keywords = Core::HelpManager::findKeywords(entry, caseSensitivity(entry), 200);
- else
- m_keywords = Core::HelpManager::findKeywords(entry, caseSensitivity(entry));
+ Q_UNUSED(entry)
+ QStringList namespaces = HelpManager::registeredNamespaces();
+ m_helpDatabases = Utils::transform(namespaces, [](const QString &ns) {
+ return HelpManager::fileFromNamespace(ns);
+ });
}
QList<LocatorFilterEntry> HelpIndexFilter::matchesFor(QFutureInterface<LocatorFilterEntry> &future, const QString &entry)
{
- Q_UNUSED(entry) // search is already done in the GUI thread in prepareSearch
+ m_mutex.lock(); // guard m_needsUpdate
+ bool forceUpdate = m_needsUpdate;
+ m_mutex.unlock();
+
+ if (forceUpdate || m_searchTermCache.size() < 2 || m_searchTermCache.isEmpty()
+ || !entry.contains(m_searchTermCache)) {
+ int limit = entry.size() < 2 ? 200 : INT_MAX;
+ QSet<QString> results;
+ foreach (const QString &filePath, m_helpDatabases) {
+ QSet<QString> result;
+ QMetaObject::invokeMethod(this, "searchMatches", Qt::BlockingQueuedConnection,
+ Q_RETURN_ARG(QSet<QString>, result),
+ Q_ARG(QString, filePath),
+ Q_ARG(QString, entry),
+ Q_ARG(int, limit));
+ results.unite(result);
+ }
+ m_mutex.lock(); // guard m_needsUpdate
+ m_needsUpdate = false;
+ m_mutex.unlock();
+ m_keywordCache = results;
+ m_searchTermCache = entry;
+ }
+
+ Qt::CaseSensitivity cs = caseSensitivity(entry);
QList<LocatorFilterEntry> entries;
- foreach (const QString &keyword, m_keywords) {
+ QStringList keywords;
+ QStringList unsortedKeywords;
+ keywords.reserve(m_keywordCache.size());
+ unsortedKeywords.reserve(m_keywordCache.size());
+ QSet<QString> allresults;
+ foreach (const QString &keyword, m_keywordCache) {
if (future.isCanceled())
break;
- entries.append(LocatorFilterEntry(this, keyword, QVariant(), m_icon));
+ if (keyword.startsWith(entry, cs)) {
+ keywords.append(keyword);
+ allresults.insert(keyword);
+ } else if (keyword.contains(entry, cs)) {
+ unsortedKeywords.append(keyword);
+ allresults.insert(keyword);
+ }
}
+ Utils::sort(keywords);
+ keywords << unsortedKeywords;
+ m_keywordCache = allresults;
+ m_searchTermCache = entry;
+ foreach (const QString &keyword, keywords)
+ entries.append(LocatorFilterEntry(this, keyword, QVariant(), m_icon));
return entries;
}
@@ -84,7 +139,7 @@ QList<LocatorFilterEntry> HelpIndexFilter::matchesFor(QFutureInterface<LocatorFi
void HelpIndexFilter::accept(LocatorFilterEntry selection) const
{
const QString &key = selection.displayName;
- const QMap<QString, QUrl> &links = Core::HelpManager::linksForKeyword(key);
+ const QMap<QString, QUrl> &links = HelpManager::linksForKeyword(key);
if (links.size() == 1)
emit linkActivated(links.begin().value());
@@ -95,5 +150,42 @@ void HelpIndexFilter::accept(LocatorFilterEntry selection) const
void HelpIndexFilter::refresh(QFutureInterface<void> &future)
{
Q_UNUSED(future)
- // Nothing to refresh
+ invalidateCache();
+}
+
+QSet<QString> HelpIndexFilter::searchMatches(const QString &databaseFilePath,
+ const QString &term, int limit)
+{
+ static const QLatin1String sqlite("QSQLITE");
+ static const QLatin1String name("HelpManager::findKeywords");
+
+ QSet<QString> keywords;
+
+ { // make sure db is destroyed before removeDatabase call
+ QSqlDatabase db = QSqlDatabase::addDatabase(sqlite, name);
+ if (db.driver() && db.driver()->lastError().type() == QSqlError::NoError) {
+ db.setDatabaseName(databaseFilePath);
+ if (db.open()) {
+ QSqlQuery query = QSqlQuery(db);
+ query.setForwardOnly(true);
+ query.exec(QString::fromLatin1("SELECT DISTINCT Name FROM IndexTable WHERE Name LIKE "
+ "'%%1%' LIMIT %2").arg(term, QString::number(limit)));
+ while (query.next()) {
+ const QString &keyValue = query.value(0).toString();
+ if (!keyValue.isEmpty())
+ keywords.insert(keyValue);
+ }
+ db.close();
+ }
+ }
+ }
+ QSqlDatabase::removeDatabase(name);
+ return keywords;
+}
+
+void HelpIndexFilter::invalidateCache()
+{
+ m_mutex.lock();
+ m_needsUpdate = true;
+ m_mutex.unlock();
}
diff --git a/src/plugins/help/helpindexfilter.h b/src/plugins/help/helpindexfilter.h
index 06526ec73e..237a522443 100644
--- a/src/plugins/help/helpindexfilter.h
+++ b/src/plugins/help/helpindexfilter.h
@@ -34,6 +34,7 @@
#include <coreplugin/locator/ilocatorfilter.h>
#include <QIcon>
+#include <QMutex>
namespace Help {
namespace Internal {
@@ -48,17 +49,26 @@ public:
// ILocatorFilter
void prepareSearch(const QString &entry);
- QList<Core::LocatorFilterEntry> matchesFor(QFutureInterface<Core::LocatorFilterEntry> &future, const QString &entry);
+ QList<Core::LocatorFilterEntry> matchesFor(QFutureInterface<Core::LocatorFilterEntry> &future,
+ const QString &entry);
void accept(Core::LocatorFilterEntry selection) const;
void refresh(QFutureInterface<void> &future);
+ Q_INVOKABLE QSet<QString> searchMatches(const QString &databaseFilePath,
+ const QString &term, int limit);
signals:
void linkActivated(const QUrl &link) const;
void linksActivated(const QMap<QString, QUrl> &links, const QString &key) const;
private:
+ void invalidateCache();
+
+ QStringList m_helpDatabases;
+ QSet<QString> m_keywordCache;
+ QString m_searchTermCache;
+ bool m_needsUpdate;
+ QMutex m_mutex;
QIcon m_icon;
- QStringList m_keywords;
};
} // namespace Internal
diff --git a/src/plugins/help/helpplugin.cpp b/src/plugins/help/helpplugin.cpp
index 59787ffa6e..12dcbb02ec 100644
--- a/src/plugins/help/helpplugin.cpp
+++ b/src/plugins/help/helpplugin.cpp
@@ -95,12 +95,12 @@
#include <QHelpEngine>
+#include <functional>
+
using namespace Help::Internal;
static const char kExternalWindowStateKey[] = "Help/ExternalWindowState";
-#define IMAGEPATH ":/help/images/"
-
using namespace Core;
using namespace Utils;
@@ -149,7 +149,7 @@ bool HelpPlugin::initialize(const QStringList &arguments, QString *error)
addAutoReleasedObject(m_generalSettingsPage = new GeneralSettingsPage());
addAutoReleasedObject(m_searchTaskHandler = new SearchTaskHandler);
- m_centralWidget = new Help::Internal::CentralWidget(modecontext);
+ m_centralWidget = new CentralWidget(modecontext);
connect(m_centralWidget, SIGNAL(sourceChanged(QUrl)), this,
SLOT(updateSideBarSource(QUrl)));
connect(m_centralWidget, &CentralWidget::closeButtonClicked,
@@ -170,8 +170,6 @@ bool HelpPlugin::initialize(const QStringList &arguments, QString *error)
SLOT(setupHelpEngineIfNeeded()));
connect(HelpManager::instance(), SIGNAL(collectionFileChanged()), this,
SLOT(setupHelpEngineIfNeeded()));
- connect(HelpManager::instance(), SIGNAL(setupFinished()), this,
- SLOT(unregisterOldQtCreatorDocumentation()));
Command *cmd;
QAction *action;
@@ -265,22 +263,6 @@ ExtensionSystem::IPlugin::ShutdownFlag HelpPlugin::aboutToShutdown()
return SynchronousShutdown;
}
-void HelpPlugin::unregisterOldQtCreatorDocumentation()
-{
- const QString &nsInternal = QString::fromLatin1("org.qt-project.qtcreator.%1%2%3")
- .arg(IDE_VERSION_MAJOR).arg(IDE_VERSION_MINOR).arg(IDE_VERSION_RELEASE);
-
- QStringList documentationToUnregister;
- foreach (const QString &ns, HelpManager::registeredNamespaces()) {
- if (ns.startsWith(QLatin1String("org.qt-project.qtcreator."))
- && ns != nsInternal) {
- documentationToUnregister << ns;
- }
- }
- if (!documentationToUnregister.isEmpty())
- HelpManager::unregisterDocumentation(documentationToUnregister);
-}
-
void HelpPlugin::resetFilter()
{
const QString &filterInternal = QString::fromLatin1("Qt Creator %1.%2.%3")
@@ -320,7 +302,7 @@ void HelpPlugin::saveExternalWindowSettings()
if (!m_externalWindow)
return;
m_externalWindowState = m_externalWindow->geometry();
- QSettings *settings = Core::ICore::settings();
+ QSettings *settings = ICore::settings();
settings->setValue(QLatin1String(kExternalWindowStateKey),
qVariantFromValue(m_externalWindowState));
}
@@ -340,7 +322,7 @@ HelpWidget *HelpPlugin::createHelpWidget(const Context &context, HelpWidget::Wid
// 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();
+ LocalHelpManager::setupGuiHelpEngine();
return widget;
}
@@ -349,7 +331,7 @@ void HelpPlugin::createRightPaneContextViewer()
{
if (m_rightPaneSideBarWidget)
return;
- m_rightPaneSideBarWidget = createHelpWidget(Core::Context(Constants::C_HELP_SIDEBAR),
+ m_rightPaneSideBarWidget = createHelpWidget(Context(Constants::C_HELP_SIDEBAR),
HelpWidget::SideBarWidget);
}
@@ -358,10 +340,10 @@ HelpViewer *HelpPlugin::externalHelpViewer()
if (m_externalWindow)
return m_externalWindow->currentViewer();
doSetupIfNeeded();
- m_externalWindow = createHelpWidget(Core::Context(Constants::C_HELP_EXTERNAL),
+ m_externalWindow = createHelpWidget(Context(Constants::C_HELP_EXTERNAL),
HelpWidget::ExternalWindow);
if (m_externalWindowState.isNull()) {
- QSettings *settings = Core::ICore::settings();
+ QSettings *settings = ICore::settings();
m_externalWindowState = settings->value(QLatin1String(kExternalWindowStateKey)).toRect();
}
if (m_externalWindowState.isNull())
@@ -375,30 +357,46 @@ HelpViewer *HelpPlugin::externalHelpViewer()
HelpViewer *HelpPlugin::createHelpViewer(qreal zoom)
{
- HelpViewer *viewer = 0;
- const QString backend = QLatin1String(qgetenv("QTC_HELPVIEWER_BACKEND"));
- if (backend.compare(QLatin1String("native"), Qt::CaseInsensitive) == 0) {
+ // check for backends
+ typedef std::function<HelpViewer *()> ViewerFactory;
+ QHash<QString, ViewerFactory> factories; // id -> factory
#ifdef QTC_MAC_NATIVE_HELPVIEWER
- viewer = new MacWebKitHelpViewer(zoom);
-#else
- qWarning() << "native help viewer is requested, but was not enabled during compilation";
- viewer = new TextBrowserHelpViewer(zoom);
+ factories.insert(QLatin1String("native"), []() { return new MacWebKitHelpViewer(); });
#endif
- } else if (backend.compare(QLatin1String("textbrowser"), Qt::CaseInsensitive) == 0) {
- viewer = new TextBrowserHelpViewer(zoom);
- } else {
#ifndef QT_NO_WEBKIT
- viewer = new QtWebKitHelpViewer(zoom);
-#else
- viewer = new TextBrowserHelpViewer(zoom);
+ factories.insert(QLatin1String("qtwebkit"), []() { return new QtWebKitHelpViewer(); });
#endif
+ factories.insert(QLatin1String("textbrowser"), []() { return new TextBrowserHelpViewer(); });
+
+ ViewerFactory factory;
+ // check requested backend
+ const QString backend = QLatin1String(qgetenv("QTC_HELPVIEWER_BACKEND"));
+ if (!backend.isEmpty()) {
+ factory = factories.value(backend);
+ if (!factory)
+ qWarning("Help viewer backend \"%s\" not found, using default.", qPrintable(backend));
}
+ // default setting
+#ifdef QTC_MAC_NATIVE_HELPVIEWER_DEFAULT
+ if (!factory)
+ factory = factories.value(QLatin1String("native"));
+#endif
+ if (!factory)
+ factory = factories.value(QLatin1String("qtwebkit"));
+ if (!factory)
+ factory = factories.value(QLatin1String("textbrowser"));
+
+ QTC_ASSERT(factory, return 0);
+ HelpViewer *viewer = factory();
// initialize font
QVariant fontSetting = LocalHelpManager::engineFontSettings();
if (fontSetting.isValid())
viewer->setViewerFont(fontSetting.value<QFont>());
+ // initialize zoom
+ viewer->setScale(zoom);
+
// add find support
Aggregation::Aggregate *agg = new Aggregation::Aggregate();
agg->add(viewer);
@@ -415,7 +413,7 @@ void HelpPlugin::activateHelpMode()
void HelpPlugin::showLinkInHelpMode(const QUrl &source)
{
activateHelpMode();
- Core::ICore::raiseWindow(m_mode->widget());
+ ICore::raiseWindow(m_mode->widget());
m_centralWidget->setSource(source);
m_centralWidget->setFocus();
}
@@ -423,7 +421,7 @@ void HelpPlugin::showLinkInHelpMode(const QUrl &source)
void HelpPlugin::showLinksInHelpMode(const QMap<QString, QUrl> &links, const QString &key)
{
activateHelpMode();
- Core::ICore::raiseWindow(m_mode->widget());
+ ICore::raiseWindow(m_mode->widget());
m_centralWidget->showTopicChooser(links, key);
}
@@ -477,10 +475,10 @@ void HelpPlugin::fontChanged()
void HelpPlugin::setupHelpEngineIfNeeded()
{
- m_helpManager->setEngineNeedsUpdate();
+ LocalHelpManager::setEngineNeedsUpdate();
if (ModeManager::currentMode() == m_mode
- || contextHelpOption() == Core::HelpManager::ExternalHelpAlways)
- m_helpManager->setupGuiHelpEngine();
+ || contextHelpOption() == HelpManager::ExternalHelpAlways)
+ LocalHelpManager::setupGuiHelpEngine();
}
bool HelpPlugin::canShowHelpSideBySide() const
@@ -502,24 +500,24 @@ bool HelpPlugin::canShowHelpSideBySide() const
return true;
}
-HelpViewer *HelpPlugin::viewerForHelpViewerLocation(Core::HelpManager::HelpViewerLocation location)
+HelpViewer *HelpPlugin::viewerForHelpViewerLocation(HelpManager::HelpViewerLocation location)
{
- Core::HelpManager::HelpViewerLocation actualLocation = location;
- if (location == Core::HelpManager::SideBySideIfPossible)
- actualLocation = canShowHelpSideBySide() ? Core::HelpManager::SideBySideAlways
- : Core::HelpManager::HelpModeAlways;
+ HelpManager::HelpViewerLocation actualLocation = location;
+ if (location == HelpManager::SideBySideIfPossible)
+ actualLocation = canShowHelpSideBySide() ? HelpManager::SideBySideAlways
+ : HelpManager::HelpModeAlways;
- if (actualLocation == Core::HelpManager::ExternalHelpAlways)
+ if (actualLocation == HelpManager::ExternalHelpAlways)
return externalHelpViewer();
- if (actualLocation == Core::HelpManager::SideBySideAlways) {
+ if (actualLocation == HelpManager::SideBySideAlways) {
createRightPaneContextViewer();
RightPaneWidget::instance()->setWidget(m_rightPaneSideBarWidget);
RightPaneWidget::instance()->setShown(true);
return m_rightPaneSideBarWidget->currentViewer();
}
- QTC_CHECK(actualLocation == Core::HelpManager::HelpModeAlways);
+ QTC_CHECK(actualLocation == HelpManager::HelpModeAlways);
activateHelpMode(); // should trigger an createPage...
HelpViewer *viewer = m_centralWidget->currentViewer();
@@ -569,7 +567,7 @@ void HelpPlugin::showContextHelp()
// Find out what to show
QMap<QString, QUrl> links;
QString idFromContext;
- if (IContext *context = Core::ICore::currentContextObject()) {
+ if (IContext *context = ICore::currentContextObject()) {
idFromContext = context->contextHelpId();
links = HelpManager::linksForIdentifier(idFromContext);
// Maybe the id is already an URL
@@ -599,7 +597,7 @@ void HelpPlugin::showContextHelp()
viewer->scrollToAnchor(source.fragment());
}
viewer->setFocus();
- Core::ICore::raiseWindow(viewer);
+ ICore::raiseWindow(viewer);
}
}
}
@@ -626,7 +624,7 @@ void HelpPlugin::highlightSearchTermsInContextHelp()
m_contextHelpHighlightId.clear();
}
-void HelpPlugin::handleHelpRequest(const QUrl &url, Core::HelpManager::HelpViewerLocation location)
+void HelpPlugin::handleHelpRequest(const QUrl &url, HelpManager::HelpViewerLocation location)
{
if (HelpViewer::launchWithExternalApp(url))
return;
@@ -650,7 +648,7 @@ void HelpPlugin::handleHelpRequest(const QUrl &url, Core::HelpManager::HelpViewe
HelpViewer *viewer = viewerForHelpViewerLocation(location);
QTC_ASSERT(viewer, return);
viewer->setSource(newUrl);
- Core::ICore::raiseWindow(viewer);
+ ICore::raiseWindow(viewer);
}
void HelpPlugin::slotOpenSupportPage()
@@ -665,7 +663,7 @@ void HelpPlugin::slotReportBug()
void HelpPlugin::doSetupIfNeeded()
{
- m_helpManager->setupGuiHelpEngine();
+ LocalHelpManager::setupGuiHelpEngine();
if (m_setupNeeded) {
qApp->processEvents();
resetFilter();
@@ -674,15 +672,15 @@ void HelpPlugin::doSetupIfNeeded()
}
}
-Core::HelpManager::HelpViewerLocation HelpPlugin::contextHelpOption() const
+HelpManager::HelpViewerLocation HelpPlugin::contextHelpOption() const
{
- QSettings *settings = Core::ICore::settings();
+ QSettings *settings = ICore::settings();
const QString key = QLatin1String(Help::Constants::ID_MODE_HELP) + QLatin1String("/ContextHelpOption");
if (settings->contains(key))
- return Core::HelpManager::HelpViewerLocation(
- settings->value(key, Core::HelpManager::SideBySideIfPossible).toInt());
+ return HelpManager::HelpViewerLocation(
+ settings->value(key, HelpManager::SideBySideIfPossible).toInt());
const QHelpEngineCore &engine = LocalHelpManager::helpEngine();
- return Core::HelpManager::HelpViewerLocation(engine.customValue(QLatin1String("ContextHelpOption"),
- Core::HelpManager::SideBySideIfPossible).toInt());
+ return HelpManager::HelpViewerLocation(engine.customValue(QLatin1String("ContextHelpOption"),
+ HelpManager::SideBySideIfPossible).toInt());
}
diff --git a/src/plugins/help/helpplugin.h b/src/plugins/help/helpplugin.h
index 1ced29cdff..0540c5ad53 100644
--- a/src/plugins/help/helpplugin.h
+++ b/src/plugins/help/helpplugin.h
@@ -85,8 +85,6 @@ public:
static HelpViewer *createHelpViewer(qreal zoom);
private slots:
- void unregisterOldQtCreatorDocumentation();
-
void modeChanged(Core::IMode *mode, Core::IMode *old);
void showContextHelp();
diff --git a/src/plugins/help/helpviewer.h b/src/plugins/help/helpviewer.h
index 5d191f8aff..8454fb6ee1 100644
--- a/src/plugins/help/helpviewer.h
+++ b/src/plugins/help/helpviewer.h
@@ -55,6 +55,7 @@ public:
virtual void setViewerFont(const QFont &font) = 0;
virtual qreal scale() const = 0;
+ virtual void setScale(qreal scale) = 0;
virtual QString title() const = 0;
diff --git a/src/plugins/help/localhelpmanager.cpp b/src/plugins/help/localhelpmanager.cpp
index fb05e69c29..3603d6fbb8 100644
--- a/src/plugins/help/localhelpmanager.cpp
+++ b/src/plugins/help/localhelpmanager.cpp
@@ -47,6 +47,9 @@ using namespace Help::Internal;
static LocalHelpManager *m_instance = 0;
+bool LocalHelpManager::m_guiNeedsSetup = true;
+bool LocalHelpManager::m_needsCollectionFile = true;
+
QMutex LocalHelpManager::m_guiMutex;
QHelpEngine* LocalHelpManager::m_guiEngine = 0;
@@ -61,8 +64,6 @@ static char kHelpHomePageKey[] = "Help/HomePage";
LocalHelpManager::LocalHelpManager(QObject *parent)
: QObject(parent)
- , m_guiNeedsSetup(true)
- , m_needsCollectionFile(true)
{
m_instance = this;
qRegisterMetaType<Help::Internal::LocalHelpManager::HelpData>("Help::Internal::LocalHelpManager::HelpData");
diff --git a/src/plugins/help/localhelpmanager.h b/src/plugins/help/localhelpmanager.h
index 1b4be734cd..0fe6676057 100644
--- a/src/plugins/help/localhelpmanager.h
+++ b/src/plugins/help/localhelpmanager.h
@@ -64,8 +64,8 @@ public:
static QString homePage();
static void setHomePage(const QString &page);
- void setupGuiHelpEngine();
- void setEngineNeedsUpdate();
+ static void setupGuiHelpEngine();
+ static void setEngineNeedsUpdate();
static QHelpEngine& helpEngine();
static BookmarkManager& bookmarkManager();
@@ -86,8 +86,8 @@ signals:
void filterIndexChanged(int index);
private:
- bool m_guiNeedsSetup;
- bool m_needsCollectionFile;
+ static bool m_guiNeedsSetup;
+ static bool m_needsCollectionFile;
static QStandardItemModel *m_filterModel;
static QString m_currentFilter;
diff --git a/src/plugins/help/macwebkithelpviewer.h b/src/plugins/help/macwebkithelpviewer.h
index 236c9ee4a1..8b8df61085 100644
--- a/src/plugins/help/macwebkithelpviewer.h
+++ b/src/plugins/help/macwebkithelpviewer.h
@@ -68,12 +68,15 @@ public:
void setOpenInNewPageActionVisible(bool visible);
WebView *webView() const;
+ void startToolTipTimer(const QPoint &pos, const QString &text);
+ void hideToolTip();
protected:
void hideEvent(QHideEvent *);
void showEvent(QShowEvent *);
private:
+ void showToolTip();
MacWebKitHelpWidgetPrivate *d;
};
@@ -82,13 +85,14 @@ class MacWebKitHelpViewer : public HelpViewer
Q_OBJECT
public:
- explicit MacWebKitHelpViewer(qreal zoom, QWidget *parent = 0);
+ explicit MacWebKitHelpViewer(QWidget *parent = 0);
~MacWebKitHelpViewer();
QFont viewerFont() const;
void setViewerFont(const QFont &font);
qreal scale() const;
+ void setScale(qreal scale);
QString title() const;
diff --git a/src/plugins/help/macwebkithelpviewer.mm b/src/plugins/help/macwebkithelpviewer.mm
index 9fb1c26041..096d0c3412 100644
--- a/src/plugins/help/macwebkithelpviewer.mm
+++ b/src/plugins/help/macwebkithelpviewer.mm
@@ -39,7 +39,10 @@
#include <QApplication>
#include <QClipboard>
#include <QHelpEngine>
+#include <QStyle>
+#include <QTimer>
#include <QtMac>
+#include <QToolTip>
#include <QUrl>
#include <QVBoxLayout>
@@ -86,6 +89,22 @@ AutoreleasePool::~AutoreleasePool()
[pool release];
}
+// #pragma mark -- mac helpers
+
+// copy from qcocoahelpers.mm
+static int mainScreenHeight()
+{
+ // The first screen in the screens array is documented
+ // to have the (0,0) origin.
+ NSRect screenFrame = [[[NSScreen screens] firstObject] frame];
+ return screenFrame.size.height;
+}
+
+static QPoint flipPoint(const NSPoint &p)
+{
+ return QPoint(p.x, mainScreenHeight() - p.y);
+}
+
// #pragma mark -- DOMNodeIterator (PrivateExtensions)
@interface DOMNodeIterator (PrivateExtensions)
@@ -212,6 +231,7 @@ static void ensureProtocolHandler()
- (void)webView:(WebView *)sender didStartProvisionalLoadForFrame:(WebFrame *)frame;
- (void)webView:(WebView *)sender didReceiveTitle:(NSString *)title forFrame:(WebFrame *)frame;
- (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame;
+- (void)webView:(WebView *)sender didFailProvisionalLoadWithError:(NSError *)error forFrame:(WebFrame *)frame;
@end
@@ -249,28 +269,37 @@ static void ensureProtocolHandler()
viewer->slotLoadFinished();
}
+- (void)webView:(WebView *)sender didFailProvisionalLoadWithError:(NSError *)error forFrame:(WebFrame *)frame
+{
+ Q_UNUSED(sender)
+ Q_UNUSED(error)
+ if (frame == mainFrame)
+ viewer->slotLoadFinished();
+}
+
@end
// #pragma mark -- UIDelegate
@interface UIDelegate : NSObject
{
- QWidget *widget;
+ Help::Internal::MacWebKitHelpWidget *widget;
}
@property (assign) BOOL openInNewPageActionVisible;
-- (id)initWithWidget:(QWidget *)theWidget;
+- (id)initWithWidget:(Help::Internal::MacWebKitHelpWidget *)theWidget;
- (void)webView:(WebView *)sender makeFirstResponder:(NSResponder *)responder;
- (NSArray *)webView:(WebView *)sender contextMenuItemsForElement:(NSDictionary *)element
defaultMenuItems:(NSArray *)defaultMenuItems;
- (WebView *)webView:(WebView *)sender createWebViewWithRequest:(NSURLRequest *)request;
-
+- (void)webView:(WebView *)sender mouseDidMoveOverElement:(NSDictionary *)elementInformation
+ modifierFlags:(NSUInteger)modifierFlags;
@end
@implementation UIDelegate
-- (id)initWithWidget:(QWidget *)theWidget
+- (id)initWithWidget:(Help::Internal::MacWebKitHelpWidget *)theWidget
{
self = [super init];
if (self) {
@@ -334,6 +363,23 @@ static void ensureProtocolHandler()
return viewer->widget()->webView();
}
+- (void)webView:(WebView *)sender mouseDidMoveOverElement:(NSDictionary *)elementInformation
+ modifierFlags:(NSUInteger)modifierFlags
+{
+ Q_UNUSED(sender)
+ if (!elementInformation || (modifierFlags & NSDeviceIndependentModifierFlagsMask) != 0) {
+ widget->hideToolTip();
+ return;
+ }
+ NSURL *url = [elementInformation objectForKey:WebElementLinkURLKey];
+ if (!url) {
+ widget->hideToolTip();
+ return;
+ }
+ widget->startToolTipTimer(flipPoint(NSEvent.mouseLocation),
+ QString::fromNSString(url.absoluteString));
+}
+
@end
// #pragma mark -- MyWebView
@@ -396,6 +442,9 @@ public:
FrameLoadDelegate *m_frameLoadDelegate;
UIDelegate *m_uiDelegate;
NSResponder *m_savedResponder;
+ QTimer m_toolTipTimer;
+ QPoint m_toolTipPos;
+ QString m_toolTipText;
};
// #pragma mark -- MacWebKitHelpWidget
@@ -404,8 +453,13 @@ MacWebKitHelpWidget::MacWebKitHelpWidget(MacWebKitHelpViewer *parent)
: QMacCocoaViewContainer(0, parent),
d(new MacWebKitHelpWidgetPrivate)
{
+ d->m_toolTipTimer.setSingleShot(true);
+ connect(&d->m_toolTipTimer, &QTimer::timeout, this, &MacWebKitHelpWidget::showToolTip);
AutoreleasePool pool; Q_UNUSED(pool)
d->m_webView = [[MyWebView alloc] init];
+ // Turn layered rendering on.
+ // Otherwise the WebView will render empty after any QQuickWidget was shown.
+ d->m_webView.wantsLayer = YES;
d->m_frameLoadDelegate = [[FrameLoadDelegate alloc] initWithMainFrame:d->m_webView.mainFrame
viewer:parent];
[d->m_webView setFrameLoadDelegate:d->m_frameLoadDelegate];
@@ -430,6 +484,20 @@ WebView *MacWebKitHelpWidget::webView() const
return d->m_webView;
}
+void MacWebKitHelpWidget::startToolTipTimer(const QPoint &pos, const QString &text)
+{
+ int delay = style()->styleHint(QStyle::SH_ToolTip_WakeUpDelay, 0, this, 0);
+ d->m_toolTipPos = pos;
+ d->m_toolTipText = text;
+ d->m_toolTipTimer.start(delay);
+}
+
+void MacWebKitHelpWidget::hideToolTip()
+{
+ d->m_toolTipTimer.stop();
+ QToolTip::showText(QPoint(), QString());
+}
+
void MacWebKitHelpWidget::hideEvent(QHideEvent *)
{
[d->m_webView setHidden:YES];
@@ -440,9 +508,14 @@ void MacWebKitHelpWidget::showEvent(QShowEvent *)
[d->m_webView setHidden:NO];
}
+void MacWebKitHelpWidget::showToolTip()
+{
+ QToolTip::showText(d->m_toolTipPos, d->m_toolTipText, this);
+}
+
// #pragma mark -- MacWebKitHelpViewer
-MacWebKitHelpViewer::MacWebKitHelpViewer(qreal zoom, QWidget *parent)
+MacWebKitHelpViewer::MacWebKitHelpViewer(QWidget *parent)
: HelpViewer(parent),
m_widget(new MacWebKitHelpWidget(this))
{
@@ -457,7 +530,6 @@ MacWebKitHelpViewer::MacWebKitHelpViewer(qreal zoom, QWidget *parent)
setLayout(layout);
layout->setContentsMargins(0, 0, 0, 0);
layout->addWidget(m_widget, 10);
- m_widget->webView().textSizeMultiplier = (zoom == 0.0 ? 1.0 : zoom);
}
MacWebKitHelpViewer::~MacWebKitHelpViewer()
@@ -503,7 +575,12 @@ void MacWebKitHelpViewer::resetScale()
qreal MacWebKitHelpViewer::scale() const
{
AutoreleasePool pool; Q_UNUSED(pool)
- return m_widget->webView().textSizeMultiplier;
+ return m_widget->webView().textSizeMultiplier;
+}
+
+void MacWebKitHelpViewer::setScale(qreal scale)
+{
+ m_widget->webView().textSizeMultiplier = (scale <= 0.0 ? 1.0 : scale);
}
QString MacWebKitHelpViewer::title() const
diff --git a/src/plugins/help/openpagesmodel.cpp b/src/plugins/help/openpagesmodel.cpp
index 0e27b804ac..f87b427154 100644
--- a/src/plugins/help/openpagesmodel.cpp
+++ b/src/plugins/help/openpagesmodel.cpp
@@ -75,7 +75,8 @@ void OpenPagesModel::addPage(const QUrl &url, qreal zoom)
{
beginInsertRows(QModelIndex(), rowCount(), rowCount());
HelpViewer *page = HelpPlugin::createHelpViewer(zoom);
- connect(page, SIGNAL(titleChanged()), this, SLOT(handleTitleChanged()));
+ connect(page, &HelpViewer::titleChanged,
+ this, &OpenPagesModel::handleTitleChanged);
m_pages << page;
endInsertRows();
if (url.isValid())
diff --git a/src/plugins/help/openpagesswitcher.cpp b/src/plugins/help/openpagesswitcher.cpp
index c77a60cf1d..12c929745d 100644
--- a/src/plugins/help/openpagesswitcher.cpp
+++ b/src/plugins/help/openpagesswitcher.cpp
@@ -67,10 +67,10 @@ OpenPagesSwitcher::OpenPagesSwitcher(OpenPagesModel *model)
layout->setMargin(0);
layout->addWidget(m_openPagesWidget);
- connect(m_openPagesWidget, SIGNAL(closePage(QModelIndex)), this,
- SIGNAL(closePage(QModelIndex)));
- connect(m_openPagesWidget, SIGNAL(setCurrentPage(QModelIndex)), this,
- SIGNAL(setCurrentPage(QModelIndex)));
+ connect(m_openPagesWidget, &OpenPagesWidget::closePage,
+ this, &OpenPagesSwitcher::closePage);
+ connect(m_openPagesWidget, &OpenPagesWidget::setCurrentPage,
+ this, &OpenPagesSwitcher::setCurrentPage);
}
OpenPagesSwitcher::~OpenPagesSwitcher()
diff --git a/src/plugins/help/qtwebkithelpviewer.cpp b/src/plugins/help/qtwebkithelpviewer.cpp
index a2c264b42e..1821e1c0da 100644
--- a/src/plugins/help/qtwebkithelpviewer.cpp
+++ b/src/plugins/help/qtwebkithelpviewer.cpp
@@ -38,6 +38,7 @@
#include <coreplugin/find/findplugin.h>
#include <utils/hostosinfo.h>
+#include <utils/networkaccessmanager.h>
#include <utils/qtcassert.h>
#include <QAction>
@@ -59,7 +60,6 @@
#include <QNetworkReply>
#include <QNetworkRequest>
-#include <utils/networkaccessmanager.h>
#include <cstring>
@@ -250,7 +250,7 @@ void HelpPage::onHandleUnsupportedContent(QNetworkReply *reply)
// -- HelpViewer
-QtWebKitHelpWidget::QtWebKitHelpWidget(qreal zoom, QtWebKitHelpViewer *parent)
+QtWebKitHelpWidget::QtWebKitHelpWidget(QtWebKitHelpViewer *parent)
: QWebView(parent),
m_parent(parent)
{
@@ -278,8 +278,6 @@ QtWebKitHelpWidget::QtWebKitHelpWidget(qreal zoom, QtWebKitHelpViewer *parent)
SLOT(actionChanged()));
connect(pageAction(QWebPage::Forward), SIGNAL(changed()), this,
SLOT(actionChanged()));
-
- setZoomFactor(zoom == 0.0 ? 1.0 : zoom);
}
QtWebKitHelpWidget::~QtWebKitHelpWidget()
@@ -387,15 +385,15 @@ bool QtWebKitHelpWidget::eventFilter(QObject *obj, QEvent *event)
if (event->type() == QEvent::KeyPress) {
if (QKeyEvent *keyEvent = static_cast<QKeyEvent*> (event)) {
if (keyEvent->key() == Qt::Key_Slash)
- Core::FindPlugin::instance()->openFindToolBar(Core::FindPlugin::FindForwardDirection);
+ FindPlugin::instance()->openFindToolBar(FindPlugin::FindForwardDirection);
}
}
return QWebView::eventFilter(obj, event);
}
-QtWebKitHelpViewer::QtWebKitHelpViewer(qreal zoom, QWidget *parent)
+QtWebKitHelpViewer::QtWebKitHelpViewer(QWidget *parent)
: HelpViewer(parent),
- m_webView(new QtWebKitHelpWidget(zoom, this))
+ m_webView(new QtWebKitHelpWidget(this))
{
QVBoxLayout *layout = new QVBoxLayout;
setLayout(layout);
@@ -413,6 +411,7 @@ QtWebKitHelpViewer::QtWebKitHelpViewer(qreal zoom, QWidget *parent)
connect(m_webView->page(), SIGNAL(printRequested(QWebFrame*)), this, SIGNAL(printRequested()));
connect(m_webView, SIGNAL(backwardAvailable(bool)), this, SIGNAL(backwardAvailable(bool)));
connect(m_webView, SIGNAL(forwardAvailable(bool)), this, SIGNAL(forwardAvailable(bool)));
+ connect(page(), &HelpPage::linkHovered, this, &QtWebKitHelpViewer::setToolTip);
}
QFont QtWebKitHelpViewer::viewerFont() const
@@ -449,6 +448,11 @@ qreal QtWebKitHelpViewer::scale() const
return m_webView->zoomFactor();
}
+void QtWebKitHelpViewer::setScale(qreal scale)
+{
+ m_webView->setZoomFactor(scale <= 0.0 ? 1.0 : scale);
+}
+
QString QtWebKitHelpViewer::title() const
{
return m_webView->title();
@@ -565,7 +569,7 @@ void QtWebKitHelpViewer::setOpenInNewPageActionVisible(bool visible)
m_webView->setOpenInNewPageActionVisible(visible);
}
-bool QtWebKitHelpViewer::findText(const QString &text, Core::FindFlags flags,
+bool QtWebKitHelpViewer::findText(const QString &text, FindFlags flags,
bool incremental, bool fromSearch, bool *wrapped)
{
Q_UNUSED(incremental);
@@ -573,9 +577,9 @@ bool QtWebKitHelpViewer::findText(const QString &text, Core::FindFlags flags,
if (wrapped)
*wrapped = false;
QWebPage::FindFlags options;
- if (flags & Core::FindBackward)
+ if (flags & FindBackward)
options |= QWebPage::FindBackward;
- if (flags & Core::FindCaseSensitively)
+ if (flags & FindCaseSensitively)
options |= QWebPage::FindCaseSensitively;
bool found = m_webView->findText(text, options);
diff --git a/src/plugins/help/qtwebkithelpviewer.h b/src/plugins/help/qtwebkithelpviewer.h
index 4f05c74ded..669455fcb9 100644
--- a/src/plugins/help/qtwebkithelpviewer.h
+++ b/src/plugins/help/qtwebkithelpviewer.h
@@ -48,13 +48,14 @@ class QtWebKitHelpViewer : public HelpViewer
{
Q_OBJECT
public:
- explicit QtWebKitHelpViewer(qreal zoom, QWidget *parent = 0);
+ explicit QtWebKitHelpViewer(QWidget *parent = 0);
~QtWebKitHelpViewer() { }
QFont viewerFont() const;
void setViewerFont(const QFont &font);
qreal scale() const;
+ void setScale(qreal scale);
QString title() const;
@@ -103,7 +104,7 @@ class QtWebKitHelpWidget : public QWebView
Q_OBJECT
public:
- explicit QtWebKitHelpWidget(qreal zoom, QtWebKitHelpViewer *parent = 0);
+ explicit QtWebKitHelpWidget(QtWebKitHelpViewer *parent = 0);
~QtWebKitHelpWidget();
void scaleUp();
diff --git a/src/plugins/help/remotehelpfilter.cpp b/src/plugins/help/remotehelpfilter.cpp
index 4da4d2c847..c6b64119a7 100644
--- a/src/plugins/help/remotehelpfilter.cpp
+++ b/src/plugins/help/remotehelpfilter.cpp
@@ -49,8 +49,10 @@ RemoteFilterOptions::RemoteFilterOptions(RemoteHelpFilter *filter, QWidget *pare
item->setFlags(item->flags() | Qt::ItemIsEditable);
}
- connect(m_ui.add, SIGNAL(clicked()), this, SLOT(addNewItem()));
- connect(m_ui.remove, SIGNAL(clicked()), this, SLOT(removeItem()));
+ connect(m_ui.add, &QPushButton::clicked,
+ this, &RemoteFilterOptions::addNewItem);
+ connect(m_ui.remove, &QPushButton::clicked,
+ this, &RemoteFilterOptions::removeItem);
connect(m_ui.listWidget, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)), SLOT(updateRemoveButton()));
updateRemoveButton();
}
diff --git a/src/plugins/help/textbrowserhelpviewer.cpp b/src/plugins/help/textbrowserhelpviewer.cpp
index fad3d1bff5..6f2b9b9cd2 100644
--- a/src/plugins/help/textbrowserhelpviewer.cpp
+++ b/src/plugins/help/textbrowserhelpviewer.cpp
@@ -43,6 +43,7 @@
#include <QHelpEngine>
#include <QKeyEvent>
#include <QMenu>
+#include <QToolTip>
#include <QVBoxLayout>
using namespace Help;
@@ -50,9 +51,9 @@ using namespace Help::Internal;
// -- HelpViewer
-TextBrowserHelpViewer::TextBrowserHelpViewer(qreal zoom, QWidget *parent)
+TextBrowserHelpViewer::TextBrowserHelpViewer(QWidget *parent)
: HelpViewer(parent)
- , m_textBrowser(new TextBrowserHelpWidget(zoom, this))
+ , m_textBrowser(new TextBrowserHelpWidget(this))
{
QVBoxLayout *layout = new QVBoxLayout;
setLayout(layout);
@@ -112,6 +113,22 @@ qreal TextBrowserHelpViewer::scale() const
return m_textBrowser->zoomCount;
}
+void TextBrowserHelpViewer::setScale(qreal scale)
+{
+ m_textBrowser->forceFont = true;
+ if (scale > 10)
+ scale = 10;
+ else if (scale < -5)
+ scale = -5;
+ int diff = (int)scale - m_textBrowser->zoomCount;
+ if (diff > 0)
+ m_textBrowser->zoomIn(diff);
+ else if (diff < 0)
+ m_textBrowser->zoomOut(-diff);
+ m_textBrowser->zoomCount = (int)scale;
+ m_textBrowser->forceFont = false;
+}
+
QString TextBrowserHelpViewer::title() const
{
return m_textBrowser->documentTitle();
@@ -284,9 +301,9 @@ void TextBrowserHelpViewer::goToHistoryItem()
// -- private
-TextBrowserHelpWidget::TextBrowserHelpWidget(int zoom, TextBrowserHelpViewer *parent)
+TextBrowserHelpWidget::TextBrowserHelpWidget(TextBrowserHelpViewer *parent)
: QTextBrowser(parent)
- , zoomCount(zoom)
+ , zoomCount(0)
, forceFont(false)
, m_openInNewPageActionVisible(true)
, m_parent(parent)
@@ -389,6 +406,10 @@ bool TextBrowserHelpWidget::eventFilter(QObject *obj, QEvent *event)
Core::FindPlugin::instance()->openFindToolBar(Core::FindPlugin::FindForwardDirection);
return true;
}
+ } else if (event->type() == QEvent::ToolTip) {
+ QHelpEvent *e = static_cast<QHelpEvent *>(event);
+ QToolTip::showText(e->globalPos(), linkAt(e->pos()));
+ return true;
}
}
return QTextBrowser::eventFilter(obj, event);
diff --git a/src/plugins/help/textbrowserhelpviewer.h b/src/plugins/help/textbrowserhelpviewer.h
index 81dab92af6..d00bd169e9 100644
--- a/src/plugins/help/textbrowserhelpviewer.h
+++ b/src/plugins/help/textbrowserhelpviewer.h
@@ -47,13 +47,14 @@ class TextBrowserHelpViewer : public HelpViewer
Q_OBJECT
public:
- explicit TextBrowserHelpViewer(qreal zoom, QWidget *parent = 0);
+ explicit TextBrowserHelpViewer(QWidget *parent = 0);
~TextBrowserHelpViewer();
QFont viewerFont() const;
void setViewerFont(const QFont &font);
qreal scale() const;
+ void setScale(qreal scale);
QString title() const;
@@ -97,7 +98,7 @@ class TextBrowserHelpWidget : public QTextBrowser
Q_OBJECT
public:
- TextBrowserHelpWidget(int zoom, TextBrowserHelpViewer *parent);
+ TextBrowserHelpWidget(TextBrowserHelpViewer *parent);
QVariant loadResource(int type, const QUrl &name);