diff --git a/src/plugins/coreplugin/helpmanager.cpp b/src/plugins/coreplugin/helpmanager.cpp index 587a094c238..10c923b7163 100644 --- a/src/plugins/coreplugin/helpmanager.cpp +++ b/src/plugins/coreplugin/helpmanager.cpp @@ -286,6 +286,94 @@ QString HelpManager::fileFromNamespace(const QString &nameSpace) const return m_helpEngine->documentationFileName(nameSpace); } +void HelpManager::setCustomValue(const QString &key, const QVariant &value) +{ + if (m_needsSetup) { + m_customValues.insert(key, value); + return; + } + if (m_helpEngine->setCustomValue(key, value)) + emit collectionFileChanged(); +} + +QVariant HelpManager::customValue(const QString &key, const QVariant &value) const +{ + if (m_needsSetup) + return QVariant(); + return m_helpEngine->customValue(key, value); +} + +HelpManager::Filters HelpManager::filters() const +{ + if (m_needsSetup) + return Filters(); + + Filters filters; + const QStringList &customFilters = m_helpEngine->customFilters(); + foreach (const QString &filter, customFilters) + filters.insert(filter, m_helpEngine->filterAttributes(filter)); + return filters; +} + +HelpManager::Filters HelpManager::fixedFilters() const +{ + Filters fixedFilters; + if (m_needsSetup) + return fixedFilters; + + const QLatin1String sqlite("QSQLITE"); + const QLatin1String name("HelpManager::fixedCustomFilters"); + + DbCleaner cleaner(name); + QSqlDatabase db = QSqlDatabase::addDatabase(sqlite, name); + if (db.driver() && db.driver()->lastError().type() == QSqlError::NoError) { + const QStringList ®isteredDocs = m_helpEngine->registeredDocumentations(); + foreach (const QString &nameSpace, registeredDocs) { + db.setDatabaseName(m_helpEngine->documentationFileName(nameSpace)); + if (db.open()) { + QSqlQuery query = QSqlQuery(db); + query.setForwardOnly(true); + query.exec(QLatin1String("SELECT Name FROM FilterNameTable")); + while (query.next()) { + const QString &filter = query.value(0).toString(); + fixedFilters.insert(filter, m_helpEngine->filterAttributes(filter)); + } + } + } + } + return fixedFilters; +} + +HelpManager::Filters HelpManager::userDefinedFilters() const +{ + if (m_needsSetup) + return Filters(); + + Filters all = filters(); + const Filters &fixed = fixedFilters(); + for (Filters::const_iterator it = fixed.constBegin(); it != fixed.constEnd(); ++it) + all.remove(it.key()); + return all; +} + +void HelpManager::removeUserDefinedFilter(const QString &filter) +{ + if (m_needsSetup) + return; + + if (m_helpEngine->removeCustomFilter(filter)) + emit collectionFileChanged(); +} + +void HelpManager::addUserDefinedFilter(const QString &filter, const QStringList &attr) +{ + if (m_needsSetup) + return; + + if (m_helpEngine->addCustomFilter(filter, attr)) + emit collectionFileChanged(); +} + // -- private slots void HelpManager::setupHelpManager() @@ -319,6 +407,10 @@ void HelpManager::setupHelpManager() m_filesToRegister.clear(); } + QHash::const_iterator it; + for (it = m_customValues.constBegin(); it != m_customValues.constEnd(); ++it) + setCustomValue(it.key(), it.value()); + emit setupFinished(); } diff --git a/src/plugins/coreplugin/helpmanager.h b/src/plugins/coreplugin/helpmanager.h index a3096430929..6346f9be2e1 100644 --- a/src/plugins/coreplugin/helpmanager.h +++ b/src/plugins/coreplugin/helpmanager.h @@ -32,6 +32,7 @@ #include "core_global.h" +#include #include #include #include @@ -51,6 +52,8 @@ class CORE_EXPORT HelpManager : public QObject Q_DISABLE_COPY(HelpManager) public: + typedef QHash Filters; + explicit HelpManager(QObject *parent = 0); virtual ~HelpManager(); @@ -72,9 +75,20 @@ public: QString namespaceFromFile(const QString &file) const; QString fileFromNamespace(const QString &nameSpace) const; + void setCustomValue(const QString &key, const QVariant &value); + QVariant customValue(const QString &key, const QVariant &value = QVariant()) const; + + Filters filters() const; + Filters fixedFilters() const; + + Filters userDefinedFilters() const; + void removeUserDefinedFilter(const QString &filter); + void addUserDefinedFilter(const QString &filter, const QStringList &attr); + signals: void setupFinished(); void documentationChanged(); + void collectionFileChanged(); void helpRequested(const QUrl &url); private slots: @@ -89,6 +103,7 @@ private: QStringList m_filesToRegister; QStringList m_nameSpacesToUnregister; + QHash m_customValues; static HelpManager *m_instance; };