Beispiel #1
0
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)
                  << "')\">&#160;</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)
              << "')\">&#160;</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;
      }
   }
}