groupdef.h 5.75 KB
Newer Older
Dimitri van Heesch's avatar
Dimitri van Heesch committed
1 2
/******************************************************************************
 *
3
 * 
Dimitri van Heesch's avatar
Dimitri van Heesch committed
4
 *
5
 * Copyright (C) 1997-2007 by Dimitri van Heesch.
Dimitri van Heesch's avatar
Dimitri van Heesch committed
6 7 8 9 10 11 12
 *
 * Permission to use, copy, modify, and distribute this software and its
 * documentation under the terms of the GNU General Public License is hereby 
 * granted. No representations are made about the suitability of this software 
 * for any purpose. It is provided "as is" without express or implied warranty.
 * See the GNU General Public License for more details.
 *
Dimitri van Heesch's avatar
Dimitri van Heesch committed
13 14
 * Documents produced by Doxygen are derivative works derived from the
 * input used in their production; they are not affected by this license.
Dimitri van Heesch's avatar
Dimitri van Heesch committed
15 16 17 18 19 20
 *
 */

#ifndef GROUPDEF_H
#define GROUPDEF_H

21
#include "qtbc.h"
22
#include "sortdict.h"
Dimitri van Heesch's avatar
Dimitri van Heesch committed
23
#include "definition.h"
Dimitri van Heesch's avatar
Dimitri van Heesch committed
24 25
#include "memberlist.h"
#include "memberdef.h"
26
#include "htmlhelp.h"
Dimitri van Heesch's avatar
Dimitri van Heesch committed
27 28

class FileList;
Dimitri van Heesch's avatar
Dimitri van Heesch committed
29
class ClassSDict;
Dimitri van Heesch's avatar
Dimitri van Heesch committed
30 31 32 33 34
class FileDef;
class ClassDef;
class NamespaceDef;
class GroupList;
class OutputList;
35
class NamespaceSDict;
36
class MemberGroupSDict;
Dimitri van Heesch's avatar
Dimitri van Heesch committed
37
class MemberNameInfoSDict;
38
class PageSDict;
39
class PageDef;
40 41
class DirDef;
class DirList;
Dimitri van Heesch's avatar
Dimitri van Heesch committed
42 43 44 45

class GroupDef : public Definition
{
  public:
46
    GroupDef(const char *fileName,int line,const char *name,const char *title,const char *refFileName=0);
Dimitri van Heesch's avatar
Dimitri van Heesch committed
47
   ~GroupDef();
48
    DefType definitionType() const { return TypeGroup; }
49
    QCString getOutputFileBase() const;
Dimitri van Heesch's avatar
Dimitri van Heesch committed
50
    const char *groupTitle() const { return title; }
51 52
    void setGroupTitle( const char *newtitle );
    bool hasGroupTitle( ) { return titleSet; }
Dimitri van Heesch's avatar
Dimitri van Heesch committed
53 54 55
    void addFile(const FileDef *def); 
    void addClass(const ClassDef *def);
    void addNamespace(const NamespaceDef *def);
Dimitri van Heesch's avatar
Dimitri van Heesch committed
56
    void addGroup(const GroupDef *def);
57
    void addParentGroup(const GroupDef *def);
58 59 60
    void addPage(PageDef *def);
    void addExample(const PageDef *def);
    void addDir(const DirDef *dd);
61
    bool insertMember(MemberDef *def,bool docOnly=FALSE);
62 63
    void removeMember(MemberDef *md);
    bool containsGroup(const GroupDef *def);    // true if def is already a subgroup
64
    void writeDetailedDocumentation(OutputList &ol);
Dimitri van Heesch's avatar
Dimitri van Heesch committed
65
    void writeDocumentation(OutputList &ol);
66 67 68
    void writeMemberDocumentation(OutputList &ol);
    void writeMemberPages(OutputList &ol);
    void writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const;
Dimitri van Heesch's avatar
Dimitri van Heesch committed
69
    int countMembers() const;
70
    bool isLinkableInProject() const
71
    {
Dimitri van Heesch's avatar
Dimitri van Heesch committed
72
      return !isReference();
73
    }
74
    bool isLinkable() const
75
    {
Dimitri van Heesch's avatar
Dimitri van Heesch committed
76
      return TRUE;
77
    }
78
    bool isASubGroup() const;
Dimitri van Heesch's avatar
Dimitri van Heesch committed
79
    void computeAnchors();
Dimitri van Heesch's avatar
Dimitri van Heesch committed
80 81

