QCString FTVHelp::generateIndentLabel(FTVNode *n,int level) { QCString result; if (n->parent) { result=generateIndentLabel(n->parent,level+1); } result+=QCString().setNum(n->index)+"_"; return result; }
void FTVHelp::generateIndent(FTextStream &t, FTVNode *n,bool opened) { int indent=0; FTVNode *p = n->parent; while (p) { indent++; p=p->parent; } if (n->isDir) { QCString dir = opened ? "▼" : "►"; t << "<span style=\"width:" << (indent*16) << "px;display:inline-block;\"> </span>" << "<span id=\"arr_" << generateIndentLabel(n,0) << "\" class=\"arrow\" "; t << "onclick=\"toggleFolder('" << generateIndentLabel(n,0) << "')\""; t << ">" << dir << "</span>"; } else { t << "<span style=\"width:" << ((indent+1)*16) << "px;display:inline-block;\"> </span>"; } }
QString FTVHelp::generateIndentLabel(FTVNode *n, int level) { QString result; if (n->parent) { result = generateIndentLabel(n->parent, level + 1); } result += QString::number(n->index) + "_"; return result; }
void FTVHelp::generateTree(FTextStream &t, const QList<FTVNode> &nl,int level,int maxLevel,int &index) { QListIterator<FTVNode> nli(nl); FTVNode *n; for (nli.toFirst(); (n=nli.current()); ++nli) { t << "<tr id=\"row_" << generateIndentLabel(n,0) << "\""; if ((index&1)==0) // even row t << " class=\"even\""; if (level>=maxLevel) // item invisible by default t << " style=\"display:none;\""; else // item visible by default index++; t << "><td class=\"entry\">"; bool nodeOpened = level+1<maxLevel; generateIndent(t,n,nodeOpened); if (n->isDir) { if (n->def && n->def->definitionType()==Definition::TypeGroup) { // no icon } else if (n->def && n->def->definitionType()==Definition::TypePage) { // no icon } else if (n->def && n->def->definitionType()==Definition::TypeNamespace) { t << "<span class=\"icona\"><span class=\"icon\">N</span></span>"; } else if (n->def && n->def->definitionType()==Definition::TypeClass) { t << "<span class=\"icona\"><span class=\"icon\">C</span></span>"; } else { t << "<span id=\"img_" << generateIndentLabel(n,0) << "\" class=\"iconf" << (nodeOpened?"open":"closed") << "\" onclick=\"toggleFolder('" << generateIndentLabel(n,0) << "')\"> </span>"; } generateLink(t,n); t << "</td><td class=\"desc\">"; if (n->def) { generateBriefDoc(t,n->def); } t << "</td></tr>" << endl; folderId++; generateTree(t,n->children,level+1,maxLevel,index); } else // leaf node { FileDef *srcRef=0; if (n->def && n->def->definitionType()==Definition::TypeFile && ((FileDef*)n->def)->generateSourceFile()) { srcRef = (FileDef*)n->def; } if (srcRef) { t << "<a href=\"" << srcRef->getSourceFileBase() << Doxygen::htmlFileExtension << "\">"; } if (n->def && n->def->definitionType()==Definition::TypeGroup) { // no icon } else if (n->def && n->def->definitionType()==Definition::TypePage) { // no icon } else if (n->def && n->def->definitionType()==Definition::TypeNamespace) { t << "<span class=\"icona\"><span class=\"icon\">N</span></span>"; } else if (n->def && n->def->definitionType()==Definition::TypeClass) { t << "<span class=\"icona\"><span class=\"icon\">C</span></span>"; } else { t << "<span class=\"icondoc\"></span>"; } if (srcRef) { t << "</a>"; } generateLink(t,n); t << "</td><td class=\"desc\">"; if (n->def) { generateBriefDoc(t,n->def); } t << "</td></tr>" << endl; } } }
void FTVHelp::generateTree(QTextStream &t, const QList<FTVNode *> &nl, int level, int maxLevel, int &index, enum PageType outputType) { static bool isStyleBB = Config::getBool("bb-style"); for (auto n : nl) { t << "<tr id=\"row_" << generateIndentLabel(n, 0) << "\""; if ((index & 1) == 0) { // even row t << " class=\"even\""; } if (level >= maxLevel) { // item invisible by default t << " style=\"display:none;\""; } else { // item visible by default index++; } t << "><td class=\"entry\">"; bool nodeOpened = level + 1 < maxLevel; generateIndent(t, n, nodeOpened); if (n->isDir) { if (n->def && n->def->definitionType() == Definition::TypeGroup) { // no icon } else if (n->def && n->def->definitionType() == Definition::TypePage) { // no icon } else if (n->def && n->def->definitionType() == Definition::TypeNamespace) { t << "<span class=\"icona\"><span class=\"icon\">N</span></span>"; } else if (n->def && n->def->definitionType() == Definition::TypeClass) { t << "<span class=\"icona\"><span class=\"icon\">C</span></span>"; } else { t << "<span id=\"img_" << generateIndentLabel(n, 0) << "\" class=\"iconf" << (nodeOpened ? "open" : "closed") << "\" onclick=\"toggleFolder('" << generateIndentLabel(n, 0) << "')\"> </span>"; } generateLink(t, n); t << "</td>"; if (isStyleBB && outputType == FTVHelp::Modules) { // modules.html only QString text = n->def->getDefFileName(); text = text.mid( text.lastIndexOf('/')+1 ); t << "<td class=\"hint\">"; t << text; t << "</td>"; } // brief description t << "<td class=\"desc\">"; if (n->def) { generateBriefDoc(t, n->def); } t << "</td></tr>" << endl; folderId++; generateTree(t, n->children, level + 1, maxLevel, index, outputType); } else { // leaf node QSharedPointer<FileDef> srcRef; if (n->def && n->def->definitionType() == Definition::TypeFile && (n->def.dynamicCast<FileDef>())->generateSourceFile()) { srcRef = n->def.dynamicCast<FileDef>(); } if (srcRef) { t << "<a href=\"" << srcRef->getSourceFileBase() << Doxy_Globals::htmlFileExtension << "\">"; } if (n->def && n->def->definitionType() == Definition::TypeGroup) { // no icon } else if (n->def && n->def->definitionType() == Definition::TypePage) { // no icon } else if (n->def && n->def->definitionType() == Definition::TypeNamespace) { t << "<span class=\"icona\"><span class=\"icon\">N</span></span>"; } else if (n->def && n->def->definitionType() == Definition::TypeClass) { t << "<span class=\"icona\"><span class=\"icon\">C</span></span>"; } else { t << "<span class=\"icondoc\"></span>"; } if (srcRef) { t << "</a>"; } generateLink(t, n); t << "</td>"; if (isStyleBB && outputType == FTVHelp::Modules) { // modules.html only QString text = n->def->getDefFileName(); text = text.mid( text.lastIndexOf('/')+1 ); t << "<td class=\"hint\">"; t << text; t << "</td>"; } // brief description t << "<td class=\"desc\">"; if (n->def) { generateBriefDoc(t, n->def); } t << "</td></tr>" << endl; } } }