QDoc: Use the module page as link in qt.ditamap.
authorCasper van Donderen <casper.vandonderen@nokia.com>
Wed, 13 Jun 2012 17:33:32 +0000 (19:33 +0200)
committerQt by Nokia <qt-info@nokia.com>
Thu, 21 Jun 2012 10:50:08 +0000 (12:50 +0200)
If the number of [QML]module pages in a single qdoc run is 1: Use it as the link for the nested group of documentation pages in the automatically generated ditamap.

Change-Id: Idbc3e2e5d65a1e7f0201638102ffab62475a66ec
Reviewed-by: Casper van Donderen <casper.vandonderen@nokia.com>
src/tools/qdoc/ditaxmlgenerator.cpp
src/tools/qdoc/ditaxmlgenerator.h

index da036a3..406e16e 100644 (file)
@@ -6053,14 +6053,22 @@ void DitaXmlGenerator::writeDitaMap(Tree *tree)
     writeTopicrefs(pageTypeMaps[Node::FAQPage], "FAQs");
     writeTopicrefs(pageTypeMaps[Node::ArticlePage], "Articles");
     writeTopicrefs(nodeSubtypeMaps[Node::Example], "Examples");
-    writeTopicrefs(nodeSubtypeMaps[Node::QmlClass], "QML types");
-    writeTopicrefs(nodeTypeMaps[Node::Class], "C++ classes");
+    if (nodeSubtypeMaps[Node::QmlModule]->size() > 1)
+        writeTopicrefs(nodeSubtypeMaps[Node::QmlModule], "QML modules");
+    if (nodeSubtypeMaps[Node::QmlModule]->size() == 1)
+        writeTopicrefs(nodeSubtypeMaps[Node::QmlClass], "QML types", nodeSubtypeMaps[Node::QmlModule]->values()[0]);
+    else
+        writeTopicrefs(nodeSubtypeMaps[Node::QmlClass], "QML types");
+    writeTopicrefs(nodeSubtypeMaps[Node::QmlBasicType], "QML basic types");
+    if (nodeSubtypeMaps[Node::Module]->size() > 1)
+        writeTopicrefs(nodeSubtypeMaps[Node::Module], "Modules");
+    if (nodeSubtypeMaps[Node::Module]->size() == 1)
+        writeTopicrefs(nodeTypeMaps[Node::Class], "C++ classes", nodeSubtypeMaps[Node::Module]->values()[0]);
+    else
+        writeTopicrefs(nodeTypeMaps[Node::Class], "C++ classes");
     writeTopicrefs(nodeTypeMaps[Node::Namespace], "C++ namespaces");
     writeTopicrefs(nodeSubtypeMaps[Node::HeaderFile], "Header files");
-    writeTopicrefs(nodeSubtypeMaps[Node::Module], "Modules");
     writeTopicrefs(nodeSubtypeMaps[Node::Group], "Groups");
-    writeTopicrefs(nodeSubtypeMaps[Node::QmlModule], "QML modules");
-    writeTopicrefs(nodeSubtypeMaps[Node::QmlBasicType], "QML basic types");
 
     writeEndTag(); // </topicref>
     endSubPage();
@@ -6119,12 +6127,14 @@ void DitaXmlGenerator::writeDitaRefs(const DitaRefList& ditarefs)
     }
 }
 
-void DitaXmlGenerator::writeTopicrefs(NodeMultiMap* nmm, const QString& navtitle)
+void DitaXmlGenerator::writeTopicrefs(NodeMultiMap* nmm, const QString& navtitle, Node* headingnode)
 {
     if (!nmm || nmm->isEmpty())
         return;
     writeStartTag(DT_topicref);
     xmlWriter().writeAttribute("navtitle",navtitle);
+    if (headingnode)
+        xmlWriter().writeAttribute("href",fileName(headingnode));
     NodeMultiMap::iterator i;
     NodeMultiMap *ditaMaps = pageTypeMaps[Node::DitaMapPage];
 
index 3ea43ff..29e93f4 100644 (file)
@@ -500,7 +500,7 @@ private:
     QString stripMarkup(const QString& src) const;
     Node* collectNodesByTypeAndSubtype(const InnerNode* parent);
     void writeDitaRefs(const DitaRefList& ditarefs);
-    void writeTopicrefs(NodeMultiMap* nmm, const QString& navtitle);
+    void writeTopicrefs(NodeMultiMap* nmm, const QString& navtitle, Node* headingnode = 0);
     bool isDuplicate(NodeMultiMap* nmm, const QString& key, Node* node);
     void debugPara(const QString& t);