From afcc26619f642baee9a09151dc8dae5ef2cb9e2e Mon Sep 17 00:00:00 2001 From: Topi Reinio Date: Fri, 16 Oct 2015 12:12:09 +0200 Subject: qdoc: Conditionally generate the navigation bar items as table cells The new offline template for Qt 5.6, including simplified CSS rules suitable for rendering with a QTextBrowser, requires the navigation bar to be generated as an HTML table instead of the previously-used unordered list. Make QDoc select between the two based on the contents of HTML.postheader .qdocconf variable, which defines the header of the navigation bar. Modify the old offline CSS to look good also when the nav. bar is a table. Task-number: QTBUG-48322 Change-Id: I00e16c24f436e0be049b85d4bcfc916c33ea6b73 Reviewed-by: Venugopal Shivashankar Reviewed-by: Martin Smith --- src/tools/qdoc/htmlgenerator.cpp | 69 ++++++++++++++++++++++++---------------- src/tools/qdoc/htmlgenerator.h | 8 +++-- 2 files changed, 47 insertions(+), 30 deletions(-) (limited to 'src/tools') diff --git a/src/tools/qdoc/htmlgenerator.cpp b/src/tools/qdoc/htmlgenerator.cpp index 90f8ab2046..b260e7ac1c 100644 --- a/src/tools/qdoc/htmlgenerator.cpp +++ b/src/tools/qdoc/htmlgenerator.cpp @@ -1847,71 +1847,87 @@ QString HtmlGenerator::fileExtension() const Output navigation list in the html file. */ void HtmlGenerator::generateNavigationBar(const QString &title, - const Node *node, - CodeMarker *marker) + const Node *node, + CodeMarker *marker, + const QString &buildversion, + bool tableItems) { if (noNavigationBar) return; Text navigationbar; + // Set list item types based on the navigation bar type + Atom::AtomType itemLeft = tableItems ? + Atom::TableItemLeft : Atom::ListItemLeft; + Atom::AtomType itemRight = tableItems ? + Atom::TableItemRight : Atom::ListItemRight; + if (homepage == title) return; if (!homepage.isEmpty()) - navigationbar << Atom(Atom::ListItemLeft) - << Atom(Atom::NavAutoLink, homepage) - << Atom(Atom::ListItemRight); + navigationbar << Atom(itemLeft) + << Atom(Atom::NavAutoLink, homepage) + << Atom(itemRight); if (!landingpage.isEmpty() && landingpage != title) - navigationbar << Atom(Atom::ListItemLeft) + navigationbar << Atom(itemLeft) << Atom(Atom::NavAutoLink, landingpage) - << Atom(Atom::ListItemRight); + << Atom(itemRight); if (node->isClass()) { - const ClassNode *cn = static_cast(node); - QString name = node->physicalModuleName(); - if (!cppclassespage.isEmpty()) - navigationbar << Atom(Atom::ListItemLeft) + navigationbar << Atom(itemLeft) << Atom(Atom::NavLink, cppclassespage) << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK) << Atom(Atom::String, QLatin1String("C++ Classes")) << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK) - << Atom(Atom::ListItemRight); + << Atom(itemRight); - if (!cn->name().isEmpty()) - navigationbar << Atom(Atom::ListItemLeft) - << Atom(Atom::String, cn->name()) - << Atom(Atom::ListItemRight); + if (!node->name().isEmpty()) + navigationbar << Atom(itemLeft) + << Atom(Atom::String, node->name()) + << Atom(itemRight); } else if (node->isQmlType() || node->isQmlBasicType() || node->isJsType() || node->isJsBasicType()) { if (!qmltypespage.isEmpty()) - navigationbar << Atom(Atom::ListItemLeft) + navigationbar << Atom(itemLeft) << Atom(Atom::NavLink, qmltypespage) << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK) << Atom(Atom::String, QLatin1String("QML Types")) << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK) - << Atom(Atom::ListItemRight) - << Atom(Atom::ListItemLeft) + << Atom(itemRight) + << Atom(itemLeft) << Atom(Atom::String, title) - << Atom(Atom::ListItemRight); + << Atom(itemRight); } else { if (node->isExampleFile()) { - navigationbar << Atom(Atom::ListItemLeft) + navigationbar << Atom(itemLeft) << Atom(Atom::NavLink, node->parent()->name()) << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK) << Atom(Atom::String, node->parent()->title()) << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK) - << Atom(Atom::ListItemRight); + << Atom(itemRight); } - navigationbar << Atom(Atom::ListItemLeft) + navigationbar << Atom(itemLeft) << Atom(Atom::String, title) - << Atom(Atom::ListItemRight); + << Atom(itemRight); } generateText(navigationbar, node, marker); + + if (buildversion.isEmpty()) + return; + + if (tableItems) { + out() << "\n" + << "\n"; + } else { + out() << "
  • " << buildversion << "
  • \n"; + } } void HtmlGenerator::generateHeader(const QString& title, @@ -1990,9 +2006,8 @@ void HtmlGenerator::generateHeader(const QString& title, #endif out() << QString(postHeader).replace("\\" + COMMAND_VERSION, qdb_->version()); - generateNavigationBar(title,node,marker); - if (!buildversion.isEmpty()) - out() << "
  • " << buildversion << "
  • \n"; + bool usingTable = postHeader.trimmed().endsWith(QLatin1String("")); + generateNavigationBar(title, node, marker, buildversion, usingTable); out() << QString(postPostHeader).replace("\\" + COMMAND_VERSION, qdb_->version()); navigationLinks.clear(); diff --git a/src/tools/qdoc/htmlgenerator.h b/src/tools/qdoc/htmlgenerator.h index bbb8f12e3e..0cf367b437 100644 --- a/src/tools/qdoc/htmlgenerator.h +++ b/src/tools/qdoc/htmlgenerator.h @@ -125,9 +125,11 @@ private: }; const QPair anchorForNode(const Node *node); - void generateNavigationBar(const QString& title, - const Node *node, - CodeMarker *marker); + void generateNavigationBar(const QString &title, + const Node *node, + CodeMarker *marker, + const QString &buildversion, + bool tableItems = false); void generateHeader(const QString& title, const Node *node = 0, CodeMarker *marker = 0); -- cgit v1.2.3
    " + << buildversion << "