Blame src/layout.h

Packit 1c1d7e
/******************************************************************************
Packit 1c1d7e
 *
Packit 1c1d7e
 * 
Packit 1c1d7e
 *
Packit 1c1d7e
 *
Packit 1c1d7e
 * Copyright (C) 1997-2015 by Dimitri van Heesch.
Packit 1c1d7e
 *
Packit 1c1d7e
 * Permission to use, copy, modify, and distribute this software and its
Packit 1c1d7e
 * documentation under the terms of the GNU General Public License is hereby 
Packit 1c1d7e
 * granted. No representations are made about the suitability of this software 
Packit 1c1d7e
 * for any purpose. It is provided "as is" without express or implied warranty.
Packit 1c1d7e
 * See the GNU General Public License for more details.
Packit 1c1d7e
 *
Packit 1c1d7e
 * Documents produced by Doxygen are derivative works derived from the
Packit 1c1d7e
 * input used in their production; they are not affected by this license.
Packit 1c1d7e
 *
Packit 1c1d7e
 */
Packit 1c1d7e
Packit 1c1d7e
#ifndef LAYOUT_H
Packit 1c1d7e
#define LAYOUT_H
Packit 1c1d7e
Packit 1c1d7e
#include <qlist.h>
Packit 1c1d7e
#include "types.h"
Packit 1c1d7e
Packit 1c1d7e
class LayoutParser;
Packit 1c1d7e
class MemberList;
Packit 1c1d7e
class QTextStream;
Packit 1c1d7e
Packit 1c1d7e
/** @brief Base class representing a piece of a documentation page */
Packit 1c1d7e
struct LayoutDocEntry
Packit 1c1d7e
{
Packit 1c1d7e
  virtual ~LayoutDocEntry() {}
Packit 1c1d7e
  enum Kind { 
Packit 1c1d7e
              // Generic items for all pages
Packit 1c1d7e
              MemberGroups,
Packit 1c1d7e
              MemberDeclStart, MemberDeclEnd, MemberDecl,
Packit 1c1d7e
              MemberDefStart, MemberDefEnd, MemberDef,
Packit 1c1d7e
              BriefDesc, DetailedDesc,
Packit 1c1d7e
              AuthorSection,
Packit 1c1d7e
              
Packit 1c1d7e
              // Class specific items
Packit 1c1d7e
              ClassIncludes, ClassInlineClasses,
Packit 1c1d7e
              ClassInheritanceGraph, ClassNestedClasses,
Packit 1c1d7e
              ClassCollaborationGraph, ClassAllMembersLink,
Packit 1c1d7e
              ClassUsedFiles,
Packit 1c1d7e
Packit 1c1d7e
              // Namespace specific items
Packit 1c1d7e
              NamespaceNestedNamespaces, NamespaceNestedConstantGroups,
Packit 1c1d7e
              NamespaceClasses, NamespaceInlineClasses,
Packit 1c1d7e
Packit 1c1d7e
              // File specific items
Packit 1c1d7e
              FileClasses, FileNamespaces, FileConstantGroups,
Packit 1c1d7e
              FileIncludes, FileIncludeGraph, 
Packit 1c1d7e
              FileIncludedByGraph, FileSourceLink,
Packit 1c1d7e
              FileInlineClasses,
Packit 1c1d7e
Packit 1c1d7e
              // Group specific items
Packit 1c1d7e
              GroupClasses, GroupInlineClasses, GroupNamespaces,
Packit 1c1d7e
              GroupDirs, GroupNestedGroups, GroupFiles,
Packit 1c1d7e
              GroupGraph, GroupPageDocs,
Packit 1c1d7e
Packit 1c1d7e
              // Directory specific items
Packit 1c1d7e
              DirSubDirs, DirFiles, DirGraph
Packit 1c1d7e
Packit 1c1d7e
            };
Packit 1c1d7e
  virtual Kind kind() const = 0;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
/** @brief Represents of a piece of a documentation page without configurable parts */
Packit 1c1d7e
struct LayoutDocEntrySimple : LayoutDocEntry
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    LayoutDocEntrySimple(Kind k) : m_kind(k) {}
Packit 1c1d7e
    Kind kind() const { return m_kind; }
Packit 1c1d7e
  private:
Packit 1c1d7e
    Kind m_kind;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
struct LayoutDocEntrySection: public LayoutDocEntrySimple
Packit 1c1d7e
{
Packit 1c1d7e
  LayoutDocEntrySection(Kind k,const QCString &tl) :
Packit 1c1d7e
    LayoutDocEntrySimple(k), m_title(tl) {}
Packit 1c1d7e
  QCString title(SrcLangExt lang) const;
Packit 1c1d7e
private:
Packit 1c1d7e
  QCString m_title;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
/** @brief Represents of a member declaration list with configurable title and subtitle. */
Packit 1c1d7e
struct LayoutDocEntryMemberDecl: public LayoutDocEntry
Packit 1c1d7e
{
Packit 1c1d7e
  LayoutDocEntryMemberDecl(MemberListType tp,
Packit 1c1d7e
                           const QCString &tl,const QCString &ss) 
Packit 1c1d7e
    : type(tp), m_title(tl), m_subscript(ss) {}
Packit 1c1d7e
Packit 1c1d7e
  Kind kind() const { return MemberDecl; }
Packit 1c1d7e
  MemberListType type;
Packit 1c1d7e
  QCString title(SrcLangExt lang) const;
Packit 1c1d7e
  QCString subtitle(SrcLangExt lang) const;
Packit 1c1d7e
private:
Packit 1c1d7e
  QCString m_title;
Packit 1c1d7e
  QCString m_subscript;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
/** @brief Represents of a member definition list with configurable title. */
Packit 1c1d7e
struct LayoutDocEntryMemberDef: public LayoutDocEntry
Packit 1c1d7e
{
Packit 1c1d7e
  LayoutDocEntryMemberDef(MemberListType tp,const QCString &tl) 
Packit 1c1d7e
    : type(tp), m_title(tl) {}
Packit 1c1d7e
Packit 1c1d7e
  Kind kind() const { return MemberDef; }
Packit 1c1d7e
  MemberListType type;
Packit 1c1d7e
  QCString title(SrcLangExt lang) const;
Packit 1c1d7e
private:
Packit 1c1d7e
  QCString m_title;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
/** @brief Base class for the layout of a navigation item at the top of the HTML pages. */
Packit 1c1d7e
struct LayoutNavEntry 
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    enum Kind { 
Packit 1c1d7e
      MainPage, 
Packit 1c1d7e
      Pages,
Packit 1c1d7e
      Modules, 
Packit 1c1d7e
      Namespaces, 
Packit 1c1d7e
      NamespaceList,
Packit 1c1d7e
      NamespaceMembers,
Packit 1c1d7e
      Classes,
Packit 1c1d7e
      ClassList, 
Packit 1c1d7e
      ClassIndex, 
Packit 1c1d7e
      ClassHierarchy, 
Packit 1c1d7e
      ClassMembers,
Packit 1c1d7e
      Files, 
Packit 1c1d7e
      FileList,
Packit 1c1d7e
      FileGlobals,
Packit 1c1d7e
      //Dirs, 
Packit 1c1d7e
      Examples,
Packit 1c1d7e
      User,
Packit 1c1d7e
      UserGroup
Packit 1c1d7e
    };
Packit 1c1d7e
    LayoutNavEntry(LayoutNavEntry *parent,Kind k,bool vs,const QCString &bf, 
Packit 1c1d7e
                   const QCString &tl,const QCString &intro,bool prepend=FALSE) 
Packit 1c1d7e
      : m_parent(parent), m_kind(k), m_visible(vs), m_baseFile(bf), m_title(tl), m_intro(intro)
Packit 1c1d7e
    { m_children.setAutoDelete(TRUE); 
Packit 1c1d7e
      if (parent) { if (prepend) parent->prependChild(this); else parent->addChild(this); }
Packit 1c1d7e
    }
Packit 1c1d7e
    LayoutNavEntry *parent() const   { return m_parent; }
Packit 1c1d7e
    Kind kind() const                { return m_kind; }
Packit 1c1d7e
    QCString baseFile() const        { return m_baseFile; }
Packit 1c1d7e
    QCString title() const           { return m_title; }
Packit 1c1d7e
    QCString intro() const           { return m_intro; }
Packit 1c1d7e
    QCString url() const;
Packit 1c1d7e
    bool visible()                   { return m_visible; }
Packit 1c1d7e
    void clear()                     { m_children.clear(); }
Packit 1c1d7e
    void addChild(LayoutNavEntry *e) { m_children.append(e); }
Packit 1c1d7e
    void prependChild(LayoutNavEntry *e) { m_children.prepend(e); }
Packit 1c1d7e
    const QList<LayoutNavEntry> &children() const { return m_children; }
Packit 1c1d7e
    LayoutNavEntry *find(LayoutNavEntry::Kind k,const char *file=0) const;
Packit 1c1d7e
Packit 1c1d7e
  private:
Packit 1c1d7e
    LayoutNavEntry() : m_parent(0) {}
Packit 1c1d7e
    LayoutNavEntry *m_parent;
Packit 1c1d7e
    Kind m_kind;
Packit 1c1d7e
    bool m_visible;
Packit 1c1d7e
    QCString m_baseFile;
Packit 1c1d7e
    QCString m_title;
Packit 1c1d7e
    QCString m_intro;
Packit 1c1d7e
    QList<LayoutNavEntry> m_children;
Packit 1c1d7e
    friend class LayoutDocManager;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
/** @brief Singleton providing access to the (user configurable) layout of the documentation */
Packit 1c1d7e
class LayoutDocManager
Packit 1c1d7e
{
Packit 1c1d7e
    class Private;
Packit 1c1d7e
  public:
Packit 1c1d7e
    enum LayoutPart
Packit 1c1d7e
    {
Packit 1c1d7e
      Class, Namespace, File, Group, Directory,
Packit 1c1d7e
      NrParts
Packit 1c1d7e
    };
Packit 1c1d7e
    /** Returns a reference to this singleton. */
Packit 1c1d7e
    static LayoutDocManager &instance();
Packit 1c1d7e
Packit 1c1d7e
    /** Returns the list of LayoutDocEntry's in representation order for a given page identified by @a part. */
Packit 1c1d7e
    const QList<LayoutDocEntry> &docEntries(LayoutPart part) const;
Packit 1c1d7e
Packit 1c1d7e
    /** returns the (invisible) root of the navigation tree. */
Packit 1c1d7e
    LayoutNavEntry *rootNavEntry() const;
Packit 1c1d7e
Packit 1c1d7e
    /** Parses a user provided layout */
Packit 1c1d7e
    void parse(QTextStream &t,const char *fileName);
Packit 1c1d7e
    void init();
Packit 1c1d7e
  private:
Packit 1c1d7e
    void addEntry(LayoutPart p,LayoutDocEntry*e);
Packit 1c1d7e
    void clear(LayoutPart p);
Packit 1c1d7e
    LayoutDocManager();
Packit 1c1d7e
    ~LayoutDocManager();
Packit 1c1d7e
    Private *d;
Packit 1c1d7e
    friend class LayoutParser;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
void writeDefaultLayoutFile(const char *fileName);
Packit 1c1d7e
Packit 1c1d7e
#endif
Packit 1c1d7e