summaryrefslogtreecommitdiffstats
path: root/tools/qdoc3
diff options
context:
space:
mode:
Diffstat (limited to 'tools/qdoc3')
-rw-r--r--tools/qdoc3/cppcodeparser.cpp3
-rw-r--r--tools/qdoc3/generator.cpp2
-rw-r--r--tools/qdoc3/htmlgenerator.cpp66
-rw-r--r--tools/qdoc3/node.h5
-rw-r--r--tools/qdoc3/tree.cpp5
5 files changed, 46 insertions, 35 deletions
diff --git a/tools/qdoc3/cppcodeparser.cpp b/tools/qdoc3/cppcodeparser.cpp
index 562684b4d..12ec7f3a9 100644
--- a/tools/qdoc3/cppcodeparser.cpp
+++ b/tools/qdoc3/cppcodeparser.cpp
@@ -1737,6 +1737,9 @@ bool CppCodeParser::matchProperty(InnerNode *parent)
property->setDesignable(value.toLower() == "true");
else if (key == "RESET")
tre->addPropertyFunction(property, value, PropertyNode::Resetter);
+ else if (key == "NOTIFY") {
+ tre->addPropertyFunction(property, value, PropertyNode::Notifier);
+ }
}
match(Tok_RightParen);
return true;
diff --git a/tools/qdoc3/generator.cpp b/tools/qdoc3/generator.cpp
index e92f53b45..9538dfe75 100644
--- a/tools/qdoc3/generator.cpp
+++ b/tools/qdoc3/generator.cpp
@@ -283,7 +283,7 @@ bool Generator::generateText(const Text& text,
bool Generator::generateQmlText(const Text& text,
const Node *relative,
CodeMarker *marker,
- const QString& qmlName)
+ const QString& /* qmlName */ )
{
const Atom* atom = text.firstAtom();
if (atom == 0)
diff --git a/tools/qdoc3/htmlgenerator.cpp b/tools/qdoc3/htmlgenerator.cpp
index 425c50b12..c203c6258 100644
--- a/tools/qdoc3/htmlgenerator.cpp
+++ b/tools/qdoc3/htmlgenerator.cpp
@@ -539,16 +539,14 @@ int HtmlGenerator::generateAtom(const Atom *atom,
break;
case Atom::AnnotatedList:
{
- const FakeNode *fake = static_cast<const FakeNode *>(relative);
- if (fake && !fake->groupMembers().isEmpty()) {
- QList<Node*> values = tre->groups().values(atom->string());
- QMap<QString, const Node*> nodeMap;
- for (int i = 0; i < values.size(); ++i) {
- const Node* n = values.at(i);
+ QList<Node*> values = tre->groups().values(atom->string());
+ QMap<QString, const Node*> nodeMap;
+ for (int i = 0; i < values.size(); ++i) {
+ const Node* n = values.at(i);
+ if ((n->status() != Node::Internal) && (n->access() != Node::Private))
nodeMap.insert(n->name(),n);
- }
- generateAnnotatedList(fake, marker, nodeMap);
}
+ generateAnnotatedList(relative, marker, nodeMap);
}
break;
case Atom::GeneratedList:
@@ -2021,8 +2019,8 @@ void HtmlGenerator::generateCompactList(const Node *relative,
assume that NumParagraphs is 37. Each paragraph is a
QMap<QString, const Node *>.
*/
- QMap<QString, const Node *> paragraph[NumParagraphs];
- QString paragraphName[NumParagraphs];
+ QMap<QString, const Node *> paragraph[NumParagraphs+1];
+ QString paragraphName[NumParagraphs+1];
QMap<QString, const Node *>::ConstIterator c = classMap.begin();
while (c != classMap.end()) {
@@ -2055,22 +2053,22 @@ void HtmlGenerator::generateCompactList(const Node *relative,
We now want to compute the paragraph offset. Paragraphs 0 to 6
start at offsets 0, 3, 4, 8, 9, 14, 23.
*/
- int paragraphOffset[NumParagraphs + 1];
+ int paragraphOffset[NumParagraphs + 1]; // 37 + 1
int i, j, k;
paragraphOffset[0] = 0;
- for (j = 0; j < NumParagraphs; j++)
+ for (j = 0; j < NumParagraphs; j++) // j = 0..36
paragraphOffset[j + 1] = paragraphOffset[j] + paragraph[j].count();
- int firstOffset[NumColumns + 1];
- int currentOffset[NumColumns];
- int currentParagraphNo[NumColumns];
- int currentOffsetInParagraph[NumColumns];
+ int firstOffset[NumColumns + 1]; // 4 + 1
+ int currentOffset[NumColumns]; // 4
+ int currentParagraphNo[NumColumns]; // 4
+ int currentOffsetInParagraph[NumColumns]; // 4
int numRows = (classMap.count() + NumColumns - 1) / NumColumns;
int curParagNo = 0;
- for (i = 0; i < NumColumns; i++) {
+ for (i = 0; i < NumColumns; i++) { // i = 0..3
firstOffset[i] = qMin(i * numRows, classMap.size());
currentOffset[i] = firstOffset[i];
@@ -2095,11 +2093,18 @@ void HtmlGenerator::generateCompactList(const Node *relative,
out() << "<td>\n</td>\n";
}
else {
- while (currentOffsetInParagraph[i] == paragraph[currentParagraphNo[i]].count()) {
+ while ((currentParagraphNo[i] < NumParagraphs) &&
+ (currentOffsetInParagraph[i] == paragraph[currentParagraphNo[i]].count())) {
++currentParagraphNo[i];
currentOffsetInParagraph[i] = 0;
}
-
+#if 0
+ if (currentParagraphNo[i] >= NumParagraphs) {
+ qDebug() << "### Internal error ###" << __FILE__ << __LINE__
+ << currentParagraphNo[i] << NumParagraphs;
+ currentParagraphNo[i] = NumParagraphs - 1;
+ }
+#endif
out() << "<td align=\"right\">";
if (currentOffsetInParagraph[i] == 0) {
// start a new paragraph
@@ -2109,7 +2114,8 @@ void HtmlGenerator::generateCompactList(const Node *relative,
}
out() << "</td>\n";
- if (!paragraphName[currentParagraphNo[i]].isEmpty()) {
+ if ((currentParagraphNo[i] < NumParagraphs) &&
+ !paragraphName[currentParagraphNo[i]].isEmpty()) {
QMap<QString, const Node *>::Iterator it;
it = paragraph[currentParagraphNo[i]].begin();
for (j = 0; j < currentOffsetInParagraph[i]; j++)
@@ -3414,6 +3420,14 @@ void HtmlGenerator::generateDetailedMember(const Node *node,
out() << "<p><b>Access functions:</b></p>\n";
generateSectionList(section, node, marker, CodeMarker::Accessors);
}
+
+ Section notifiers;
+ notifiers.members += property->notifiers();
+
+ if (!notifiers.members.isEmpty()) {
+ out() << "<p><b>Notifier signal:</b></p>\n";
+ generateSectionList(notifiers, node, marker, CodeMarker::Accessors);
+ }
}
else if (node->type() == Node::Enum) {
const EnumNode *enume = static_cast<const EnumNode *>(node);
@@ -3708,12 +3722,6 @@ QString HtmlGenerator::getLink(const Atom *atom,
}
inObsoleteLink = true;
}
-#if 0
- qDebug() << "Link to Obsolete entity"
- << (*node)->name();
- qDebug() << " relative entity"
- << relative->name();
-#endif
}
}
}
@@ -3729,8 +3737,6 @@ QString HtmlGenerator::getLink(const Atom *atom,
else if ((*node)->status() == Node::Internal) {
qDebug() << "Link to Internal entity";
}
- //else
- //qDebug() << "Node Status:" << (*node)->status();
#endif
}
@@ -4014,10 +4020,6 @@ void HtmlGenerator::generateQmlInherits(const QmlClassNode* cn,
generateText(text, cn, marker);
out() << "</p>";
}
-// else
-// qDebug() << "generateQmlInherits(): "
-// << "Inherited element not documented -->"
-// << linkPair.first;
}
}
}
diff --git a/tools/qdoc3/node.h b/tools/qdoc3/node.h
index 17ec4479c..61f2a76d8 100644
--- a/tools/qdoc3/node.h
+++ b/tools/qdoc3/node.h
@@ -590,8 +590,8 @@ class FunctionNode : public LeafNode
class PropertyNode : public LeafNode
{
public:
- enum FunctionRole { Getter, Setter, Resetter };
- enum { NumFunctionRoles = Resetter + 1 };
+ enum FunctionRole { Getter, Setter, Resetter, Notifier };
+ enum { NumFunctionRoles = Notifier + 1 };
PropertyNode(InnerNode *parent, const QString& name);
virtual ~PropertyNode() { }
@@ -609,6 +609,7 @@ class PropertyNode : public LeafNode
NodeList getters() const { return functions(Getter); }
NodeList setters() const { return functions(Setter); }
NodeList resetters() const { return functions(Resetter); }
+ NodeList notifiers() const { return functions(Notifier); }
bool isStored() const { return fromTrool(sto, storedDefault()); }
bool isDesignable() const { return fromTrool(des, designableDefault()); }
const PropertyNode *overriddenFrom() const { return overrides; }
diff --git a/tools/qdoc3/tree.cpp b/tools/qdoc3/tree.cpp
index d75af70ee..a5e22f1c0 100644
--- a/tools/qdoc3/tree.cpp
+++ b/tools/qdoc3/tree.cpp
@@ -485,6 +485,7 @@ void Tree::resolveProperties()
QString getterName = (*propEntry)[PropertyNode::Getter];
QString setterName = (*propEntry)[PropertyNode::Setter];
QString resetterName = (*propEntry)[PropertyNode::Resetter];
+ QString notifierName = (*propEntry)[PropertyNode::Notifier];
NodeList::ConstIterator c = parent->childNodes().begin();
while (c != parent->childNodes().end()) {
@@ -499,6 +500,8 @@ void Tree::resolveProperties()
property->addFunction(function, PropertyNode::Setter);
} else if (function->name() == resetterName) {
property->addFunction(function, PropertyNode::Resetter);
+ } else if (function->name() == notifierName) {
+ property->addFunction(function, PropertyNode::Notifier);
}
}
}
@@ -575,10 +578,12 @@ void Tree::resolveGroups()
if (fake && fake->subType() == Node::Group) {
fake->addGroupMember(i.value());
}
+#if 0
else {
if (prevGroup != i.key())
i.value()->doc().location().warning(tr("No such group '%1'").arg(i.key()));
}
+#endif
prevGroup = i.key();
}