Populate Qt Assistant's TOC from documentation directory.
authorFriedemann Kleint <Friedemann.Kleint@digia.com>
Mon, 24 Mar 2014 09:46:05 +0000 (10:46 +0100)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Tue, 25 Mar 2014 13:35:21 +0000 (14:35 +0100)
Task-number: QTBUG-37643
Change-Id: I8c17dc02e8d6c17c88dde24454f09dba76f32148
Reviewed-by: Jerome Pasion <jerome.pasion@digia.com>
Reviewed-by: Topi Reiniƶ <topi.reinio@digia.com>
Reviewed-by: Karsten Heimrich <karsten.heimrich@digia.com>
src/assistant/assistant/mainwindow.cpp

index ac32e3c..8ab353c 100644 (file)
@@ -67,6 +67,9 @@
 #include <QtCore/QTextStream>
 #include <QtCore/QTimer>
 #include <QtCore/QBuffer>
+#include <QtCore/QLibraryInfo>
+#include <QtCore/QFileInfo>
+#include <QtCore/QDir>
 
 #include <QtWidgets/QAction>
 #include <QtWidgets/QComboBox>
@@ -95,6 +98,8 @@
 
 QT_BEGIN_NAMESPACE
 
+enum { warnAboutMissingModules = 0 };
+
 MainWindow::MainWindow(CmdLineParser *cmdLine, QWidget *parent)
     : QMainWindow(parent)
     , m_bookmarkWidget(0)
@@ -427,17 +432,38 @@ static const char *docs[] = {
     "qtwinextras"
 };
 
+static QStringList newQtDocumentation()
+{
+    QStringList result;
+    const QDir docDirectory(QLibraryInfo::location(QLibraryInfo::DocumentationPath));
+    const QFileInfoList entries = docDirectory.entryInfoList(QStringList(QStringLiteral("*.qch")),
+                                                             QDir::Files, QDir::Name);
+    if (!entries.isEmpty()) {
+        result.reserve(entries.size());
+        foreach (const QFileInfo &fi, entries)
+            result.append(fi.baseName());
+        return result;
+    }
+    if (warnAboutMissingModules)
+        qWarning() << "No documentation found in " << QDir::toNativeSeparators(docDirectory.absolutePath());
+    const int docCount = int(sizeof(docs) / sizeof(docs[0]));
+    result.reserve(docCount);
+    for (int d = 0; d < docCount; ++d)
+        result.append(QLatin1String(docs[d]));
+    return result;
+}
+
 void MainWindow::lookForNewQtDocumentation()
 {
-    enum { warnAboutMissingModules = 0 };
     TRACE_OBJ
     HelpEngineWrapper &helpEngine = HelpEngineWrapper::instance();
 
-    const int docCount = int(sizeof(docs) / sizeof(docs[0]));
+    const QStringList docs = newQtDocumentation();
+    const int docCount = docs.size();
     QList<QtDocInstaller::DocInfo> qtDocInfos;
     qtDocInfos.reserve(docCount);
     for (int d = 0; d < docCount; ++d) {
-        const QString doc = QLatin1String(docs[d]);
+        const QString &doc = docs.at(d);
         const QtDocInstaller::DocInfo docInfo(doc, helpEngine.qtDocInfo(doc));
         qtDocInfos.append(docInfo);
         if (warnAboutMissingModules && (docInfo.second.isEmpty() || docInfo.second.first().isEmpty()))