forked from qt-creator/qt-creator
Core: modernize HelpManager
Change-Id: Ia5468ee5113f85206d1a714f4580297d166fbafd Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
@@ -53,10 +53,12 @@ namespace Core {
|
|||||||
struct HelpManagerPrivate
|
struct HelpManagerPrivate
|
||||||
{
|
{
|
||||||
HelpManagerPrivate() :
|
HelpManagerPrivate() :
|
||||||
m_needsSetup(true), m_helpEngine(0), m_collectionWatcher(0)
|
m_needsSetup(true), m_helpEngine(nullptr), m_collectionWatcher(nullptr)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
QStringList documentationFromInstaller();
|
~HelpManagerPrivate();
|
||||||
|
|
||||||
|
const QStringList documentationFromInstaller();
|
||||||
void readSettings();
|
void readSettings();
|
||||||
void writeSettings();
|
void writeSettings();
|
||||||
void cleanUpDocumentation();
|
void cleanUpDocumentation();
|
||||||
@@ -73,8 +75,8 @@ struct HelpManagerPrivate
|
|||||||
QSet<QString> m_userRegisteredFiles;
|
QSet<QString> m_userRegisteredFiles;
|
||||||
};
|
};
|
||||||
|
|
||||||
static HelpManager *m_instance = 0;
|
static HelpManager *m_instance = nullptr;
|
||||||
static HelpManagerPrivate *d;
|
static HelpManagerPrivate *d = nullptr;
|
||||||
|
|
||||||
static const char linksForKeyQuery[] = "SELECT d.Title, f.Name, e.Name, "
|
static const char linksForKeyQuery[] = "SELECT d.Title, f.Name, e.Name, "
|
||||||
"d.Name, a.Anchor FROM IndexTable a, FileNameTable d, FolderTable e, "
|
"d.Name, a.Anchor FROM IndexTable a, FileNameTable d, FolderTable e, "
|
||||||
@@ -102,11 +104,8 @@ HelpManager::HelpManager(QObject *parent) :
|
|||||||
|
|
||||||
HelpManager::~HelpManager()
|
HelpManager::~HelpManager()
|
||||||
{
|
{
|
||||||
d->writeSettings();
|
|
||||||
delete d->m_helpEngine;
|
|
||||||
d->m_helpEngine = 0;
|
|
||||||
m_instance = 0;
|
|
||||||
delete d;
|
delete d;
|
||||||
|
m_instance = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
HelpManager *HelpManager::instance()
|
HelpManager *HelpManager::instance()
|
||||||
@@ -124,13 +123,13 @@ QString HelpManager::collectionFilePath()
|
|||||||
void HelpManager::registerDocumentation(const QStringList &files)
|
void HelpManager::registerDocumentation(const QStringList &files)
|
||||||
{
|
{
|
||||||
if (d->m_needsSetup) {
|
if (d->m_needsSetup) {
|
||||||
foreach (const QString &filePath, files)
|
for (const QString &filePath : files)
|
||||||
d->m_filesToRegister.insert(filePath);
|
d->m_filesToRegister.insert(filePath);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool docsChanged = false;
|
bool docsChanged = false;
|
||||||
foreach (const QString &file, files) {
|
for (const QString &file : files) {
|
||||||
const QString &nameSpace = d->m_helpEngine->namespaceName(file);
|
const QString &nameSpace = d->m_helpEngine->namespaceName(file);
|
||||||
if (nameSpace.isEmpty())
|
if (nameSpace.isEmpty())
|
||||||
continue;
|
continue;
|
||||||
@@ -162,13 +161,13 @@ void HelpManager::registerDocumentation(const QStringList &files)
|
|||||||
void HelpManager::unregisterDocumentation(const QStringList &nameSpaces)
|
void HelpManager::unregisterDocumentation(const QStringList &nameSpaces)
|
||||||
{
|
{
|
||||||
if (d->m_needsSetup) {
|
if (d->m_needsSetup) {
|
||||||
foreach (const QString &name, nameSpaces)
|
for (const QString &name : nameSpaces)
|
||||||
d->m_nameSpacesToUnregister.insert(name);
|
d->m_nameSpacesToUnregister.insert(name);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool docsChanged = false;
|
bool docsChanged = false;
|
||||||
foreach (const QString &nameSpace, nameSpaces) {
|
for (const QString &nameSpace : nameSpaces) {
|
||||||
const QString filePath = d->m_helpEngine->documentationFileName(nameSpace);
|
const QString filePath = d->m_helpEngine->documentationFileName(nameSpace);
|
||||||
if (d->m_helpEngine->unregisterDocumentation(nameSpace)) {
|
if (d->m_helpEngine->unregisterDocumentation(nameSpace)) {
|
||||||
docsChanged = true;
|
docsChanged = true;
|
||||||
@@ -185,7 +184,7 @@ void HelpManager::unregisterDocumentation(const QStringList &nameSpaces)
|
|||||||
|
|
||||||
void HelpManager::registerUserDocumentation(const QStringList &filePaths)
|
void HelpManager::registerUserDocumentation(const QStringList &filePaths)
|
||||||
{
|
{
|
||||||
foreach (const QString &filePath, filePaths)
|
for (const QString &filePath : filePaths)
|
||||||
d->m_userRegisteredFiles.insert(filePath);
|
d->m_userRegisteredFiles.insert(filePath);
|
||||||
registerDocumentation(filePaths);
|
registerDocumentation(filePaths);
|
||||||
}
|
}
|
||||||
@@ -219,7 +218,7 @@ QMap<QString, QUrl> HelpManager::linksForKeyword(const QString &key)
|
|||||||
QSqlDatabase db = QSqlDatabase::addDatabase(sqlite, name);
|
QSqlDatabase db = QSqlDatabase::addDatabase(sqlite, name);
|
||||||
if (db.driver() && db.driver()->lastError().type() == QSqlError::NoError) {
|
if (db.driver() && db.driver()->lastError().type() == QSqlError::NoError) {
|
||||||
const QStringList ®isteredDocs = d->m_helpEngine->registeredDocumentations();
|
const QStringList ®isteredDocs = d->m_helpEngine->registeredDocumentations();
|
||||||
foreach (const QString &nameSpace, registeredDocs) {
|
for (const QString &nameSpace : registeredDocs) {
|
||||||
db.setDatabaseName(d->m_helpEngine->documentationFileName(nameSpace));
|
db.setDatabaseName(d->m_helpEngine->documentationFileName(nameSpace));
|
||||||
if (db.open()) {
|
if (db.open()) {
|
||||||
QSqlQuery query = QSqlQuery(db);
|
QSqlQuery query = QSqlQuery(db);
|
||||||
@@ -308,7 +307,7 @@ HelpManager::Filters HelpManager::filters()
|
|||||||
|
|
||||||
Filters filters;
|
Filters filters;
|
||||||
const QStringList &customFilters = d->m_helpEngine->customFilters();
|
const QStringList &customFilters = d->m_helpEngine->customFilters();
|
||||||
foreach (const QString &filter, customFilters)
|
for (const QString &filter : customFilters)
|
||||||
filters.insert(filter, d->m_helpEngine->filterAttributes(filter));
|
filters.insert(filter, d->m_helpEngine->filterAttributes(filter));
|
||||||
return filters;
|
return filters;
|
||||||
}
|
}
|
||||||
@@ -325,7 +324,7 @@ HelpManager::Filters HelpManager::fixedFilters()
|
|||||||
QSqlDatabase db = QSqlDatabase::addDatabase(sqlite, name);
|
QSqlDatabase db = QSqlDatabase::addDatabase(sqlite, name);
|
||||||
if (db.driver() && db.driver()->lastError().type() == QSqlError::NoError) {
|
if (db.driver() && db.driver()->lastError().type() == QSqlError::NoError) {
|
||||||
const QStringList ®isteredDocs = d->m_helpEngine->registeredDocumentations();
|
const QStringList ®isteredDocs = d->m_helpEngine->registeredDocumentations();
|
||||||
foreach (const QString &nameSpace, registeredDocs) {
|
for (const QString &nameSpace : registeredDocs) {
|
||||||
db.setDatabaseName(d->m_helpEngine->documentationFileName(nameSpace));
|
db.setDatabaseName(d->m_helpEngine->documentationFileName(nameSpace));
|
||||||
if (db.open()) {
|
if (db.open()) {
|
||||||
QSqlQuery query = QSqlQuery(db);
|
QSqlQuery query = QSqlQuery(db);
|
||||||
@@ -382,7 +381,7 @@ void HelpManager::setupHelpManager()
|
|||||||
d->m_helpEngine = new QHelpEngineCore(collectionFilePath(), m_instance);
|
d->m_helpEngine = new QHelpEngineCore(collectionFilePath(), m_instance);
|
||||||
d->m_helpEngine->setupData();
|
d->m_helpEngine->setupData();
|
||||||
|
|
||||||
foreach (const QString &filePath, d->documentationFromInstaller())
|
for (const QString &filePath : d->documentationFromInstaller())
|
||||||
d->m_filesToRegister.insert(filePath);
|
d->m_filesToRegister.insert(filePath);
|
||||||
|
|
||||||
d->cleanUpDocumentation();
|
d->cleanUpDocumentation();
|
||||||
@@ -409,7 +408,7 @@ void HelpManagerPrivate::cleanUpDocumentation()
|
|||||||
// mark documentation for removal for which there is no documentation file anymore
|
// mark documentation for removal for which there is no documentation file anymore
|
||||||
// mark documentation for removal that is neither user registered, nor marked for registration
|
// mark documentation for removal that is neither user registered, nor marked for registration
|
||||||
const QStringList ®isteredDocs = m_helpEngine->registeredDocumentations();
|
const QStringList ®isteredDocs = m_helpEngine->registeredDocumentations();
|
||||||
foreach (const QString &nameSpace, registeredDocs) {
|
for (const QString &nameSpace : registeredDocs) {
|
||||||
const QString filePath = m_helpEngine->documentationFileName(nameSpace);
|
const QString filePath = m_helpEngine->documentationFileName(nameSpace);
|
||||||
if (!QFileInfo::exists(filePath)
|
if (!QFileInfo::exists(filePath)
|
||||||
|| (!m_filesToRegister.contains(filePath)
|
|| (!m_filesToRegister.contains(filePath)
|
||||||
@@ -419,24 +418,30 @@ void HelpManagerPrivate::cleanUpDocumentation()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QStringList HelpManagerPrivate::documentationFromInstaller()
|
HelpManagerPrivate::~HelpManagerPrivate()
|
||||||
|
{
|
||||||
|
writeSettings();
|
||||||
|
delete m_helpEngine;
|
||||||
|
m_helpEngine = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
const QStringList HelpManagerPrivate::documentationFromInstaller()
|
||||||
{
|
{
|
||||||
QSettings *installSettings = ICore::settings();
|
QSettings *installSettings = ICore::settings();
|
||||||
QStringList documentationPaths = installSettings->value(QLatin1String("Help/InstalledDocumentation"))
|
const QStringList documentationPaths = installSettings->value(QLatin1String("Help/InstalledDocumentation"))
|
||||||
.toStringList();
|
.toStringList();
|
||||||
QStringList documentationFiles;
|
QStringList documentationFiles;
|
||||||
foreach (const QString &path, documentationPaths) {
|
for (const QString &path : documentationPaths) {
|
||||||
QFileInfo pathInfo(path);
|
QFileInfo pathInfo(path);
|
||||||
if (pathInfo.isFile() && pathInfo.isReadable()) {
|
if (pathInfo.isFile() && pathInfo.isReadable()) {
|
||||||
documentationFiles << pathInfo.absoluteFilePath();
|
documentationFiles << pathInfo.absoluteFilePath();
|
||||||
} else if (pathInfo.isDir()) {
|
} else if (pathInfo.isDir()) {
|
||||||
QDir dir(path);
|
const QFileInfoList files(QDir(path).entryInfoList(QStringList(QLatin1String("*.qch")),
|
||||||
foreach (const QFileInfo &fileInfo, dir.entryInfoList(QStringList(QLatin1String("*.qch")),
|
QDir::Files | QDir::Readable));
|
||||||
QDir::Files | QDir::Readable)) {
|
for (const QFileInfo &fileInfo : files)
|
||||||
documentationFiles << fileInfo.absoluteFilePath();
|
documentationFiles << fileInfo.absoluteFilePath();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return documentationFiles;
|
return documentationFiles;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -99,7 +99,7 @@ signals:
|
|||||||
void helpRequested(const QUrl &url, Core::HelpManager::HelpViewerLocation location);
|
void helpRequested(const QUrl &url, Core::HelpManager::HelpViewerLocation location);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
explicit HelpManager(QObject *parent = 0);
|
explicit HelpManager(QObject *parent = nullptr);
|
||||||
~HelpManager();
|
~HelpManager();
|
||||||
|
|
||||||
static void setupHelpManager();
|
static void setupHelpManager();
|
||||||
|
Reference in New Issue
Block a user