summaryrefslogtreecommitdiffstats
path: root/src/tools/qdoc/helpprojectwriter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/qdoc/helpprojectwriter.cpp')
-rw-r--r--src/tools/qdoc/helpprojectwriter.cpp140
1 files changed, 72 insertions, 68 deletions
diff --git a/src/tools/qdoc/helpprojectwriter.cpp b/src/tools/qdoc/helpprojectwriter.cpp
index 09b3629ade..fdba15700f 100644
--- a/src/tools/qdoc/helpprojectwriter.cpp
+++ b/src/tools/qdoc/helpprojectwriter.cpp
@@ -429,17 +429,18 @@ void HelpProjectWriter::generateSections(HelpProject &project,
// Ensure that we don't visit nodes more than once.
QMap<QString, const Node*> childMap;
- foreach (const Node *node, inner->childNodes()) {
- if (node->access() == Node::Private)
+ foreach (const Node *childNode, inner->childNodes()) {
+ if (childNode->access() == Node::Private)
continue;
- if (node->type() == Node::Document) {
+
+ if (childNode->type() == Node::Document) {
/*
Don't visit QML property group nodes,
but visit their children, which are all
QML property nodes.
*/
- if (node->subType() == Node::QmlPropertyGroup) {
- const InnerNode* inner = static_cast<const InnerNode*>(node);
+ if (childNode->subType() == Node::QmlPropertyGroup) {
+ const InnerNode* inner = static_cast<const InnerNode*>(childNode);
foreach (const Node* n, inner->childNodes()) {
if (n->access() == Node::Private)
continue;
@@ -447,17 +448,24 @@ void HelpProjectWriter::generateSections(HelpProject &project,
}
}
else
- childMap[static_cast<const DocNode *>(node)->fullTitle()] = node;
+ childMap[static_cast<const DocNode *>(childNode)->fullTitle()] = childNode;
}
else {
- if (node->type() == Node::Function) {
- const FunctionNode *funcNode = static_cast<const FunctionNode *>(node);
+ // Store member status of children
+ project.memberStatus[node].insert(childNode->status());
+
+ if (childNode->type() == Node::Function) {
+ const FunctionNode *funcNode = static_cast<const FunctionNode *>(childNode);
if (funcNode->isOverload())
continue;
}
- childMap[node->fullDocumentName()] = node;
+ childMap[childNode->fullDocumentName()] = childNode;
}
}
+ // Insert files for all/compatibility/obsolete members
+ addMembers(project, writer, node, false);
+ if (node->relates())
+ addMembers(project, writer, node->relates(), false);
foreach (const Node *child, childMap)
generateSections(project, writer, child);
@@ -483,6 +491,57 @@ void HelpProjectWriter::writeHashFile(QFile &file)
hashFile.close();
}
+void HelpProjectWriter::writeSection(QXmlStreamWriter &writer, const QString &path,
+ const QString &value)
+{
+ writer.writeStartElement(QStringLiteral("section"));
+ writer.writeAttribute(QStringLiteral("ref"), path);
+ writer.writeAttribute(QStringLiteral("title"), value);
+ writer.writeEndElement(); // section
+}
+
+/*
+ Add files for all members, compatibility members and obsolete members
+ Also write subsections for these depending on 'writeSections' (default=true).
+*/
+void HelpProjectWriter::addMembers(HelpProject &project, QXmlStreamWriter &writer,
+ const Node *node, bool writeSections)
+{
+ QString href = gen_->fullDocumentLocation(node,true);
+ href = href.left(href.size()-5);
+ if (href.isEmpty())
+ return;
+
+ Node::SubType subType = static_cast<const DocNode*>(node)->subType();
+
+ bool derivedClass = false;
+ if (node->type() == Node::Class)
+ derivedClass = !(static_cast<const ClassNode *>(node)->baseClasses().isEmpty());
+
+ // Do not generate a 'List of all members' for namespaces or header files,
+ // but always generate it for derived classes and QML classes
+ if (node->type() != Node::Namespace && subType != Node::HeaderFile &&
+ (derivedClass || subType == Node::QmlClass ||
+ !project.memberStatus[node].isEmpty())) {
+ QString membersPath = href + QStringLiteral("-members.html");
+ project.files.insert(membersPath);
+ if (writeSections)
+ writeSection(writer, membersPath, tr("List of all members"));
+ }
+ if (project.memberStatus[node].contains(Node::Compat)) {
+ QString compatPath = href + QStringLiteral("-compat.html");
+ project.files.insert(compatPath);
+ if (writeSections)
+ writeSection(writer, compatPath, tr("Compatibility members"));
+ }
+ if (project.memberStatus[node].contains(Node::Obsolete)) {
+ QString obsoletePath = href + QStringLiteral("-obsolete.html");
+ project.files.insert(obsoletePath);
+ if (writeSections)
+ writeSection(writer, obsoletePath, tr("Obsolete members"));
+ }
+}
+
void HelpProjectWriter::writeNode(HelpProject &project, QXmlStreamWriter &writer,
const Node *node)
{
@@ -499,41 +558,12 @@ void HelpProjectWriter::writeNode(HelpProject &project, QXmlStreamWriter &writer
else
writer.writeAttribute("title", tr("%1 Class Reference").arg(objName));
- // Write subsections for all members, obsolete members and Qt 3
- // members.
- if (!project.memberStatus[node].isEmpty()) {
- QString membersPath = href.left(href.size()-5) + "-members.html";
- writer.writeStartElement("section");
- writer.writeAttribute("ref", membersPath);
- writer.writeAttribute("title", tr("List of all members"));
- writer.writeEndElement(); // section
- project.files.insert(membersPath);
- }
- if (project.memberStatus[node].contains(Node::Compat)) {
- QString compatPath = href.left(href.size()-5) + "-compat.html";
- writer.writeStartElement("section");
- writer.writeAttribute("ref", compatPath);
- writer.writeAttribute("title", tr("Compatibility members"));
- writer.writeEndElement(); // section
- project.files.insert(compatPath);
- }
- if (project.memberStatus[node].contains(Node::Obsolete)) {
- QString obsoletePath = href.left(href.size()-5) + "-obsolete.html";
- writer.writeStartElement("section");
- writer.writeAttribute("ref", obsoletePath);
- writer.writeAttribute("title", tr("Obsolete members"));
- writer.writeEndElement(); // section
- project.files.insert(obsoletePath);
- }
-
+ addMembers(project, writer, node);
writer.writeEndElement(); // section
break;
case Node::Namespace:
- writer.writeStartElement("section");
- writer.writeAttribute("ref", href);
- writer.writeAttribute("title", objName);
- writer.writeEndElement(); // section
+ writeSection(writer, href, objName);
break;
case Node::Document: {
@@ -548,34 +578,8 @@ void HelpProjectWriter::writeNode(HelpProject &project, QXmlStreamWriter &writer
else
writer.writeAttribute("title", docNode->fullTitle());
- if ((docNode->subType() == Node::HeaderFile) || (docNode->subType() == Node::QmlClass)) {
- // Write subsections for all members, obsolete members and Qt 3
- // members.
- if (!project.memberStatus[node].isEmpty() || (docNode->subType() == Node::QmlClass)) {
- QString membersPath = href.left(href.size()-5) + "-members.html";
- writer.writeStartElement("section");
- writer.writeAttribute("ref", membersPath);
- writer.writeAttribute("title", tr("List of all members"));
- writer.writeEndElement(); // section
- project.files.insert(membersPath);
- }
- if (project.memberStatus[node].contains(Node::Compat)) {
- QString compatPath = href.left(href.size()-5) + "-compat.html";
- writer.writeStartElement("section");
- writer.writeAttribute("ref", compatPath);
- writer.writeAttribute("title", tr("Compatibility members"));
- writer.writeEndElement(); // section
- project.files.insert(compatPath);
- }
- if (project.memberStatus[node].contains(Node::Obsolete)) {
- QString obsoletePath = href.left(href.size()-5) + "-obsolete.html";
- writer.writeStartElement("section");
- writer.writeAttribute("ref", obsoletePath);
- writer.writeAttribute("title", tr("Obsolete members"));
- writer.writeEndElement(); // section
- project.files.insert(obsoletePath);
- }
- }
+ if ((docNode->subType() == Node::HeaderFile) || (docNode->subType() == Node::QmlClass))
+ addMembers(project, writer, node);
writer.writeEndElement(); // section
}