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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
/******************************************************************************
*
* $Id$
*
*
* Copyright (C) 1997-1999 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.
*
* All output generated with Doxygen is not covered by this license.
*
*/
#include "qtbc.h"
#include "entry.h"
class ClassDef;
class DiagramRow;
class TreeDiagram;
class ClassDiagram;
class DiagramItemList;
class Image;
class DiagramItem
{
public:
DiagramItem(DiagramItem *p,int number,ClassDef *cd,
Protection prot,Specifier virt,const char *ts);
~DiagramItem();
QCString label() const;
QCString fileName() const;
DiagramItem *parentItem() { return parent; }
DiagramItemList *getChildren() { return children; }
void move(int dx,int dy) { x+=dx; y+=dy; }
int xPos() const { return x; }
int yPos() const { return y; }
int avgChildPos() const;
int numChildren() const;
void addChild(DiagramItem *di);
int number() const { return num; }
Protection protection() const { return prot; }
Specifier virtualness() const { return virt; }
void putInList() { inList=TRUE; }
bool isInList() const { return inList; }
ClassDef *getClassDef() const { return classDef; }
private:
DiagramItemList *children;
DiagramItem *parent;
int x,y;
int num;
Protection prot;
Specifier virt;
QCString templSpec;
bool inList;
ClassDef *classDef;
};
class DiagramItemList : public QList<DiagramItem>
{
public:
DiagramItemList() : QList<DiagramItem>() {}
~DiagramItemList() {}
};
class DiagramRow : public QList<DiagramItem>
{
public:
DiagramRow(TreeDiagram *d,int l) : QList<DiagramItem>()
{
diagram=d;
level=l;
setAutoDelete(TRUE);
}
void insertClass(DiagramItem *parent,ClassDef *cd,bool doBases,
Protection prot,Specifier virt,const char *ts);
uint number() { return level; }
private:
TreeDiagram *diagram;
uint level;
};
class DiagramRowIterator : public QListIterator<DiagramRow>
{
public:
DiagramRowIterator(const QList<DiagramRow> &d)
: QListIterator<DiagramRow>(d) {}
};
class TreeDiagram : public QList<DiagramRow>
{
public:
TreeDiagram(ClassDef *root,bool doBases);
~TreeDiagram();
void computeLayout();
uint computeRows();
//uint computeCols();
void moveChildren(DiagramItem *root,int dx);
void computeExtremes(uint *labelWidth,uint *xpos);
void drawBoxes(QTextStream &t,Image *image,
bool doBase,bool bitmap,
uint baseRows,uint superRows,
uint cellWidth,uint cellHeight);
void drawConnectors(QTextStream &t,Image *image,
bool doBase,bool bitmap,
uint baseRows,uint superRows,
uint cellWidth,uint cellheight);
private:
bool layoutTree(DiagramItem *root,int row);
TreeDiagram &operator=(const TreeDiagram &);
TreeDiagram(const TreeDiagram &);
};
class ClassDiagram
{
public:
ClassDiagram(ClassDef *root);
~ClassDiagram();
void writeFigure(QTextStream &t,const char *path,
const char *file);
void writeImageMap(QTextStream &t,const char *path,
const char *file);
private:
TreeDiagram *base;
TreeDiagram *super;
};
|