/****************************************************************************** * * $Id$ * * * Copyright (C) 1997-2002 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 "basehandler.h" #include "baseiterator.h" #include "sectionhandler.h" class MainHandler; class DocHandler; class ProgramListingHandler; class CompoundHandler : public ICompound, public BaseHandler { public: virtual void startSection(const QXmlAttributes& attrib); virtual void startCompound(const QXmlAttributes& attrib); virtual void addSuperClass(const QXmlAttributes& attrib); virtual void addSubClass(const QXmlAttributes& attrib); 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 addref() { m_refCount++; } CompoundHandler(const QString &dirName); virtual ~CompoundHandler(); bool parseXML(const QString &compId); void initialize(MainHandler *mh); void insertMember(MemberHandler *mh); // ICompound implementation QString name() const { return m_name; } QString id() const { return m_id; } CompoundKind kind() const { return m_kind; } QString kindString() const { return m_kindString; } ISectionIterator *sections() const { return new SectionIterator(m_sections); } virtual IDocRoot *briefDescription() const { return m_brief; } virtual IDocRoot *detailedDescription() const { return m_detailed; } virtual IMember *memberById(const QString &id) const { return m_memberDict[id]; } virtual IMemberIterator *memberByName(const QString &name) const { QList *ml = m_memberNameDict[name]; if (ml==0) return 0; return new MemberIterator(*ml); } virtual void release(); private: struct SuperClass { SuperClass(const QString &id,const QString &prot,const QString &virt) : m_id(id),m_protection(prot),m_virtualness(virt) {} QString m_id; QString m_protection; QString m_virtualness; }; struct SubClass { SubClass(const QString &id,const QString &prot,const QString &virt) : m_id(id),m_protection(prot),m_virtualness(virt) {} QString m_id; QString m_protection; QString m_virtualness; }; QList m_superClasses; QList m_subClasses; QList m_sections; DocHandler *m_brief; DocHandler *m_detailed; ProgramListingHandler *m_programListing; QString m_id; QString m_kindString; CompoundKind m_kind; QString m_name; QString m_defFile; int m_defLine; QString m_xmlDir; int m_refCount; QDict m_memberDict; QDict > m_memberNameDict; MainHandler *m_mainHandler; }; void compoundhandler_init(); void compoundhandler_exit(); #endif