summaryrefslogtreecommitdiffstats
path: root/src/dotclassgraph.h
blob: 6ccba08d05d50577f38bb0fef1b2f170b9632774 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
/******************************************************************************
*
* Copyright (C) 1997-2019 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 DOTCLASSGRAPH_H
#define DOTCLASSGRAPH_H

#include "classdef.h"
#include "dotnode.h"
#include "dotgraph.h"

class TextStream;

/** Representation of a class inheritance or dependency graph */
class DotClassGraph : public DotGraph
{
public:
  DotClassGraph(const ClassDef *cd,GraphType t);
  ~DotClassGraph();
  bool isTrivial() const;
  bool isTooBig() const;
  int numNodes() const;
  QCString writeGraph(TextStream &t,GraphOutputFormat gf,EmbeddedOutputFormat ef,
    const QCString &path, const QCString &fileName, const QCString &relPath,
    bool TBRank=TRUE,bool imageMap=TRUE,int graphId=-1);

  void writeXML(TextStream &t);
  void writeDocbook(TextStream &t);
  void writeDEF(TextStream &t);

protected:
  virtual QCString getBaseName() const;
  virtual QCString getMapLabel() const;
  virtual void computeTheGraph();
  virtual QCString getImgAltText() const;

private:
  void buildGraph(const ClassDef *cd,DotNode *n,bool base,int distance);
  bool determineVisibleNodes(DotNode *rootNode,int maxNodes,bool includeParents);
  void determineTruncatedNodes(DotNodeDeque &queue,bool includeParents);
  void addClass(const ClassDef *cd,DotNode *n,int prot,const QCString &label,
    const QCString &usedName,const QCString &templSpec,
    bool base,int distance);

  DotNode        *   m_startNode;
  DotNodeMap         m_usedNodes;
  GraphType          m_graphType;
  QCString           m_collabFileName;
  QCString           m_inheritFileName;
  bool               m_lrRank;
};


#endif