Files
qt-creator/src/plugins/coreplugin/helpmanager.cpp
Cristian Adam 6eaa9f099a Help: Allow open online documentation for CMake
Qt Creator opens by default the offline documentation of CMake.
But the user can click on the "Globe" to go to the online version
of the documentation.

Change-Id: I0b3a6bceb13784b232b539f1c04bd09aa3a11034
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
2024-05-23 12:50:27 +00:00

114 lines
2.9 KiB
C++

// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "helpmanager_implementation.h"
#include "coreplugin.h"
#include <extensionsystem/pluginmanager.h>
#include <extensionsystem/pluginspec.h>
#include <utils/qtcassert.h>
#include <QCoreApplication>
#include <QDir>
#include <QUrl>
namespace Core {
namespace HelpManager {
// makes sure that plugins can connect to HelpManager signals even if the Help plugin is not loaded
Q_GLOBAL_STATIC(Signals, m_signals)
static Implementation *m_instance = nullptr;
static bool checkInstance()
{
static bool afterPluginCreation = false;
if (!afterPluginCreation) {
using namespace ExtensionSystem;
auto plugin = Internal::CorePlugin::instance();
// HelpManager API can only be used after the actual implementation has been created by the
// Help plugin, so check that the plugins have all been created. That is the case
// when the Core plugin is initialized.
PluginSpec *pluginSpec = PluginManager::specForPlugin(plugin);
afterPluginCreation = (plugin && pluginSpec && pluginSpec->state() >= PluginSpec::Initialized);
QTC_CHECK(afterPluginCreation);
}
return m_instance != nullptr;
}
Signals *Signals::instance()
{
return m_signals;
}
Implementation::Implementation()
{
QTC_CHECK(!m_instance);
m_instance = this;
}
Implementation::~Implementation()
{
m_instance = nullptr;
}
QString documentationPath()
{
return QDir::cleanPath(QCoreApplication::applicationDirPath() + '/' + RELATIVE_DOC_PATH);
}
void registerDocumentation(const QStringList &files)
{
if (checkInstance())
m_instance->registerDocumentation(files);
}
void unregisterDocumentation(const QStringList &fileNames)
{
if (checkInstance())
m_instance->unregisterDocumentation(fileNames);
}
QMultiMap<QString, QUrl> linksForIdentifier(const QString &id)
{
return checkInstance() ? m_instance->linksForIdentifier(id) : QMultiMap<QString, QUrl>();
}
QMultiMap<QString, QUrl> linksForKeyword(const QString &keyword)
{
return checkInstance() ? m_instance->linksForKeyword(keyword) : QMultiMap<QString, QUrl>();
}
QByteArray fileData(const QUrl &url)
{
return checkInstance() ? m_instance->fileData(url) : QByteArray();
}
void showHelpUrl(const QUrl &url, HelpManager::HelpViewerLocation location)
{
if (checkInstance())
m_instance->showHelpUrl(url, location);
}
void showHelpUrl(const QString &url, HelpViewerLocation location)
{
showHelpUrl(QUrl(url), location);
}
void setBlockedDocumentation(const QStringList &fileNames)
{
if (checkInstance())
m_instance->setBlockedDocumentation(fileNames);
}
void addOnlineHelpHandler(const OnlineHelpHandler &handler)
{
if (checkInstance())
m_instance->addOnlineHelpHandler(handler);
}
} // HelpManager
} // Core