compoundhandler.h 9.8 KB
Newer Older
Dimitri van Heesch's avatar
Dimitri van Heesch committed
1 2 3 4 5
/******************************************************************************
 *
 * $Id$
 *
 *
6
 * Copyright (C) 1997-2013 by Dimitri van Heesch.
Dimitri van Heesch's avatar
Dimitri van Heesch committed
7 8 9 10 11 12 13 14
 *
 * 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
15 16 17 18 19 20
#ifndef _COMPOUNDHANDLER_H
#define _COMPOUNDHANDLER_H

#include <qstring.h>
#include <qlist.h>
#include <qxml.h>
Dimitri van Heesch's avatar
Dimitri van Heesch committed
21
#include <doxmlintf.h>
Dimitri van Heesch's avatar
Dimitri van Heesch committed
22

23
#include "stringimpl.h"
Dimitri van Heesch's avatar
Dimitri van Heesch committed
24
#include "basehandler.h"
Dimitri van Heesch's avatar
Dimitri van Heesch committed
25
#include "baseiterator.h"
Dimitri van Heesch's avatar
Dimitri van Heesch committed
26

Dimitri van Heesch's avatar
Dimitri van Heesch committed
27
class MainHandler;
Dimitri van Heesch's avatar
Dimitri van Heesch committed
28
class DocHandler;
29
class ProgramListingHandler;
30 31
class GraphHandler;
class MemberHandler;
Dimitri van Heesch's avatar
Dimitri van Heesch committed
32 33
class CompoundHandler;
class SectionHandler;
34
class ParamHandler;
35 36
class TemplateParamListHandler;
class TitleHandler;
37
class ListOfAllMembersHandler;
Dimitri van Heesch's avatar
Dimitri van Heesch committed
38

39
class IncludeHandler : public IInclude, public BaseHandler<IncludeHandler>
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
{
  public:
    IncludeHandler(IBaseHandler *parent,const char *endtag);
    virtual ~IncludeHandler();

    void startInclude(const QXmlAttributes &attrib);
    void endInclude();

    // IInclude
    virtual const IString * name() const 
    { return &m_name; }
    virtual const IString * refId() const
    { return &m_refId; }
    virtual bool isLocal() const
    { return &m_isLocal; }

  private:
    IBaseHandler *m_parent;
58 59 60
    StringImpl m_name;             // element's content
    StringImpl m_refId;            // refid
    bool m_isLocal;                // local
61 62 63 64 65 66 67 68 69 70
};

class IncludeIterator : public BaseIterator<IIncludeIterator,IInclude,IncludeHandler>
{
  public:
    IncludeIterator(const QList<IncludeHandler> &list) : 
      BaseIterator<IIncludeIterator,IInclude,IncludeHandler>(list) {}
};


Dimitri van Heesch's avatar
Dimitri van Heesch committed
71 72 73 74 75 76 77 78 79 80
class RelatedCompound : public IRelatedCompound
{
  public:
    RelatedCompound(CompoundHandler *parent,
                    const QString &id,
                    Protection prot,
                    Kind kind
                   ) :
      m_parent(parent), m_id(id), m_protection(prot), m_kind(kind) {}
    virtual ~RelatedCompound() {}
81
    void setName(const QString &str) { m_name = str; }
Dimitri van Heesch's avatar
Dimitri van Heesch committed
82 83 84 85

    virtual ICompound *compound() const;
    virtual Protection protection() const { return m_protection; }
    virtual Kind kind() const { return m_kind; }
86
    virtual const IString *name() const { return &m_name; }
Dimitri van Heesch's avatar
Dimitri van Heesch committed
87 88 89
    
  private:  
    CompoundHandler *m_parent;
90 91 92 93
    QString m_id;                  // refid
    Protection m_protection;       // prot
    Kind m_kind;                   // virt
    StringImpl m_name;             // element's content
Dimitri van Heesch's avatar
Dimitri van Heesch committed
94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
};

class RelatedCompoundIterator : public BaseIterator<IRelatedCompoundIterator,IRelatedCompound,RelatedCompound>
{
  public:
    RelatedCompoundIterator(const QList<RelatedCompound> &list) : 
      BaseIterator<IRelatedCompoundIterator,IRelatedCompound,RelatedCompound>(list) {}
};


class CompoundHandler : public IClass,
                        public IStruct,
                        public IUnion,
                        public IException,
                        public IInterface,
                        public INamespace,
                        public IFile,
                        public IGroup,
                        public IPage,
113
                        public IDir,
Dimitri van Heesch's avatar
Dimitri van Heesch committed
114
                        public BaseHandler<CompoundHandler>
Dimitri van Heesch's avatar
Dimitri van Heesch committed
115
{
Dimitri van Heesch's avatar
Dimitri van Heesch committed
116
    friend class RelatedCompound;
117

Dimitri van Heesch's avatar
Dimitri van Heesch committed
118 119 120
  public:
    virtual void startSection(const QXmlAttributes& attrib);
    virtual void startCompound(const QXmlAttributes& attrib);
121 122 123 124
    virtual void startSuperClass(const QXmlAttributes& attrib);
    virtual void endSuperClass();
    virtual void startSubClass(const QXmlAttributes& attrib);
    virtual void endSubClass();
Dimitri van Heesch's avatar
Dimitri van Heesch committed
125 126 127 128
    virtual void endCompound();
    virtual void endCompoundName();
    virtual void startBriefDesc(const QXmlAttributes& attrib);
    virtual void startDetailedDesc(const QXmlAttributes& attrib);
129
    virtual void startLocation(const QXmlAttributes& attrib);
130
    virtual void startProgramListing(const QXmlAttributes& attrib);
131 132
    virtual void startInheritanceGraph(const QXmlAttributes& attrib);
    virtual void startCollaborationGraph(const QXmlAttributes& attrib);
133 134
    virtual void startIncludeDependencyGraph(const QXmlAttributes& attrib);
    virtual void startIncludedByDependencyGraph(const QXmlAttributes& attrib);
135 136 137
    virtual void startIncludes(const QXmlAttributes& attrib);
    virtual void startIncludedBy(const QXmlAttributes& attrib);
    virtual void startInnerDir(const QXmlAttributes& attrib);
Dimitri van Heesch's avatar
Dimitri van Heesch committed
138
    virtual void startInnerClass(const QXmlAttributes& attrib);
139 140 141
    virtual void startInnerNamespace(const QXmlAttributes& attrib);
    virtual void startInnerFile(const QXmlAttributes& attrib);
    virtual void startInnerGroup(const QXmlAttributes& attrib);
142
    virtual void startInnerPage(const QXmlAttributes& attrib);
143 144
    virtual void startTitle(const QXmlAttributes& attrib);
    virtual void startTemplateParamList(const QXmlAttributes& attrib);
145
    virtual void startListOfAllMembers(const QXmlAttributes& attrib);
146
    virtual void addref() { m_refCount++; }
Dimitri van Heesch's avatar
Dimitri van Heesch committed
147

148
    CompoundHandler(const QString &dirName);
Dimitri van Heesch's avatar
Dimitri van Heesch committed
149
    virtual ~CompoundHandler();
150
    bool parseXML(const char *compId);
151 152
    void initialize(MainHandler *mh);
    void insertMember(MemberHandler *mh);
Dimitri van Heesch's avatar
Dimitri van Heesch committed
153
    ICompound *toICompound() const;
154

Dimitri van Heesch's avatar
Dimitri van Heesch committed
155
    // ICompound implementation
156 157
    const IString *name() const { return &m_name; }
    const IString *id()   const { return &m_id;   }
158
    CompoundKind kind() const { return m_kind; }
159
    const IString *kindString() const { return &m_kindString; }
160 161 162
    ISectionIterator *sections() const;
    IDocRoot *briefDescription() const;
    IDocRoot *detailedDescription() const;
163 164
    IMember *memberById(const char *id) const;
    IMemberIterator *memberByName(const char *name) const;
165
    IParamIterator *templateParameters() const;
166
    void release();
167

Dimitri van Heesch's avatar
Dimitri van Heesch committed
168 169 170
    // IClass implementation
    IGraph *inheritanceGraph() const;
    IGraph *collaborationGraph() const;
171 172 173 174
    IRelatedCompoundIterator *baseCompounds() const;
    IRelatedCompoundIterator *derivedCompounds() const;
    ICompoundIterator *nestedCompounds() const;
    ICompoundIterator *nestedGroup() const;
175 176
    const IString *locationFile() const { return &m_defFile; }
    int locationLine() const { return m_defLine; }
177
    const IString *locationBodyFile() const { return &m_defBodyFile; }
178 179
    int locationBodyStartLine() const { return m_defBodyStart; }
    int locationBodyEndLine() const { return m_defBodyEnd; }
180
    IMemberReferenceIterator *members() const;
181 182 183 184

    // IFile implementation
    IGraph *includeDependencyGraph() const; 
    IGraph *includedByDependencyGraph() const;
185
    IDocProgramListing *source() const;
186 187
    IIncludeIterator *includes() const;
    IIncludeIterator *includedBy() const;
188 189 190

    // IPage implementation
    const IDocTitle *title() const;
Dimitri van Heesch's avatar
Dimitri van Heesch committed
191
    
Dimitri van Heesch's avatar
Dimitri van Heesch committed
192
  private:
193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231
                                                                // XML elements:
                                                                // -------------
    StringImpl                     m_name;                      // compoundname
    TitleHandler*                  m_titleHandler;              // title
    QList<RelatedCompound>         m_subClasses;                // basecompoundref
    QList<RelatedCompound>         m_superClasses;              // derivedcompoundref
    QList<IncludeHandler>          m_includes;                  // includes
    QList<IncludeHandler>          m_includedBy;                // includedBy
    GraphHandler*                  m_includeDependencyGraph;    // incdepgraph
    GraphHandler*                  m_includedByDependencyGraph; // invincdepgraph
    QList<QString>                 m_innerCompounds;            // innerdir/innerfile/innerclass/innernamespace/innergroup
    TemplateParamListHandler*      m_templateParamList;         // templateparamlist
    QList<SectionHandler>          m_sections;                  // sectiondef
    DocHandler*                    m_brief;                     // briefdescription
    DocHandler*                    m_detailed;                  // detaileddescription
    GraphHandler*                  m_inheritanceGraph;          // inheritancegraph
    GraphHandler*                  m_collaborationGraph;        // collaborationgraph
    ProgramListingHandler*         m_programListing;            // programlisting
                                                                // location
    StringImpl                     m_defFile;                   // - file
    int                            m_defLine;                   // - line
    StringImpl                     m_defBodyFile;               // - bodyfile
    int                            m_defBodyStart;              // - bodystart 
    int                            m_defBodyEnd;                // - bodyend
    ListOfAllMembersHandler*       m_members;                   // listofallmember

                                                                // XML attributes:
                                                                // ---------------
    StringImpl                     m_id;                        // id
    CompoundKind                   m_kind;                      // kind
    StringImpl                     m_kindString;                // kind as a string
    StringImpl                     m_protection;                // prot

    // local variables
    QString                        m_xmlDir;                    // directory where the info is found
    int                            m_refCount;                  // object reference counter
    QDict<MemberHandler>           m_memberDict;                // id->member lookup
    QDict<QList<MemberHandler> >   m_memberNameDict;            // name->memberlist lookup
    MainHandler*                   m_mainHandler;               // parent object
Dimitri van Heesch's avatar
Dimitri van Heesch committed
232 233
};

234 235 236
void compoundhandler_init();
void compoundhandler_exit();

Dimitri van Heesch's avatar
Dimitri van Heesch committed
237
#endif