aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/help/helpmanager.cpp
diff options
context:
space:
mode:
authorkh1 <qt-info@nokia.com>2010-03-23 17:21:48 +0100
committerkh1 <qt-info@nokia.com>2010-03-23 18:13:08 +0100
commit8d118d3a8d3bfe031d7822ae7d3a69e448b5ef7f (patch)
tree6f7758a97079050810a4a0c1022f9dec21a1e414 /src/plugins/help/helpmanager.cpp
parent42e01eaaabaf3da57bc66860d8fa22436cfdc2ad (diff)
Add some more convinient functionality the help manager.
Add some more statics that can return the class instance, implements a gui help engine and the bookmark manager for easier sharing.
Diffstat (limited to 'src/plugins/help/helpmanager.cpp')
-rw-r--r--src/plugins/help/helpmanager.cpp130
1 files changed, 115 insertions, 15 deletions
diff --git a/src/plugins/help/helpmanager.cpp b/src/plugins/help/helpmanager.cpp
index ac9df57c195..0f4b595b2c1 100644
--- a/src/plugins/help/helpmanager.cpp
+++ b/src/plugins/help/helpmanager.cpp
@@ -28,44 +28,142 @@
**************************************************************************/
#include "helpmanager.h"
-#include "helpplugin.h"
+#include "bookmarkmanager.h"
#include <coreplugin/icore.h>
+#include <QtCore/QDebug>
#include <QtCore/QDir>
#include <QtCore/QFileInfo>
+#include <QtCore/QMutexLocker>
#include <QtCore/QString>
#include <QtCore/QUrl>
+#include <QtHelp/QHelpEngine>
#include <QtHelp/QHelpEngineCore>
using namespace Help;
-using namespace Help::Internal;
+bool HelpManager::m_guiNeedsSetup = true;
+bool HelpManager::m_needsCollectionFile = true;
+
+QMutex HelpManager::m_guiMutex;
+QHelpEngine* HelpManager::m_guiEngine = 0;
+
+QMutex HelpManager::m_coreMutex;
QHelpEngineCore* HelpManager::m_coreEngine = 0;
-HelpManager::HelpManager(HelpPlugin* plugin)
- : m_plugin(plugin)
+HelpManager* HelpManager::m_helpManager = 0;
+BookmarkManager* HelpManager::m_bookmarkManager = 0;
+
+HelpManager::HelpManager(QObject *parent)
+ : QObject(parent)
{
+ Q_ASSERT(!m_helpManager);
+ m_helpManager = this;
}
HelpManager::~HelpManager()
{
+ delete m_guiEngine;
+ m_guiEngine = 0;
+
delete m_coreEngine;
m_coreEngine = 0;
+
+ if (m_bookmarkManager) {
+ m_bookmarkManager->saveBookmarks();
+ delete m_bookmarkManager;
+ m_bookmarkManager = 0;
+ }
+}
+
+HelpManager& HelpManager::instance()
+{
+ Q_ASSERT(m_helpManager);
+ return *m_helpManager;
+}
+
+void HelpManager::setupGuiHelpEngine()
+{
+ if (m_needsCollectionFile) {
+ m_needsCollectionFile = false;
+ (&helpEngine())->setCollectionFile(collectionFilePath());
+ }
+
+ if (m_guiNeedsSetup) {
+ m_guiNeedsSetup = false;
+ (&helpEngine())->setupData();
+ }
+}
+
+bool HelpManager::guiEngineNeedsUpdate() const
+{
+ return m_guiNeedsSetup;
}
void HelpManager::handleHelpRequest(const QString &url)
{
- m_plugin->handleHelpRequest(url);
+ emit helpRequested(url);
+}
+
+void HelpManager::verifyDocumenation()
+{
+ QStringList nameSpacesToUnregister;
+ QHelpEngineCore *engine = &helpEngineCore();
+ const QStringList &registeredDocs = engine->registeredDocumentations();
+ foreach (const QString &nameSpace, registeredDocs) {
+ const QString &file = engine->documentationFileName(nameSpace);
+ if (!QFileInfo(file).exists())
+ nameSpacesToUnregister.append(nameSpace);
+ }
+
+ if (!nameSpacesToUnregister.isEmpty())
+ unregisterDocumentation(nameSpacesToUnregister);
+}
+
+void HelpManager::registerDocumentation(const QStringList &files)
+{
+ QHelpEngineCore *engine = &helpEngineCore();
+ foreach (const QString &file, files) {
+ const QString &nameSpace = engine->namespaceName(file);
+ if (nameSpace.isEmpty())
+ continue;
+ if (!engine->registeredDocumentations().contains(nameSpace)) {
+ if (engine->registerDocumentation(file)) {
+ m_guiNeedsSetup = true;
+ } else {
+ qWarning() << "Error registering namespace '" << nameSpace
+ << "' from file '" << file << "':" << engine->error();
+ }
+ }
+ }
+}
+
+void HelpManager::unregisterDocumentation(const QStringList &nameSpaces)
+{
+ QHelpEngineCore *engine = &helpEngineCore();
+ foreach (const QString &nameSpace, nameSpaces) {
+ const QString &file = engine->documentationFileName(nameSpace);
+ if (engine->unregisterDocumentation(nameSpace)) {
+ m_guiNeedsSetup = true;
+ } else {
+ qWarning() << "Error unregistering namespace '" << nameSpace
+ << "' from file '" << file << "': " << engine->error();
+ }
+ }
}
-void HelpManager::registerDocumentation(const QStringList &fileNames)
+QHelpEngine &HelpManager::helpEngine()
{
- if (m_plugin) {
- m_plugin->setFilesToRegister(fileNames);
- emit registerDocumentation();
+ if (!m_guiEngine) {
+ QMutexLocker _(&m_guiMutex);
+ if (!m_guiEngine) {
+ m_guiEngine = new QHelpEngine("");
+ m_guiEngine->setAutoSaveFilter(false);
+ }
}
+ return *m_guiEngine;
}
QString HelpManager::collectionFilePath()
@@ -74,17 +172,19 @@ QString HelpManager::collectionFilePath()
const QDir directory(fi.absolutePath() + QLatin1String("/qtcreator"));
if (!directory.exists())
directory.mkpath(directory.absolutePath());
- return directory.absolutePath() + QLatin1String("/helpcollection.qhc");
+ return QDir::cleanPath(directory.absolutePath() + QLatin1String("/helpcollection.qhc"));
}
QHelpEngineCore& HelpManager::helpEngineCore()
{
if (!m_coreEngine) {
- m_coreEngine = new QHelpEngineCore(collectionFilePath());
- m_coreEngine->setAutoSaveFilter(false);
- m_coreEngine->setCurrentFilter(tr("Unfiltered"));
- m_coreEngine->setupData();
-
+ QMutexLocker _(&m_coreMutex);
+ if (!m_coreEngine) {
+ m_coreEngine = new QHelpEngineCore(collectionFilePath());
+ m_coreEngine->setAutoSaveFilter(false);
+ m_coreEngine->setCurrentFilter(tr("Unfiltered"));
+ m_coreEngine->setupData();
+ }
}
return *m_coreEngine;
}