From f717c19469bff6b2de84e70b0f5725e546a7636d Mon Sep 17 00:00:00 2001 From: Casper van Donderen Date: Wed, 13 Jun 2012 19:33:32 +0200 Subject: QDoc: Use the module page as link in qt.ditamap. 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 --- src/tools/qdoc/ditaxmlgenerator.cpp | 22 ++++++++++++++++------ src/tools/qdoc/ditaxmlgenerator.h | 2 +- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/tools/qdoc/ditaxmlgenerator.cpp b/src/tools/qdoc/ditaxmlgenerator.cpp index da036a3385..406e16eeee 100644 --- a/src/tools/qdoc/ditaxmlgenerator.cpp +++ b/src/tools/qdoc/ditaxmlgenerator.cpp @@ -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(); // 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]; diff --git a/src/tools/qdoc/ditaxmlgenerator.h b/src/tools/qdoc/ditaxmlgenerator.h index 3ea43ff716..29e93f4840 100644 --- a/src/tools/qdoc/ditaxmlgenerator.h +++ b/src/tools/qdoc/ditaxmlgenerator.h @@ -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); -- cgit v1.2.3