summaryrefslogtreecommitdiffstats
path: root/src/index.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/index.cpp')
-rw-r--r--src/index.cpp249
1 files changed, 144 insertions, 105 deletions
diff --git a/src/index.cpp b/src/index.cpp
index b2301a2..8fd476f 100644
--- a/src/index.cpp
+++ b/src/index.cpp
@@ -297,7 +297,8 @@ void addMembersToIndex(T *def,LayoutDocManager::LayoutPart part,
Doxygen::indexList.addContentsItem(hasMembers,name,
def->getReference(),def->getOutputFileBase(),anchor,
hasMembers && !preventSeparateIndex,
- addToIndex);
+ addToIndex,
+ def);
int numClasses=0;
ClassSDict *classes = def->getClassSDict();
if (classes)
@@ -329,7 +330,8 @@ void addMembersToIndex(T *def,LayoutDocManager::LayoutPart part,
{
LockingPtr<MemberList> enumList = md->enumFieldList();
bool isDir = enumList!=0 && md->isEnumerate();
- if (md->name().find('@')==-1)
+ bool isAnonymous = md->name().find('@')!=-1;
+ if (!isAnonymous)
{
if (md->getOuterScope()==def)
{
@@ -344,7 +346,10 @@ void addMembersToIndex(T *def,LayoutDocManager::LayoutPart part,
}
if (isDir)
{
- Doxygen::indexList.incContentsDepth();
+ if (!isAnonymous)
+ {
+ Doxygen::indexList.incContentsDepth();
+ }
MemberListIterator emli(*enumList);
MemberDef *emd;
for (emli.toFirst();(emd=emli.current());++emli)
@@ -360,7 +365,10 @@ void addMembersToIndex(T *def,LayoutDocManager::LayoutPart part,
emd->name(),def->getReference(),def->getOutputFileBase(),emd->anchor(),FALSE,addToIndex);
}
}
- Doxygen::indexList.decContentsDepth();
+ if (!isAnonymous)
+ {
+ Doxygen::indexList.decContentsDepth();
+ }
}
}
}
@@ -539,25 +547,43 @@ static void writeClassTree(OutputList &ol,BaseClassList *bcl,bool hideSuper,int
//----------------------------------------------------------------------------
-static bool fileVisibleInIndex(FileDef *fd,bool &genSourceFile)
+static bool classVisibleInIndex(ClassDef *cd)
{
static bool allExternals = Config_getBool("ALLEXTERNALS");
- //static bool fullPathNames = Config_getBool("FULL_PATH_NAMES");
- //DirDef *dd = fd->getDirDef();
- bool isDocFile = fd->isDocumentationFile();
- genSourceFile = !isDocFile && fd->generateSourceFile();
- return ( //(!fullPathNames || dd==0) &&
- ((allExternals && fd->isLinkable()) ||
- fd->isLinkableInProject()
- ) &&
- !isDocFile
- );
+ return (allExternals && cd->isLinkable()) || cd->isLinkableInProject();
}
-static bool classVisibleInIndex(ClassDef *cd)
+//----------------------------------------------------------------------------
+
+static bool dirHasVisibleChildren(DirDef *dd)
{
- static bool allExternals = Config_getBool("ALLEXTERNALS");
- return (allExternals && cd->isLinkable()) || cd->isLinkableInProject();
+ if (dd->hasDocumentation()) return TRUE;
+
+ QListIterator<FileDef> fli(*dd->getFiles());
+ FileDef *fd;
+ for (fli.toFirst();(fd=fli.current());++fli)
+ {
+ bool genSourceFile;
+ if (fileVisibleInIndex(fd,genSourceFile))
+ {
+ return TRUE;
+ }
+ if (genSourceFile)
+ {
+ return TRUE;
+ }
+ }
+
+ QListIterator<DirDef> dli(dd->subDirs());
+ DirDef *subdd;
+ for (dli.toFirst();(subdd=dli.current());++dli)
+ {
+ if (dirHasVisibleChildren(subdd))
+ {
+ return TRUE;
+ }
+ }
+ return FALSE;
}
//----------------------------------------------------------------------------
@@ -572,6 +598,11 @@ static void writeDirTreeNode(OutputList &ol, DirDef *dd, int level, FTVHelp* ftv
return;
}
+ if (!dirHasVisibleChildren(dd))
+ {
+ return;
+ }
+
static bool tocExpand = TRUE; //Config_getBool("TOC_EXPAND");
bool isDir = dd->subDirs().count()>0 || // there are subdirs
(tocExpand && // or toc expand and
@@ -621,8 +652,17 @@ static void writeDirTreeNode(OutputList &ol, DirDef *dd, int level, FTVHelp* ftv
FileDef *fd=fileList->first();
while (fd)
{
- static bool allExternals = Config_getBool("ALLEXTERNALS");
- if ((allExternals && fd->isLinkable()) || fd->isLinkableInProject())
+ //static bool allExternals = Config_getBool("ALLEXTERNALS");
+ //if ((allExternals && fd->isLinkable()) || fd->isLinkableInProject())
+ //{
+ // fileCount++;
+ //}
+ bool genSourceFile;
+ if (fileVisibleInIndex(fd,genSourceFile))
+ {
+ fileCount++;
+ }
+ else if (genSourceFile)
{
fileCount++;
}
@@ -650,7 +690,7 @@ static void writeDirTreeNode(OutputList &ol, DirDef *dd, int level, FTVHelp* ftv
ol.parseText(fd->displayName());
ol.endIndexItem(reference,outputBase);
ol.endIndexListItem();
- if (ftv && doc)
+ if (ftv && (src || doc))
{
ftv->addContentsItem(FALSE,
fd->displayName(),
@@ -672,11 +712,19 @@ static void writeDirTreeNode(OutputList &ol, DirDef *dd, int level, FTVHelp* ftv
FileDef *fd=fileList->first();
while (fd)
{
- static bool allExternals = Config_getBool("ALLEXTERNALS");
- if ((allExternals && fd->isLinkable()) || fd->isLinkableInProject())
+ //static bool allExternals = Config_getBool("ALLEXTERNALS");
+ //if ((allExternals && fd->isLinkable()) || fd->isLinkableInProject())
+ bool doc,src;
+ doc = fileVisibleInIndex(fd,src);
+ if (doc)
{
- //Doxygen::indexList.addContentsItem(FALSE, convertToHtml(fd->name(),TRUE),fd->getReference(), fd->getOutputFileBase(), 0);
- addMembersToIndex(fd,LayoutDocManager::File,fd->displayName(),QCString());
+ addMembersToIndex(fd,LayoutDocManager::File,fd->displayName(),QCString(),TRUE);
+ }
+ else if (src)
+ {
+ Doxygen::indexList.addContentsItem(
+ FALSE, convertToHtml(fd->name(),TRUE), 0,
+ fd->getSourceFileBase(), 0, FALSE, TRUE, fd);
}
fd=fileList->next();
}
@@ -725,24 +773,20 @@ static void writeDirHierarchy(OutputList &ol, FTVHelp* ftv,bool addToIndex)
FileDef *fd;
for (;(fd=fni.current());++fni)
{
- bool doc,src;
- doc = fileVisibleInIndex(fd,src);
- QCString reference,outputBase;
- if (doc)
- {
- reference = fd->getReference();
- outputBase = fd->getOutputFileBase();
- }
static bool fullPathNames = Config_getBool("FULL_PATH_NAMES");
- if ((!fullPathNames || fd->getDirDef()==0) && (doc || src))
+ if (!fullPathNames || fd->getDirDef()==0) // top level file
{
- ftv->addContentsItem(FALSE,fd->displayName(),
- reference, outputBase, 0,
- FALSE,FALSE,fd);
- if (addToIndex && doc)
+ bool doc,src;
+ doc = fileVisibleInIndex(fd,src);
+ if (doc)
+ {
+ addMembersToIndex(fd,LayoutDocManager::File,fd->displayName(),QCString(),TRUE);
+ }
+ else if (src)
{
- addMembersToIndex(fd,LayoutDocManager::File,
- fd->displayName(),QCString());
+ Doxygen::indexList.addContentsItem(
+ FALSE, convertToHtml(fd->name(),TRUE), 0,
+ fd->getSourceFileBase(), 0, FALSE, TRUE, fd);
}
}
}
@@ -1055,6 +1099,7 @@ static void writeFileIndex(OutputList &ol)
ol.pushGeneratorState();
ol.disable(OutputGenerator::Man);
if (documentedFiles==0) ol.disableAllBut(OutputGenerator::Html);
+
LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::FileList);
if (lne==0) lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::Files); // fall back
QCString title = lne ? lne->title() : theTranslator->trFileList();
@@ -1334,6 +1379,39 @@ void writeClassTree(ClassSDict *clDict,FTVHelp *ftv,bool addToIndex,bool globalO
}
}
+static bool containsVisibleChild(NamespaceDef *nd,bool includeClasses)
+{
+ if (nd->getNamespaceSDict())
+ {
+ NamespaceSDict::Iterator cnli(*nd->getNamespaceSDict());
+ NamespaceDef *cnd;
+ for (cnli.toFirst();(cnd=cnli.current());++cnli)
+ {
+ if (cnd->isLinkable() && cnd->localName().find('@')!=-1)
+ {
+ return TRUE;
+ }
+ else if (containsVisibleChild(cnd,includeClasses))
+ {
+ return TRUE;
+ }
+ }
+ }
+ if (includeClasses && nd->getClassSDict())
+ {
+ ClassSDict::Iterator cli(*nd->getClassSDict());
+ ClassDef *cd;
+ for (;(cd=cli.current());++cli)
+ {
+ if (cd->isLinkableInProject() && cd->templateMaster()==0)
+ {
+ return TRUE;
+ }
+ }
+ }
+ return FALSE;
+}
+
static void writeNamespaceTree(NamespaceSDict *nsDict,FTVHelp *ftv,
bool rootOnly,bool showClasses,bool addToIndex)
{
@@ -1343,40 +1421,11 @@ static void writeNamespaceTree(NamespaceSDict *nsDict,FTVHelp *ftv,
NamespaceDef *nd;
for (nli.toFirst();(nd=nli.current());++nli)
{
- if (/*nd->isLinkableInProject() && */
+ if (nd->localName().find('@')==-1 &&
(!rootOnly || nd->getOuterScope()==Doxygen::globalScope))
{
- int count=0;
- if (nd->getNamespaceSDict())
- {
- NamespaceSDict::Iterator cnli(*nd->getNamespaceSDict());
- NamespaceDef *cnd;
- for (cnli.toFirst();(cnd=cnli.current());++cnli)
- {
- if (cnd->isLinkable())
- {
- count++;
- }
- }
- }
- int classCount=0;
- if (nd->getClassSDict())
- {
- ClassSDict::Iterator cli(*nd->getClassSDict());
- ClassDef *cd;
- for (;(cd=cli.current());++cli)
- {
- if (cd->isLinkableInProject() && cd->templateMaster()==0)
- {
- classCount++;
- }
- }
- }
- if (showClasses)
- {
- count+=classCount;
- }
+ bool hasChildren = containsVisibleChild(nd,showClasses);
QCString ref;
QCString file;
@@ -1390,27 +1439,30 @@ static void writeNamespaceTree(NamespaceSDict *nsDict,FTVHelp *ftv,
}
}
- ftv->addContentsItem(count>0,nd->localName(),ref,file,0,FALSE,TRUE,nd);
-
- if (addToIndex)
+ if (nd->isLinkable() || hasChildren)
{
- Doxygen::indexList.addContentsItem(count>0,nd->localName(),ref,file,QCString(),
- count>0 && !file.isEmpty(),addToIndex);
- }
+ ftv->addContentsItem(hasChildren,nd->localName(),ref,file,0,FALSE,TRUE,nd);
- //printf("*** writeNamespaceTree count=%d addToIndex=%d showClasses=%d classCount=%d\n",
- // count,addToIndex,showClasses,classCount);
- if (count>0)
- {
- if (addToIndex) Doxygen::indexList.incContentsDepth();
- ftv->incContentsDepth();
- writeNamespaceTree(nd->getNamespaceSDict(),ftv,FALSE,showClasses,addToIndex);
- if (showClasses)
+ if (addToIndex)
{
- writeClassTree(nd->getClassSDict(),ftv,addToIndex,FALSE);
+ Doxygen::indexList.addContentsItem(hasChildren,nd->localName(),ref,file,QCString(),
+ hasChildren && !file.isEmpty(),addToIndex);
+ }
+
+ //printf("*** writeNamespaceTree count=%d addToIndex=%d showClasses=%d classCount=%d\n",
+ // count,addToIndex,showClasses,classCount);
+ if (hasChildren)
+ {
+ if (addToIndex) Doxygen::indexList.incContentsDepth();
+ ftv->incContentsDepth();
+ writeNamespaceTree(nd->getNamespaceSDict(),ftv,FALSE,showClasses,addToIndex);
+ if (showClasses)
+ {
+ writeClassTree(nd->getClassSDict(),ftv,addToIndex,FALSE);
+ }
+ ftv->decContentsDepth();
+ if (addToIndex) Doxygen::indexList.decContentsDepth();
}
- ftv->decContentsDepth();
- if (addToIndex) Doxygen::indexList.decContentsDepth();
}
}
}
@@ -3496,7 +3548,10 @@ static void writeGroupTreeNode(OutputList &ol, GroupDef *gd, int level, FTVHelp*
ClassDef *cd;
for (;(cd=it.current());++it)
{
- if (cd->isVisible())
+ bool nestedClassInSameGroup =
+ cd->getOuterScope() && cd->getOuterScope()->definitionType()==Definition::TypeClass &&
+ cd->getOuterScope()->partOfGroups()!=0 && cd->getOuterScope()->partOfGroups()->contains(gd);
+ if (cd->isVisible() && !nestedClassInSameGroup)
{
if (cd->isLinkable() && cd->isEmbeddedInOuterScope())
{
@@ -3955,22 +4010,6 @@ static void writeIndex(OutputList &ol)
/*,Doxygen::mainPage->sectionDict*/);
ol.endTextBlock();
- if (!Config_getString("GENERATE_TAGFILE").isEmpty())
- {
- Doxygen::tagFile << " <compound kind=\"page\">" << endl
- << " <name>"
- << convertToXML(Doxygen::mainPage->name())
- << "</name>" << endl
- << " <title>"
- << convertToXML(Doxygen::mainPage->title())
- << "</title>" << endl
- << " <filename>"
- << convertToXML(Doxygen::mainPage->getOutputFileBase())
- << "</filename>" << endl;
-
- Doxygen::mainPage->writeDocAnchorsToTagFile();
- Doxygen::tagFile << " </compound>" << endl;
- }
Doxygen::insideMainPage=FALSE;
}