/****************************************************************************** * * $Id$ * * * Copyright (C) 1997-2015 by Dimitri van Heesch. * * 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. * */ #ifndef _COMPOUNDHANDLER_H #define _COMPOUNDHANDLER_H #include #include #include #include #include "stringimpl.h" #include "basehandler.h" #include "baseiterator.h" class MainHandler; class DocHandler; class ProgramListingHandler; class GraphHandler; class MemberHandler; class CompoundHandler; class SectionHandler; class ParamHandler; class TemplateParamListHandler; class TitleHandler; class ListOfAllMembersHandler; class IncludeHandler : public IInclude, public BaseHandler { 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; StringImpl m_name; // element's content StringImpl m_refId; // refid bool m_isLocal; // local }; class IncludeIterator : public BaseIterator { public: IncludeIterator(const QList &list) : BaseIterator(list) {} }; 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() {} void setName(const QString &str) { m_name = str; } virtual ICompound *compound() const; virtual Protection protection() const { return m_protection; } virtual Kind kind() const { return m_kind; } virtual const IString *name() const { return &m_name; } private: CompoundHandler *m_parent; QString m_id; // refid Protection m_protection; // prot Kind m_kind; // virt StringImpl m_name; // element's content }; class RelatedCompoundIterator : public BaseIterator { public: RelatedCompoundIterator(const QList &list) : BaseIterator(list) {} }; class CompoundHandler : public IClass, public IStruct, public IUnion, public IException, public IInterface, public INamespace, public IFile, public IGroup, public IPage, public IDir, public BaseHandler { friend class RelatedCompound; public: virtual void startSection(const QXmlAttributes& attrib); virtual void startCompound(const QXmlAttributes& attrib); virtual void startSuperClass(const QXmlAttributes& attrib); virtual void endSuperClass(); virtual void startSubClass(const QXmlAttributes& attrib); virtual void endSubClass(); virtual void endCompound(); virtual void endCompoundName(); virtual void startBriefDesc(const QXmlAttributes& attrib); virtual void startDetailedDesc(const QXmlAttributes& attrib); virtual void startLocation(const QXmlAttributes& attrib); virtual void startProgramListing(const QXmlAttributes& attrib); virtual void startInheritanceGraph(const QXmlAttributes& attrib); virtual void startCollaborationGraph(const QXmlAttributes& attrib); virtual void startIncludeDependencyGraph(const QXmlAttributes& attrib); virtual void startIncludedByDependencyGraph(const QXmlAttributes& attrib); virtual void startIncludes(const QXmlAttributes& attrib); virtual void startIncludedBy(const QXmlAttributes& attrib); virtual void startInnerDir(const QXmlAttributes& attrib); virtual void startInnerClass(const QXmlAttributes& attrib); virtual void startInnerNamespace(const QXmlAttributes& attrib); virtual void startInnerFile(const QXmlAttributes& attrib); virtual void startInnerGroup(const QXmlAttributes& attrib); virtual void startInnerPage(const QXmlAttributes& attrib); virtual void startTitle(const QXmlAttributes& attrib); virtual void startTemplateParamList(const QXmlAttributes& attrib); virtual void startListOfAllMembers(const QXmlAttributes& attrib); virtual void addref() { m_refCount++; } CompoundHandler(const QString &dirName); virtual ~CompoundHandler(); bool parseXML(const char *compId); void initialize(MainHandler *mh); void insertMember(MemberHandler *mh); ICompound *toICompound() const; // ICompound implementation const IString *name() const { return &m_name; } const IString *id() const { return &m_id; } CompoundKind kind() const { return m_kind; } const IString *kindString() const { return &m_kindString; } ISectionIterator *sections() const; IDocRoot *briefDescription() const; IDocRoot *detailedDescription() const; IMember *memberById(const char *id) const; IMemberIterator *memberByName(const char *name) const; IParamIterator *templateParameters() const; void release(); // IClass implementation IGraph *inheritanceGraph() const; IGraph *collaborationGraph() const; IRelatedCompoundIterator *baseCompounds() const; IRelatedCompoundIterator *derivedCompounds() const; ICompoundIterator *nestedCompounds() const; ICompoundIterator *nestedGroup() const; const IString *locationFile() const { return &m_defFile; } int locationLine() const { return m_defLine; } const IString *locationBodyFile() const { return &m_defBodyFile; } int locationBodyStartLine() const { return m_defBodyStart; } int locationBodyEndLine() const { return m_defBodyEnd; } IMemberReferenceIterator *members() const; // IFile implementation IGraph *includeDependencyGraph() const; IGraph *includedByDependencyGraph() const; IDocProgramListing *source() const; IIncludeIterator *includes() const; IIncludeIterator *includedBy() const; // IPage implementation const IDocTitle *title() const; private: // XML elements: // ------------- StringImpl m_name; // compoundname TitleHandler* m_titleHandler; // title QList m_subClasses; // basecompoundref QList m_superClasses; // derivedcompoundref QList m_includes; // includes QList m_includedBy; // includedBy GraphHandler* m_includeDependencyGraph; // incdepgraph GraphHandler* m_includedByDependencyGraph; // invincdepgraph QList m_innerCompounds; // innerdir/innerfile/innerclass/innernamespace/innergroup TemplateParamListHandler* m_templateParamList; // templateparamlist QList 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 m_memberDict; // id->member lookup QDict > m_memberNameDict; // name->memberlist lookup MainHandler* m_mainHandler; // parent object }; void compoundhandler_init(); void compoundhandler_exit(); #endif