    void addMembersToMemberGroup();
82
    void distributeMemberGroupDocumentation();
83
    void findSectionsInDocumentation();
Dimitri van Heesch's avatar
Dimitri van Heesch committed
84

85 86
    void addListReferences();

87 88
    bool visited;    // number of times accessed for output - KPW

Dimitri van Heesch's avatar
Dimitri van Heesch committed
89
    friend void writeGroupTreeNode(OutputList&, GroupDef*, int);      
90
                    // make accessible for writing tree view of group in index.cpp - KPW
91

92 93 94
    void setGroupScope(Definition *d) { groupScope = d; }
    Definition *getGroupScope() const { return groupScope; }

95 96
    MemberList *getMemberList(MemberList::ListType lt) const;
    const QList<MemberList> &getMemberLists() const { return m_memberLists; }
97 98

    /* user defined member groups */
99
    MemberGroupSDict *getMemberGroupSDict() const { return memberGroupSDict; }
100 101 102

    FileList *      getFiles() const        { return fileList; }
    ClassSDict *    getClasses() const      { return classSDict; }
103
    NamespaceSDict * getNamespaces() const   { return namespaceSDict; }
104 105
    GroupList *     getSubGroups() const    { return groupList; }
    PageSDict *     getPages() const        { return pageDict; }
106
    DirList *       getDirs() const         { return dirList; }
107
    //MemberList*     getMembers() const      { return allMemberList; }
108
    
Dimitri van Heesch's avatar
Dimitri van Heesch committed
109 110 111
  protected:
    void addMemberListToGroup(MemberList *,bool (MemberDef::*)() const);

Dimitri van Heesch's avatar
Dimitri van Heesch committed
112
  private: 
113 114 115 116 117 118
    MemberList *createMemberList(MemberList::ListType lt);
    void addMemberToList(MemberList::ListType lt,MemberDef *md);
    void writeMemberDeclarations(OutputList &ol,MemberList::ListType lt,const QCString &title);
    void writeMemberDocumentation(OutputList &ol,MemberList::ListType lt,const QCString &title);
    void removeMemberFromList(MemberList::ListType lt,MemberDef *md);

119 120 121 122 123 124 125 126 127 128
    QCString title;                      // title of the group
    bool titleSet;                       // true if title is not the same as the name
    QCString fileName;                   // base name of the generated file
    FileList *fileList;                  // list of files in the group
    ClassSDict *classSDict;              // list of classes in the group
    NamespaceSDict *namespaceSDict;      // list of namespaces in the group
    GroupList *groupList;                // list of sub groups.
    PageSDict *pageDict;                 // list of pages in the group
    PageSDict *exampleDict;              // list of examples in the group
    DirList *dirList;                    // list of directories in the group
Dimitri van Heesch's avatar
Dimitri van Heesch committed
129

130
    MemberList *allMemberList;
Dimitri van Heesch's avatar
Dimitri van Heesch committed
131
    MemberNameInfoSDict *allMemberNameInfoSDict;
Dimitri van Heesch's avatar
Dimitri van Heesch committed
132
    
133
    Definition *groupScope;
134

135 136 137
    QList<MemberList> m_memberLists;
    MemberGroupSDict *memberGroupSDict;

Dimitri van Heesch's avatar
Dimitri van Heesch committed
138 139
};

140
class GroupSDict : public SDict<GroupDef>
Dimitri van Heesch's avatar
Dimitri van Heesch committed
141
{
142 143 144
  public:
    GroupSDict(uint size) : SDict<GroupDef>(size) {}
    virtual ~GroupSDict() {}
Dimitri van Heesch's avatar
Dimitri van Heesch committed
145 146
};

147
class GroupList : public QList<GroupDef>
Dimitri van Heesch's avatar
Dimitri van Heesch committed
148 149 150
{
};

151 152 153 154 155 156 157
class GroupListIterator : public QListIterator<GroupDef>
{
  public:
    GroupListIterator(const GroupList &l) : QListIterator<GroupDef>(l) {}
    virtual ~GroupListIterator() {}
};

Dimitri van Heesch's avatar
Dimitri van Heesch committed
158 159 160 161
void addClassToGroups(Entry *root,ClassDef *cd);
void addNamespaceToGroups(Entry *root,NamespaceDef *nd);
void addGroupToGroups(Entry *root,GroupDef *subGroup);
void addMemberToGroups(Entry *root,MemberDef *md);
162 163
void addPageToGroups(Entry *root,PageDef *pd);
void addExampleToGroups(Entry *root,PageDef *eg);
164
void addDirToGroups(Entry *root,DirDef *dd);
Dimitri van Heesch's avatar
Dimitri van Heesch committed
165

Dimitri van Heesch's avatar
Dimitri van Heesch committed
166
#endif
167