Doxygen
Loading...
Searching...
No Matches
diagram.cpp File Reference
#include <stdio.h>
#include <stdlib.h>
#include <algorithm>
#include "diagram.h"
#include "image.h"
#include "classdef.h"
#include "config.h"
#include "message.h"
#include "util.h"
#include "doxygen.h"
#include "portable.h"
#include "indexlist.h"
#include "classlist.h"
#include "textstream.h"
#include "dir.h"
Include dependency graph for diagram.cpp:

Go to the source code of this file.

Classes

class  DiagramItem
 Class representing a single node in the built-in class diagram. More...
class  DiagramRow
 Class representing a row in the built-in class diagram. More...
class  TreeDiagram
 Class representing the tree layout for the built-in class diagram. More...
class  DualDirIterator< C, I >
 helper class representing an iterator that can iterate forwards or backwards More...
struct  ClassDiagram::Private

Macros

#define IMAGE_EXT   ".png"

Typedefs

using DiagramItemList = std::vector<DiagramItem*>

Functions

static uint32_t protToMask (Protection p)
static uint8_t protToColor (Protection p)
static QCString protToString (Protection p)
static uint32_t virtToMask (Specifier p)
static QCString convertToPSString (const QCString &s)
static Protection getMinProtectionLevel (const DiagramItemList &dil)
static void writeBitmapBox (DiagramItem *di, Image *image, uint32_t x, uint32_t y, uint32_t w, uint32_t h, bool firstRow, bool hasDocs, bool children=FALSE)
static void writeVectorBox (TextStream &t, DiagramItem *di, float x, float y, bool children=FALSE)
static void writeMapArea (TextStream &t, const ClassDef *cd, QCString relPath, uint32_t x, uint32_t y, uint32_t w, uint32_t h)

Variables

const uint32_t maxTreeWidth = 8
const uint32_t gridWidth = 100
const uint32_t gridHeight = 100
const uint32_t labelHorSpacing = 10
const uint32_t labelVertSpacing = 32
const uint32_t labelHorMargin = 6
const uint32_t fontHeight = 12

Macro Definition Documentation

◆ IMAGE_EXT

#define IMAGE_EXT   ".png"

Typedef Documentation

◆ DiagramItemList

using DiagramItemList = std::vector<DiagramItem*>

Definition at line 37 of file diagram.cpp.

Function Documentation

◆ convertToPSString()

QCString convertToPSString ( const QCString & s)
static

Definition at line 192 of file diagram.cpp.

193{
194 if (s.isEmpty()) return s;
195 QCString result;
196 result.reserve(s.length()+8);
197 const char *p=s.data();
198 char c=0;
199 while ((c=*p++))
200 {
201 switch (c)
202 {
203 case '(': result+="\\("; break;
204 case ')': result+="\\)"; break;
205 default: result+=c; break;
206 }
207 }
208 return result;
209}
This is an alternative implementation of QCString.
Definition qcstring.h:101
size_t length() const
Returns the length of the string, not counting the 0-terminator.
Definition qcstring.h:166
bool isEmpty() const
Returns TRUE iff the string is empty.
Definition qcstring.h:163
void reserve(size_t size)
Reserve space for size bytes without changing the string contents.
Definition qcstring.h:185
const char * data() const
Returns a pointer to the contents of the string in the form of a 0-terminated C string.
Definition qcstring.h:172

References QCString::data(), QCString::isEmpty(), QCString::length(), and QCString::reserve().

Referenced by ClassDiagram::writeFigure(), and writeVectorBox().

◆ getMinProtectionLevel()

Protection getMinProtectionLevel ( const DiagramItemList & dil)
static

Definition at line 212 of file diagram.cpp.

213{
214 auto it = dil.begin();
215 Protection result = Protection::Private;
216 if (it!=dil.end())
217 {
218 result=(*it)->protection();
219 for (++it;it!=dil.end();++it)
220 {
221 Protection p=(*it)->protection();
222 if (p!=result)
223 {
224 if (result==Protection::Protected && p==Protection::Public) result=p;
225 else if (result==Protection::Private) result=p;
226 }
227 }
228 }
229 return result;
230}
Protection
Definition types.h:32

