Orb/Doxygen/src/layout.h
changeset 0 42188c7ea2d9
child 4 468f4c8d3d5b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Orb/Doxygen/src/layout.h	Thu Jan 21 17:29:01 2010 +0000
@@ -0,0 +1,187 @@
+/******************************************************************************
+ *
+ * 
+ *
+ *
+ * Copyright (C) 1997-2008 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.
+ *
+ * Documents produced by Doxygen are derivative works derived from the
+ * input used in their production; they are not affected by this license.
+ *
+ */
+
+#ifndef LAYOUT_H
+#define LAYOUT_H
+
+#include "qtbc.h"
+#include "memberlist.h"
+#include <qlist.h>
+
+class LayoutParser;
+
+/** @brief Base class representing a piece of a documentation page */
+struct LayoutDocEntry
+{
+  virtual ~LayoutDocEntry() {}
+  enum Kind { 
+              // Generic items for all pages
+              MemberGroups,
+              MemberDeclStart, MemberDeclEnd, MemberDecl,
+              MemberDefStart, MemberDefEnd, MemberDef,
+              BriefDesc, DetailedDesc,
+              AuthorSection,
+              
+              // Class specific items
+              ClassIncludes,
+              ClassInheritanceGraph, ClassNestedClasses,
+              ClassCollaborationGraph, ClassAllMembersLink,
+              ClassUsedFiles,
+
+              // Namespace specific items
+              NamespaceNestedNamespaces, NamespaceClasses,
+
+              // File specific items
+              FileClasses, FileNamespaces, 
+              FileIncludes, FileIncludeGraph, 
+              FileIncludedByGraph, FileSourceLink,
+
+              // Group specific items
+              GroupClasses, GroupNamespaces,
+              GroupDirs, GroupNestedGroups, GroupFiles,
+              GroupGraph, GroupPageDocs,
+
+              // Directory specific items
+              DirSubDirs, DirFiles, DirGraph
+
+            };
+  virtual Kind kind() const = 0;
+};
+
+/** @brief Represents of a piece of a documentation page without configurable parts */
+struct LayoutDocEntrySimple : LayoutDocEntry
+{
+  public:
+    LayoutDocEntrySimple(Kind k) : m_kind(k) {}
+    Kind kind() const { return m_kind; }
+  private:
+    Kind m_kind;
+};
+
+struct LayoutDocEntrySection: public LayoutDocEntrySimple
+{
+  LayoutDocEntrySection(Kind k,const QCString &tl) :
+    LayoutDocEntrySimple(k), title(tl) {}
+  QCString title;
+};
+
+/** @brief Represents of a member declaration list with configurable title and subtitle. */
+struct LayoutDocEntryMemberDecl: public LayoutDocEntry
+{
+  LayoutDocEntryMemberDecl(MemberList::ListType tp,
+                           const QCString &tl,const QCString &ss) 
+    : type(tp), title(tl),subscript(ss) {}
+
+  Kind kind() const { return MemberDecl; }
+  MemberList::ListType type;
+  QCString title;
+  QCString subscript;
+};
+
+/** @brief Represents of a member definition list with configurable title. */
+struct LayoutDocEntryMemberDef: public LayoutDocEntry
+{
+  LayoutDocEntryMemberDef(MemberList::ListType tp,const QCString &tl) 
+    : type(tp), title(tl) {}
+
+  Kind kind() const { return MemberDef; }
+  MemberList::ListType type;
+  QCString title;
+};
+
+/** @brief Base class for the layout of a navigation item at the top of the HTML pages. */
+struct LayoutNavEntry 
+{
+  public:
+    enum Kind { 
+      MainPage, 
+      Pages,
+      Modules, 
+      Namespaces, 
+      NamespaceMembers,
+      Classes, 
+      ClassAnnotated, 
+      ClassHierarchy, 
+      ClassMembers,
+      Files, 
+      FileGlobals,
+      Dirs, 
+      Examples
+    };
+    LayoutNavEntry(LayoutNavEntry *parent,Kind k,bool vs,const QString &bf, const QString &tl,bool prepend=FALSE) 
+      : m_parent(parent), m_kind(k), m_visible(vs), m_baseFile(bf), m_title(tl) 
+    { m_children.setAutoDelete(TRUE); 
+      if (parent) { if (prepend) parent->prependChild(this); else parent->addChild(this); }
+    }
+    LayoutNavEntry *parent() const   { return m_parent; }
+    Kind kind() const                { return m_kind; }
+    QCString baseFile() const        { return m_baseFile; }
+    QCString title() const           { return m_title; }
+    bool visible()                   { return m_visible; }
+    void clear()                     { m_children.clear(); }
+    void addChild(LayoutNavEntry *e) { m_children.append(e); }
+    void prependChild(LayoutNavEntry *e) { m_children.prepend(e); }
+    const QList<LayoutNavEntry> &children() const { return m_children; }
+    LayoutNavEntry *find(LayoutNavEntry::Kind k) const;
+
+  private:
+    LayoutNavEntry() : m_parent(0) {}
+    LayoutNavEntry *m_parent;
+    Kind m_kind;
+    bool m_visible;
+    QCString m_baseFile;
+    QCString m_title;
+    QList<LayoutNavEntry> m_children;
+    friend class LayoutDocManager;
+};
+
+/** @brief Singleton providing access to the (user configurable) layout of the documentation */
+class LayoutDocManager
+{
+    class Private;
+  public:
+    enum LayoutPart
+    {
+      Class, Namespace, File, Group, Directory,
+      NrParts
+    };
+    /** Returns a reference to this singleton. */
+    static LayoutDocManager &instance();
+
+    /** Returns the list of LayoutDocEntry's in representation order for a given page identified by @a part. */
+    const QList<LayoutDocEntry> &docEntries(LayoutPart part) const;
+
+    /** returns the (invisible) root of the navigation tree. */
+    LayoutNavEntry *rootNavEntry() const;
+
+    /** Parses a user provided layout */
+    void parse(QTextStream &t);
+    void init();
+  private:
+    void addEntry(LayoutPart p,LayoutDocEntry*e);
+    void clear(LayoutPart p);
+    LayoutDocManager();
+    ~LayoutDocManager();
+    Private *d;
+    friend class LayoutParser;
+};
+
+void writeDefaultLayoutFile(const char *fileName);
+
+#endif
+