1 /******************************************************************************
3 * $Id: index.h,v 1.28 2001/03/19 19:27:40 root Exp $
5 * Copyright (C) 1997-2012 by Dimitri van Heesch.
7 * Permission to use, copy, modify, and distribute this software and its
8 * documentation under the terms of the GNU General Public License is hereby
9 * granted. No representations are made about the suitability of this software
10 * for any purpose. It is provided "as is" without express or implied warranty.
11 * See the GNU General Public License for more details.
13 * Documents produced by Doxygen are derivative works derived from the
14 * input used in their production; they are not affected by this license.
30 /** \brief Abstract interface for index generators. */
34 virtual ~IndexIntf() {}
35 virtual void initialize() = 0;
36 virtual void finalize() = 0;
37 virtual void incContentsDepth() = 0;
38 virtual void decContentsDepth() = 0;
39 virtual void addContentsItem(bool isDir, const char *name, const char *ref,
40 const char *file, const char *anchor, bool separateIndex,
41 bool addToNavIndex,Definition *def) = 0;
42 virtual void addIndexItem(Definition *context,MemberDef *md,const char *title) = 0;
43 virtual void addIndexFile(const char *name) = 0;
44 virtual void addImageFile(const char *name) = 0;
45 virtual void addStyleSheetFile(const char *name) = 0;
48 /** \brief A list of index interfaces.
50 * This class itself implements all methods of IndexIntf and
51 * just forwards the calls to all items in the list.
53 class IndexList : public IndexIntf
56 QList<IndexIntf> m_intfs;
58 // --- foreach implementations for various number of arguments
60 void foreach(void (IndexIntf::*methodPtr)())
62 QListIterator<IndexIntf> li(m_intfs);
63 for (li.toFirst();li.current();++li) (li.current()->*methodPtr)();
67 void foreach(void (IndexIntf::*methodPtr)(A1),A1 a1)
69 QListIterator<IndexIntf> li(m_intfs);
70 for (li.toFirst();li.current();++li) (li.current()->*methodPtr)(a1);
73 template<typename A1,typename A2,typename A3>
74 void foreach(void (IndexIntf::*methodPtr)(A1,A2,A3),A1 a1,A2 a2,A3 a3)
76 QListIterator<IndexIntf> li(m_intfs);
77 for (li.toFirst();li.current();++li) (li.current()->*methodPtr)(a1,a2,a3);
80 template<typename A1,typename A2,typename A3,typename A4>
81 void foreach(void (IndexIntf::*methodPtr)(A1,A2,A3,A4),A1 a1,A2 a2,A3 a3,A4 a4)
83 QListIterator<IndexIntf> li(m_intfs);
84 for (li.toFirst();li.current();++li) (li.current()->*methodPtr)(a1,a2,a3,a4);
87 template<typename A1,typename A2,typename A3,typename A4,typename A5>
88 void foreach(void (IndexIntf::*methodPtr)(A1,A2,A3,A4,A5),A1 a1,A2 a2,A3 a3,A4 a4,A5 a5)
90 QListIterator<IndexIntf> li(m_intfs);
91 for (li.toFirst();li.current();++li) (li.current()->*methodPtr)(a1,a2,a3,a4,a5);
94 template<typename A1,typename A2,typename A3,typename A4,typename A5,typename A6>
95 void foreach(void (IndexIntf::*methodPtr)(A1,A2,A3,A4,A5,A6),A1 a1,A2 a2,A3 a3,A4 a4,A5 a5,A6 a6)
97 QListIterator<IndexIntf> li(m_intfs);
98 for (li.toFirst();li.current();++li) (li.current()->*methodPtr)(a1,a2,a3,a4,a5,a6);
101 template<typename A1,typename A2,typename A3,typename A4,typename A5,typename A6,typename A7,typename A8>
102 void foreach(void (IndexIntf::*methodPtr)(A1,A2,A3,A4,A5,A6,A7,A8),A1 a1,A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8)
104 QListIterator<IndexIntf> li(m_intfs);
105 for (li.toFirst();li.current();++li) (li.current()->*methodPtr)(a1,a2,a3,a4,a5,a6,a7,a8);
108 template<typename A1,typename A2,typename A3,typename A4,typename A5,typename A6,typename A7,typename A8,typename A9>
109 void foreach(void (IndexIntf::*methodPtr)(A1,A2,A3,A4,A5,A6,A7,A8,A9),A1 a1,A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9)
111 QListIterator<IndexIntf> li(m_intfs);
112 for (li.toFirst();li.current();++li) (li.current()->*methodPtr)(a1,a2,a3,a4,a5,a6,a7,a8,a9);
116 /** Creates a list of indexes */
117 IndexList() { m_intfs.setAutoDelete(TRUE); m_enabled=TRUE; }
118 /** Add an index generator to the list */
119 void addIndex(IndexIntf *intf)
120 { m_intfs.append(intf); }
122 { m_enabled = FALSE; }
124 { m_enabled = TRUE; }
125 bool isEnabled() const
126 { return m_enabled; }
128 // IndexIntf implementation
130 { foreach(&IndexIntf::initialize); }
132 { foreach(&IndexIntf::finalize); }
133 void incContentsDepth()
134 { if (m_enabled) foreach(&IndexIntf::incContentsDepth); }
135 void decContentsDepth()
136 { if (m_enabled) foreach(&IndexIntf::decContentsDepth); }
137 void addContentsItem(bool isDir, const char *name, const char *ref,
138 const char *file, const char *anchor,bool separateIndex=FALSE,bool addToNavIndex=FALSE,
140 { if (m_enabled) foreach<bool,const char *,const char *,const char *,const char*,bool,bool,Definition *>
141 (&IndexIntf::addContentsItem,isDir,name,ref,file,anchor,separateIndex,addToNavIndex,def); }
142 void addIndexItem(Definition *context,MemberDef *md,const char *title=0)
143 { if (m_enabled) foreach<Definition *,MemberDef *>
144 (&IndexIntf::addIndexItem,context,md,title); }
145 void addIndexFile(const char *name)
146 { if (m_enabled) foreach<const char *>(&IndexIntf::addIndexFile,name); }
147 void addImageFile(const char *name)
148 { if (m_enabled) foreach<const char *>(&IndexIntf::addImageFile,name); }
149 void addStyleSheetFile(const char *name)
150 { if (m_enabled) foreach<const char *>(&IndexIntf::addStyleSheetFile,name); }
165 isClassHierarchyIndex,
169 isModuleDocumentation,
171 isNamespaceDocumentation,
172 isClassDocumentation,
174 isExampleDocumentation,
176 isPageDocumentation2,
191 HLI_NamespaceMembers,
200 HLI_NamespaceVisible,
204 enum ClassMemberHighlight
215 CMHL_Total = CMHL_Related+1
218 enum FileMemberHighlight
227 FMHL_Total = FMHL_Defines+1
230 enum NamespaceMemberHighlight
238 NMHL_Total = NMHL_EnumValues+1
251 CHL_Total = CHL_Exceptions+1
254 void writeGraphInfo(OutputList &ol);
255 void writeIndexHierarchy(OutputList &ol);
257 void countDataStructures();
259 extern int annotatedClasses;
260 extern int hierarchyClasses;
261 extern int documentedFiles;
262 extern int documentedGroups;
263 extern int documentedNamespaces;
264 extern int indexedPages;
265 extern int documentedClassMembers[CMHL_Total];
266 extern int documentedFileMembers[FMHL_Total];
267 extern int documentedNamespaceMembers[NMHL_Total];
268 extern int documentedDirs;
269 extern int documentedHtmlFiles;
270 extern int documentedPages;
272 void startTitle(OutputList &ol,const char *fileName,Definition *def=0);
273 void endTitle(OutputList &ol,const char *fileName,const char *name);
274 void startFile(OutputList &ol,const char *name,const char *manName,
275 const char *title,HighlightedItem hli=HLI_None,
276 bool additionalIndices=FALSE,const char *altSidebarName=0);
277 void endFile(OutputList &ol,bool skipNavIndex=FALSE,bool skipEndContents=FALSE,
278 const QCString &navPath=QCString());
279 void endFileWithNavPath(Definition *d,OutputList &ol);
281 void initClassMemberIndices();
282 void initFileMemberIndices();
283 void initNamespaceMemberIndices();
284 void addClassMemberNameToIndex(MemberDef *md);
285 void addFileMemberNameToIndex(MemberDef *md);
286 void addNamespaceMemberNameToIndex(MemberDef *md);