Referenced by TreeDiagram::drawConnectors().

◆ protToColor()

uint8_t protToColor ( Protection p)
static

Definition at line 157 of file diagram.cpp.

158{
159 switch(p)
160 {
161 case Protection::Public: return 6;
162 case Protection::Package: // package is not possible!
163 case Protection::Protected: return 5;
164 case Protection::Private: return 4;
165 }
166 return 0;
167}

Referenced by TreeDiagram::drawConnectors().

◆ protToMask()

uint32_t protToMask ( Protection p)
static

Definition at line 145 of file diagram.cpp.

146{
147 switch(p)
148 {
149 case Protection::Public: return 0xffffffff;
150 case Protection::Package: // package is not possible!
151 case Protection::Protected: return 0xcccccccc;
152 case Protection::Private: return 0xaaaaaaaa;
153 }
154 return 0;
155}

Referenced by TreeDiagram::drawConnectors().

◆ protToString()

QCString protToString ( Protection p)
static

Definition at line 169 of file diagram.cpp.

170{
171 switch(p)
172 {
173 case Protection::Public: return "solid";
174 case Protection::Package: // package is not possible!
175 case Protection::Protected: return "dashed";
176 case Protection::Private: return "dotted";
177 }
178 return QCString();
179}

Referenced by TreeDiagram::drawConnectors().

◆ virtToMask()

uint32_t virtToMask ( Specifier p)
static

Definition at line 181 of file diagram.cpp.

182{
183 switch(p)
184 {
185 case Specifier::Normal: return 0xffffffff;
186 case Specifier::Virtual: return 0xf0f0f0f0;
187 default: break;
188 }
189 return 0;
190}

Referenced by writeBitmapBox().

◆ writeBitmapBox()

void writeBitmapBox ( DiagramItem * di,
Image * image,
uint32_t x,
uint32_t y,
uint32_t w,
uint32_t h,
bool firstRow,
bool hasDocs,
bool children = FALSE )
static

Definition at line 232 of file diagram.cpp.

235{
236 uint8_t colFill = hasDocs ? (firstRow ? 8 : 2) : 7;
237 uint8_t colBorder = (firstRow || !hasDocs) ? 1 : 3;
238 uint32_t l = Image::stringLength(di->label());
239 uint32_t mask=virtToMask(di->virtualness());
240 image->fillRect(x+1,y+1,w-2,h-2,colFill,mask);
241 image->drawRect(x,y,w,h,colBorder,mask);
242 image->writeString(x+(w-l)/2, y+(h-fontHeight)/2, di->label(),1);
243 if (children)
244 {
245 for (uint32_t i=0;i<5;i++)
246 {
247 image->drawHorzLine(y+h+i-6,x+w-2-i,x+w-2,firstRow?1:3,0xffffffff);
248 }
249 }
250}
Specifier virtualness() const
Definition diagram.cpp:58
QCString label() const
Definition diagram.cpp:300
void drawHorzLine(uint32_t y, uint32_t xs, uint32_t xe, uint8_t colIndex, uint32_t mask)
Definition image.cpp:289
void fillRect(uint32_t x, uint32_t y, uint32_t width, uint32_t height, uint8_t colIndex, uint32_t mask)
Definition image.cpp:336
void drawRect(uint32_t x, uint32_t y, uint32_t width, uint32_t height, uint8_t colIndex, uint32_t mask)
Definition image.cpp:328
void writeString(uint32_t x, uint32_t y, const QCString &s, uint8_t fg)
Definition image.cpp:263
friend uint32_t stringLength(const QCString &s)
Definition image.cpp:277
const uint32_t fontHeight
Definition diagram.cpp:143
static uint32_t virtToMask(Specifier p)
Definition diagram.cpp:181

References Image::drawHorzLine(), Image::drawRect(), FALSE, Image::fillRect(), fontHeight, DiagramItem::label(), Image::stringLength, virtToMask(), DiagramItem::virtualness(), and Image::writeString().

