summaryrefslogtreecommitdiffstats
path: root/src/tools
diff options
context:
space:
mode:
authorTopi Reinio <topi.reinio@digia.com>2015-10-16 12:12:09 +0200
committerTopi Reiniƶ <topi.reinio@digia.com>2015-10-19 08:22:15 +0000
commitafcc26619f642baee9a09151dc8dae5ef2cb9e2e (patch)
tree489eabe92cf8a6482cf14e8dc266f2c13d5973ff /src/tools
parent1735024e9dbdba20f7c43248671e5413a058bfc8 (diff)
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 <venugopal.shivashankar@digia.com> Reviewed-by: Martin Smith <martin.smith@digia.com>
Diffstat (limited to 'src/tools')
-rw-r--r--src/tools/qdoc/htmlgenerator.cpp69
-rw-r--r--src/tools/qdoc/htmlgenerator.h8
2 files changed, 47 insertions, 30 deletions
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<const ClassNode *>(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() << "</tr></table><table class=\"buildversion\"><tr>\n"
+ << "<td id=\"buildversion\" width=\"100%\" align=\"right\">"
+ << buildversion << "</td>\n";
+ } else {
+ out() << "<li id=\"buildversion\">" << buildversion << "</li>\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() << "<li id=\"buildversion\">" << buildversion << "</li>\n";
+ bool usingTable = postHeader.trimmed().endsWith(QLatin1String("<tr>"));
+ 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<QString,QString> 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);