Referenced by TreeDiagram::drawBoxes().

◆ writeMapArea()

void writeMapArea ( TextStream & t,
const ClassDef * cd,
QCString relPath,
uint32_t x,
uint32_t y,
uint32_t w,
uint32_t h )
static

Definition at line 261 of file diagram.cpp.

263{
264 if (cd->isLinkable())
265 {
266 QCString ref=cd->getReference();
267 t << "<area ";
268 if (!ref.isEmpty())
269 {
270 t << externalLinkTarget(true);
271 }
272 t << "href=\"";
273 t << externalRef(relPath,ref,TRUE);
274 QCString fn = cd->getOutputFileBase();
276 t << fn;
277 if (!cd->anchor().isEmpty())
278 {
279 t << "#" << cd->anchor();
280 }
281 t << "\" ";
282 QCString tooltip = cd->briefDescriptionAsTooltip();
283 if (!tooltip.isEmpty())
284 {
285 t << "title=\"" << convertToHtml(tooltip) << "\" ";
286 }
287 t << "alt=\"" << convertToXML(cd->displayName());
288 t << "\" shape=\"rect\" coords=\"" << x << "," << y << ",";
289 t << (x+w) << "," << (y+h) << "\"/>\n";
290 }
291}
virtual bool isLinkable() const =0
virtual QCString anchor() const =0
virtual QCString briefDescriptionAsTooltip() const =0
virtual QCString getReference() const =0
virtual QCString displayName(bool includeScope=TRUE) const =0
virtual QCString getOutputFileBase() const =0
#define TRUE
Definition qcstring.h:37
QCString externalRef(const QCString &relPath, const QCString &ref, bool href)
Definition util.cpp:5705
QCString convertToHtml(const QCString &s, bool keepEntities)
Definition util.cpp:3905
QCString convertToXML(const QCString &s, bool keepEntities)
Definition util.cpp:3854
QCString externalLinkTarget(const bool parent)
Definition util.cpp:5661
void addHtmlExtensionIfMissing(QCString &fName)
Definition util.cpp:4863

References addHtmlExtensionIfMissing(), Definition::anchor(), Definition::briefDescriptionAsTooltip(), convertToHtml(), convertToXML(), Definition::displayName(), externalLinkTarget(), externalRef(), Definition::getOutputFileBase(), Definition::getReference(), QCString::isEmpty(), Definition::isLinkable(), and TRUE.

Referenced by TreeDiagram::drawBoxes().

◆ writeVectorBox()

void writeVectorBox ( TextStream & t,
DiagramItem * di,
float x,
float y,
bool children = FALSE )
static

Definition at line 252 of file diagram.cpp.

254{
255 if (di->virtualness()==Specifier::Virtual) t << "dashed\n";
256 t << " (" << convertToPSString(di->label()) << ") " << x << " " << y << " box\n";
257 if (children) t << x << " " << y << " mark\n";
258 if (di->virtualness()==Specifier::Virtual) t << "solid\n";
259}
static QCString convertToPSString(const QCString &s)
Definition diagram.cpp:192

References convertToPSString(), FALSE, DiagramItem::label(), and DiagramItem::virtualness().

Referenced by TreeDiagram::drawBoxes().

Variable Documentation

◆ fontHeight

const uint32_t fontHeight = 12

Definition at line 143 of file diagram.cpp.

Referenced by writeBitmapBox(), and ClassDiagram::writeImage().

◆ gridHeight

const uint32_t gridHeight = 100

◆ gridWidth

◆ labelHorMargin

const uint32_t labelHorMargin = 6

Definition at line 142 of file diagram.cpp.

Referenced by ClassDiagram::writeImage().

◆ labelHorSpacing

const uint32_t labelHorSpacing = 10

◆ labelVertSpacing

const uint32_t labelVertSpacing = 32

◆ maxTreeWidth

const uint32_t maxTreeWidth = 8

Definition at line 136 of file diagram.cpp.

Referenced by TreeDiagram::computeLayout().